-/* some room to accomodate changes of the stack frame size during replacement */
- /* XXX we should find a cleaner solution here */
-#define REPLACEMENT_ROOM 512
-
-#define REPLACEMENT_STACK_OFFSET ((sizeexecutionstate + REPLACEMENT_ROOM + 0xf) & ~0xf)
-
- .ent asm_replacement_out
-
-asm_replacement_out:
- /* create stack frame */
- lda sp,-(REPLACEMENT_STACK_OFFSET)(sp)
-
- /* save registers in execution state */
- stq $0 ,( 0*8+offes_intregs)(sp)
- stq $1 ,( 1*8+offes_intregs)(sp)
- stq $2 ,( 2*8+offes_intregs)(sp)
- stq $3 ,( 3*8+offes_intregs)(sp)
- stq $4 ,( 4*8+offes_intregs)(sp)
- stq $5 ,( 5*8+offes_intregs)(sp)
- stq $6 ,( 6*8+offes_intregs)(sp)
- stq $7 ,( 7*8+offes_intregs)(sp)
- stq $8 ,( 8*8+offes_intregs)(sp)
- stq $9 ,( 9*8+offes_intregs)(sp)
- stq $10,(10*8+offes_intregs)(sp)
- stq $11,(11*8+offes_intregs)(sp)
- stq $12,(12*8+offes_intregs)(sp)
- stq $13,(13*8+offes_intregs)(sp)
- stq $14,(14*8+offes_intregs)(sp)
- stq $15,(15*8+offes_intregs)(sp)
- stq $16,(16*8+offes_intregs)(sp)
- stq $17,(17*8+offes_intregs)(sp)
- stq $18,(18*8+offes_intregs)(sp)
- stq $19,(19*8+offes_intregs)(sp)
- stq $20,(20*8+offes_intregs)(sp)
- stq $21,(21*8+offes_intregs)(sp)
- stq $22,(22*8+offes_intregs)(sp)
- stq $23,(23*8+offes_intregs)(sp)
- stq $24,(24*8+offes_intregs)(sp)
- stq $25,(25*8+offes_intregs)(sp)
- stq $26,(26*8+offes_intregs)(sp)
- stq $27,(27*8+offes_intregs)(sp)
- stq $28,(28*8+offes_intregs)(sp)
- stq $29,(29*8+offes_intregs)(sp)
- stq $30,(30*8+offes_intregs)(sp)
- stq $31,(31*8+offes_intregs)(sp)
-
- stt $f0 ,( 0*8+offes_fltregs)(sp)
- stt $f1 ,( 1*8+offes_fltregs)(sp)
- stt $f2 ,( 2*8+offes_fltregs)(sp)
- stt $f3 ,( 3*8+offes_fltregs)(sp)
- stt $f4 ,( 4*8+offes_fltregs)(sp)
- stt $f5 ,( 5*8+offes_fltregs)(sp)
- stt $f6 ,( 6*8+offes_fltregs)(sp)
- stt $f7 ,( 7*8+offes_fltregs)(sp)
- stt $f8 ,( 8*8+offes_fltregs)(sp)
- stt $f9 ,( 9*8+offes_fltregs)(sp)
- stt $f10,(10*8+offes_fltregs)(sp)
- stt $f11,(11*8+offes_fltregs)(sp)
- stt $f12,(12*8+offes_fltregs)(sp)
- stt $f13,(13*8+offes_fltregs)(sp)
- stt $f14,(14*8+offes_fltregs)(sp)
- stt $f15,(15*8+offes_fltregs)(sp)
- stt $f16,(16*8+offes_fltregs)(sp)
- stt $f17,(17*8+offes_fltregs)(sp)
- stt $f18,(18*8+offes_fltregs)(sp)
- stt $f19,(19*8+offes_fltregs)(sp)
- stt $f20,(20*8+offes_fltregs)(sp)
- stt $f21,(21*8+offes_fltregs)(sp)
- stt $f22,(22*8+offes_fltregs)(sp)
- stt $f23,(23*8+offes_fltregs)(sp)
- stt $f24,(24*8+offes_fltregs)(sp)
- stt $f25,(25*8+offes_fltregs)(sp)
- stt $f26,(26*8+offes_fltregs)(sp)
- stt $f27,(27*8+offes_fltregs)(sp)
- stt $f28,(28*8+offes_fltregs)(sp)
- stt $f29,(29*8+offes_fltregs)(sp)
- stt $f30,(30*8+offes_fltregs)(sp)
- stt $f31,(31*8+offes_fltregs)(sp)
-
- /* calculate sp of method */
- lda itmp1,(REPLACEMENT_STACK_OFFSET + 2*8)(sp)
- stq itmp1,(offes_sp)(sp)
-
- br ra,L_asm_replacement_out_load_gp
-L_asm_replacement_out_load_gp:
- ldgp gp,0(ra) /* load gp */
-
- /* store pv */
- stq pv,(offes_pv)(sp)
-
- /* call replace_me */
- ldq a0,-(2*8)(itmp1) /* arg0: rplpoint * */
- mov sp,a1 /* arg1: execution state */
- jmp zero,replace_me /* call C function replace_me */
- jmp zero,abort /* NEVER REACHED */
-
- .end asm_replacement_out
-
-/* asm_replacement_in **********************************************************