* src/vm/exceptions.c (exceptions_handle_exception): Use
[cacao.git] / src / vm / jit / asmpart.h
index a64e09b7b03c10b41adc5b9f0437e53fac7ce5d2..cb549c55f6c56242366b1853f8c94623cba42c02 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/jit/asmpart.h - prototypes for machine specfic functions
 
-   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: Reinhard Grafl
-            Andreas Krall
-
-   Changes: Christian Thalinger
-            Edwin Steiner
-
-   $Id: asmpart.h 5950 2006-11-11 17:08:14Z edwin $
-
 */
 
 
 #define _ASMPART_H
 
 #include "config.h"
-#include "vm/types.h"
 
+#include <stdint.h>
+
+#include "vm/types.h"
 
 #if defined(ENABLE_THREADS)
-# include "threads/native/threads.h"
-# include "threads/native/critical.h"
+# include "threads/critical.h"
 #endif
 
 #include "vm/global.h"
-#include "vm/linker.h"
-#include "vm/resolve.h"
 #include "vm/vm.h"
-#include "vm/jit/replace.h"
-#include "vm/jit/stacktrace.h"
-
-
-/* some macros ****************************************************************/
-
-#if defined(ENABLE_JIT)
-# if defined(ENABLE_INTRP)
-
-#  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
-    do { \
-        if (opt_intrp) \
-            intrp_asm_getclassvalues_atomic((super), (sub), (out)); \
-        else \
-            asm_getclassvalues_atomic((super), (sub), (out)); \
-    } while (0)
-
-# else /* defined(ENABLE_INTRP) */
-
-#  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
-    asm_getclassvalues_atomic((super), (sub), (out))
-
-# endif /* defined(ENABLE_INTRP) */
-
-#else /* defined(ENABLE_JIT) */
 
-#  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
-    intrp_asm_getclassvalues_atomic((super), (sub), (out))
-
-#endif /* defined(ENABLE_JIT) */
-
-
-typedef struct castinfo castinfo;
-
-struct castinfo {
-       s4 super_baseval;
-       s4 super_diffval;
-       s4 sub_baseval;
-};
+#include "vmcore/linker.h"
 
 
 /* function prototypes ********************************************************/
@@ -97,23 +49,25 @@ struct castinfo {
 /* machine dependent initialization */
 s4   asm_md_init(void);
 
+#if !defined(JIT_COMPILER_VIA_SIGNAL)
 /* 
    invokes the compiler for untranslated JavaVM methods.
    Register R0 contains a pointer to the method info structure
    (prepared by createcompilerstub).
 */
 void asm_call_jit_compiler(void);
+#endif
 
 #if defined(ENABLE_JIT)
-java_objectheader *asm_vm_call_method(methodinfo *m, s4 vmargscount,
-                                                                         vm_arg *vmargs);
+java_object_t *asm_vm_call_method(void *pv, uint64_t *array, int32_t stackargs);
+int32_t        asm_vm_call_method_int(void *pv, uint64_t *array, int32_t stackargs);
 
-s4     asm_vm_call_method_int(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
-s8     asm_vm_call_method_long(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
-float  asm_vm_call_method_float(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
-double asm_vm_call_method_double(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
+int64_t        asm_vm_call_method_long(void *pv, uint64_t *array, int32_t stackargs);
+float          asm_vm_call_method_float(void *pv, uint64_t *array, int32_t stackargs);
+double         asm_vm_call_method_double(void *pv, uint64_t *array, int32_t stackargs);
 
 void   asm_vm_call_method_exception_handler(void);
+void   asm_vm_call_method_end(void);
 #endif
 
 #if defined(ENABLE_INTRP)
@@ -149,21 +103,8 @@ void intrp_asm_abstractmethoderror(void);
 /* wrapper for code patching functions */
 void asm_patcher_wrapper(void);
 
-/* functions for on-stack replacement */
-void asm_replacement_out(void);
-void asm_replacement_in(executionstate_t *es);
-
-#if defined(ENABLE_THREADS)
-extern critical_section_node_t asm_criticalsections;
-#endif
-
-#if defined(ENABLE_JIT)
-void asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
-#endif
-
-#if defined(ENABLE_INTRP)
-void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
-#endif
+long asm_compare_and_swap(volatile long *p, long oldval, long newval);
+void asm_memory_barrier(void);
 
 /* cache flush function */
 void asm_cacheflush(u1 *addr, s4 nbytes);