1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-06-02 09:22:36 +02:00

(LOAD_VAL): New macro.

(save_static_to_stacked): Use LOAD_VAL.
(save_static_to_fr): Rename from save_static_to_fpreg().
(save_static_to_br): New function.
(save_static_to_mem): Likewise.

(Logical change 1.175)
This commit is contained in:
mostang.com!davidm 2004-02-19 08:05:27 +00:00
parent d2a5a239aa
commit a5ed5ae3b7

View file

@ -37,6 +37,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
br.call.sptk.many rp = b6;; \
mov gp = gp_save_reg
#define LOAD_VAL(reg) \
ld8 reg = [in1], 8;; \
tbit.nz p6, p0 = reg, 0;; \
(p6) ld8.s reg = [r0]
/* Save r4-r7 into stacked registers, load them up with the
values passed via the pointer in in1 and then call the
@ -60,19 +65,10 @@ save_static_to_stacked:
.spillreg r7, loc5
mov loc5 = r7
.body
ld8 r4 = [in1], 8;;
ld8 r5 = [in1], 8;;
ld8 r6 = [in1], 8;;
ld8 r7 = [in1], 8;;
tbit.nz p6, p0 = r4, 0
tbit.nz p7, p0 = r5, 0
tbit.nz p8, p0 = r6, 0
tbit.nz p9, p0 = r7, 0;;
(p6) ld8.s r4 = [r0]
(p7) ld8.s r5 = [r0]
(p8) ld8.s r6 = [r0]
(p9) ld8.s r7 = [r0]
LOAD_VAL(r4)
LOAD_VAL(r5)
LOAD_VAL(r6)
LOAD_VAL(r7)
CALL_NEXT(loc6)
mov r4 = loc2
@ -89,9 +85,9 @@ save_static_to_stacked:
r4 with the value passed via in1 and call the function
passed via in0. */
.global save_static_to_fpreg
.proc save_static_to_fpreg
save_static_to_fpreg:
.global save_static_to_fr
.proc save_static_to_fr
save_static_to_fr:
.prologue
.regstk 2, 3, 2, 0
.save ar.pfs, loc0
@ -113,9 +109,87 @@ save_static_to_fpreg:
CALL_NEXT(loc2)
getf.sig r4 = f2 // restore r4
ldf.fill f2 = [sp], 16 // restore r2
.restore sp
add sp = 16, sp;;
ldf.fill f2 = [sp] // restore r2
mov ar.pfs = loc0
mov rp = loc1
br.ret.sptk.many rp
.endp save_static_to_fpreg
.endp save_static_to_fr
/* If r4 is not a NaT, save b3 to a stacked register and
then save r4 in b3. The non-NaTness of r4 is saved in
p1. */
.global save_static_to_br
.proc save_static_to_br
save_static_to_br:
.prologue
.regstk 2, 5, 2, 0
.save ar.pfs, loc0
alloc loc0 = ar.pfs, 2, 5, 2, 0
.save rp, loc1
mov loc1 = rp
.save pr, loc2
mov loc2 = pr // save predicates
.spillreg b3, loc3
mov loc3 = b3
tnat.z p1, p2 = r4;;
.spillreg.p p1, r4, b3
(p1) mov b3 = r4
.body
LOAD_VAL(r4)
CALL_NEXT(loc4)
(p1) mov r4 = b3 // restore r4
mov ar.pfs = loc0
mov rp = loc1
mov pr = loc2, -1
mov b3 = loc3 // restore b3
br.ret.sptk.many rp
.endp save_static_to_br
/* Spill r4 into memory and then save r5 in r4. */
.global save_static_to_mem
.proc save_static_to_mem
save_static_to_mem:
.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 ar.unat, loc2
mov loc2 = ar.unat
.fframe 16
.spillpsp r4, 16
st8.spill [sp] = r4, -16
.spillreg r5, r4
mov r4 = r5
.body
LOAD_VAL(r5)
CALL_NEXT(loc3)
mov r5 = r4 // restore r5
.restore sp
add sp = 16, sp;;
ld8.fill r4 = [sp] // restore r4
mov ar.pfs = loc0
mov rp = loc1
mov ar.unat = loc2 // restore ar.unat
br.ret.sptk.many rp
.endp save_static_to_mem