diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2013-01-30 04:51:06 +0000 |
---|---|---|
committer | Daniel Schwierzeck <daniel.schwierzeck@gmail.com> | 2013-01-30 23:33:27 +0100 |
commit | 6d8622788020265a9e98e8345c6435c8680c992c (patch) | |
tree | 7abf0101a930ce97f5b9126c43735348e5967a1d /arch/mips/cpu | |
parent | 025f2b338072781cd747bf7365cf43fcf9f40f1a (diff) | |
download | u-boot-6d8622788020265a9e98e8345c6435c8680c992c.tar.gz u-boot-6d8622788020265a9e98e8345c6435c8680c992c.tar.xz u-boot-6d8622788020265a9e98e8345c6435c8680c992c.zip |
MIPS: xburst: simplify relocation offset calculation
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>
Diffstat (limited to 'arch/mips/cpu')
-rw-r--r-- | arch/mips/cpu/xburst/start.S | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/arch/mips/cpu/xburst/start.S b/arch/mips/cpu/xburst/start.S index 9e637dfe99..50b7fb1021 100644 --- a/arch/mips/cpu/xburst/start.S +++ b/arch/mips/cpu/xburst/start.S @@ -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 |