Mercurial > ecos
changeset 2438:8317d1af06db
Optimize system initialization
| author | gthomas |
|---|---|
| date | Fri, 12 Oct 2007 15:30:20 +0000 |
| parents | 66ce5ec27360 |
| children | 0a8fc051ac3b |
| files | packages/hal/powerpc/arch/current/ChangeLog packages/hal/powerpc/arch/current/src/vectors.S |
| diffstat | 2 files changed, 28 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/powerpc/arch/current/ChangeLog +++ b/packages/hal/powerpc/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2007-10-12 Gary Thomas <gary@mlbassoc.com> + + * src/vectors.S: Optimize system initialization of DATA/BSS/etc. + 2006-04-18 Gary Thomas <gary@mlbassoc.com> * include/hal_arch.h: Adjust stack sizes - they were too small
--- a/packages/hal/powerpc/arch/current/src/vectors.S +++ b/packages/hal/powerpc/arch/current/src/vectors.S @@ -303,10 +303,12 @@ rom_vectors_end: lwi r3,rom_vectors-4 lwi r4,((CYGHWR_HAL_POWERPC_VECTOR_BASE)-4) lwi r5,rom_vectors_end-4 + sub r5,r5,r3 # compute number of words to copy + srwi r5,r5,2 + mtctr r5 0: lwzu r0,4(r3) stwu r0,4(r4) - cmplw r3,r5 - bne 0b + bdnz 0b #endif # set up stack @@ -318,7 +320,6 @@ 0: lwzu r0,4(r3) hal_mon_init #if defined(CYG_HAL_STARTUP_ROM) - # Copy data from ROM to ram lwi r3,__rom_data_start # r3 = rom start lwi r4,__ram_data_start # r4 = ram start @@ -326,14 +327,14 @@ 0: lwzu r0,4(r3) cmplw r4,r5 # skip if no data beq 2f - -1: - lwz r0,0(r3) # get word from ROM - stw r0,0(r4) # store in RAM - addi r3,r3,4 # increment by 1 word - addi r4,r4,4 # increment by 1 word - cmplw r4,r5 # compare - blt 1b # loop if not yet done + sub r5,r5,r4 # compute number of words to copy + srwi r5,r5,2 + mtctr r5 + subi r3,r3,4 + subi r4,r4,4 +1: lwzu r0,4(r3) # get word from ROM + stwu r0,4(r4) # store in RAM + bdnz 1b 2: #endif @@ -343,11 +344,13 @@ 2: li r0,0 # r0 = 0 cmplw r3,r4 # skip if no bss beq 2f + sub r4,r4,r3 # compute number of words to clear + srwi r4,r4,2 + mtctr r4 + subi r3,r3,4 -1: stw r0,0(r3) # store zero - addi r3,r3,4 # increment by 1 word - cmplw r3,r4 # compare - blt 1b # loop if not yet done +1: stwu r0,4(r3) # store zero & increment pointer + bdnz 1b 2: # clear SBSS @@ -355,11 +358,13 @@ 2: lwi r4,__sbss_end # r4 = end cmplw r3,r4 # skip if no sbss beq 2f + sub r4,r4,r3 # compute number of words to clear + srwi r4,r4,2 + mtctr r4 + subi r3,r3,4 -1: stw r0,0(r3) # store zero - addi r3,r3,4 # increment by 1 word - cmplw r3,r4 # compare - blt 1b # loop if not yet done +1: stwu r0,4(r3) # store zero & increment pointer + bdnz 1b 2: # It is now safe to call C functions which may rely on initialized
