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