MIPS: start.S: don't save flush_cache parameters in advance

Saving the parameters in advance unnecessarily complicates
the code. The destination address is already saved in the
's2' register, and that register is not clobbered by the
copy loop. The size of the copied data can be computed
after the copy loop is done.

Change the code to compute the size parameter right
before calling flush_cache, and set the destination
address parameter in the delay slot of the actuall
call.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
This commit is contained in:
Gabor Juhos 2013-01-24 06:27:55 +00:00 committed by Daniel Schwierzeck
parent 248fe03f53
commit 67d80c9f97
2 changed files with 4 additions and 20 deletions

View File

@ -296,13 +296,6 @@ relocate_code:
* t1 = target address
* t2 = source end address
*/
/*
* Save destination address and size for later usage in flush_cache()
*/
move a0, t1 # a0 <-- destination addr
sub a1, t2, t0 # a1 <-- size
1:
lw t3, 0(t0)
sw t3, 0(t1)
@ -311,11 +304,10 @@ relocate_code:
addu t1, 4
/* If caches were enabled, we would have to flush them here. */
/* a0 & a1 are already set up for flush_cache(start, size) */
sub a1, t1, s2 # a1 <-- size
la t9, flush_cache
jalr t9
nop
move a0, s2 # a0 <-- destination address
/* Jump to where we've relocated ourselves */
addi t0, s2, in_ram - _start

View File

@ -175,13 +175,6 @@ relocate_code:
* t1 = target address
* t2 = source end address
*/
/*
* Save destination address and size for dlater usage in flush_cache()
*/
move a0, t1 # a0 <-- destination addr
dsub a1, t2, t0 # a1 <-- size
1:
lw t3, 0(t0)
sw t3, 0(t1)
@ -190,11 +183,10 @@ relocate_code:
daddu t1, 4
/* If caches were enabled, we would have to flush them here. */
/* a0 & a1 are already set up for flush_cache(start, size) */
dsub a1, t1, s2 # a1 <-- size
dla t9, flush_cache
jalr t9
nop
move a0, s2 # a0 <-- destination address
/* Jump to where we've relocated ourselves */
daddi t0, s2, in_ram - _start