* Merged in twisti-branch.
[cacao.git] / src / vm / jit / asmpart.h
index bf858275aeece66ab7d2c8dc31168eab8a70bfc1..e1e614ccf8e00507c91b8690ff41ec1e1ea46f5a 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 4619 2006-03-15 20:42:00Z edwin $
+   $Id: asmpart.h 7577 2007-03-25 20:55:06Z twisti $
 
 */
 
 #include "config.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"
+
 #include "vm/jit/replace.h"
 
+#include "vmcore/linker.h"
+
 
 /* some macros ****************************************************************/
 
 #endif /* defined(ENABLE_JIT) */
 
 
-typedef struct castinfo castinfo;
-
-struct castinfo {
-       s4 super_baseval;
-       s4 super_diffval;
-       s4 sub_baseval;
-};
-
-
 /* 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.
@@ -110,7 +85,6 @@ void asm_sync_instruction_cache(void);
 */
 void asm_call_jit_compiler(void);
 
-
 #if defined(ENABLE_JIT)
 java_objectheader *asm_vm_call_method(methodinfo *m, s4 vmargscount,
                                                                          vm_arg *vmargs);
@@ -119,6 +93,13 @@ 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);
+
+void   asm_vm_call_method_exception_handler(void);
+
+/* asm_vm_call_method_end is a dummy symbol marking the end of the asm_vm_call_method
+ * function and is used to insert the coderange into the avl tree.
+ */
+void   asm_vm_call_method_end(void);
 #endif
 
 #if defined(ENABLE_INTRP)
@@ -135,13 +116,6 @@ double intrp_asm_vm_call_method_double(methodinfo *m, s4 vmargscount,
                                                                           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_xhandler2(void);
-#endif
-
 /* exception handling functions */
 
 #if defined(ENABLE_JIT)
@@ -149,20 +123,31 @@ void asm_handle_exception(void);
 void asm_handle_nat_exception(void);
 #endif
 
+/* stub for throwing AbstractMethodError's */
+#if defined(ENABLE_JIT)
+void asm_abstractmethoderror(void);
+#endif
+
+#if defined(ENABLE_INTRP)
+void intrp_asm_abstractmethoderror(void);
+#endif
+
 /* wrapper for code patching functions */
-void asm_wrapper_patcher(void);
+void asm_patcher_wrapper(void);
 
 /* functions for on-stack replacement */
+#if defined(ENABLE_REPLACEMENT)
 void asm_replacement_out(void);
-void asm_replacement_in(executionstate *es);
+void asm_replacement_in(executionstate_t *es, replace_safestack_t *st);
+#endif
 
-void *asm_switchstackandcall(void *stack, void *func, void **stacktopsave, void * p);
+long asm_compare_and_swap(volatile long *p, long oldval, long newval);
+void asm_memory_barrier(void);
 
-#if defined(USE_THREADS) && defined(NATIVE_THREADS)
-extern threadcritnode asm_criticalsections;
+#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
@@ -171,14 +156,10 @@ void asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
 void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
 #endif
 
+/* cache flush function */
+void asm_cacheflush(u1 *addr, s4 nbytes);
 
-#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
-
-/* 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 */