head.s

来自「Linux Kernel 2.6.9 for OMAP1710」· S 代码 · 共 116 行

S
116
字号
/* *  linux/arch/m32r/boot/compressed/head.S * *  Copyright (c) 2001-2003	Hiroyuki Kondo, Hirokazu Takata, *				Hitoshi Yamamoto, Takeo Takahashi *  Copyright (c) 2004		Hirokazu Takata */	.text#include <linux/config.h>#include <linux/linkage.h>#include <asm/addrspace.h>#include <asm/page.h>#include <asm/assembler.h>	.global	startup	__ALIGNstartup:	ldi	r0, #0x0000			/* SPI, disable EI */	mvtc	r0, psw/* * Clear BSS first so that there are no surprises... */#ifdef CONFIG_ISA_DUAL_ISSUE	LDIMM	(r2, __bss_start)	LDIMM	(r3, _end)	sub	r3, r2		; BSS size in bytes	; R4 = BSS size in longwords (rounded down)	mv	r4, r3		    ||	ldi	r1, #0	srli	r4, #4		    ||	addi	r2, #-4	beqz	r4, .Lendloop1.Lloop1:#ifndef CONFIG_CHIP_M32310	; Touch memory for the no-write-allocating cache.	ld	r0, @(4,r2)#endif	st	r1, @+r2	    ||	addi	r4, #-1	st	r1, @+r2	st	r1, @+r2	st	r1, @+r2	    ||	cmpeq	r1, r4	; R4 = 0?	bnc	.Lloop1.Lendloop1:	and3	r4, r3, #15	addi	r2, #4	beqz	r4, .Lendloop2.Lloop2:	stb	r1, @r2		    ||	addi	r4, #-1	addi	r2, #1	bnez	r4, .Lloop2.Lendloop2:#else /* not CONFIG_ISA_DUAL_ISSUE */	LDIMM	(r2, __bss_start)	LDIMM	(r3, _end)	sub	r3, r2		; BSS size in bytes	mv	r4, r3	srli	r4, #2		; R4 = BSS size in longwords (rounded down)	ldi	r1, #0		; clear R1 for longwords store	addi	r2, #-4		; account for pre-inc store	beqz	r4, .Lendloop1	; any more to go?.Lloop1:	st	r1, @+r2	; yep, zero out another longword	addi	r4, #-1		; decrement count	bnez	r4, .Lloop1	; go do some more.Lendloop1:	and3	r4, r3, #3	; get no. of remaining BSS bytes to clear	addi	r2, #4		; account for pre-inc store	beqz	r4, .Lendloop2	; any more to go?.Lloop2:	stb	r1, @r2		; yep, zero out another byte	addi	r2, #1		; bump address	addi	r4, #-1		; decrement count	bnez	r4, .Lloop2	; go do some more.Lendloop2:#endif /* not CONFIG_ISA_DUAL_ISSUE */	seth	r0, #shigh(stack_start)	ld	sp, @(r0, low(stack_start))	/* set stack point *//* * decompress the kernel */	bl	decompress_kernel#if defined(CONFIG_CHIP_M32700)	/* Cache flush */	ldi	r0, -1	ldi	r1, 0xd0	; invalidate i-cache, copy back d-cache	stb	r1, @r0#else#error "put your cache flush function, please"#endif        seth	r0, #high(CONFIG_MEMORY_START)        or3	r0, r0, #0x2000        jmp	r0	.balign 512fake_headers_as_bzImage:	.short	0	.ascii	"HdrS"	.short	0x0202	.short	0	.short	0	.byte	0x00, 0x10	.short	0	.byte	0	.byte	1	.byte	0x00, 0x80	.long	0	.long	0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?