mirror of https://gitee.com/openkylin/linux.git
[XTENSA] Add missing a2 register restore in register spill routine
Register a2 is saved in depc but wasn't getting restored before returning from _spill_registers when there weren't any registers to spill. The mask to cut the top bit from the rotated WINDOWMASK register was also one bit short. Signed-off-by: CHris Zankel <chris@zankel.net>
This commit is contained in:
parent
ed3174d93c
commit
50c0716aa2
|
@ -1344,7 +1344,7 @@ ENTRY(_spill_registers)
|
|||
|
||||
/* We are done if there are no more than the current register frame. */
|
||||
|
||||
extui a3, a3, 1, WSBITS-2 # a3 = 0yyxxxwww
|
||||
extui a3, a3, 1, WSBITS-1 # a3 = 0yyxxxwww
|
||||
movi a2, (1 << (WSBITS-1))
|
||||
_beqz a3, .Lnospill # only one active frame? jump
|
||||
|
||||
|
@ -1394,6 +1394,10 @@ ENTRY(_spill_registers)
|
|||
l32e a4, a1, -16
|
||||
j .Lc12c
|
||||
|
||||
.Lnospill:
|
||||
rsr a2, DEPC # restore a2 and 'return'
|
||||
jx a0
|
||||
|
||||
.Lloop: _bbsi.l a3, 1, .Lc4
|
||||
_bbci.l a3, 2, .Lc12
|
||||
|
||||
|
@ -1419,8 +1423,6 @@ ENTRY(_spill_registers)
|
|||
movi a3, 1
|
||||
sll a3, a3
|
||||
wsr a3, WINDOWSTART
|
||||
|
||||
.Lnospill:
|
||||
jx a0
|
||||
|
||||
.Lc4: s32e a4, a9, -16
|
||||
|
|
Loading…
Reference in New Issue