* Removed all Id tags.
[cacao.git] / src / vm / jit / reg.h
index d12ec64a4bdc0a7653294b15ba0bb9334fd605ba..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
-
-   $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;
@@ -47,32 +38,38 @@ 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        */
@@ -92,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      */
@@ -123,18 +122,19 @@ struct registerdata {
        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 */
 
@@ -150,4 +150,5 @@ void reg_setup(methodinfo *m, registerdata *rd, t_inlining_globals *id);
  * c-basic-offset: 4
  * tab-width: 4
  * End:
+ * vim:noexpandtab:sw=4:ts=4:
  */