* Merged in twisti-branch.
[cacao.git] / src / vm / jit / powerpc / asmpart.S
index f73b9aada66a48a953fc8c463ba5af3105ee37d1..6b4dd2d6d777910d417a7ba6275c4b4a00eeaf09 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/powerpc/asmpart.S - Java-C interface functions for PowerPC
                
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   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
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Andreas Krall
-            Reinhard Grafl
-            Stefan Ring
-
-   Changes: Christian Thalinger
-            Edwin Steiner
-
-   $Id: asmpart.S 6154 2006-12-08 00:16:21Z edwin $
+   $Id: asmpart.S 7454 2007-03-05 15:40:48Z tbfg $
 
 */
 
@@ -60,6 +51,7 @@
        .globl asm_vm_call_method_double
 
        .globl asm_vm_call_method_exception_handler
+       .globl asm_vm_call_method_end
 
        .globl asm_call_jit_compiler
 
 
        .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
 
@@ -682,6 +680,8 @@ L_handle_fda12:
        b       L_register_copy
 #endif
 
+asm_vm_call_method_end:
+       nop
 
 /* asm_call_jit_compiler *******************************************************
 
@@ -1124,6 +1124,7 @@ L_asm_patcher_wrapper_exception:
        addi    sp,sp,8*4+LA_SIZE+(5+58)*4
        b       L_asm_handle_exception
 
+#if defined(ENABLE_REPLACEMENT)
 
 /* asm_replacement_out *********************************************************
 
@@ -1367,6 +1368,8 @@ asm_replacement_in:
        mtctr   itmp3
        bctr
 
+#endif /* defined(ENABLE_REPLACEMENT) */
+
 /*********************************************************************/
 
 asm_cacheflush:
@@ -1395,6 +1398,35 @@ 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:
@@ -1619,6 +1651,46 @@ 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__) */