CACAO
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
source
cacao
src
vm
jit
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
36
#include "
vm/jit/verify/typeinfo.hpp
"
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
;
52
basicblock
*
retaddr
;
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
*/
varinfo::vv
union varinfo::@19 vv
registerdata::argintreguse
int argintreguse
Definition:
reg.hpp:86
registerdata::freesavflttop
int freesavflttop
Definition:
reg.hpp:98
jitdata
Definition:
jit.hpp:126
registerdata::freemem
int * freemem
Definition:
reg.hpp:81
registerdata::savintregs
int * savintregs
Definition:
reg.hpp:71
TYPE_ADR
Definition:
global.hpp:122
registerdata::freeargfltregs
int * freeargfltregs
Definition:
reg.hpp:77
registerdata::freetmpfltregs
int * freetmpfltregs
Definition:
reg.hpp:78
varinfo::i
s4 i
Definition:
reg.hpp:48
registerdata::memcopycountsize
int memcopycountsize
Definition:
reg.hpp:105
varinfo::ii
s4 ii[2]
Definition:
reg.hpp:53
registerdata::tmpfltregs
int * tmpfltregs
Definition:
reg.hpp:72
registerdata::freesavfltregs
int * freesavfltregs
Definition:
reg.hpp:79
registerdata::savintreguse
int savintreguse
Definition:
reg.hpp:88
registerdata::intreg_ret
int intreg_ret
Definition:
reg.hpp:67
varinfo::type
Type type
Definition:
reg.hpp:44
registerdata::freememtop
int freememtop
Definition:
reg.hpp:82
types.hpp
registerdata
Definition:
reg.hpp:66
registerdata::fltusedinout
int * fltusedinout
Definition:
reg.hpp:101
s8
int64_t s8
Definition:
types.hpp:48
registerdata::freetmpintregs
int * freetmpintregs
Definition:
reg.hpp:75
varinfo
Definition:
reg.hpp:43
varinfo::regoff
s4 regoff
Definition:
reg.hpp:47
registerdata::regcopycount
int * regcopycount
Definition:
reg.hpp:103
registerdata::intusedinout
int * intusedinout
Definition:
reg.hpp:100
registerdata::freesavintregs
int * freesavintregs
Definition:
reg.hpp:76
registerdata::freetmpinttop
int freetmpinttop
Definition:
reg.hpp:95
registerdata::fltreg_ret
int fltreg_ret
Definition:
reg.hpp:68
varinfo::typeinfo
typeinfo_t typeinfo
Definition:
reg.hpp:56
varinfo::f
float f
Definition:
reg.hpp:50
TYPE_RET
Definition:
global.hpp:124
registerdata::tmpintreguse
int tmpintreguse
Definition:
reg.hpp:87
reg_setup
void reg_setup(jitdata *jd)
Definition:
reg.cpp:42
Type
Type
Types used internally by JITTED code.
Definition:
global.hpp:117
registerdata::tmpfltreguse
int tmpfltreguse
Definition:
reg.hpp:90
typeinfo_t::is_primitive
bool is_primitive() const
Definition:
typeinfo.hpp:242
registerdata::freetmpflttop
int freetmpflttop
Definition:
reg.hpp:97
s4
int32_t s4
Definition:
types.hpp:45
registerdata::argfltreguse
int argfltreguse
Definition:
reg.hpp:89
registerdata::savfltregs
int * savfltregs
Definition:
reg.hpp:73
registerdata::freesavinttop
int freesavinttop
Definition:
reg.hpp:96
registerdata::regisoutvar
int * regisoutvar
Definition:
reg.hpp:102
registerdata::savfltreguse
int savfltreguse
Definition:
reg.hpp:91
basicblock
Definition:
jit.hpp:292
registerdata::memuse
int memuse
Definition:
reg.hpp:84
varinfo5
struct varinfo varinfo5[5]
Definition:
reg.hpp:63
registerdata::tmpintregs
int * tmpintregs
Definition:
reg.hpp:70
registerdata::memcopycount
int * memcopycount
Definition:
reg.hpp:104
varinfo::l
s8 l
Definition:
reg.hpp:49
varinfo::flags
s4 flags
Definition:
reg.hpp:45
varinfo::is_reference
bool is_reference() const
Definition:
reg.hpp:59
varinfo::retaddr
basicblock * retaddr
Definition:
reg.hpp:52
typeinfo.hpp
typeinfo_t
Definition:
typeinfo.hpp:235
varinfo::is_returnaddress
bool is_returnaddress() const
Definition:
reg.hpp:58
registerdata::freearginttop
int freearginttop
Definition:
reg.hpp:93
typeinfo_t::is_reference
bool is_reference() const
Definition:
typeinfo.hpp:243
registerdata::freeargintregs
int * freeargintregs
Definition:
reg.hpp:74
registerdata::freeargflttop
int freeargflttop
Definition:
reg.hpp:94
varinfo::d
double d
Definition:
reg.hpp:51
Generated on Fri Aug 4 2017 03:01:54 for CACAO by
1.8.5