.globl asm_compare_and_swap
.globl asm_memory_barrier
- .globl asm_get_cycle_count
+#if defined(ENABLE_ESCAPE_CHECK)
+ .globl asm_escape_check
+#endif
/* asm_md_init *****************************************************************
asm_vm_call_method_float:
asm_vm_call_method_double:
push bp
- mov sp,bp /* save stackptr */
+ mov sp,bp /* save stack pointer */
sub $(4*4),sp /* create stackframe */
and $0xfffffff0,sp /* align stack to 16-byte */
ret
asm_vm_call_method_exception_handler:
+#if defined(ENABLE_PIC_ASM)
+ sub $12, %esp
+ push %ebx
+#endif
push xptr /* pass exception pointer */
+#if defined(ENABLE_PIC_ASM)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call builtin_throw_exception@PLT
+ pop %ebx
+ add $12, %esp
+#else
call builtin_throw_exception
+#endif
add $4,sp
asm_vm_call_method_end:
jmp L_asm_vm_call_method_return
mov t0,8*4(sp) /* save maybe-leaf flag */
mov xpc,0*4(sp) /* pass exception pc */
+#if defined(ENABLE_PIC_ASM)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call methodtree_find@PLT
+#else
call methodtree_find
+#endif
mov v0,6*4(sp) /* save data segment pointer */
mov 4*4(sp),itmp3 /* pass exception pointer */
mov v0,2*4(sp) /* pass data segment pointer */
mov 7*4(sp),itmp3 /* pass Java stack pointer */
mov itmp3,3*4(sp)
+#if defined(ENABLE_PIC_ASM)
+ /* GOT still in %ebx */
+ call exceptions_handle_exception@PLT
+#else
call exceptions_handle_exception
+#endif
test v0,v0
jz L_asm_handle_exception_not_catched
mov 3*4(sp),itmp2 /* pass exception address */
sub $2,itmp2
mov itmp2,1*4(sp)
+#if defined(ENABLE_PIC_ASM)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call exceptions_asm_new_abstractmethoderror@PLT
+#else
call exceptions_asm_new_abstractmethoderror
+#endif
/* exception pointer is return value */
add $(3*4),sp /* remove stack frame */
* *
*******************************************************************************/
+#if defined(ENABLE_PIC_ASM)
+.GETPC:
+ mov (%esp), %ebx
+ ret
+#endif
+
asm_builtin_f2i:
sub $(3*4),%esp
+#if defined(ENABLE_PIC_ASM)
+ sub $12, %esp
+ push %ebx
+ fsts (%esp)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call builtin_f2i@PLT
+ pop %ebx
+ add $12, %esp
+#else
fsts (%esp)
call builtin_f2i
+#endif
add $(3*4),%esp
ret
asm_builtin_d2i:
sub $(3*4),%esp
+#if defined(ENABLE_PIC_ASM)
+ sub $12, %esp
+ push %ebx
+ fstl (%esp)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call builtin_d2i@PLT
+ pop %ebx
+ add $12, %esp
+#else
fstl (%esp)
call builtin_d2i
+#endif
add $(3*4),%esp
ret
asm_builtin_f2l:
sub $(3*4),%esp
+#if defined(ENABLE_PIC_ASM)
+ sub $12, %esp
+ push %ebx
+ fsts (%esp)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call builtin_f2l@PLT
+ pop %ebx
+ add $12, %esp
+#else
fsts (%esp)
call builtin_f2l
+#endif
add $(3*4),%esp
ret
asm_builtin_d2l:
sub $(3*4),%esp
+#if defined(ENABLE_PIC_ASM)
+ sub $12, %esp
+ push %ebx
+ fstl (%esp)
+ call .GETPC
+ add $_GLOBAL_OFFSET_TABLE_, %ebx
+ call builtin_d2l@PLT
+ pop %ebx
+ add $12, %esp
+#else
fstl (%esp)
call builtin_d2l
+#endif
add $(3*4),%esp
ret
lock; add $0,0(sp)
ret
-
-/* asm_get_cycle_count *********************************************************
- Get the current time-stamp counter from the CPU.
+#if defined(ENABLE_ESCAPE_CHECK)
+asm_escape_check:
+ sub $24,%esp
-*******************************************************************************/
+ mov t0, 4(%esp)
+ mov itmp1, 8(%esp)
+ mov itmp2, 12(%esp)
+ mov itmp3, 16(%esp)
+
+ mov 28(%esp), itmp1
+ mov itmp1, (%esp)
+
+ call escape_analysis_escape_check
-asm_get_cycle_count:
- rdtsc
+ mov 4(%esp), t0
+ mov 8(%esp), itmp1
+ mov 12(%esp), itmp2
+ mov 16(%esp), itmp3
+
+ add $24,sp
ret
+#endif
/* disable exec-stacks ********************************************************/
.section .note.GNU-stack,"",%progbits
#endif
-
/*
* These are local overrides for various environment variables in Emacs.
* Please do not remove this and leave it at the end of the file, where