MIPS: xburst: simplify relocation offset calculation
authorGabor Juhos <juhosg@openwrt.org>
Wed, 30 Jan 2013 04:51:06 +0000 (04:51 +0000)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Wed, 30 Jan 2013 22:33:27 +0000 (23:33 +0100)
The current code uses four instructions and a
temporary register to calculate the relocation
offset and to adjust the gp register.

The relocation offset can be calculated directly
from the CONFIG_SYS_MONITOR_BASE constant and from
the destination address. The resulting offset can
be used to adjust the gp pointer.

This approach makes the code a bit simpler because
it needs two instructions only.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
Cc: Xiangfu Liu <xiangfu@openmobilefree.net>
arch/mips/cpu/xburst/start.S

index 9e637dfe998380d495014ebcb39ba43e5c8dcc7c..50b7fb102172f6c32ea50b2f8b65ebf6485f9a1f 100644 (file)
@@ -64,19 +64,13 @@ relocate_code:
        move    sp, a0                  # set new stack pointer
 
        li      t0, CONFIG_SYS_MONITOR_BASE
+       sub     t6, a2, t0              # t6 <-- relocation offset
+
        la      t3, in_ram
        lw      t2, -12(t3)             # t2 <-- uboot_end_data
        move    t1, a2
 
-       /*
-        * Fix $gp:
-        *
-        * New $gp = (Old $gp - CONFIG_SYS_MONITOR_BASE) + Destination Address
-        */
-       move    t6, gp
-       sub     gp, CONFIG_SYS_MONITOR_BASE
-       add     gp, a2                  # gp now adjusted
-       sub     t6, gp, t6              # t6 <-- relocation offset
+       add     gp, t6                  # adjust gp
 
        /*
         * t0 = source address