Authors: Christian Thalinger
Changes: Christian Ullrich
- Edwin Steiner
+ Edwin Steiner
- $Id: reg.h 4452 2006-02-05 23:24:34Z edwin $
+ $Id: reg.h 5708 2006-10-06 22:37:13Z edwin $
*/
#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 "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 {
- varinfo5 *locals;
- varinfo5 *interfaces;
-
-
int intreg_ret; /* register to return integer values */
int fltreg_ret; /* register for return float values */
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);
+void reg_setup(jitdata *jd);
#endif /* _REG_H */