X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fjit.h;h=18aeb6067bb1cffe9727feec599cd722eb29446f;hb=ad92477479aeed17382996ab43a7ca0dfab2ba93;hp=7a8d559fba6f0802424e8a3a2d660358b42fe8aa;hpb=0100e2c09e004c464075fef301847ceaf2bfed69;p=cacao.git diff --git a/src/vm/jit/jit.h b/src/vm/jit/jit.h index 7a8d559fb..18aeb6067 100644 --- a/src/vm/jit/jit.h +++ b/src/vm/jit/jit.h @@ -1,9 +1,9 @@ -/* jit/jit.h - code generation header +/* src/vm/jit/jit.h - code generation header - Copyright (C) 1996-2005 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 + Copyright (C) 1996-2005, 2006 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 This file is part of CACAO. @@ -19,17 +19,17 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - Contact: cacao@complang.tuwien.ac.at + Contact: cacao@cacaojvm.org Authors: Andreas Krall Reinhard Grafl Changes: Christian Thalinger - $Id: jit.h 2029 2005-03-10 13:47:01Z twisti $ + $Id: jit.h 4357 2006-01-22 23:33:38Z twisti $ */ @@ -46,14 +46,28 @@ typedef struct instruction instruction; typedef struct subroutineinfo subroutineinfo; +#include "config.h" +#include "vm/types.h" + #include "toolbox/chain.h" #include "vm/global.h" -#include "vm/builtin.h" -#include "vm/jit/codegen.inc.h" +#include "vm/method.h" +#include "vm/references.h" +#include "vm/statistics.h" +#include "vm/jit/codegen-common.h" #include "vm/jit/verify/typeinfo.h" -/**************************** resolve typedef-cycles **************************/ +/* common jit/codegen macros **************************************************/ + +#if defined(ENABLE_STATISTICS) +# define COUNT(x) (x)++ +# define COUNT_SPILLS count_spills++ +#else +# define COUNT(x) /* nothing */ +# define COUNT_SPILLS /* nothing */ +#endif + /************************** stack element structure ***************************/ @@ -79,6 +93,7 @@ typedef struct subroutineinfo subroutineinfo; #define SAVEDVAR 1 /* variable has to survive method invocations */ #define INMEMORY 2 /* variable stored in memory */ #define SAVEDTMP 4 /* temporary variable using a saved register */ +#define TMPARG 8 /* temporary variable using a argument register */ /* variable kinds */ @@ -92,7 +107,7 @@ typedef struct subroutineinfo subroutineinfo; struct stackelement { stackptr prev; /* pointer to next element towards bottom */ s4 type; /* slot type of stack element */ -#ifdef CACAO_TYPECHECK +#ifdef ENABLE_VERIFIER typeinfo typeinfo; /* info on reference types */ #endif s4 flags; /* flags (SAVED, INMEMORY) */ @@ -119,15 +134,29 @@ struct instruction { /* a new block */ }; +#define INSTRUCTION_PUTCONST_TYPE(iptr) \ + ((iptr)[0].op1) + +#define INSTRUCTION_PUTCONST_VALUE_ADR(iptr) \ + ((iptr)[0].val.a) + +#define INSTRUCTION_PUTCONST_FIELDINFO(iptr) \ + ((fieldinfo *)((iptr)[1].val.a)) + +#define INSTRUCTION_PUTCONST_FIELDINFO_PTR(iptr) \ + ((fieldinfo **) &((iptr)[1].val.a)) + +#define INSTRUCTION_PUTCONST_FIELDREF(iptr) \ + ((unresolved_field *)((iptr)[1].target)) /**************************** basic block structure ***************************/ /* flags */ -#define BBDELETED -2 -#define BBUNDEF -1 -#define BBREACHED 0 -#define BBFINISHED 1 +#define BBDELETED -2 +#define BBUNDEF -1 +#define BBREACHED 0 +#define BBFINISHED 1 #define BBTYPECHECK_UNDEF 2 #define BBTYPECHECK_REACHED 3 @@ -175,7 +204,7 @@ extern int jcommandsize[256]; #define ICMD_ACONST 1 /* val.a = constant */ #define JAVA_ICONST_M1 2 -#define ICMD_NULLCHECKPOP 2 +#define ICMD_CHECKNULL 2 #define JAVA_ICONST_0 3 #define ICMD_ICONST 3 /* val.i = constant */ @@ -718,7 +747,7 @@ extern int jcommandsize[256]; #define JAVA_INVOKEINTERFACE 185 #define ICMD_INVOKEINTERFACE 185 /* val.a = method info pointer */ -#define ICMD_CHECKASIZE 186 /* */ +/* UNDEF186 */ #define JAVA_NEW 187 #define ICMD_NEW 187 /* op1 = 1, val.a = class pointer */ @@ -764,7 +793,7 @@ extern int jcommandsize[256]; #define JAVA_BREAKPOINT 202 -#define ICMD_CHECKEXCEPTION 203 /* check for an exception */ +/* UNDEF203 */ #define ICMD_IASTORECONST 204 @@ -782,22 +811,25 @@ extern int jcommandsize[256]; #define ICMD_SASTORECONST 211 -#define ICMD_INLINE_START 251 /* before the first instruction of an inlined method */ -#define ICMD_INLINE_END 252 /* after the last instruction of an inlined method */ -#define ICMD_BUILTIN3 253 /* internal opcode */ -#define ICMD_BUILTIN2 254 /* internal opcode */ -#define ICMD_BUILTIN1 255 /* internal opcode */ +#define ICMD_PUTSTATICCONST 212 + +#define ICMD_PUTFIELDCONST 213 + +#define ICMD_IMULPOW2 214 + +#define ICMD_LMULPOW2 215 + +#define ICMD_INLINE_START 251 /* instruction before inlined method */ +#define ICMD_INLINE_END 252 /* instruction after inlined method */ + +#define ICMD_BUILTIN 255 /* internal opcode */ + #define ICMD_READONLY_ARG 1024 /* used for inlining, opcodes 1024-1028 are used */ #define ICMD_CLEAR_ARGREN 1029 /* indicates the start of a new inlined method argument renaming must be reset */ /******************* description of JavaVM instructions ***********************/ -#if defined(USEBUILTINTABLE) - -builtin_descriptor *find_builtin(int opcode); - -#endif /* USEBUILTINTABLE */ /***************************** register types *********************************/ @@ -822,18 +854,23 @@ extern int stackreq[256]; /* function prototypes ********************************************************/ -functionptr jit_compile(methodinfo *m); /* compile a method with jit compiler */ +/* compiler initialisation */ +void jit_init(void); -void jit_init(); /* compiler initialisation */ -void jit_close(); /* compiler finalisation */ +/* compiler finalisation */ +void jit_close(void); -void compile_all_class_methods(classinfo *c); +/* compile a method with jit compiler */ +u1 *jit_compile(methodinfo *m); -u1 *createcompilerstub(methodinfo *m); -u1 *createnativestub(functionptr f, methodinfo *m); +/* machine dependent initialization */ +#if defined(ENABLE_JIT) +void md_init(void); +#endif -void removecompilerstub(u1 *stub); -void removenativestub(u1 *stub); +#if defined(ENABLE_INTRP) +void intrp_md_init(void); +#endif #endif /* _JIT_H */