MIPS: start.S: don't save flush_cache parameters in advance
authorGabor Juhos <juhosg@openwrt.org>
Thu, 24 Jan 2013 06:27:55 +0000 (06:27 +0000)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Sun, 27 Jan 2013 15:40:15 +0000 (16:40 +0100)
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>
arch/mips/cpu/mips32/start.S
arch/mips/cpu/mips64/start.S

index d67dafacd463a41a469310e5ce663b80cbce1ef2..77f1103216df9fb81a9a29b67aa784ecc6b4c75e 100644 (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
index d213c8eed0310d1de4370db423873b866e4fd05d..80e6bb1398db3690c5398e50edc2dbee20a861c4 100644 (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