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>
This commit is contained in:
parent
025f2b3380
commit
6d86227880
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user