1 /* src/vm/global.h - global definitions
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
8 This file is part of CACAO.
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.
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.
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
25 Contact: cacao@cacaojvm.org
27 Authors: Reinhard Grafl
36 $Id: global.h 5461 2006-09-11 00:33:32Z edwin $
48 /* additional data types ******************************************************/
50 typedef void *voidptr; /* generic pointer */
51 typedef void (*functionptr) (void); /* generic function pointer */
52 typedef u1* methodptr;
54 typedef unsigned int bool; /* boolean data type */
60 #if defined(ENABLE_SSA)
61 /* immediate to get an addidional target Local Var Index */
62 /* for IINC in Combination with SSA */
69 /* immediate data union */
79 #if defined(ENABLE_SSA)
85 /* forward typedefs ***********************************************************/
87 typedef struct java_objectheader java_objectheader;
88 typedef struct java_objectarray java_objectarray;
91 /* define some CACAO paths ****************************************************/
93 #define CLASSPATH_LIBRARY_PATH CLASSPATH_LIBDIR "/classpath"
96 #define MAX_ALIGN 8 /* most generic alignment for JavaVM values */
99 /* basic data types ***********************************************************/
101 /* The JavaVM types must numbered in the same order as the ICMD_Ixxx
102 to ICMD_Axxx instructions (LOAD and STORE). All other types can be
103 numbered arbitrarily. */
111 #define TYPE_RET 8 /* must not share bits with TYPE_FLT or TYPE_LNG */
116 #define IS_INT_LNG_TYPE(a) (!((a) & TYPE_FLT))
117 #define IS_FLT_DBL_TYPE(a) ((a) & TYPE_FLT)
118 #define IS_2_WORD_TYPE(a) ((a) & TYPE_LNG)
120 #define IS_INT_TYPE(a) ((a) == TYPE_INT)
121 #define IS_LNG_TYPE(a) ((a) == TYPE_LNG)
122 #define IS_FLT_TYPE(a) ((a) == TYPE_FLT)
123 #define IS_DBL_TYPE(a) ((a) == TYPE_DBL)
124 #define IS_ADR_TYPE(a) ((a) == TYPE_ADR)
126 #define IS_VOID_TYPE(a) ((a) == TYPE_VOID)
129 /* primitive data types *******************************************************/
131 /* These values are used in parsed descriptors and in some other
132 places were the different types handled internally as TYPE_INT have
133 to be distinguished. */
135 #define PRIMITIVETYPE_COUNT 11 /* number of primitive types (+ dummies) */
137 /* CAUTION: Don't change the numerical values! These constants are
138 used as indices into the primitive type table. */
140 #define PRIMITIVETYPE_INT TYPE_INT
141 #define PRIMITIVETYPE_LONG TYPE_LNG
142 #define PRIMITIVETYPE_FLOAT TYPE_FLT
143 #define PRIMITIVETYPE_DOUBLE TYPE_DBL
144 #define PRIMITIVETYPE_DUMMY1 TYPE_ADR /* not used! */
145 #define PRIMITIVETYPE_BYTE 5
146 #define PRIMITIVETYPE_CHAR 6
147 #define PRIMITIVETYPE_SHORT 7
148 #define PRIMITIVETYPE_BOOLEAN 8
149 #define PRIMITIVETYPE_DUMMY2 9 /* not used! */
150 #define PRIMITIVETYPE_VOID TYPE_VOID
152 /* some Java related defines **************************************************/
154 #define JAVA_VERSION "1.4.2" /* this version is supported by CACAO */
155 #define CLASS_VERSION "49.0"
158 /* Java class file constants **************************************************/
160 #define MAGIC 0xCAFEBABE
161 #define MAJOR_VERSION 49
162 #define MINOR_VERSION 0
165 /* Constant pool tags *********************************************************/
167 #define CONSTANT_Class 7
168 #define CONSTANT_Fieldref 9
169 #define CONSTANT_Methodref 10
170 #define CONSTANT_InterfaceMethodref 11
171 #define CONSTANT_String 8
172 #define CONSTANT_Integer 3
173 #define CONSTANT_Float 4
174 #define CONSTANT_Long 5
175 #define CONSTANT_Double 6
176 #define CONSTANT_NameAndType 12
177 #define CONSTANT_Utf8 1
179 #define CONSTANT_UNUSED 0
182 /* Class/Field/Method access and property flags *******************************/
184 #define ACC_UNDEF -1 /* used internally */
185 #define ACC_NONE 0 /* used internally */
187 #define ACC_PUBLIC 0x0001
188 #define ACC_PRIVATE 0x0002
189 #define ACC_PROTECTED 0x0004
190 #define ACC_STATIC 0x0008
191 #define ACC_FINAL 0x0010
192 #define ACC_SUPER 0x0020
193 #define ACC_SYNCHRONIZED 0x0020
194 #define ACC_VOLATILE 0x0040
195 #define ACC_BRIDGE 0x0040
196 #define ACC_TRANSIENT 0x0080
197 #define ACC_VARARGS 0x0080
198 #define ACC_NATIVE 0x0100
199 #define ACC_INTERFACE 0x0200
200 #define ACC_ABSTRACT 0x0400
201 #define ACC_STRICT 0x0800
202 #define ACC_SYNTHETIC 0x1000
203 #define ACC_ANNOTATION 0x2000
204 #define ACC_ENUM 0x4000
205 #define ACC_MIRANDA 0x8000
207 /* special flags used in classinfo ********************************************/
209 #define ACC_CLASS_REFLECT_MASK 0x0000ffff /* flags reported by reflection */
210 #define ACC_CLASS_HAS_POINTERS 0x00010000 /* instance contains pointers */
213 /* data structures of the runtime system **************************************/
215 /* java_objectheader ***********************************************************
217 All objects (and arrays) which resides on the heap need the
218 following header at the beginning of the data structure.
220 *******************************************************************************/
222 struct java_objectheader { /* header for all objects */
223 struct _vftbl *vftbl; /* pointer to virtual function table */
224 #if defined(ENABLE_THREADS)
225 struct lock_record_t *monitorPtr;
226 ptrint flcword; /* word containing the FLC bit */
231 /* arrays **********************************************************************
233 All arrays are objects (they need the object header with a pointer
234 to a vftbl (array class table). There is one class for each array
235 type. The array type is described by an arraydescriptor struct
236 which is referenced by the vftbl.
239 /* CAUTION: Don't change the numerical values! These constants (with
240 * the exception of ARRAYTYPE_OBJECT) are used as indices in the
241 * primitive type table.
243 #define ARRAYTYPE_INT PRIMITIVETYPE_INT
244 #define ARRAYTYPE_LONG PRIMITIVETYPE_LONG
245 #define ARRAYTYPE_FLOAT PRIMITIVETYPE_FLOAT
246 #define ARRAYTYPE_DOUBLE PRIMITIVETYPE_DOUBLE
247 #define ARRAYTYPE_BYTE PRIMITIVETYPE_BYTE
248 #define ARRAYTYPE_CHAR PRIMITIVETYPE_CHAR
249 #define ARRAYTYPE_SHORT PRIMITIVETYPE_SHORT
250 #define ARRAYTYPE_BOOLEAN PRIMITIVETYPE_BOOLEAN
251 #define ARRAYTYPE_OBJECT PRIMITIVETYPE_VOID /* don't use as index! */
253 typedef struct java_arrayheader { /* header for all arrays */
254 java_objectheader objheader; /* object header */
255 s4 size; /* array size */
260 /* structs for all kinds of arrays ********************************************/
262 /* booleanarray and bytearray need identical memory layout (access methods
263 use the same machine code */
265 typedef struct java_booleanarray {
266 java_arrayheader header;
270 typedef struct java_bytearray {
271 java_arrayheader header;
275 typedef struct java_chararray {
276 java_arrayheader header;
280 typedef struct java_shortarray {
281 java_arrayheader header;
285 typedef struct java_intarray {
286 java_arrayheader header;
290 typedef struct java_longarray {
291 java_arrayheader header;
295 typedef struct java_floatarray {
296 java_arrayheader header;
300 typedef struct java_doublearray {
301 java_arrayheader header;
305 /* objectarray and arrayarray need identical memory layout (access methods
306 use the same machine code */
308 struct java_objectarray {
309 java_arrayheader header;
310 java_objectheader *data[1];
314 /* Synchronization ************************************************************/
316 #if defined(ENABLE_THREADS)
317 void compiler_lock();
318 void compiler_unlock();
321 #endif /* _GLOBAL_H */
325 * These are local overrides for various environment variables in Emacs.
326 * Please do not remove this and leave it at the end of the file, where
327 * Emacs will automagically detect them.
328 * ---------------------------------------------------------------------
331 * indent-tabs-mode: t
335 * vim:noexpandtab:sw=4:ts=4: