mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-01-22 08:10:30 +01:00
(rotate_regs): Load up "pr" with first value. Preserve p63 across rotation.
(save_pr): New function. (Logical change 1.292)
This commit is contained in:
parent
8462f1f87d
commit
05feedabea
1 changed files with 36 additions and 1 deletions
|
@ -442,13 +442,24 @@ rotate_regs:
|
||||||
.spillreg r4, loc4
|
.spillreg r4, loc4
|
||||||
mov loc4 = r4
|
mov loc4 = r4
|
||||||
|
|
||||||
|
ld8 r2 = [in1], 8;;
|
||||||
|
mov pr = r2, -1
|
||||||
|
|
||||||
ld8 r2 = [in1], 8;;
|
ld8 r2 = [in1], 8;;
|
||||||
mov r8 = in0
|
mov r8 = in0
|
||||||
mov r9 = in1
|
mov r9 = in1
|
||||||
and r2 = 127, r2;;
|
and r2 = 127, r2;;
|
||||||
mov ar.ec = 0
|
mov ar.ec = 0
|
||||||
mov ar.lc = r2;;
|
mov ar.lc = r2;;
|
||||||
1: br.ctop.dptk.few 1b;;
|
|
||||||
|
// use p6 to preserve p63 as it gets rotated into p16:
|
||||||
|
(p16) cmp.eq.unc p6,p0 = r0,r0;;
|
||||||
|
1:
|
||||||
|
(p6) cmp.eq.unc p16,p0 = r0,r0
|
||||||
|
(p63) cmp.eq.unc p6,p0 = r0,r0
|
||||||
|
br.ctop.dptk.few 1b;;
|
||||||
|
|
||||||
|
(p6) cmp.eq.unc p63,p0 = r0,r0
|
||||||
|
|
||||||
CALL_NEXT_PTR(r4, r8, r9)
|
CALL_NEXT_PTR(r4, r8, r9)
|
||||||
|
|
||||||
|
@ -462,3 +473,27 @@ rotate_regs:
|
||||||
br.ret.sptk.many rp
|
br.ret.sptk.many rp
|
||||||
|
|
||||||
.endp rotate_regs
|
.endp rotate_regs
|
||||||
|
|
||||||
|
.global save_pr
|
||||||
|
.proc save_pr
|
||||||
|
save_pr:
|
||||||
|
.prologue
|
||||||
|
.regstk 2, 4, 2, 0
|
||||||
|
.save ar.pfs, loc0
|
||||||
|
alloc loc0 = ar.pfs, 2, 4, 2, 0
|
||||||
|
.save rp, loc1
|
||||||
|
mov loc1 = rp
|
||||||
|
.save pr, loc2
|
||||||
|
mov loc2 = pr
|
||||||
|
|
||||||
|
ld8 r2 = [in1], 8;;
|
||||||
|
mov pr = r2, -1
|
||||||
|
|
||||||
|
CALL_NEXT(loc3)
|
||||||
|
|
||||||
|
mov ar.pfs = loc0
|
||||||
|
mov rp = loc1
|
||||||
|
mov pr = loc2, -1
|
||||||
|
br.ret.sptk.many rp
|
||||||
|
|
||||||
|
.endp save_pr
|
||||||
|
|
Loading…
Reference in a new issue