(TRAMPOLINE_TEMPLATE): Save and restore all call-clobbered fp regs.

This commit is contained in:
Ulrich Drepper 1999-02-08 10:02:37 +00:00
parent 2bad373511
commit 4fb65d7fc7

View File

@ -134,31 +134,55 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
.globl " #tramp_name " .globl " #tramp_name "
.ent " #tramp_name " .ent " #tramp_name "
" #tramp_name ": " #tramp_name ":
lda $sp, -168($sp) lda $sp, -44*8($sp)
.frame $sp, 168, $26 .frame $sp, 44*8, $26
/* Preserve all integer registers that C normally doesn't. */ /* Preserve all integer registers that C normally doesn't. */
stq $26, 0($sp) stq $26, 0*8($sp)
stq $0, 8($sp) stq $0, 1*8($sp)
stq $1, 16($sp) stq $1, 2*8($sp)
stq $2, 24($sp) stq $2, 3*8($sp)
stq $3, 32($sp) stq $3, 4*8($sp)
stq $4, 40($sp) stq $4, 5*8($sp)
stq $5, 48($sp) stq $5, 6*8($sp)
stq $6, 56($sp) stq $6, 7*8($sp)
stq $7, 64($sp) stq $7, 8*8($sp)
stq $8, 72($sp) stq $8, 9*8($sp)
stq $16, 80($sp) stq $16, 10*8($sp)
stq $17, 88($sp) stq $17, 11*8($sp)
stq $18, 96($sp) stq $18, 12*8($sp)
stq $19, 104($sp) stq $19, 13*8($sp)
stq $20, 112($sp) stq $20, 14*8($sp)
stq $21, 120($sp) stq $21, 15*8($sp)
stq $22, 128($sp) stq $22, 16*8($sp)
stq $23, 136($sp) stq $23, 17*8($sp)
stq $24, 144($sp) stq $24, 18*8($sp)
stq $25, 152($sp) stq $25, 19*8($sp)
stq $29, 160($sp) stq $29, 20*8($sp)
.mask 0x27ff01ff, -168 stt $f0, 21*8($sp)
stt $f1, 22*8($sp)
stt $f10, 23*8($sp)
stt $f11, 24*8($sp)
stt $f12, 25*8($sp)
stt $f13, 26*8($sp)
stt $f14, 27*8($sp)
stt $f15, 28*8($sp)
stt $f16, 29*8($sp)
stt $f17, 30*8($sp)
stt $f18, 31*8($sp)
stt $f19, 32*8($sp)
stt $f20, 33*8($sp)
stt $f21, 34*8($sp)
stt $f22, 35*8($sp)
stt $f23, 36*8($sp)
stt $f24, 37*8($sp)
stt $f25, 38*8($sp)
stt $f26, 39*8($sp)
stt $f27, 40*8($sp)
stt $f28, 41*8($sp)
stt $f29, 42*8($sp)
stt $f30, 43*8($sp)
.mask 0x27ff01ff, -44*8
.fmask 0xfffffc03, -(44-21)*8
/* Set up our $gp */ /* Set up our $gp */
br $gp, .+4 br $gp, .+4
ldgp $gp, 0($gp) ldgp $gp, 0($gp)
@ -177,31 +201,54 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
/* Move the destination address into position. */ /* Move the destination address into position. */
mov $0, $27 mov $0, $27
/* Restore program registers. */ /* Restore program registers. */
ldq $26, 0($sp) ldq $26, 0*8($sp)
ldq $0, 8($sp) ldq $0, 1*8($sp)
ldq $1, 16($sp) ldq $1, 2*8($sp)
ldq $2, 24($sp) ldq $2, 3*8($sp)
ldq $3, 32($sp) ldq $3, 4*8($sp)
ldq $4, 40($sp) ldq $4, 5*8($sp)
ldq $5, 48($sp) ldq $5, 6*8($sp)
ldq $6, 56($sp) ldq $6, 7*8($sp)
ldq $7, 64($sp) ldq $7, 8*8($sp)
ldq $8, 72($sp) ldq $8, 9*8($sp)
ldq $16, 80($sp) ldq $16, 10*8($sp)
ldq $17, 88($sp) ldq $17, 11*8($sp)
ldq $18, 96($sp) ldq $18, 12*8($sp)
ldq $19, 104($sp) ldq $19, 13*8($sp)
ldq $20, 112($sp) ldq $20, 14*8($sp)
ldq $21, 120($sp) ldq $21, 15*8($sp)
ldq $22, 128($sp) ldq $22, 16*8($sp)
ldq $23, 136($sp) ldq $23, 17*8($sp)
ldq $24, 144($sp) ldq $24, 18*8($sp)
ldq $25, 152($sp) ldq $25, 19*8($sp)
ldq $29, 160($sp) ldq $29, 20*8($sp)
ldt $f0, 21*8($sp)
ldt $f1, 22*8($sp)
ldt $f10, 23*8($sp)
ldt $f11, 24*8($sp)
ldt $f12, 25*8($sp)
ldt $f13, 26*8($sp)
ldt $f14, 27*8($sp)
ldt $f15, 28*8($sp)
ldt $f16, 29*8($sp)
ldt $f17, 30*8($sp)
ldt $f18, 31*8($sp)
ldt $f19, 32*8($sp)
ldt $f20, 33*8($sp)
ldt $f21, 34*8($sp)
ldt $f22, 35*8($sp)
ldt $f23, 36*8($sp)
ldt $f24, 37*8($sp)
ldt $f25, 38*8($sp)
ldt $f26, 39*8($sp)
ldt $f27, 40*8($sp)
ldt $f28, 41*8($sp)
ldt $f29, 42*8($sp)
ldt $f30, 43*8($sp)
/* Flush the Icache after having modified the .plt code. */ /* Flush the Icache after having modified the .plt code. */
" #IMB " " #IMB "
/* Clean up and turn control to the destination */ /* Clean up and turn control to the destination */
lda $sp, 168($sp) lda $sp, 44*8($sp)
jmp $31, ($27) jmp $31, ($27)
.end " #tramp_name) .end " #tramp_name)