CACAO
reg.hpp
Go to the documentation of this file.
1 /* src/vm/jit/reg.hpp - register allocator header
2 
3  Copyright (C) 1996-2014
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 
26 #ifndef REG_HPP_
27 #define REG_HPP_ 1
28 
29 /* forward typedefs ***********************************************************/
30 
31 #include "config.h"
32 #include "vm/types.hpp"
33 
34 #include "arch.hpp"
35 
37 
38 struct basicblock;
39 struct jitdata;
40 
41 /************************* pseudo variable structure **************************/
42 
43 struct varinfo {
44  Type type; /* basic type of variable */
45  s4 flags; /* flags (SAVED, INMEMORY) */
46  union {
47  s4 regoff; /* register number or memory offset */
48  s4 i;
49  s8 l;
50  float f;
51  double d;
53  s4 ii[2];
54  } vv;
55 #if defined(ENABLE_VERIFIER)
56  typeinfo_t typeinfo; /* type info for reference types */
57 
58  bool is_returnaddress() const { return type == TYPE_RET && typeinfo.is_primitive(); }
59  bool is_reference() const { return type == TYPE_ADR && typeinfo.is_reference(); }
60 #endif
61 };
62 
63 typedef struct varinfo varinfo5[5];
64 
65 
66 struct registerdata {
67  int intreg_ret; /* register to return integer values */
68  int fltreg_ret; /* register for return float values */
69 
70  int *tmpintregs; /* scratch integer registers */
71  int *savintregs; /* saved integer registers */
72  int *tmpfltregs; /* scratch float registers */
73  int *savfltregs; /* saved float registers */
74  int *freeargintregs; /* free argument integer registers */
75  int *freetmpintregs; /* free scratch integer registers */
76  int *freesavintregs; /* free saved integer registers */
77  int *freeargfltregs; /* free argument float registers */
78  int *freetmpfltregs; /* free scratch float registers */
79  int *freesavfltregs; /* free saved float registers */
80 
81  int *freemem; /* free scratch memory */
82  int freememtop; /* free memory count */
83 
84  int memuse; /* used memory count */
85 
86  int argintreguse; /* used argument integer register count */
87  int tmpintreguse; /* used scratch integer register count */
88  int savintreguse; /* used saved integer register count */
89  int argfltreguse; /* used argument float register count */
90  int tmpfltreguse; /* used scratch float register count */
91  int savfltreguse; /* used saved float register count */
92 
93  int freearginttop; /* free argument integer register count */
94  int freeargflttop; /* free argument float register count */
95  int freetmpinttop; /* free scratch integer register count */
96  int freesavinttop; /* free saved integer register count */
97  int freetmpflttop; /* free scratch float register count */
98  int freesavflttop; /* free saved float register count */
99 
100  int *intusedinout; /* is this int register uses as INOUT? */
101  int *fltusedinout; /* is this flt register uses as INOUT? */
102  int *regisoutvar; /* true if reg. is outvar of this block */
103  int *regcopycount; /* counts copies of each register regoff */
104  int *memcopycount; /* counts copies of each INMEMORY regoff */
105  int memcopycountsize; /* size of memcopycount buffer */
106 };
107 
108 
109 /* function prototypes ********************************************************/
110 
111 void reg_setup(jitdata *jd);
112 
113 #endif // REG_HPP_
114 
115 
116 /*
117  * These are local overrides for various environment variables in Emacs.
118  * Please do not remove this and leave it at the end of the file, where
119  * Emacs will automagically detect them.
120  * ---------------------------------------------------------------------
121  * Local variables:
122  * mode: c++
123  * indent-tabs-mode: t
124  * c-basic-offset: 4
125  * tab-width: 4
126  * End:
127  * vim:noexpandtab:sw=4:ts=4:
128  */
union varinfo::@19 vv
int argintreguse
Definition: reg.hpp:86
int freesavflttop
Definition: reg.hpp:98
Definition: jit.hpp:126
int * freemem
Definition: reg.hpp:81
int * savintregs
Definition: reg.hpp:71
int * freeargfltregs
Definition: reg.hpp:77
int * freetmpfltregs
Definition: reg.hpp:78
s4 i
Definition: reg.hpp:48
int memcopycountsize
Definition: reg.hpp:105
s4 ii[2]
Definition: reg.hpp:53
int * tmpfltregs
Definition: reg.hpp:72
int * freesavfltregs
Definition: reg.hpp:79
int savintreguse
Definition: reg.hpp:88
int intreg_ret
Definition: reg.hpp:67
Type type
Definition: reg.hpp:44
int freememtop
Definition: reg.hpp:82
int * fltusedinout
Definition: reg.hpp:101
int64_t s8
Definition: types.hpp:48
int * freetmpintregs
Definition: reg.hpp:75
Definition: reg.hpp:43
s4 regoff
Definition: reg.hpp:47
int * regcopycount
Definition: reg.hpp:103
int * intusedinout
Definition: reg.hpp:100
int * freesavintregs
Definition: reg.hpp:76
int freetmpinttop
Definition: reg.hpp:95
int fltreg_ret
Definition: reg.hpp:68
typeinfo_t typeinfo
Definition: reg.hpp:56
float f
Definition: reg.hpp:50
int tmpintreguse
Definition: reg.hpp:87
void reg_setup(jitdata *jd)
Definition: reg.cpp:42
Type
Types used internally by JITTED code.
Definition: global.hpp:117
int tmpfltreguse
Definition: reg.hpp:90
bool is_primitive() const
Definition: typeinfo.hpp:242
int freetmpflttop
Definition: reg.hpp:97
int32_t s4
Definition: types.hpp:45
int argfltreguse
Definition: reg.hpp:89
int * savfltregs
Definition: reg.hpp:73
int freesavinttop
Definition: reg.hpp:96
int * regisoutvar
Definition: reg.hpp:102
int savfltreguse
Definition: reg.hpp:91
int memuse
Definition: reg.hpp:84
struct varinfo varinfo5[5]
Definition: reg.hpp:63
int * tmpintregs
Definition: reg.hpp:70
int * memcopycount
Definition: reg.hpp:104
s8 l
Definition: reg.hpp:49
s4 flags
Definition: reg.hpp:45
bool is_reference() const
Definition: reg.hpp:59
basicblock * retaddr
Definition: reg.hpp:52
bool is_returnaddress() const
Definition: reg.hpp:58
int freearginttop
Definition: reg.hpp:93
bool is_reference() const
Definition: typeinfo.hpp:243
int * freeargintregs
Definition: reg.hpp:74
int freeargflttop
Definition: reg.hpp:94
double d
Definition: reg.hpp:51