* Removed all Id tags.
[cacao.git] / src / vm / jit / reg.h
index 4042789f9c646f98cf20ecdfb2dacefd572cba59..f734563619715334708d3dbbdf1fc757d7ecf73a 100644 (file)
@@ -1,6 +1,6 @@
 /* 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 $
-
 */
 
 
@@ -49,31 +40,36 @@ 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 {
-#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        */
@@ -93,6 +89,8 @@ struct registerdata {
        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      */
@@ -124,6 +122,13 @@ struct registerdata {
        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            */
 };