/* src/vm/jit/reg.h - register allocator header
- 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: Christian Thalinger
-
- Changes: Christian Ullrich
-
- $Id: reg.h 4357 2006-01-22 23:33:38Z twisti $
-
*/
#ifndef _REG_H
#define _REG_H
-/* We typedef these structures before #includes to resolve circular */
-/* dependencies. */
+/* forward typedefs ***********************************************************/
typedef struct varinfo varinfo;
typedef struct registerdata registerdata;
#include "vm/types.h"
#include "arch.h"
-#include "vm/jit/inline/inline.h"
+
+#include "vm/jit/jit.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 intreg_ret; /* register to return integer values */
int fltreg_ret; /* register for return float values */
- int *argintregs; /* argument integer registers */
int *tmpintregs; /* scratch integer registers */
int *savintregs; /* saved integer registers */
- int *argfltregs; /* argument float registers */
int *tmpfltregs; /* scratch float registers */
int *savfltregs; /* saved float registers */
int *freeargintregs; /* free argument integer registers */
int *freetmpadrregs; /* free scratch address registers */
int *freesavadrregs; /* free saved address registers */
+ int *adrusedinout; /* is this adr register uses as INOUT? */
+
int argadrreguse; /* used argument address register count */
int tmpadrreguse; /* used scratch address register count */
int savadrreguse; /* used saved address register count */
int freesavinttop; /* free saved integer register count */
int freetmpflttop; /* free scratch float register count */
int freesavflttop; /* free saved float register count */
-};
-
-/* global variables ***********************************************************/
-
-extern s4 nregdescint[];
-extern s4 nregdescfloat[];
+ int *intusedinout; /* is this int register uses as INOUT? */
+ int *fltusedinout; /* is this flt register uses as INOUT? */
+ int *regisoutvar; /* true if reg. is outvar of this block */
+ int *regcopycount; /* counts copies of each register regoff */
+ int *memcopycount; /* counts copies of each INMEMORY regoff */
+ int memcopycountsize; /* size of memcopycount buffer */
+};
/* function prototypes ********************************************************/
-void reg_setup(methodinfo *m, registerdata *rd, t_inlining_globals *id);
+void reg_setup(jitdata *jd);
#endif /* _REG_H */
* c-basic-offset: 4
* tab-width: 4
* End:
+ * vim:noexpandtab:sw=4:ts=4:
*/