Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: asmpart.S 7454 2007-03-05 15:40:48Z tbfg $
-
*/
#include "vm/jit/abi-asm.h"
#include "vm/jit/methodheader.h"
-#include "vm/jit/powerpc/offsets.h"
.text
.globl asm_vm_call_method_exception_handler
.globl asm_vm_call_method_end
- .globl asm_call_jit_compiler
-
.globl asm_handle_nat_exception
.globl asm_handle_exception
.globl asm_abstractmethoderror
- .globl asm_patcher_wrapper
-
-#if defined(ENABLE_REPLACEMENT)
- .globl asm_replacement_out
- .globl asm_replacement_in
-#endif
-
.globl asm_cacheflush
- .globl asm_compare_and_swap
- .globl asm_memory_barrier
-
- .globl asm_criticalsections
- .globl asm_getclassvalues_atomic
-
/* asm_vm_call_method **********************************************************
* *
.align 2
- .long 0 /* catch type all */
- .long 0 /* exception handler pc */
- .long 0 /* end pc */
- .long 0 /* start pc */
- .long 1 /* extable size */
- .long 0 /* line number table start */
- .long 0 /* line number table size */
.long 0 /* fltsave */
.long 0 /* intsave */
.long 0 /* IsLeaf */
- .long 0 /* IsSync */
.long 0 /* frame size */
.long 0 /* codeinfo pointer */
stwu sp,-40*4(sp) /* keep stack 16-byte aligned */
stw s0,8*4(sp) /* save used callee saved registers */
- stw a0,9*4(sp) /* save method pointer for compiler */
#if defined(__DARWIN__)
stw itmp1,10*4(sp) /* register r11 is callee saved */
stfd ft4,34*4(sp)
stfd ft5,36*4(sp)
#else
- SAVE_TEMPORARY_REGISTERS(18) /* the offset has to be even */
+ SAVE_TEMPORARY_REGISTERS(18) /* the offset has to be even */
#endif
- mr itmp2,a1 /* arg count */
- mr itmp1,a2 /* pointer to arg block */
+ mr pv,a0 /* move PV into PV register */
+ mtctr pv /* move PV into branch register */
- mr t4,itmp2 /* save argument count */
- mr t5,itmp1 /* save argument block pointer */
+ mr t0,a1 /* address of data structure */
+ mr t1,a2 /* stack argument count */
- mr s0,sp /* save current sp to s0 */
+ mr s0,sp /* save SP */
- addi itmp1,itmp1,-sizevmarg /* initialize pointer (smaller code) */
- addi itmp2,itmp2,1 /* initialize argument count */
- li t0,0 /* initialize integer argument counter */
- li t1,0 /* initialize float argument counter */
- li t6,0 /* initialize integer register counter */
-#if defined(__DARWIN__)
- li t7,0 /* initialize stack slot counter */
-#endif
+ lwz a0,0*8+4(t0) /* we are on big-endian */
+ lwz a1,1*8+4(t0)
+ lwz a2,2*8+4(t0)
+ lwz a3,3*8+4(t0)
+ lwz a4,4*8+4(t0)
+ lwz a5,5*8+4(t0)
+ lwz a6,6*8+4(t0)
+ lwz a7,7*8+4(t0)
- mflr r0 /* save link register (PIC code) */
- bl L_asm_vm_call_method_get_pc
-L_asm_vm_call_method_get_pc:
- mflr t3 /* t3 contains the current pc */
- mtlr r0
-
-L_register_copy:
- addi itmp1,itmp1,sizevmarg /* goto next argument block */
- addi itmp2,itmp2,-1 /* argument count - 1 */
- mr. itmp2,itmp2
- beq L_register_copy_done
-
- lwz itmp3,offvmargtype+4(itmp1)
- andi. r0,itmp3,0x0002 /* is this a float/double type? */
- bne L_register_handle_float
-
-L_register_handle_int:
- cmpwi t6,INT_ARG_CNT /* are we out of integer argument */
- beq L_register_copy /* registers? yes, next loop */
-
- andi. r0,itmp3,0x0001 /* is this a 2-word type? */
- bne L_register_handle_long
+ lfd fa0,8*8(t0)
+ lfd fa1,9*8(t0)
+ lfd fa2,10*8(t0)
+ lfd fa3,11*8(t0)
+ lfd fa4,12*8(t0)
+ lfd fa5,13*8(t0)
+ lfd fa6,14*8(t0)
+ lfd fa7,15*8(t0)
#if defined(__DARWIN__)
- addis itmp3,t3,ha16(L_jumptable_int - L_asm_vm_call_method_get_pc)
- la itmp3,lo16(L_jumptable_int - L_asm_vm_call_method_get_pc)(itmp3)
-#else
- lis itmp3,L_jumptable_int@ha
- addi itmp3,itmp3,L_jumptable_int@l
+ lfd fa8,16*8(t0)
+ lfd fa9,17*8(t0)
+ lfd fa10,18*8(t0)
+ lfd fa11,19*8(t0)
+ lfd fa12,20*8(t0)
#endif
- slwi t2,t6,2 /* multiple of 4-bytes */
- add itmp3,itmp3,t2 /* calculate address of jumptable */
- lwz itmp3,0(itmp3) /* load function address */
- mtctr itmp3
- addi t0,t0,1 /* integer argument counter */
- addi t6,t6,1 /* integer argument register counter */
-#if defined(__DARWIN__)
- addi t7,t7,1 /* stack slot counter */
-#endif
- bctr
-
-L_register_handle_long:
-#if defined(__DARWIN__)
- addis itmp3,t3,ha16(L_jumptable_long - L_asm_vm_call_method_get_pc)
- la itmp3,lo16(L_jumptable_long - L_asm_vm_call_method_get_pc)(itmp3)
-#else
- lis itmp3,L_jumptable_long@ha
- addi itmp3,itmp3,L_jumptable_long@l
-#endif
-#if !defined(__DARWIN__)
- addi t6,t6,1 /* align to even numbers */
- andi. t6,t6,0xfffe
-#endif
-
- cmpwi t6,(INT_ARG_CNT - 1) /* are we out of integer argument */
- blt L_register_handle_long_continue /* registers? */
-
- li t6,INT_ARG_CNT /* yes, set integer argument register */
- b L_register_copy /* count to max and next loop */
-
-L_register_handle_long_continue:
- slwi t2,t6,2 /* multiple of 4-bytes */
- add itmp3,itmp3,t2 /* calculate address of jumptable */
- lwz itmp3,0(itmp3) /* load function address */
- mtctr itmp3
- addi t0,t0,1 /* integer argument counter */
- addi t6,t6,2 /* integer argument register counter */
-#if defined(__DARWIN__)
- addi t7,t7,2 /* stack slot counter */
-#endif
- bctr
-
-L_register_handle_float:
- cmpwi t1,FLT_ARG_CNT /* are we out of float argument */
- beq L_register_copy /* registers? yes, next loop */
+ mr. t1,t1
+ beq L_asm_vm_call_method_stack_copy_done
- andi. r0,itmp3,0x0001 /* is this a 2-word type? */
- bne L_register_handle_double
+ slwi t2,t1,3 /* calculate stackframe size (* 8) */
-#if defined(__DARWIN__)
- addis itmp3,t3,ha16(L_jumptable_float - L_asm_vm_call_method_get_pc)
- la itmp3,lo16(L_jumptable_float - L_asm_vm_call_method_get_pc)(itmp3)
-#else
- lis itmp3,L_jumptable_float@ha
- addi itmp3,itmp3,L_jumptable_float@l
-#endif
-
- slwi t2,t1,2 /* multiple of 4-bytes */
- add itmp3,itmp3,t2 /* calculate address of jumptable */
- lwz itmp3,0(itmp3) /* load function address */
- mtctr itmp3
- addi t1,t1,1 /* float argument counter */
-#if defined(__DARWIN__)
- addi t7,t7,1 /* stack slot counter */
- addi t6,t6,1 /* skip 1 integer argument register */
-#endif
- bctr
+ sub sp,sp,t2 /* create stackframe */
+ mr t2,sp /* temporary stack pointer */
-L_register_handle_double:
+L_asm_vm_call_method_stack_copy_loop:
#if defined(__DARWIN__)
- addis itmp3,t3,ha16(L_jumptable_double - L_asm_vm_call_method_get_pc)
- la itmp3,lo16(L_jumptable_double - L_asm_vm_call_method_get_pc)(itmp3)
+ lwz t3,21*8+0(t0) /* load argument */
+ lwz t4,21*8+4(t0)
#else
- lis itmp3,L_jumptable_double@ha
- addi itmp3,itmp3,L_jumptable_double@l
+ lwz t3,16*8+0(t0) /* load argument */
+ lwz t4,16*8+4(t0)
#endif
+ stw t3,0(t2) /* store argument on stack */
+ stw t4,4(t2)
- slwi t2,t1,2 /* multiple of 4-bytes */
- add itmp3,itmp3,t2 /* calculate address of jumptable */
- lwz itmp3,0(itmp3) /* load function address */
- mtctr itmp3
- addi t1,t1,1 /* float argument counter */
-#if defined(__DARWIN__)
- addi t7,t7,2 /* stack slot counter */
- addi t6,t6,2 /* skip 2 integer argument registers */
-#endif
- bctr
-
-L_register_copy_done:
- /* calculate remaining arguments */
- sub itmp3,t4,t0 /* - integer arguments in registers */
- sub itmp3,itmp3,t1 /* - float arguments in registers */
- mr. itmp3,itmp3
- beq L_stack_copy_done
-
- mr itmp2,t4 /* restore argument count */
- mr itmp1,t5 /* restore argument block pointer */
-
- slwi t4,itmp3,3 /* XXX use 8-bytes slots for now */
- addi t4,t4,LA_SIZE /* add size of linkage area */
-
-#if defined(__DARWIN__)
- slwi t5,t7,2 /* add stack space for arguments */
- add t4,t4,t5
-#endif
-
- sub sp,sp,t4
-
- mr t6,sp /* use t6 as temporary sp */
- addi t6,t6,LA_SIZE /* skip linkage area */
-#if defined(__DARWIN__)
- add t6,t6,t5 /* skip stack space for arguments */
-#endif
-
- addi itmp1,itmp1,-sizevmarg /* initialize pointer (smaller code) */
- addi itmp2,itmp2,1 /* initialize argument count */
-
-L_stack_copy_loop:
- addi itmp1,itmp1,sizevmarg /* goto next argument block */
- addi itmp2,itmp2,-1 /* argument count - 1 */
- mr. itmp2,itmp2
- beq L_stack_copy_done
-
- lwz itmp3,offvmargtype+4(itmp1)
- andi. r0,itmp3,0x0002 /* is this a float/double type? */
- bne L_stack_handle_float
-
-L_stack_handle_int:
- addi t0,t0,-1 /* arguments assigned to registers */
- mr. t0,t0
- bge L_stack_copy_loop
-
- andi. r0,itmp3,0x0001 /* is this a 2-word type? */
- bne L_stack_handle_long
-
- lwz itmp3,offvmargdata+4(itmp1) /* get integer argument */
- stw itmp3,0(t6) /* and store it on the stack */
- addi t6,t6,4 /* increase temporary sp by 1 slot */
- b L_stack_copy_loop
-
-L_stack_handle_long:
-#if !defined(__DARWIN__)
- addi t6,t6,4 /* align stack to 8-bytes */
- rlwinm t6,t6,0,30,28 /* clear lower 4-bits */
-#endif
-
- lwz itmp3,offvmargdata+0(itmp1) /* get long argument */
- stw itmp3,0(t6) /* and store it on the stack */
- lwz itmp3,offvmargdata+4(itmp1)
- stw itmp3,4(t6)
- addi t6,t6,8 /* increase temporary sp by 2 slots */
- b L_stack_copy_loop
-
-L_stack_handle_float:
- addi t1,t1,-1 /* arguments assigned to registers */
+ addi t0,t0,8 /* load address of next argument */
+ addi t2,t2,8 /* increase stack pointer */
+ addi t1,t1,-1 /* subtract 1 argument */
mr. t1,t1
- bge L_stack_copy_loop
-
- andi. r0,itmp3,0x0001 /* is this a 2-word type? */
- bne L_stack_handle_double
-
- lfs ftmp3,offvmargdata(itmp1) /* get float argument */
- stfs ftmp3,0(t6) /* and store it on the stack */
- addi t6,t6,4 /* increase temporary sp by 1 slot */
- b L_stack_copy_loop
-
-L_stack_handle_double:
-#if !defined(__DARWIN__)
- addi t6,t6,4 /* align stack to 8-bytes */
- rlwinm t6,t6,0,30,28 /* clear lower 4-bits */
-#endif
-
- lfd ftmp3,offvmargdata(itmp1) /* get double argument */
- stfd ftmp3,0(t6) /* and store it on the stack */
- addi t6,t6,8 /* increase temporary sp by 2 slots */
- b L_stack_copy_loop
-
-L_stack_copy_done:
- lwz itmp1,9*4(s0) /* pass method pointer via tmp1 */
+ bgt L_asm_vm_call_method_stack_copy_loop
-#if defined(__DARWIN__)
- addis mptr,t3,ha16(L_asm_call_jit_compiler - L_asm_vm_call_method_get_pc)
- la mptr,lo16(L_asm_call_jit_compiler - L_asm_vm_call_method_get_pc)(mptr)
-#else
- lis mptr,L_asm_call_jit_compiler@ha
- addi mptr,mptr,L_asm_call_jit_compiler@l
-#endif
- stw mptr,7*4(s0)
- addi mptr,s0,7*4
-
- lwz pv,0*4(mptr)
- mtctr pv
+L_asm_vm_call_method_stack_copy_done:
bctrl
1:
mflr itmp1
#endif
L_asm_vm_call_method_return:
- mr sp,s0 /* restore the function's sp */
+ mr sp,s0 /* restore the SP */
- lwz s0,8*4(sp) /* restore used callee saved registers */
+ lwz s0,8*4(sp) /* restore used callee saved registers*/
#if defined(__DARWIN__)
- lwz itmp1,10*4(sp) /* register r11 is callee saved */
+ lwz itmp1,10*4(sp) /* register r11 is callee saved */
#endif
- lwz pv,11*4(sp) /* save PV register */
+ lwz pv,11*4(sp) /* save PV register */
lwz itmp3,12*4(sp)
- lfd ftmp1,14*4(sp) /* registers f14-f31 are callee saved */
+ lfd ftmp1,14*4(sp) /* registers f14-f31 are callee saved */
lfd ftmp2,16*4(sp)
#if defined(__DARWIN__)
bl builtin_throw_exception
b L_asm_vm_call_method_return
-
- .data
- .align 2
-
-L_jumptable_int:
- .long L_handle_a0
- .long L_handle_a1
- .long L_handle_a2
- .long L_handle_a3
- .long L_handle_a4
- .long L_handle_a5
- .long L_handle_a6
- .long L_handle_a7
-
- .text
- .align 2
-
-L_handle_a0:
- lwz a0,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a1:
- lwz a1,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a2:
- lwz a2,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a3:
- lwz a3,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a4:
- lwz a4,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a5:
- lwz a5,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a6:
- lwz a6,offvmargdata+4(itmp1)
- b L_register_copy
-L_handle_a7:
- lwz a7,offvmargdata+4(itmp1)
- b L_register_copy
-
-
- .data
- .align 2
-
-L_jumptable_long:
-#if defined(__DARWIN__)
- .long L_handle_a0_a1
- .long L_handle_a1_a2
- .long L_handle_a2_a3
- .long L_handle_a3_a4
- .long L_handle_a4_a5
- .long L_handle_a5_a6
- .long L_handle_a6_a7
-#else
- /* we have two entries here, so we get the even argument register
- alignment for linux */
-
- .long L_handle_a0_a1
- .long 0
- .long L_handle_a2_a3
- .long 0
- .long L_handle_a4_a5
- .long 0
- .long L_handle_a6_a7
-#endif
-
- .text
- .align 2
-
-L_handle_a0_a1:
- lwz a0,offvmargdata+0(itmp1)
- lwz a1,offvmargdata+4(itmp1)
- b L_register_copy
-#if defined(__DARWIN__)
-L_handle_a1_a2:
- lwz a1,offvmargdata+0(itmp1)
- lwz a2,offvmargdata+4(itmp1)
- b L_register_copy
-#endif
-L_handle_a2_a3:
- lwz a2,offvmargdata+0(itmp1)
- lwz a3,offvmargdata+4(itmp1)
- b L_register_copy
-#if defined(__DARWIN__)
-L_handle_a3_a4:
- lwz a3,offvmargdata+0(itmp1)
- lwz a4,offvmargdata+4(itmp1)
- b L_register_copy
-#endif
-L_handle_a4_a5:
- lwz a4,offvmargdata+0(itmp1)
- lwz a5,offvmargdata+4(itmp1)
- b L_register_copy
-#if defined(__DARWIN__)
-L_handle_a5_a6:
- lwz a5,offvmargdata+0(itmp1)
- lwz a6,offvmargdata+4(itmp1)
- b L_register_copy
-#endif
-L_handle_a6_a7:
- lwz a6,offvmargdata+0(itmp1)
- lwz a7,offvmargdata+4(itmp1)
- b L_register_copy
-
-
- .data
- .align 2
-
-L_jumptable_float:
- .long L_handle_fa0
- .long L_handle_fa1
- .long L_handle_fa2
- .long L_handle_fa3
- .long L_handle_fa4
- .long L_handle_fa5
- .long L_handle_fa6
- .long L_handle_fa7
-
-#if defined(__DARWIN__)
- .long L_handle_fa8
- .long L_handle_fa9
- .long L_handle_fa10
- .long L_handle_fa11
- .long L_handle_fa12
-#endif
-
- .text
- .align 2
-
-L_handle_fa0:
- lfs fa0,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa1:
- lfs fa1,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa2:
- lfs fa2,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa3:
- lfs fa3,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa4:
- lfs fa4,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa5:
- lfs fa5,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa6:
- lfs fa6,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa7:
- lfs fa7,offvmargdata(itmp1)
- b L_register_copy
-
-#if defined(__DARWIN__)
-L_handle_fa8:
- lfs fa8,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa9:
- lfs fa9,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa10:
- lfs fa10,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa11:
- lfs fa11,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fa12:
- lfs fa12,offvmargdata(itmp1)
- b L_register_copy
-#endif
-
-
- .data
- .align 2
-
-L_jumptable_double:
- .long L_handle_fda0
- .long L_handle_fda1
- .long L_handle_fda2
- .long L_handle_fda3
- .long L_handle_fda4
- .long L_handle_fda5
- .long L_handle_fda6
- .long L_handle_fda7
-
-#if defined(__DARWIN__)
- .long L_handle_fda8
- .long L_handle_fda9
- .long L_handle_fda10
- .long L_handle_fda11
- .long L_handle_fda12
-#endif
-
- .text
- .align 2
-
-L_handle_fda0:
- lfd fa0,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda1:
- lfd fa1,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda2:
- lfd fa2,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda3:
- lfd fa3,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda4:
- lfd fa4,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda5:
- lfd fa5,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda6:
- lfd fa6,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda7:
- lfd fa7,offvmargdata(itmp1)
- b L_register_copy
-
-#if defined(__DARWIN__)
-L_handle_fda8:
- lfd fa8,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda9:
- lfd fa9,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda10:
- lfd fa10,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda11:
- lfd fa11,offvmargdata(itmp1)
- b L_register_copy
-L_handle_fda12:
- lfd fa12,offvmargdata(itmp1)
- b L_register_copy
-#endif
-
asm_vm_call_method_end:
nop
-/* asm_call_jit_compiler *******************************************************
-
- Invokes the compiler for untranslated JavaVM methods.
-
-*******************************************************************************/
-
-asm_call_jit_compiler:
-L_asm_call_jit_compiler: /* required for PIC code */
- mflr r0
- stw r0,LA_LR_OFFSET(sp) /* save return address */
- stwu sp,-(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)(sp)
-
-#if defined(__DARWIN__)
- stw a0,LA_SIZE+(4+0)*4(sp)
- stw a1,LA_SIZE+(4+1)*4(sp)
- stw a2,LA_SIZE+(4+2)*4(sp)
- stw a3,LA_SIZE+(4+3)*4(sp)
- stw a4,LA_SIZE+(4+4)*4(sp)
- stw a5,LA_SIZE+(4+5)*4(sp)
- stw a6,LA_SIZE+(4+6)*4(sp)
- stw a7,LA_SIZE+(4+7)*4(sp)
-
- stfd fa0,LA_SIZE+(4+8)*4(sp)
- stfd fa1,LA_SIZE+(4+10)*4(sp)
- stfd fa2,LA_SIZE+(4+12)*4(sp)
- stfd fa3,LA_SIZE+(4+14)*4(sp)
- stfd fa4,LA_SIZE+(4+16)*4(sp)
- stfd fa5,LA_SIZE+(4+18)*4(sp)
- stfd fa6,LA_SIZE+(4+20)*4(sp)
- stfd fa7,LA_SIZE+(4+22)*4(sp)
- stfd fa8,LA_SIZE+(4+24)*4(sp)
- stfd fa9,LA_SIZE+(4+26)*4(sp)
- stfd fa10,LA_SIZE+(4+28)*4(sp)
- stfd fa11,LA_SIZE+(4+30)*4(sp)
- stfd fa12,LA_SIZE+(4+32)*4(sp)
-#else
- SAVE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS)
-#endif
-
- mr a0,itmp1
- mr a1,mptr
- addi a2,sp,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)
- lwz a3,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)+LA_LR_OFFSET(sp)
- bl jit_asm_compile
- mr pv,v0 /* move address to pv register */
-
-#if defined(__DARWIN__)
- lwz a0,LA_SIZE+(4+0)*4(sp)
- lwz a1,LA_SIZE+(4+1)*4(sp)
- lwz a2,LA_SIZE+(4+2)*4(sp)
- lwz a3,LA_SIZE+(4+3)*4(sp)
- lwz a4,LA_SIZE+(4+4)*4(sp)
- lwz a5,LA_SIZE+(4+5)*4(sp)
- lwz a6,LA_SIZE+(4+6)*4(sp)
- lwz a7,LA_SIZE+(4+7)*4(sp)
-
- lfd fa0,LA_SIZE+(4+8)*4(sp)
- lfd fa1,LA_SIZE+(4+10)*4(sp)
- lfd fa2,LA_SIZE+(4+12)*4(sp)
- lfd fa3,LA_SIZE+(4+14)*4(sp)
- lfd fa4,LA_SIZE+(4+16)*4(sp)
- lfd fa5,LA_SIZE+(4+18)*4(sp)
- lfd fa6,LA_SIZE+(4+20)*4(sp)
- lfd fa7,LA_SIZE+(4+22)*4(sp)
- lfd fa8,LA_SIZE+(4+24)*4(sp)
- lfd fa9,LA_SIZE+(4+26)*4(sp)
- lfd fa10,LA_SIZE+(4+28)*4(sp)
- lfd fa11,LA_SIZE+(4+30)*4(sp)
- lfd fa12,LA_SIZE+(4+32)*4(sp)
-#else
- RESTORE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS)
-#endif
-
- lwz itmp1,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)+LA_LR_OFFSET(sp)
- mtlr itmp1
-
- addi sp,sp,(LA_SIZE + 4*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8)
-
- mr. pv,pv /* test for exception */
- beq L_asm_call_jit_compiler_exception
-
- mtctr pv /* move method address to control reg */
- bctr /* and call the Java method */
-
-L_asm_call_jit_compiler_exception:
- mflr r0
- stw r0,LA_LR_OFFSET(sp)
- stwu sp,-LA_SIZE_ALIGNED(sp) /* preserve linkage area */
- bl exceptions_get_and_clear_exception
- lwz xpc,LA_SIZE_ALIGNED+LA_LR_OFFSET(sp)
- mtlr xpc
- addi sp,sp,LA_SIZE_ALIGNED
-
- mr xptr,v0 /* get exception */
- addi xpc,xpc,-4 /* exception address is ra - 4 */
- b L_asm_handle_nat_exception
-
/********************* function asm_handle_exception ***************************
* *
stw itmp3,LA_SIZE+(4+4)*4(sp) /* save maybe-leaf flag (cleared) */
mr a0,r0 /* pass return address */
- bl md_codegen_get_pv_from_pc /* get PV from RA */
+ bl md_asm_codegen_get_pv_from_pc /* get PV from RA */
stw v0,LA_SIZE+(4+2)*4(sp) /* save data segment pointer */
lwz a0,LA_SIZE+(4+0)*4(sp) /* pass xptr */
mtctr t3
bctr
- lwz s0,-10*4(t1)
- lwz s1,-9*4(t1)
- lwz s2,-8*4(t1)
- lwz s3,-7*4(t1)
- lwz s4,-6*4(t1)
- lwz s5,-5*4(t1)
- lwz s6,-4*4(t1)
- lwz s7,-3*4(t1)
- lwz s8,-2*4(t1)
- lwz s9,-1*4(t1)
+ lwz s0,-10*8(t1)
+ lwz s1,-9*8(t1)
+ lwz s2,-8*8(t1)
+ lwz s3,-7*8(t1)
+ lwz s4,-6*8(t1)
+ lwz s5,-5*8(t1)
+ lwz s6,-4*8(t1)
+ lwz s7,-3*8(t1)
+ lwz s8,-2*8(t1)
+ lwz s9,-1*8(t1)
ex_int2:
subf t1,t2,t1 /* t1 = t1 - register count * 4 */
b L_asm_handle_nat_exception
-/* asm_patcher_wrapper *********************************************************
-
- XXX
-
- Stack layout:
- 20 return address into JIT code (patch position)
- 16 pointer to virtual java_objectheader
- 12 machine code (which is patched back later)
- 8 unresolved class/method/field reference
- 4 data segment displacement from load instructions
- 0 patcher function pointer to call (pv is saved here afterwards)
-
-*******************************************************************************/
-
-asm_patcher_wrapper:
- mflr r0 /* get Java return address (leaf) */
- stw r0,6*4(sp) /* store it in the stub stackframe */
- /* keep stack 16-bytes aligned: 6+1+37 = 44 */
- stwu sp,-(LA_SIZE+(5+58)*4)(sp)
-
-#if defined(__DARWIN__)
- stw a0,LA_SIZE+(5+0)*4(sp) /* save argument registers */
- stw a1,LA_SIZE+(5+1)*4(sp) /* preserve linkage area (24 bytes) */
- stw a2,LA_SIZE+(5+2)*4(sp) /* and 4 bytes for 4 argument */
- stw a3,LA_SIZE+(5+3)*4(sp)
- stw a4,LA_SIZE+(5+4)*4(sp)
- stw a5,LA_SIZE+(5+5)*4(sp)
- stw a6,LA_SIZE+(5+6)*4(sp)
- stw a7,LA_SIZE+(5+7)*4(sp)
-
- stfd fa0,LA_SIZE+(5+8)*4(sp)
- stfd fa1,LA_SIZE+(5+10)*4(sp)
- stfd fa2,LA_SIZE+(5+12)*4(sp)
- stfd fa3,LA_SIZE+(5+14)*4(sp)
- stfd fa4,LA_SIZE+(5+16)*4(sp)
- stfd fa5,LA_SIZE+(5+18)*4(sp)
- stfd fa6,LA_SIZE+(5+20)*4(sp)
- stfd fa7,LA_SIZE+(5+22)*4(sp)
- stfd fa8,LA_SIZE+(5+24)*4(sp)
- stfd fa9,LA_SIZE+(5+26)*4(sp)
- stfd fa10,LA_SIZE+(5+28)*4(sp)
- stfd fa11,LA_SIZE+(5+30)*4(sp)
- stfd fa12,LA_SIZE+(5+32)*4(sp)
-
- stw t0,LA_SIZE+(5+33)*4(sp)
- stw t1,LA_SIZE+(5+34)*4(sp)
- stw t2,LA_SIZE+(5+35)*4(sp)
- stw t3,LA_SIZE+(5+36)*4(sp)
- stw t4,LA_SIZE+(5+37)*4(sp)
- stw t5,LA_SIZE+(5+38)*4(sp)
- stw t6,LA_SIZE+(5+39)*4(sp)
- stw t7,LA_SIZE+(5+40)*4(sp)
-
- stfd ft0,LA_SIZE+(5+42)*4(sp)
- stfd ft1,LA_SIZE+(5+44)*4(sp)
- stfd ft2,LA_SIZE+(5+46)*4(sp)
- stfd ft3,LA_SIZE+(5+48)*4(sp)
- stfd ft4,LA_SIZE+(5+50)*4(sp)
- stfd ft5,LA_SIZE+(5+52)*4(sp)
-#else
- /* save 8 int/8 float arguments */
- SAVE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS+1)
- SAVE_TEMPORARY_REGISTERS(LA_SIZE_IN_POINTERS+1+24)
-#endif
-
- stw itmp1,LA_SIZE+(5+54)*4(sp)
- stw itmp2,LA_SIZE+(5+55)*4(sp)
- stw pv,LA_SIZE+(5+56)*4(sp)
-
- addi a0,sp,LA_SIZE+(5+58)*4 /* pass SP of patcher stub */
- mr a1,pv /* pass PV */
- mr a2,r0 /* pass RA (correct for leafs) */
- bl patcher_wrapper
- stw v0,LA_SIZE+(5+57)*4(sp) /* save return value */
-
-#if defined(__DARWIN__)
- lwz a0,LA_SIZE+(5+0)*4(sp)
- lwz a1,LA_SIZE+(5+1)*4(sp)
- lwz a2,LA_SIZE+(5+2)*4(sp)
- lwz a3,LA_SIZE+(5+3)*4(sp)
- lwz a4,LA_SIZE+(5+4)*4(sp)
- lwz a5,LA_SIZE+(5+5)*4(sp)
- lwz a6,LA_SIZE+(5+6)*4(sp)
- lwz a7,LA_SIZE+(5+7)*4(sp)
-
- lfd fa0,LA_SIZE+(5+8)*4(sp)
- lfd fa1,LA_SIZE+(5+10)*4(sp)
- lfd fa2,LA_SIZE+(5+12)*4(sp)
- lfd fa3,LA_SIZE+(5+14)*4(sp)
- lfd fa4,LA_SIZE+(5+16)*4(sp)
- lfd fa5,LA_SIZE+(5+18)*4(sp)
- lfd fa6,LA_SIZE+(5+20)*4(sp)
- lfd fa7,LA_SIZE+(5+22)*4(sp)
- lfd fa8,LA_SIZE+(5+24)*4(sp)
- lfd fa9,LA_SIZE+(5+26)*4(sp)
- lfd fa10,LA_SIZE+(5+28)*4(sp)
- lfd fa11,LA_SIZE+(5+30)*4(sp)
- lfd fa12,LA_SIZE+(5+32)*4(sp)
-
- lwz t0,LA_SIZE+(5+33)*4(sp)
- lwz t1,LA_SIZE+(5+34)*4(sp)
- lwz t2,LA_SIZE+(5+35)*4(sp)
- lwz t3,LA_SIZE+(5+36)*4(sp)
- lwz t4,LA_SIZE+(5+37)*4(sp)
- lwz t5,LA_SIZE+(5+38)*4(sp)
- lwz t6,LA_SIZE+(5+39)*4(sp)
- lwz t7,LA_SIZE+(5+40)*4(sp)
-
- lfd ft0,LA_SIZE+(5+42)*4(sp)
- lfd ft1,LA_SIZE+(5+44)*4(sp)
- lfd ft2,LA_SIZE+(5+46)*4(sp)
- lfd ft3,LA_SIZE+(5+48)*4(sp)
- lfd ft4,LA_SIZE+(5+50)*4(sp)
- lfd ft5,LA_SIZE+(5+52)*4(sp)
-#else
- /* restore 8 int/8 float arguments */
- RESTORE_ARGUMENT_REGISTERS(LA_SIZE_IN_POINTERS+1)
- RESTORE_TEMPORARY_REGISTERS(LA_SIZE_IN_POINTERS+1+24)
-#endif
-
- lwz itmp1,LA_SIZE+(5+54)*4(sp)
- lwz itmp2,LA_SIZE+(5+55)*4(sp)
- lwz pv,LA_SIZE+(5+56)*4(sp)
- lwz itmp3,LA_SIZE+(5+57)*4(sp) /* restore return value into temp reg.*/
-
- lwz r0,6*4+LA_SIZE+(5+58)*4(sp) /* restore RA */
- mtlr r0
-
- mr. itmp3,itmp3 /* check for an exception */
- bne L_asm_patcher_wrapper_exception
-
- /* get return address (into JIT code) */
- lwz itmp3,5*4+LA_SIZE+(5+58)*4(sp)
-
- /* remove stack frame + patcher stub stack */
- addi sp,sp,8*4+LA_SIZE+(5+58)*4
-
- mtctr itmp3
- bctr /* jump to new patched code */
-
-L_asm_patcher_wrapper_exception:
- mr xptr,itmp3 /* get exception */
- lwz xpc,5*4+LA_SIZE+(5+58)*4(sp)
- addi sp,sp,8*4+LA_SIZE+(5+58)*4
- b L_asm_handle_exception
-
-#if defined(ENABLE_REPLACEMENT)
-
-/* asm_replacement_out *********************************************************
-
- This code is jumped to from the replacement-out stubs that are executed
- when a thread reaches an activated replacement point.
-
- The purpose of asm_replacement_out is to read out the parts of the
- execution state that cannot be accessed from C code, store this state,
- and then call the C function replace_me.
-
- Stack layout:
- 16 start of stack inside method to replace
- 0 rplpoint * info on the replacement point that was reached
-
- NOTE: itmp3 has been clobbered by the replacement-out stub!
-
-*******************************************************************************/
-
-/* 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 sizeexecutionstate_ALIGNED ((sizeexecutionstate + 15) & ~15)
-
-asm_replacement_out:
- /* create stack frame */
- addi sp,sp,-(sizeexecutionstate_ALIGNED + REPLACEMENT_ROOM)
-
- /* save link register */
- mflr itmp3
-
- /* save registers in execution state */
- stw r0 ,( 0*4+offes_intregs)(sp)
- stw r1 ,( 1*4+offes_intregs)(sp)
- stw r2 ,( 2*4+offes_intregs)(sp)
- stw r3 ,( 3*4+offes_intregs)(sp)
- stw r4 ,( 4*4+offes_intregs)(sp)
- stw r5 ,( 5*4+offes_intregs)(sp)
- stw r6 ,( 6*4+offes_intregs)(sp)
- stw r7 ,( 7*4+offes_intregs)(sp)
- stw r8 ,( 8*4+offes_intregs)(sp)
- stw r9 ,( 9*4+offes_intregs)(sp)
- stw r10,(10*4+offes_intregs)(sp)
- stw r11,(11*4+offes_intregs)(sp)
- stw r12,(12*4+offes_intregs)(sp)
- stw r13,(13*4+offes_intregs)(sp)
- stw r14,(14*4+offes_intregs)(sp)
- stw r15,(15*4+offes_intregs)(sp)
- stw r16,(16*4+offes_intregs)(sp) /* link register stored as itmp3 */
- stw r17,(17*4+offes_intregs)(sp)
- stw r18,(18*4+offes_intregs)(sp)
- stw r19,(19*4+offes_intregs)(sp)
- stw r20,(20*4+offes_intregs)(sp)
- stw r21,(21*4+offes_intregs)(sp)
- stw r22,(22*4+offes_intregs)(sp)
- stw r23,(23*4+offes_intregs)(sp)
- stw r24,(24*4+offes_intregs)(sp)
- stw r25,(25*4+offes_intregs)(sp)
- stw r26,(26*4+offes_intregs)(sp)
- stw r27,(27*4+offes_intregs)(sp)
- stw r28,(28*4+offes_intregs)(sp)
- stw r29,(29*4+offes_intregs)(sp)
- stw r30,(30*4+offes_intregs)(sp)
- stw r31,(31*4+offes_intregs)(sp)
-
- stfd fr0 ,( 0*8+offes_fltregs)(sp)
- stfd fr1 ,( 1*8+offes_fltregs)(sp)
- stfd fr2 ,( 2*8+offes_fltregs)(sp)
- stfd fr3 ,( 3*8+offes_fltregs)(sp)
- stfd fr4 ,( 4*8+offes_fltregs)(sp)
- stfd fr5 ,( 5*8+offes_fltregs)(sp)
- stfd fr6 ,( 6*8+offes_fltregs)(sp)
- stfd fr7 ,( 7*8+offes_fltregs)(sp)
- stfd fr8 ,( 8*8+offes_fltregs)(sp)
- stfd fr9 ,( 9*8+offes_fltregs)(sp)
- stfd fr10,(10*8+offes_fltregs)(sp)
- stfd fr11,(11*8+offes_fltregs)(sp)
- stfd fr12,(12*8+offes_fltregs)(sp)
- stfd fr13,(13*8+offes_fltregs)(sp)
- stfd fr14,(14*8+offes_fltregs)(sp)
- stfd fr15,(15*8+offes_fltregs)(sp)
- stfd fr16,(16*8+offes_fltregs)(sp)
- stfd fr17,(17*8+offes_fltregs)(sp)
- stfd fr18,(18*8+offes_fltregs)(sp)
- stfd fr19,(19*8+offes_fltregs)(sp)
- stfd fr20,(20*8+offes_fltregs)(sp)
- stfd fr21,(21*8+offes_fltregs)(sp)
- stfd fr22,(22*8+offes_fltregs)(sp)
- stfd fr23,(23*8+offes_fltregs)(sp)
- stfd fr24,(24*8+offes_fltregs)(sp)
- stfd fr25,(25*8+offes_fltregs)(sp)
- stfd fr26,(26*8+offes_fltregs)(sp)
- stfd fr27,(27*8+offes_fltregs)(sp)
- stfd fr28,(28*8+offes_fltregs)(sp)
- stfd fr29,(29*8+offes_fltregs)(sp)
- stfd fr30,(30*8+offes_fltregs)(sp)
- stfd fr31,(31*8+offes_fltregs)(sp)
-
- /* calculate sp of method */
- addi itmp1,sp,(sizeexecutionstate_ALIGNED + REPLACEMENT_ROOM + 4*4)
- stw itmp1,(offes_sp)(sp)
-
- /* store pv */
- stw pv,(offes_pv)(sp)
-
- /* call replace_me */
- lwz a0,-(4*4)(itmp1) /* arg0: rplpoint * */
- mr a1,sp /* arg1: execution state */
- addi sp,sp,-(LA_SIZE_ALIGNED)
- b replace_me /* call C function replace_me */
-
-/* asm_replacement_in **********************************************************
-
- This code writes the given execution state and jumps to the replacement
- code.
-
- This function never returns!
-
- NOTE: itmp3 is not restored!
-
- C prototype:
- void asm_replacement_in(executionstate *es, replace_safestack_t *st);
-
-*******************************************************************************/
-
-asm_replacement_in:
- /* a0 == executionstate *es */
- /* a1 == replace_safestack_t *st */
-
- /* get arguments */
- mr s1,a1 /* replace_safestack_t *st */
- mr s2,a0 /* executionstate *es == safe stack */
-
- /* switch to the safe stack */
- mr sp,s2
-
- /* reserve linkage area */
- addi sp,sp,-(LA_SIZE_ALIGNED)
-
- /* call replace_build_execution_state(st) */
- mr a0,s1
- bl replace_build_execution_state
-
- /* set new sp */
- lwz sp,(offes_sp)(s2)
-
- /* build stack frame */
- addi sp,sp,-(sizeexecutionstate_ALIGNED)
-
- /* call replace_free_safestack(st,& of allocated executionstate_t) */
- mr a1,sp /* tmpes */
- mr a0,s1 /* st */
- addi sp,sp,-(LA_SIZE_ALIGNED) /* reserve linkage area */
- bl replace_free_safestack
- addi sp,sp,+(LA_SIZE_ALIGNED) /* tear down linkage area */
-
- /* set new pv */
- lwz pv,(offes_pv)(sp)
-
- /* copy registers from execution state */
- lwz r0 ,( 0*4+offes_intregs)(sp)
- /* r1 is sp */
- /* r2 is reserved */
- lwz a0 ,( 3*4+offes_intregs)(sp)
- lwz r4 ,( 4*4+offes_intregs)(sp)
- lwz r5 ,( 5*4+offes_intregs)(sp)
- lwz r6 ,( 6*4+offes_intregs)(sp)
- lwz r7 ,( 7*4+offes_intregs)(sp)
- lwz r8 ,( 8*4+offes_intregs)(sp)
- lwz r9 ,( 9*4+offes_intregs)(sp)
- lwz r10,(10*4+offes_intregs)(sp)
- lwz r11,(11*4+offes_intregs)(sp)
- lwz r12,(12*4+offes_intregs)(sp)
- /* r13 is pv */
- lwz r14,(14*4+offes_intregs)(sp)
- lwz r15,(15*4+offes_intregs)(sp)
- lwz r16,(16*4+offes_intregs)(sp) /* itmp3, later to link register */
- lwz r17,(17*4+offes_intregs)(sp)
- lwz r18,(18*4+offes_intregs)(sp)
- lwz r19,(19*4+offes_intregs)(sp)
- lwz r20,(20*4+offes_intregs)(sp)
- lwz r21,(21*4+offes_intregs)(sp)
- lwz r22,(22*4+offes_intregs)(sp)
- lwz r23,(23*4+offes_intregs)(sp)
- lwz r24,(24*4+offes_intregs)(sp)
- lwz r25,(25*4+offes_intregs)(sp)
- lwz r26,(26*4+offes_intregs)(sp)
- lwz r27,(27*4+offes_intregs)(sp)
- lwz r28,(28*4+offes_intregs)(sp)
- lwz r29,(29*4+offes_intregs)(sp)
- lwz r30,(30*4+offes_intregs)(sp)
- lwz r31,(31*4+offes_intregs)(sp)
-
- lfd fr0 ,( 0*8+offes_fltregs)(sp)
- lfd fr1 ,( 1*8+offes_fltregs)(sp)
- lfd fr2 ,( 2*8+offes_fltregs)(sp)
- lfd fr3 ,( 3*8+offes_fltregs)(sp)
- lfd fr4 ,( 4*8+offes_fltregs)(sp)
- lfd fr5 ,( 5*8+offes_fltregs)(sp)
- lfd fr6 ,( 6*8+offes_fltregs)(sp)
- lfd fr7 ,( 7*8+offes_fltregs)(sp)
- lfd fr8 ,( 8*8+offes_fltregs)(sp)
- lfd fr9 ,( 9*8+offes_fltregs)(sp)
- lfd fr10,(10*8+offes_fltregs)(sp)
- lfd fr11,(11*8+offes_fltregs)(sp)
- lfd fr12,(12*8+offes_fltregs)(sp)
- lfd fr13,(13*8+offes_fltregs)(sp)
- lfd fr14,(14*8+offes_fltregs)(sp)
- lfd fr15,(15*8+offes_fltregs)(sp)
- lfd fr16,(16*8+offes_fltregs)(sp)
- lfd fr17,(17*8+offes_fltregs)(sp)
- lfd fr18,(18*8+offes_fltregs)(sp)
- lfd fr19,(19*8+offes_fltregs)(sp)
- lfd fr20,(20*8+offes_fltregs)(sp)
- lfd fr21,(21*8+offes_fltregs)(sp)
- lfd fr22,(22*8+offes_fltregs)(sp)
- lfd fr23,(23*8+offes_fltregs)(sp)
- lfd fr24,(24*8+offes_fltregs)(sp)
- lfd fr25,(25*8+offes_fltregs)(sp)
- lfd fr26,(26*8+offes_fltregs)(sp)
- lfd fr27,(27*8+offes_fltregs)(sp)
- lfd fr28,(28*8+offes_fltregs)(sp)
- lfd fr29,(29*8+offes_fltregs)(sp)
- lfd fr30,(30*8+offes_fltregs)(sp)
- lfd fr31,(31*8+offes_fltregs)(sp)
-
- /* restore link register */
-
- mtlr itmp3
-
- /* load new pc */
-
- lwz itmp3,offes_pc(sp)
-
- /* remove stack frame */
-
- addi sp,sp,+(sizeexecutionstate_ALIGNED)
-
- /* jump to new code */
-
- mtctr itmp3
- bctr
-
-#endif /* defined(ENABLE_REPLACEMENT) */
-
/*********************************************************************/
asm_cacheflush:
blr
-/* asm_compare_and_swap ********************************************************
-
- XXX
-
-*******************************************************************************/
-
-asm_compare_and_swap:
-1: lwarx a6,r0,a0
- subf. r0,a6,a1
- bne- 2f
- or r0,a2,a2
- stwcx. r0,r0,a0
- bne- 1b
-2:
- mr a0,a6
- blr
-
-
-/* asm_memory_barrier **********************************************************
-
- XXX
-
-*******************************************************************************/
-
-asm_memory_barrier:
- sync
- blr
-
-
-asm_getclassvalues_atomic:
-_crit_restart:
-_crit_begin:
- lwz a3,offbaseval(a0)
- lwz a4,offdiffval(a0)
- lwz a5,offbaseval(a1)
-_crit_end:
- stw a3,offcast_super_baseval(a2)
- stw a4,offcast_super_diffval(a2)
- stw a5,offcast_sub_baseval(a2)
- blr
-
- .data
-
-asm_criticalsections:
-#if defined(ENABLE_THREADS)
- .long _crit_begin
- .long _crit_end
- .long _crit_restart
-#endif
- .long 0
-
-
#if defined(__DARWIN__)
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
.align 2
-L_md_codegen_get_pv_from_pc$stub:
- .indirect_symbol _md_codegen_get_pv_from_pc
+L_md_asm_codegen_get_pv_from_pc$stub:
+ .indirect_symbol _md_asm_codegen_get_pv_from_pc
mflr r0
- bcl 20,31,L00$_md_codegen_get_pv_from_pc
-L00$_md_codegen_get_pv_from_pc:
+ bcl 20,31,L00$_md_asm_codegen_get_pv_from_pc
+L00$_md_asm_codegen_get_pv_from_pc:
mflr r11
- addis r11,r11,ha16(L_md_codegen_get_pv_from_pc$lazy_ptr - L00$_md_codegen_get_pv_from_pc)
+ addis r11,r11,ha16(L_md_asm_codegen_get_pv_from_pc$lazy_ptr - L00$_md_asm_codegen_get_pv_from_pc)
mtlr r0
- lwzu r12,lo16(L_md_codegen_get_pv_from_pc$lazy_ptr - L00$_md_codegen_get_pv_from_pc)(r11)
+ lwzu r12,lo16(L_md_asm_codegen_get_pv_from_pc$lazy_ptr - L00$_md_asm_codegen_get_pv_from_pc)(r11)
mtctr r12
bctr
.data
.lazy_symbol_pointer
-L_md_codegen_get_pv_from_pc$lazy_ptr:
- .indirect_symbol _md_codegen_get_pv_from_pc
+L_md_asm_codegen_get_pv_from_pc$lazy_ptr:
+ .indirect_symbol _md_asm_codegen_get_pv_from_pc
.long dyld_stub_binding_helper
.long dyld_stub_binding_helper
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_stacktrace_create_extern_stackframeinfo$stub:
- .indirect_symbol _stacktrace_create_extern_stackframeinfo
- mflr r0
- bcl 20,31,L00$_stacktrace_create_extern_stackframeinfo
-L00$_stacktrace_create_extern_stackframeinfo:
- mflr r11
- addis r11,r11,ha16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)
- mtlr r0
- lwzu r12,lo16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_stacktrace_create_extern_stackframeinfo$lazy_ptr:
- .indirect_symbol _stacktrace_create_extern_stackframeinfo
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_jit_asm_compile$stub:
- .indirect_symbol _jit_asm_compile
- mflr r0
- bcl 20,31,L00$_jit_asm_compile
-L00$_jit_asm_compile:
- mflr r11
- addis r11,r11,ha16(L_jit_asm_compile$lazy_ptr - L00$_jit_asm_compile)
- mtlr r0
- lwzu r12,lo16(L_jit_asm_compile$lazy_ptr - L00$_jit_asm_compile)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_jit_asm_compile$lazy_ptr:
- .indirect_symbol _jit_asm_compile
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_stacktrace_remove_stackframeinfo$stub:
- .indirect_symbol _stacktrace_remove_stackframeinfo
- mflr r0
- bcl 20,31,L00$_stacktrace_remove_stackframeinfo
-L00$_stacktrace_remove_stackframeinfo:
- mflr r11
- addis r11,r11,ha16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)
- mtlr r0
- lwzu r12,lo16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_stacktrace_remove_stackframeinfo$lazy_ptr:
- .indirect_symbol _stacktrace_remove_stackframeinfo
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_exceptions_get_and_clear_exception$stub:
- .indirect_symbol _exceptions_get_and_clear_exception
- mflr r0
- bcl 20,31,L00$_exceptions_get_and_clear_exception
-L00$_exceptions_get_and_clear_exception:
- mflr r11
- addis r11,r11,ha16(L_exceptions_get_and_clear_exception$lazy_ptr - L00$_exceptions_get_and_clear_exception)
- mtlr r0
- lwzu r12,lo16(L_exceptions_get_and_clear_exception$lazy_ptr - L00$_exceptions_get_and_clear_exception)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_exceptions_get_and_clear_exception$lazy_ptr:
- .indirect_symbol _exceptions_get_and_clear_exception
- .long dyld_stub_binding_helper
-
-
.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
.align 2
L_exceptions_asm_new_abstractmethoderror$stub:
.indirect_symbol _exceptions_asm_new_abstractmethoderror
.long dyld_stub_binding_helper
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_patcher_wrapper$stub:
- .indirect_symbol _patcher_wrapper
- mflr r0
- bcl 20,31,L00$_patcher_wrapper
-L00$_patcher_wrapper:
- mflr r11
- addis r11,r11,ha16(L_patcher_wrapper$lazy_ptr - L00$_patcher_wrapper)
- mtlr r0
- lwzu r12,lo16(L_patcher_wrapper$lazy_ptr - L00$_patcher_wrapper)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_patcher_wrapper$lazy_ptr:
- .indirect_symbol _patcher_wrapper
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_replace_me$stub:
- .indirect_symbol _replace_me
- mflr r0
- bcl 20,31,L00$_replace_me
-L00$_replace_me:
- mflr r11
- addis r11,r11,ha16(L_replace_me$lazy_ptr - L00$_replace_me)
- mtlr r0
- lwzu r12,lo16(L_replace_me$lazy_ptr - L00$_replace_me)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_replace_me$lazy_ptr:
- .indirect_symbol _replace_me
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_replace_build_execution_state$stub:
- .indirect_symbol _replace_build_execution_state
- mflr r0
- bcl 20,31,L00$_replace_build_execution_state
-L00$_replace_build_execution_state:
- mflr r11
- addis r11,r11,ha16(L_replace_build_execution_state$lazy_ptr - L00$_replace_build_execution_state)
- mtlr r0
- lwzu r12,lo16(L_replace_build_execution_state$lazy_ptr - L00$_replace_build_execution_state)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_replace_build_execution_state$lazy_ptr:
- .indirect_symbol _replace_build_execution_state
- .long dyld_stub_binding_helper
-
-
-.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
- .align 2
-L_replace_free_safestack$stub:
- .indirect_symbol _replace_free_safestack
- mflr r0
- bcl 20,31,L00$_replace_free_safestack
-L00$_replace_free_safestack:
- mflr r11
- addis r11,r11,ha16(L_replace_free_safestack$lazy_ptr - L00$_replace_free_safestack)
- mtlr r0
- lwzu r12,lo16(L_replace_free_safestack$lazy_ptr - L00$_replace_free_safestack)(r11)
- mtctr r12
- bctr
-.data
-.lazy_symbol_pointer
-L_replace_free_safestack$lazy_ptr:
- .indirect_symbol _replace_free_safestack
- .long dyld_stub_binding_helper
-
#endif /* defined(__DARWIN__) */
-/* Disable exec-stacks, required for Gentoo ***********************************/
+/* disable exec-stacks ********************************************************/
-#if defined(__GCC__) && defined(__ELF__)
- .section .note.GNU-stack,"",@progbits
+#if defined(__linux__) && defined(__ELF__)
+ .section .note.GNU-stack,"",%progbits
#endif