Skip to content
Snippets Groups Projects
Commit 6d862278 authored by Gabor Juhos's avatar Gabor Juhos Committed by Daniel Schwierzeck
Browse files

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: default avatarGabor Juhos <juhosg@openwrt.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
Cc: Xiangfu Liu <xiangfu@openmobilefree.net>
parent 025f2b33
No related branches found
No related tags found
No related merge requests found
...@@ -64,19 +64,13 @@ relocate_code: ...@@ -64,19 +64,13 @@ relocate_code:
move sp, a0 # set new stack pointer move sp, a0 # set new stack pointer
li t0, CONFIG_SYS_MONITOR_BASE li t0, CONFIG_SYS_MONITOR_BASE
sub t6, a2, t0 # t6 <-- relocation offset
la t3, in_ram la t3, in_ram
lw t2, -12(t3) # t2 <-- uboot_end_data lw t2, -12(t3) # t2 <-- uboot_end_data
move t1, a2 move t1, a2
/* add gp, t6 # adjust gp
* 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
/* /*
* t0 = source address * t0 = source address
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment