* src/vm/vm.c (vm_call_method_intern): Removed.
[cacao.git] / src / vm / jit / asmpart.h
1 /* src/vm/jit/asmpart.h - prototypes for machine specfic functions
2
3    Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
4    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6    J. Wenninger, Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23    02110-1301, USA.
24
25    Contact: cacao@cacaojvm.org
26
27    Authors: Reinhard Grafl
28             Andreas Krall
29
30    Changes: Christian Thalinger
31
32    $Id: asmpart.h 4559 2006-03-05 23:24:50Z twisti $
33
34 */
35
36
37 #ifndef _ASMPART_H
38 #define _ASMPART_H
39
40 #include "config.h"
41 #include "vm/types.h"
42
43
44 #if defined(USE_THREADS)
45 # if defined(NATIVE_THREADS)
46 #  include "threads/native/threads.h"
47 # else
48 #  include "threads/green/threads.h"
49 # endif
50 #endif
51
52 #include "vm/global.h"
53 #include "vm/linker.h"
54 #include "vm/resolve.h"
55 #include "vm/vm.h"
56 #include "vm/jit/stacktrace.h"
57
58
59 /* some macros ****************************************************************/
60
61 #if defined(ENABLE_JIT)
62 # if defined(ENABLE_INTRP)
63
64 #  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
65     do { \
66         if (opt_intrp) \
67             intrp_asm_getclassvalues_atomic((super), (sub), (out)); \
68         else \
69             asm_getclassvalues_atomic((super), (sub), (out)); \
70     } while (0)
71
72 # else /* defined(ENABLE_INTRP) */
73
74 #  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
75     asm_getclassvalues_atomic((super), (sub), (out))
76
77 # endif /* defined(ENABLE_INTRP) */
78
79 #else /* defined(ENABLE_JIT) */
80
81 #  define ASM_GETCLASSVALUES_ATOMIC(super,sub,out) \
82     intrp_asm_getclassvalues_atomic((super), (sub), (out))
83
84 #endif /* defined(ENABLE_JIT) */
85
86
87 typedef struct castinfo castinfo;
88
89 struct castinfo {
90         s4 super_baseval;
91         s4 super_diffval;
92         s4 sub_baseval;
93 };
94
95
96 /* function prototypes ********************************************************/
97
98 /* machine dependent initialization */
99 s4 asm_md_init(void);
100
101 void asm_sync_instruction_cache(void);
102
103
104 /* 
105    invokes the compiler for untranslated JavaVM methods.
106    Register R0 contains a pointer to the method info structure
107    (prepared by createcompilerstub).
108 */
109 void asm_call_jit_compiler(void);
110
111
112 #if defined(ENABLE_JIT)
113 java_objectheader *asm_vm_call_method(methodinfo *m, s4 vmargscount,
114                                                                           vm_arg *vmargs);
115
116 s4     asm_vm_call_method_int(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
117 s8     asm_vm_call_method_long(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
118 float  asm_vm_call_method_float(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
119 double asm_vm_call_method_double(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
120 #endif
121
122 #if defined(ENABLE_INTRP)
123 java_objectheader *intrp_asm_vm_call_method(methodinfo *m, s4 vmargscount,
124                                                                                         vm_arg *vmargs);
125
126 s4     intrp_asm_vm_call_method_int(methodinfo *m, s4 vmargscount,
127                                                                         vm_arg *vmargs);
128 s8     intrp_asm_vm_call_method_long(methodinfo *m, s4 vmargscount,
129                                                                          vm_arg *vmargs);
130 float  intrp_asm_vm_call_method_float(methodinfo *m, s4 vmargscount,
131                                                                           vm_arg *vmargs);
132 double intrp_asm_vm_call_method_double(methodinfo *m, s4 vmargscount,
133                                                                            vm_arg *vmargs);
134 #endif
135
136
137 /* We need these two labels in codegen.inc to add the asm_calljavafunction*'s
138    into the methodtable */
139 #if defined(__I386__) || defined(__X86_64__)
140 void calljava_xhandler2(void);
141 #endif
142
143 /* exception handling functions */
144
145 #if defined(ENABLE_JIT)
146 void asm_handle_exception(void);
147 void asm_handle_nat_exception(void);
148 #endif
149
150 /* wrapper for code patching functions */
151 void asm_wrapper_patcher(void);
152
153 void *asm_switchstackandcall(void *stack, void *func, void **stacktopsave, void * p);
154
155 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
156 extern threadcritnode asm_criticalsections;
157 #endif
158
159
160 #if defined(ENABLE_JIT)
161 void asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
162 #endif
163
164 #if defined(ENABLE_INTRP)
165 void intrp_asm_getclassvalues_atomic(vftbl_t *super, vftbl_t *sub, castinfo *out);
166 #endif
167
168
169 #if defined(USE_THREADS) && !defined(NATIVE_THREADS)
170 void asm_perform_threadswitch(u1 **from, u1 **to, u1 **stackTop);
171 u1*  asm_initialize_thread_stack(void *func, u1 *stack);
172 #endif
173
174 /* may be required on some architectures (at least for PowerPC and ARM) */
175 void asm_cacheflush(void *p, s4 size);
176
177 #endif /* _ASMPART_H */
178
179
180 /*
181  * These are local overrides for various environment variables in Emacs.
182  * Please do not remove this and leave it at the end of the file, where
183  * Emacs will automagically detect them.
184  * ---------------------------------------------------------------------
185  * Local variables:
186  * mode: c
187  * indent-tabs-mode: t
188  * c-basic-offset: 4
189  * tab-width: 4
190  * End:
191  */