* Removed all Id tags.
[cacao.git] / src / vm / jit / asmpart.h
index f241ed21016d0522934ff7a5f96509997bcd2cf0..e1ad0480786e0522c8f556df2769961a1db7a0ac 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
-
-   $Id: asmpart.h 4553 2006-03-04 17:19:03Z twisti $
-
 */
 
 
 #define _ASMPART_H
 
 #include "config.h"
-#include "vm/types.h"
 
+#include <stdint.h>
+
+#include "vm/types.h"
 
-#if defined(USE_THREADS)
-# if defined(NATIVE_THREADS)
-#  include "threads/native/threads.h"
-# else
-#  include "threads/green/threads.h"
-# endif
+#if defined(ENABLE_THREADS)
+# include "threads/critical.h"
 #endif
 
 #include "vm/global.h"
-#include "vm/linker.h"
-#include "vm/resolve.h"
 #include "vm/vm.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 ********************************************************/
 
 /* machine dependent initialization */
-s4 asm_md_init(void);
-
-void asm_sync_instruction_cache(void);
-
+s4   asm_md_init(void);
 
 /* 
    invokes the compiler for untranslated JavaVM methods.
@@ -108,67 +56,30 @@ void asm_sync_instruction_cache(void);
 */
 void asm_call_jit_compiler(void);
 
-
-/* 
-   This function calls a Java-method (which possibly needs compilation)
-   with up to 4 parameters. This function calls a Java-method (which
-   possibly needs compilation) with up to 4 parameters.
-*/
-
 #if defined(ENABLE_JIT)
-java_objectheader *asm_calljavafunction(methodinfo *m,
-                                                                               void *arg1, void *arg2,
-                                                                               void *arg3, void *arg4);
-
-s4 asm_calljavafunction_int(methodinfo *m,
-                                                       void *arg1, void *arg2,
-                                                       void *arg3, void *arg4);
-#endif
+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);
 
-#if defined(ENABLE_INTRP)
-java_objectheader *intrp_asm_calljavafunction(methodinfo *m,
-                                                                                         void *arg1, void *arg2,
-                                                                                         void *arg3, void *arg4);
+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);
 
-s4 intrp_asm_calljavafunction_int(methodinfo *m,
-                                                                 void *arg1, void *arg2,
-                                                                 void *arg3, void *arg4);
-#endif
-
-
-/* 
-   This function calls a Java-method (which possibly needs compilation)
-   with up to 4 parameters. This function calls a Java-method (which
-   possibly needs compilation) with up to 4 parameters. 
-   also supports a return value
-*/
-
-#if defined(ENABLE_JIT)
-java_objectheader *asm_calljavafunction2(methodinfo *m, u4 count,
-                                                                                vm_arg *vmargs);
-
-s4     asm_calljavafunction2int(methodinfo *m, u4 count, vm_arg *vmargs);
-s8     asm_calljavafunction2long(methodinfo *m, u4 count, vm_arg *vmargs);
-float  asm_calljavafunction2float(methodinfo *m, u4 count, vm_arg *vmargs);
-double asm_calljavafunction2double(methodinfo *m, u4 count, vm_arg *vmargs);
+void   asm_vm_call_method_exception_handler(void);
+void   asm_vm_call_method_end(void);
 #endif
 
 #if defined(ENABLE_INTRP)
-java_objectheader *intrp_asm_calljavafunction2(methodinfo *m, u4 count,
-                                                                                          vm_arg *vmargs);
-
-s4     intrp_asm_calljavafunction2int(methodinfo *m, u4 count, vm_arg *vmargs);
-s8     intrp_asm_calljavafunction2long(methodinfo *m, u4 count, vm_arg *vmargs);
-float  intrp_asm_calljavafunction2float(methodinfo *m, u4 count, vm_arg *vmargs);
-double intrp_asm_calljavafunction2double(methodinfo *m, u4 count, vm_arg *vmargs);
-#endif
-
-
-/* We need these two labels in codegen.inc to add the asm_calljavafunction*'s
-   into the methodtable */
-#if defined(__I386__) || defined(__X86_64__)
-void calljava_xhandler(void);
-void calljava_xhandler2(void);
+java_objectheader *intrp_asm_vm_call_method(methodinfo *m, s4 vmargscount,
+                                                                                       vm_arg *vmargs);
+
+s4     intrp_asm_vm_call_method_int(methodinfo *m, s4 vmargscount,
+                                                                       vm_arg *vmargs);
+s8     intrp_asm_vm_call_method_long(methodinfo *m, s4 vmargscount,
+                                                                        vm_arg *vmargs);
+float  intrp_asm_vm_call_method_float(methodinfo *m, s4 vmargscount,
+                                                                         vm_arg *vmargs);
+double intrp_asm_vm_call_method_double(methodinfo *m, s4 vmargscount,
+                                                                          vm_arg *vmargs);
 #endif
 
 /* exception handling functions */
@@ -178,32 +89,25 @@ void asm_handle_exception(void);
 void asm_handle_nat_exception(void);
 #endif
 
-/* wrapper for code patching functions */
-void asm_wrapper_patcher(void);
-
-void *asm_switchstackandcall(void *stack, void *func, void **stacktopsave, void * p);
-
-#if defined(USE_THREADS) && defined(NATIVE_THREADS)
-extern threadcritnode asm_criticalsections;
-#endif
-
-
+/* stub for throwing AbstractMethodError's */
 #if defined(ENABLE_JIT)
-void asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
+void asm_abstractmethoderror(void);
 #endif
 
 #if defined(ENABLE_INTRP)
-void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
+void intrp_asm_abstractmethoderror(void);
 #endif
 
+/* wrapper for code patching functions */
+void asm_patcher_wrapper(void);
 
-#if defined(USE_THREADS) && !defined(NATIVE_THREADS)
-void asm_perform_threadswitch(u1 **from, u1 **to, u1 **stackTop);
-u1*  asm_initialize_thread_stack(void *func, u1 *stack);
-#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);
 
-/* may be required on some architectures (at least for PowerPC and ARM) */
-void asm_cacheflush(void *p, s4 size);
+u8 asm_get_cycle_count(void);
 
 #endif /* _ASMPART_H */
 
@@ -219,4 +123,5 @@ void asm_cacheflush(void *p, s4 size);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */