gem5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
arch
riscv
registers.hh
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2013 ARM Limited
3
* Copyright (c) 2014-2015 Sven Karlsson
4
* All rights reserved
5
*
6
* The license below extends only to copyright in the software and shall
7
* not be construed as granting a license to any other intellectual
8
* property including but not limited to intellectual property relating
9
* to a hardware implementation of the functionality of the software
10
* licensed hereunder. You may use the software subject to the license
11
* terms below provided that you ensure that this notice is replicated
12
* unmodified and in its entirety in all distributions of the software,
13
* modified or unmodified, in source code or in binary form.
14
*
15
* Copyright (c) 2016 RISC-V Foundation
16
* Copyright (c) 2016 The University of Virginia
17
* All rights reserved.
18
*
19
* Redistribution and use in source and binary forms, with or without
20
* modification, are permitted provided that the following conditions are
21
* met: redistributions of source code must retain the above copyright
22
* notice, this list of conditions and the following disclaimer;
23
* redistributions in binary form must reproduce the above copyright
24
* notice, this list of conditions and the following disclaimer in the
25
* documentation and/or other materials provided with the distribution;
26
* neither the name of the copyright holders nor the names of its
27
* contributors may be used to endorse or promote products derived from
28
* this software without specific prior written permission.
29
*
30
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41
*
42
* Authors: Andreas Hansson
43
* Sven Karlsson
44
* Alec Roelke
45
*/
46
47
#ifndef __ARCH_RISCV_REGISTERS_HH__
48
#define __ARCH_RISCV_REGISTERS_HH__
49
50
#include <map>
51
#include <string>
52
53
#include "arch/isa_traits.hh"
54
#include "arch/riscv/generated/max_inst_regs.hh"
55
#include "
base/types.hh
"
56
57
namespace
RiscvISA {
58
59
using
RiscvISAInst::MaxInstSrcRegs
;
60
using
RiscvISAInst::MaxInstDestRegs;
61
const
int
MaxMiscDestRegs
= 1;
62
63
typedef
uint_fast16_t
RegIndex
;
64
typedef
uint64_t
IntReg
;
65
typedef
uint64_t
FloatRegBits
;
66
typedef
double
FloatReg
;
67
typedef
uint8_t
CCReg
;
// Not applicable to Riscv
68
typedef
uint64_t
MiscReg
;
69
70
const
int
NumIntArchRegs
= 32;
71
const
int
NumMicroIntRegs
= 1;
72
const
int
NumIntRegs
=
NumIntArchRegs
+
NumMicroIntRegs
;
73
const
int
NumFloatRegs
= 32;
74
const
int
NumCCRegs
= 0;
75
const
int
NumMiscRegs
= 4096;
76
77
// These help enumerate all the registers for dependence tracking.
78
const
int
FP_Reg_Base
=
NumIntRegs
;
79
const
int
CC_Reg_Base
=
FP_Reg_Base
+
NumFloatRegs
;
80
const
int
Misc_Reg_Base
=
CC_Reg_Base
+
NumCCRegs
;
81
const
int
Max_Reg_Index
=
Misc_Reg_Base
+
NumMiscRegs
;
82
83
// Semantically meaningful register indices
84
const
int
ZeroReg
= 0;
85
const
int
ReturnAddrReg
= 1;
86
const
int
StackPointerReg
= 2;
87
const
int
GlobalPointerReg
= 3;
88
const
int
ThreadPointerReg
= 4;
89
const
int
FramePointerReg
= 8;
90
const
int
ReturnValueRegs
[] = {10, 11};
91
const
int
ReturnValueReg
=
ReturnValueRegs
[0];
92
const
int
ArgumentRegs
[] = {10, 11, 12, 13, 14, 15, 16, 17};
93
const
int
AMOTempReg
= 32;
94
95
const
char
*
const
RegisterNames
[] = {
"zero"
,
"ra"
,
"sp"
,
"gp"
,
96
"tp"
,
"t0"
,
"t1"
,
"t2"
,
97
"s0"
,
"s1"
,
"a0"
,
"a1"
,
98
"a2"
,
"a3"
,
"a4"
,
"a5"
,
99
"a6"
,
"a7"
,
"s2"
,
"s3"
,
100
"s4"
,
"s5"
,
"s6"
,
"s7"
,
101
"s8"
,
"s9"
,
"s10"
,
"s11"
,
102
"t3"
,
"t4"
,
"t5"
,
"t6"
};
103
104
const
int
SyscallNumReg
=
ArgumentRegs
[7];
105
const
int
SyscallArgumentRegs
[] = {
ArgumentRegs
[0],
ArgumentRegs
[1],
106
ArgumentRegs[2], ArgumentRegs[3]};
107
const
int
SyscallPseudoReturnReg
=
ReturnValueRegs
[0];
108
109
const
int
NumHpmcounter
= 29;
110
const
int
NumHpmcounterh
= 29;
111
const
int
NumMhpmcounter
= 29;
112
const
int
NumMhpmevent
= 29;
113
enum
MiscRegIndex
{
114
MISCREG_USTATUS
= 0x000,
115
MISCREG_UIE
= 0x004,
116
MISCREG_UTVEC
= 0x005,
117
MISCREG_USCRATCH
= 0x040,
118
MISCREG_UEPC
= 0x041,
119
MISCREG_UCAUSE
= 0x042,
120
MISCREG_UBADADDR
= 0x043,
121
MISCREG_UIP
= 0x044,
122
MISCREG_FFLAGS
= 0x001,
123
MISCREG_FRM
= 0x002,
124
MISCREG_FCSR
= 0x003,
125
MISCREG_CYCLE
= 0xC00,
126
MISCREG_TIME
= 0xC01,
127
MISCREG_INSTRET
= 0xC02,
128
MISCREG_HPMCOUNTER_BASE
= 0xC03,
129
MISCREG_CYCLEH
= 0xC80,
130
MISCREG_TIMEH
= 0xC81,
131
MISCREG_INSTRETH
= 0xC82,
132
MISCREG_HPMCOUNTERH_BASE
= 0xC83,
133
134
MISCREG_SSTATUS
= 0x100,
135
MISCREG_SEDELEG
= 0x102,
136
MISCREG_SIDELEG
= 0x103,
137
MISCREG_SIE
= 0x104,
138
MISCREG_STVEC
= 0x105,
139
MISCREG_SSCRATCH
= 0x140,
140
MISCREG_SEPC
= 0x141,
141
MISCREG_SCAUSE
= 0x142,
142
MISCREG_SBADADDR
= 0x143,
143
MISCREG_SIP
= 0x144,
144
MISCREG_SPTBR
= 0x180,
145
146
MISCREG_HSTATUS
= 0x200,
147
MISCREG_HEDELEG
= 0x202,
148
MISCREG_HIDELEG
= 0x203,
149
MISCREG_HIE
= 0x204,
150
MISCREG_HTVEC
= 0x205,
151
MISCREG_HSCRATCH
= 0x240,
152
MISCREG_HEPC
= 0x241,
153
MISCREG_HCAUSE
= 0x242,
154
MISCREG_HBADADDR
= 0x243,
155
MISCREG_HIP
= 0x244,
156
157
MISCREG_MVENDORID
= 0xF11,
158
MISCREG_MARCHID
= 0xF12,
159
MISCREG_MIMPID
= 0xF13,
160
MISCREG_MHARTID
= 0xF14,
161
MISCREG_MSTATUS
= 0x300,
162
MISCREG_MISA
= 0x301,
163
MISCREG_MEDELEG
= 0x302,
164
MISCREG_MIDELEG
= 0x303,
165
MISCREG_MIE
= 0x304,
166
MISCREG_MTVEC
= 0x305,
167
MISCREG_MSCRATCH
= 0x340,
168
MISCREG_MEPC
= 0x341,
169
MISCREG_MCAUSE
= 0x342,
170
MISCREG_MBADADDR
= 0x343,
171
MISCREG_MIP
= 0x344,
172
MISCREG_MBASE
= 0x380,
173
MISCREG_MBOUND
= 0x381,
174
MISCREG_MIBASE
= 0x382,
175
MISCREG_MIBOUND
= 0x383,
176
MISCREG_MDBASE
= 0x384,
177
MISCREG_MDBOUND
= 0x385,
178
MISCREG_MCYCLE
= 0xB00,
179
MISCREG_MINSTRET
= 0xB02,
180
MISCREG_MHPMCOUNTER_BASE
= 0xB03,
181
MISCREG_MUCOUNTEREN
= 0x320,
182
MISCREG_MSCOUNTEREN
= 0x321,
183
MISCREG_MHCOUNTEREN
= 0x322,
184
MISCREG_MHPMEVENT_BASE
= 0x323,
185
186
MISCREG_TSELECT
= 0x7A0,
187
MISCREG_TDATA1
= 0x7A1,
188
MISCREG_TDATA2
= 0x7A2,
189
MISCREG_TDATA3
= 0x7A3,
190
MISCREG_DCSR
= 0x7B0,
191
MISCREG_DPC
= 0x7B1,
192
MISCREG_DSCRATCH
= 0x7B2
193
};
194
195
}
196
197
#endif // __ARCH_RISCV_REGISTERS_HH__
RiscvISA::MISCREG_CYCLE
Definition:
registers.hh:125
RiscvISA::NumFloatRegs
const int NumFloatRegs
Definition:
registers.hh:73
RiscvISA::FP_Reg_Base
const int FP_Reg_Base
Definition:
registers.hh:78
RiscvISA::MISCREG_MIDELEG
Definition:
registers.hh:164
RiscvISA::MISCREG_MINSTRET
Definition:
registers.hh:179
RiscvISA::NumIntArchRegs
const int NumIntArchRegs
Definition:
registers.hh:70
RiscvISA::MISCREG_MEPC
Definition:
registers.hh:168
RiscvISA::MISCREG_MUCOUNTEREN
Definition:
registers.hh:181
RiscvISA::NumMhpmcounter
const int NumMhpmcounter
Definition:
registers.hh:111
RiscvISA::NumCCRegs
const int NumCCRegs
Definition:
registers.hh:74
RiscvISA::MiscReg
uint64_t MiscReg
Definition:
registers.hh:68
RiscvISA::MISCREG_HPMCOUNTER_BASE
Definition:
registers.hh:128
RiscvISA::MISCREG_TDATA2
Definition:
registers.hh:188
RiscvISA::StackPointerReg
const int StackPointerReg
Definition:
registers.hh:86
RiscvISA::MISCREG_SPTBR
Definition:
registers.hh:144
RiscvISA::MISCREG_HPMCOUNTERH_BASE
Definition:
registers.hh:132
RiscvISA::MISCREG_HIP
Definition:
registers.hh:155
RiscvISA::MISCREG_FRM
Definition:
registers.hh:123
RiscvISA::ArgumentRegs
const int ArgumentRegs[]
Definition:
registers.hh:92
RiscvISA::ThreadPointerReg
const int ThreadPointerReg
Definition:
registers.hh:88
RiscvISA::MISCREG_TSELECT
Definition:
registers.hh:186
RiscvISA::SyscallPseudoReturnReg
const int SyscallPseudoReturnReg
Definition:
registers.hh:107
RiscvISA::MISCREG_MVENDORID
Definition:
registers.hh:157
RiscvISA::MISCREG_SSTATUS
Definition:
registers.hh:134
RiscvISA::MISCREG_SIE
Definition:
registers.hh:137
ArmISA::MaxInstSrcRegs
const int MaxInstSrcRegs
Definition:
registers.hh:56
RiscvISA::MISCREG_MARCHID
Definition:
registers.hh:158
RiscvISA::MISCREG_MDBASE
Definition:
registers.hh:176
RiscvISA::MISCREG_HIE
Definition:
registers.hh:149
RiscvISA::MISCREG_MISA
Definition:
registers.hh:162
RiscvISA::MISCREG_HEPC
Definition:
registers.hh:152
RiscvISA::MISCREG_USTATUS
Definition:
registers.hh:114
RiscvISA::MaxMiscDestRegs
const int MaxMiscDestRegs
Definition:
registers.hh:61
RiscvISA::NumMiscRegs
const int NumMiscRegs
Definition:
registers.hh:75
RiscvISA::MISCREG_HBADADDR
Definition:
registers.hh:154
RiscvISA::MISCREG_HEDELEG
Definition:
registers.hh:147
RiscvISA::CC_Reg_Base
const int CC_Reg_Base
Definition:
registers.hh:79
RiscvISA::NumHpmcounterh
const int NumHpmcounterh
Definition:
registers.hh:110
RiscvISA::MISCREG_SIP
Definition:
registers.hh:143
RiscvISA::NumIntRegs
const int NumIntRegs
Definition:
registers.hh:72
RiscvISA::NumMicroIntRegs
const int NumMicroIntRegs
Definition:
registers.hh:71
RiscvISA::MISCREG_MSCRATCH
Definition:
registers.hh:167
RiscvISA::MISCREG_HTVEC
Definition:
registers.hh:150
RiscvISA::MISCREG_MHARTID
Definition:
registers.hh:160
RiscvISA::MISCREG_UEPC
Definition:
registers.hh:118
RiscvISA::MISCREG_MHCOUNTEREN
Definition:
registers.hh:183
RiscvISA::MISCREG_MIP
Definition:
registers.hh:171
RiscvISA::MISCREG_SBADADDR
Definition:
registers.hh:142
RiscvISA::MISCREG_SIDELEG
Definition:
registers.hh:136
RiscvISA::RegisterNames
const char *const RegisterNames[]
Definition:
registers.hh:95
RiscvISA::MISCREG_DPC
Definition:
registers.hh:191
RiscvISA::ReturnValueRegs
const int ReturnValueRegs[]
Definition:
registers.hh:90
RiscvISA::MISCREG_SEDELEG
Definition:
registers.hh:135
RiscvISA::MISCREG_TIMEH
Definition:
registers.hh:130
RiscvISA::SyscallNumReg
const int SyscallNumReg
Definition:
registers.hh:104
RiscvISA::MISCREG_TDATA1
Definition:
registers.hh:187
RiscvISA::MISCREG_MSCOUNTEREN
Definition:
registers.hh:182
RiscvISA::ReturnValueReg
const int ReturnValueReg
Definition:
registers.hh:91
RiscvISA::MISCREG_UBADADDR
Definition:
registers.hh:120
RiscvISA::ReturnAddrReg
const int ReturnAddrReg
Definition:
registers.hh:85
RiscvISA::MISCREG_MBADADDR
Definition:
registers.hh:170
RiscvISA::SyscallArgumentRegs
const int SyscallArgumentRegs[]
Definition:
registers.hh:105
types.hh
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
RiscvISA::MISCREG_MCYCLE
Definition:
registers.hh:178
RiscvISA::MISCREG_MIBOUND
Definition:
registers.hh:175
RiscvISA::MISCREG_TDATA3
Definition:
registers.hh:189
RiscvISA::MISCREG_SCAUSE
Definition:
registers.hh:141
RiscvISA::MISCREG_MDBOUND
Definition:
registers.hh:177
RiscvISA::MISCREG_FCSR
Definition:
registers.hh:124
RiscvISA::MISCREG_MHPMEVENT_BASE
Definition:
registers.hh:184
RiscvISA::ZeroReg
const int ZeroReg
Definition:
registers.hh:84
RiscvISA::Max_Reg_Index
const int Max_Reg_Index
Definition:
registers.hh:81
RiscvISA::CCReg
uint8_t CCReg
Definition:
registers.hh:67
RiscvISA::MISCREG_MIE
Definition:
registers.hh:165
RiscvISA::MISCREG_MTVEC
Definition:
registers.hh:166
RiscvISA::FloatRegBits
uint64_t FloatRegBits
Definition:
registers.hh:65
RiscvISA::MISCREG_HSTATUS
Definition:
registers.hh:146
RiscvISA::FramePointerReg
const int FramePointerReg
Definition:
registers.hh:89
RiscvISA::MISCREG_MSTATUS
Definition:
registers.hh:161
RiscvISA::MISCREG_MBOUND
Definition:
registers.hh:173
RiscvISA::MISCREG_TIME
Definition:
registers.hh:126
RiscvISA::MISCREG_STVEC
Definition:
registers.hh:138
RiscvISA::MISCREG_MIMPID
Definition:
registers.hh:159
RiscvISA::MISCREG_DCSR
Definition:
registers.hh:190
RiscvISA::MISCREG_CYCLEH
Definition:
registers.hh:129
RiscvISA::FloatReg
double FloatReg
Definition:
registers.hh:66
RiscvISA::GlobalPointerReg
const int GlobalPointerReg
Definition:
registers.hh:87
RiscvISA::MISCREG_FFLAGS
Definition:
registers.hh:122
RiscvISA::MISCREG_SEPC
Definition:
registers.hh:140
RiscvISA::IntReg
uint64_t IntReg
Definition:
registers.hh:64
RiscvISA::AMOTempReg
const int AMOTempReg
Definition:
registers.hh:93
RiscvISA::MISCREG_HIDELEG
Definition:
registers.hh:148
RiscvISA::MISCREG_HCAUSE
Definition:
registers.hh:153
RiscvISA::NumMhpmevent
const int NumMhpmevent
Definition:
registers.hh:112
RiscvISA::MISCREG_UCAUSE
Definition:
registers.hh:119
RiscvISA::MiscRegIndex
MiscRegIndex
Definition:
registers.hh:113
RiscvISA::MISCREG_UIP
Definition:
registers.hh:121
RiscvISA::MISCREG_USCRATCH
Definition:
registers.hh:117
RiscvISA::MISCREG_SSCRATCH
Definition:
registers.hh:139
RiscvISA::MISCREG_MEDELEG
Definition:
registers.hh:163
RiscvISA::MISCREG_INSTRET
Definition:
registers.hh:127
RiscvISA::MISCREG_MIBASE
Definition:
registers.hh:174
RiscvISA::MISCREG_HSCRATCH
Definition:
registers.hh:151
RiscvISA::MISCREG_MBASE
Definition:
registers.hh:172
RiscvISA::MISCREG_INSTRETH
Definition:
registers.hh:131
RiscvISA::MISCREG_UIE
Definition:
registers.hh:115
RiscvISA::MISCREG_DSCRATCH
Definition:
registers.hh:192
RiscvISA::MISCREG_UTVEC
Definition:
registers.hh:116
RiscvISA::Misc_Reg_Base
const int Misc_Reg_Base
Definition:
registers.hh:80
RiscvISA::NumHpmcounter
const int NumHpmcounter
Definition:
registers.hh:109
RiscvISA::MISCREG_MCAUSE
Definition:
registers.hh:169
RiscvISA::MISCREG_MHPMCOUNTER_BASE
Definition:
registers.hh:180
RiscvISA::RegIndex
uint_fast16_t RegIndex
Definition:
registers.hh:63
Generated on Fri Jun 9 2017 13:03:36 for gem5 by
doxygen
1.8.6