/* src/vm/jit/x86_64/asmpart.S - Java-C interface functions for x86_64
- Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
- C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
- E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
- J. Wenninger, Institut f. Computersprachen - TU Wien
+ Copyright (C) 1996-2012
+ CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
.globl asm_vm_call_method_exception_handler
.globl asm_vm_call_method_end
- .globl asm_call_jit_compiler
-
.globl asm_handle_exception
.globl asm_handle_nat_exception
.globl asm_builtin_d2i
.globl asm_builtin_d2l
- .globl asm_compare_and_swap
- .globl asm_memory_barrier
-
/********************* function asm_calljavafunction ***************************
* *
.align 8
- .quad 0 /* catch type all */
- .quad 0 /* handler pc */
- .quad 0 /* end pc */
- .quad 0 /* start pc */
- .long 1 /* extable size */
- .long 0 /* ALIGNMENT PADDING */
- .quad 0 /* line number table start */
- .quad 0 /* line number table size */
- .long 0 /* ALIGNMENT PADDING */
.long 0 /* fltsave */
.long 0 /* intsave */
.long 0 /* isleaf */
- .long 0 /* IsSync */
.long 0 /* frame size */
.quad 0 /* codeinfo pointer */
mov (0*8+256)(mptr),itmp3 /* load PV */
call *itmp3
+L_asm_vm_call_method_return:
mov s0,sp /* restore SP */
-L_asm_vm_call_method_return:
mov 0*8(sp),%rbx /* restore callee saved registers */
mov 1*8(sp),s0
mov 2*8(sp),s1
nop
-/****************** function asm_call_jit_compiler *****************************
-* *
-* invokes the compiler for untranslated JavaVM methods. *
-* *
-* Register R0 contains a pointer to the method info structure (prepared *
-* by createcompilerstub). Using the return address in R26 and the *
-* offset in the LDA instruction or using the value in methodptr R28 the *
-* patching address for storing the method address can be computed: *
-* *
-* method address was either loaded using *
-* *
-* i386_mov_imm_reg(a, REG_ITMP2) ; invokestatic/special *
-* i386_call_reg(REG_ITMP2) *
-* *
-* or *
-* *
-* i386_mov_membase_reg(REG_SP, 0, REG_ITMP2) ; invokevirtual/interface *
-* i386_mov_membase_reg(REG_ITMP2, OFFSET(, vftbl), REG_ITMP3) *
-* i386_mov_membase_reg(REG_ITMP3, OFFSET(vftbl, table[0]) + \ *
-* sizeof(methodptr) * m->vftblindex, REG_ITMP1) *
-* i386_call_reg(REG_ITMP1) *
-* *
-* in the static case the method pointer can be computed using the *
-* return address and the lda function following the jmp instruction *
-* *
-*******************************************************************************/
-
-asm_call_jit_compiler:
-L_asm_call_jit_compiler: /* required for PIC code */
- sub $(ARG_CNT+1)*8,sp /* +1: keep stack 16-byte aligned */
-
- SAVE_ARGUMENT_REGISTERS(0)
-
- mov itmp1,a0 /* pass methodinfo pointer */
- mov mptr,a1 /* pass method pointer */
- mov sp,a2 /* pass java sp */
- add $(1+ARG_CNT+1)*8,a2
- mov (ARG_CNT+1)*8(sp),a3 /* pass ra to java function */
- call jit_asm_compile@PLT
-
- RESTORE_ARGUMENT_REGISTERS(0)
-
- add $(ARG_CNT+1)*8,sp /* remove stack frame */
-
- test v0,v0 /* check for exception */
- je L_asm_call_jit_compiler_exception
-
- jmp *v0 /* ...and now call the new method */
-
-L_asm_call_jit_compiler_exception:
- call exceptions_get_and_clear_exception@PLT
- pop xpc /* delete return address */
- sub $3,xpc /* faulting address is ra - 3 */
- jmp L_asm_handle_exception
-
-
/* asm_handle_exception ********************************************************
* *
* This function handles an exception. It does not use the usual calling *
mov t0,4*8(sp) /* save maybe-leaf flag */
mov xpc,a0 /* exception pc */
- call codegen_get_pv_from_pc@PLT
+ call methodtree_find@PLT
mov v0,2*8(sp) /* save data segment pointer */
mov 0*8(sp),a0 /* pass exception pointer */
*******************************************************************************/
asm_abstractmethoderror:
+ sub $8,sp /* keep stack aligned */
mov sp,a0 /* pass java sp */
- add $1*8,a0
- mov 0*8(sp),a1 /* pass exception address */
+ add $2*8,a0
+ mov 1*8(sp),a1 /* pass exception address */
sub $3,a1
call exceptions_asm_new_abstractmethoderror@PLT
/* exception pointer is return value */
+ pop xpc /* dummy pop */
pop xpc /* get exception address */
sub $3,xpc /* exception address is ra - 3 */
jmp L_asm_handle_exception
ret
-/* asm_compare_and_swap ********************************************************
-
- Does an atomic compare and swap. Required for the lock
- implementation.
-
-*******************************************************************************/
-
-asm_compare_and_swap:
- mov a1,v0 /* v0 is %rax */
- lock cmpxchg a2,(a0)
- ret
-
-
-/* asm_memory_barrier **********************************************************
-
- A memory barrier for the Java Memory Model.
-
-*******************************************************************************/
-
-asm_memory_barrier:
- mfence
- ret
-
-
/* disable exec-stacks ********************************************************/
#if defined(__linux__) && defined(__ELF__)