Skip to content

Commit

Permalink
[XTENSA] Add missing a2 register restore in register spill routine
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Chris Zankel committed Feb 14, 2008
1 parent ed3174d commit 50c0716
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions arch/xtensa/kernel/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -1419,8 +1423,6 @@ ENTRY(_spill_registers)
movi a3, 1
sll a3, a3
wsr a3, WINDOWSTART

.Lnospill:
jx a0

.Lc4: s32e a4, a9, -16
Expand Down

0 comments on commit 50c0716

Please sign in to comment.