33
33
extern "C" {
34
34
#endif
35
35
36
+ #if !RV32_HAS (EXT_E )
36
37
#define RV_REGS_LIST \
37
38
_(zero) /* hard-wired zero, ignoring any writes */ \
38
39
_ (ra ) /* return address */ \
@@ -66,6 +67,25 @@ extern "C" {
66
67
_ (t4 ) \
67
68
_ (t5 ) \
68
69
_ (t6 )
70
+ #else
71
+ #define RV_REGS_LIST \
72
+ _ (zero ) /* hard-wired zero, ignoring any writes */ \
73
+ _ (ra ) /* return address */ \
74
+ _ (sp ) /* stack pointer */ \
75
+ _ (gp ) /* global pointer */ \
76
+ _ (tp ) /* thread pointer */ \
77
+ _ (t0 ) /* temporary/alternate link register */ \
78
+ _ (t1 ) /* temporaries */ \
79
+ _ (t2 ) \
80
+ _ (s0 ) /* saved register/frame pointer */ \
81
+ _ (s1 ) \
82
+ _ (a0 ) /* function arguments / return values */ \
83
+ _ (a1 ) \
84
+ _ (a2 ) /* function arguments */ \
85
+ _ (a3 ) \
86
+ _ (a4 ) \
87
+ _ (a5 )
88
+ #endif
69
89
70
90
/* RISC-V registers (mnemonics, ABI names)
71
91
*
@@ -89,6 +109,65 @@ enum {
89
109
};
90
110
/* clang-format on */
91
111
112
+ #define MISA_SUPER (1 << ('S' - 'A'))
113
+ #define MISA_USER (1 << ('U' - 'A'))
114
+ #define MISA_I (1 << ('I' - 'A'))
115
+ #define MISA_M (1 << ('M' - 'A'))
116
+ #define MISA_A (1 << ('A' - 'A'))
117
+ #define MISA_F (1 << ('F' - 'A'))
118
+ #define MISA_C (1 << ('C' - 'A'))
119
+ #define MISA_E (1 << ('E' - 'A'))
120
+
121
+ /* The mstatus register keeps track of and controls the hart’s current operating
122
+ * state */
123
+ #define MSTATUS_SIE_SHIFT 1
124
+ #define MSTATUS_MIE_SHIFT 3
125
+ #define MSTATUS_SPIE_SHIFT 5
126
+ #define MSTATUS_UBE_SHIFT 6
127
+ #define MSTATUS_MPIE_SHIFT 7
128
+ #define MSTATUS_SPP_SHIFT 8
129
+ #define MSTATUS_MPP_SHIFT 11
130
+ #define MSTATUS_MPRV_SHIFT 17
131
+ #define MSTATUS_SUM_SHIFT 18
132
+ #define MSTATUS_MXR_SHIFT 18
133
+ #define MSTATUS_TVM_SHIFT 20
134
+ #define MSTATUS_TW_SHIFT 21
135
+ #define MSTATUS_TSR_SHIFT 22
136
+ #define MSTATUS_SIE (1 << MSTATUS_SIE_SHIFT)
137
+ #define MSTATUS_MIE (1 << MSTATUS_MIE_SHIFT)
138
+ #define MSTATUS_SPIE (1 << MSTATUS_SPIE_SHIFT)
139
+ #define MSTATUS_UBE (1 << MSTATUS_UBE_SHIFT)
140
+ #define MSTATUS_MPIE (1 << MSTATUS_MPIE_SHIFT)
141
+ #define MSTATUS_SPP (1 << MSTATUS_SPP_SHIFT)
142
+ #define MSTATUS_MPP (3 << MSTATUS_MPP_SHIFT)
143
+ #define MSTATUS_MPRV (1 << MSTATUS_MPRV_SHIFT)
144
+ #define MSTATUS_SUM (1 << MSTATUS_SUM_SHIFT)
145
+ #define MSTATUS_MXR (1 << MSTATUS_MXR_SHIFT)
146
+ #define MSTATUS_TVM (1 << MSTATUS_TVM_SHIFT)
147
+ #define MSTATUS_TW (1 << MSTATUS_TW_SHIFT)
148
+ #define MSTATUS_TSR (1 << MSTATUS_TSR_SHIFT)
149
+
150
+ /* A restricted view of mstatus */
151
+ #define SSTATUS_SIE_SHIFT 1
152
+ #define SSTATUS_SPIE_SHIFT 5
153
+ #define SSTATUS_UBE_SHIFT 6
154
+ #define SSTATUS_SPP_SHIFT 8
155
+ #define SSTATUS_SUM_SHIFT 18
156
+ #define SSTATUS_MXR_SHIFT 19
157
+ #define SSTATUS_SIE (1 << SSTATUS_SIE_SHIFT)
158
+ #define SSTATUS_SPIE (1 << SSTATUS_SPIE_SHIFT)
159
+ #define SSTATUS_UBE (1 << SSTATUS_UBE_SHIFT)
160
+ #define SSTATUS_SPP (1 << SSTATUS_SPP_SHIFT)
161
+ #define SSTATUS_SUM (1 << SSTATUS_SUM_SHIFT)
162
+ #define SSTATUS_MXR (1 << SSTATUS_MXR_SHIFT)
163
+
164
+ #define SIP_SSIP_SHIFT 1
165
+ #define SIP_STIP_SHIFT 5
166
+ #define SIP_SEIP_SHIFT 9
167
+ #define SIP_SSIP (1 << SIP_SSIP_SHIFT)
168
+ #define SIP_STIP (1 << SIP_STIP_SHIFT)
169
+ #define SIP_SEIP (1 << SIP_SEIP_SHIFT)
170
+
92
171
#define RV_PG_SHIFT 12
93
172
#define RV_PG_SIZE (1 << RV_PG_SHIFT)
94
173
0 commit comments