/* 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
- Edwin Steiner
-
- $Id: reg.h 5404 2006-09-07 13:29:05Z christian $
-
*/
#include "arch.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 {
-#if !defined(NEW_VAR)
- varinfo5 *locals;
- varinfo5 *interfaces;
-#endif
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 */
+
+ 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 */
};