X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Freg.h;h=8ea1a9a3e704ffc25aa51b6b3a8694fefab4f0b2;hb=abe50084a6e83f833d1d2a0274bc75a8a89b25f4;hp=2384a510e81632bf5093dec79101d65b83cfcabc;hpb=d2216a5c85fe135058caad5e6abf97809f89cea0;p=cacao.git diff --git a/src/vm/jit/reg.h b/src/vm/jit/reg.h index 2384a510e..8ea1a9a3e 100644 --- a/src/vm/jit/reg.h +++ b/src/vm/jit/reg.h @@ -1,9 +1,9 @@ -/* jit/reg.h - register allocator header +/* src/vm/jit/reg.h - register allocator 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,14 +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: Christian Thalinger - $Id: reg.h 2297 2005-04-13 12:50:07Z christian $ + Changes: Christian Ullrich + Edwin Steiner + + $Id: reg.h 5549 2006-09-28 17:02:56Z edwin $ */ @@ -34,49 +37,45 @@ #ifndef _REG_H #define _REG_H -/* #define INVOKE_NEW_DEBUG */ - -/* preliminary define for testing of the new creation of ARGVAR Stackslots in stack.c */ -/* Changes affect handling of ARGVAR Stackslots in reg_of_var in codegen.inc */ -/* and calculation of rd->ifmemuse in reg.inc */ - -/* We typedef these structures before #includes to resolve circular */ -/* dependencies. */ +/* forward typedefs ***********************************************************/ typedef struct varinfo varinfo; typedef struct registerdata registerdata; -#include "types.h" -#include "vm/jit/codegen.inc.h" +#include "config.h" +#include "vm/types.h" + +#include "arch.h" + #include "vm/jit/jit.h" -#include "vm/jit/inline/inline.h" +#include "vm/jit/verify/typeinfo.h" /************************* pseudo variable structure **************************/ struct varinfo { - int type; /* basic type of variable */ - int flags; /* flags (SAVED, INMEMORY) */ - int regoff; /* register number or memory offset */ + s4 type; /* basic type of variable */ + s4 flags; /* flags (SAVED, INMEMORY) */ + union { + s4 regoff; /* register number or memory offset */ + s4 i; + s8 l; + float f; + double d; + basicblock *retaddr; + } vv; +#if defined(ENABLE_VERIFIER) + typeinfo typeinfo; /* type info for reference types */ +#endif }; typedef struct varinfo varinfo5[5]; struct registerdata { - varinfo5 *locals; - varinfo5 *interfaces; - - int intregsnum; /* absolute number of integer registers */ - int fltregsnum; /* absolute number of float registers */ - int intreg_ret; /* register to return integer values */ - int intreg_argnum; /* number of integer argument registers */ - int fltreg_ret; /* register for return float values */ - int fltreg_argnum; /* number of float argument registers */ - int *argintregs; /* argument integer registers */ int *tmpintregs; /* scratch integer registers */ @@ -92,55 +91,32 @@ struct registerdata { int *freesavfltregs; /* free saved float registers */ #ifdef HAS_ADDRESS_REGISTER_FILE - int adrregsnum; /* absolute number of address registers */ int adrreg_ret; /* register to return address values */ - int adrreg_argnum; /* number of address argument registers */ + int *argadrregs; /* argument address registers */ int *tmpadrregs; /* scratch address registers */ - int *savadrregs; /* saved address registers */ + int *savadrregs; /* saved address registers */ int *freeargadrregs; /* free argument address registers */ int *freetmpadrregs; /* free scratch address registers */ int *freesavadrregs; /* free saved address registers */ - int tmpadrregcnt; /* scratch address register count */ - int savadrregcnt; /* saved address register count */ - int iftmpadrregcnt; /* iface scratch address register count */ - int ifsavadrregcnt; /* iface saved address register count */ int argadrreguse; /* used argument address register count */ int tmpadrreguse; /* used scratch address register count */ int savadrreguse; /* used saved address register count */ - int maxargadrreguse; /* max used argument address register count */ - int maxtmpadrreguse; /* max used scratch address register count */ - int maxsavadrreguse; /* max used saved address register count */ + int freetmpadrtop; /* free scratch address register count */ int freesavadrtop; /* free saved address register count */ - int ifargadrregcnt; /* iface argument address register count */ - int freeargadrtop; /* free argument address register count */ + int freeargadrtop; /* free argument address register count */ #endif -#ifdef USETWOREGS - int *secondregs; /* used for longs in 2 32 bit registers */ +#if defined(HAS_4BYTE_STACKSLOT) + int *freemem_2; + int freememtop_2; #endif - int *freemem; /* free scratch memory */ - int memuse; /* used memory count */ - int ifmemuse; /* interface used memory count */ - int maxmemuse; /* maximal used memory count (spills) */ int freememtop; /* free memory count */ - int tmpintregcnt; /* scratch integer register count */ - int savintregcnt; /* saved integer register count */ - int tmpfltregcnt; /* scratch float register count */ - int savfltregcnt; /* saved float register count */ - - int iftmpintregcnt; /* iface scratch integer register count */ - int ifsavintregcnt; /* iface saved integer register count */ - int iftmpfltregcnt; /* iface scratch float register count */ - int ifsavfltregcnt; /* iface saved float register count */ - int ifargintregcnt; /* iface argument float register count */ - int ifargfltregcnt; /* iface argument float register count */ - int freearginttop; /* free argument integer register count */ - int freeargflttop; /* free argument float register count */ + int memuse; /* used memory count */ int argintreguse; /* used argument integer register count */ int tmpintreguse; /* used scratch integer register count */ @@ -149,32 +125,22 @@ struct registerdata { int tmpfltreguse; /* used scratch float register count */ int savfltreguse; /* used saved float register count */ - int maxargintreguse; /* max used argument int register count */ - int maxtmpintreguse; /* max used scratch int register count */ - int maxsavintreguse; /* max used saved int register count */ - int maxargfltreguse; /* max used argument float register count */ - int maxtmpfltreguse; /* max used scratch float register count */ - int maxsavfltreguse; /* max used saved float register count */ - + int freearginttop; /* free argument integer register count */ + int freeargflttop; /* free argument float register count */ int freetmpinttop; /* free scratch integer register count */ int freesavinttop; /* free saved integer register count */ int freetmpflttop; /* free scratch float register count */ int freesavflttop; /* free saved float register count */ - int arguments_num; /* size of parameter field in the stackframe */ + int *regcopycount; /* counts copies of each register regoff */ + int *memcopycount; /* counts copies of each INMEMORY regoff */ + int memcopycountsize; /* size of memcopycount buffer */ }; -/* function prototypes */ +/* function prototypes ********************************************************/ -void reg_init(); -void reg_setup(methodinfo *m, registerdata *rd, t_inlining_globals *id); -void reg_free(methodinfo *m, registerdata *rd); -void reg_close(); -void regalloc(methodinfo *m, codegendata *cd, registerdata *rd); -#ifdef STATISTICS -void reg_make_statistics( methodinfo *, codegendata *, registerdata *); -#endif +void reg_setup(jitdata *jd); #endif /* _REG_H */ @@ -190,4 +156,5 @@ void reg_make_statistics( methodinfo *, codegendata *, registerdata *); * c-basic-offset: 4 * tab-width: 4 * End: + * vim:noexpandtab:sw=4:ts=4: */