1
- //===- RISCVSystemOperands.td ----------------------------*- tablegen -*-===//
1
+ //===- RISCVSystemOperands.td ------------------------------ *- tablegen -*-===//
2
2
//
3
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
4
// See https://llvm.org/LICENSE.txt for license information.
@@ -70,34 +70,34 @@ def lookupSysRegByDeprecatedName : SearchIndex {
70
70
// 2.3, 2.4 and 2.5 in the RISC-V Instruction Set Manual
71
71
// Volume II: Privileged Architecture.
72
72
73
- //===--------------------------
73
+ //===----------------------------------------------------------------------===//
74
74
// User Trap Setup
75
- //===--------------------------
75
+ //===----------------------------------------------------------------------===//
76
76
def : SysReg<"ustatus", 0x000>;
77
77
def : SysReg<"uie", 0x004>;
78
78
def : SysReg<"utvec", 0x005>;
79
79
80
- //===--------------------------
80
+ //===----------------------------------------------------------------------===//
81
81
// User Trap Handling
82
- //===--------------------------
82
+ //===----------------------------------------------------------------------===//
83
83
def : SysReg<"uscratch", 0x040>;
84
84
def : SysReg<"uepc", 0x041>;
85
85
def : SysReg<"ucause", 0x042>;
86
86
let DeprecatedName = "ubadaddr" in
87
87
def : SysReg<"utval", 0x043>;
88
88
def : SysReg<"uip", 0x044>;
89
89
90
- //===--------------------------
90
+ //===----------------------------------------------------------------------===//
91
91
// User Floating-Point CSRs
92
- //===--------------------------
92
+ //===----------------------------------------------------------------------===//
93
93
94
94
def SysRegFFLAGS : SysReg<"fflags", 0x001>;
95
95
def SysRegFRM : SysReg<"frm", 0x002>;
96
96
def SysRegFCSR : SysReg<"fcsr", 0x003>;
97
97
98
- //===--------------------------
98
+ //===----------------------------------------------------------------------===//
99
99
// User Counter/Timers
100
- //===--------------------------
100
+ //===----------------------------------------------------------------------===//
101
101
def CYCLE : SysReg<"cycle", 0xC00>;
102
102
def TIME : SysReg<"time", 0xC01>;
103
103
def INSTRET : SysReg<"instret", 0xC02>;
@@ -168,71 +168,180 @@ def: SysReg<"hpmcounter30h", 0xC9E>;
168
168
def: SysReg<"hpmcounter31h", 0xC9F>;
169
169
}
170
170
171
- //===--------------------------
171
+ //===----------------------------------------------------------------------===//
172
172
// Supervisor Trap Setup
173
- //===--------------------------
173
+ //===----------------------------------------------------------------------===//
174
174
def : SysReg<"sstatus", 0x100>;
175
175
def : SysReg<"sedeleg", 0x102>;
176
176
def : SysReg<"sideleg", 0x103>;
177
177
def : SysReg<"sie", 0x104>;
178
178
def : SysReg<"stvec", 0x105>;
179
179
def : SysReg<"scounteren", 0x106>;
180
180
181
- //===--------------------------
181
+ //===----------------------------------------------------------------------===//
182
+ // Supervisor Configuration
183
+ //===----------------------------------------------------------------------===//
184
+
185
+ def : SysReg<"senvcfg", 0x10A>;
186
+
187
+ //===----------------------------------------------------------------------===//
182
188
// Supervisor Trap Handling
183
- //===--------------------------
189
+ //===----------------------------------------------------------------------===//
184
190
def : SysReg<"sscratch", 0x140>;
185
191
def : SysReg<"sepc", 0x141>;
186
192
def : SysReg<"scause", 0x142>;
187
193
let DeprecatedName = "sbadaddr" in
188
194
def : SysReg<"stval", 0x143>;
189
195
def : SysReg<"sip", 0x144>;
190
196
191
- //===-------------------------------------
197
+ //===----------------------------------------------------------------------===//
192
198
// Supervisor Protection and Translation
193
- //===-------------------------------------
199
+ //===----------------------------------------------------------------------===//
194
200
let DeprecatedName = "sptbr" in
195
201
def : SysReg<"satp", 0x180>;
196
202
197
- //===-----------------------------
203
+ //===----------------------------------------------------------------------===//
204
+ // Debug/Trace Registers
205
+ //===----------------------------------------------------------------------===//
206
+
207
+ def : SysReg<"scontext", 0x5A8>;
208
+
209
+ //===----------------------------------------------------------------------===//
210
+ // Hypervisor Trap Setup
211
+ //===----------------------------------------------------------------------===//
212
+
213
+ def : SysReg<"hstatus", 0x600>;
214
+ def : SysReg<"hedeleg", 0x602>;
215
+ def : SysReg<"hideleg", 0x603>;
216
+ def : SysReg<"hie", 0x604>;
217
+ def : SysReg<"hcounteren", 0x606>;
218
+ def : SysReg<"hgeie", 0x607>;
219
+
220
+ //===----------------------------------------------------------------------===//
221
+ // Hypervisor Trap Handling
222
+ //===----------------------------------------------------------------------===//
223
+
224
+ def : SysReg<"htval", 0x643>;
225
+ def : SysReg<"hip", 0x644>;
226
+ def : SysReg<"hvip", 0x645>;
227
+ def : SysReg<"htinst", 0x64A>;
228
+ def : SysReg<"hgeip", 0xE12>;
229
+
230
+ //===----------------------------------------------------------------------===//
231
+ // Hypervisor Configuration
232
+ //===----------------------------------------------------------------------===//
233
+
234
+ def : SysReg<"henvcfg", 0x60A>;
235
+ let isRV32Only = 1 in
236
+ def : SysReg<"henvcfgh", 0x61A>;
237
+
238
+ //===----------------------------------------------------------------------===//
239
+ // Hypervisor Protection and Translation
240
+ //===----------------------------------------------------------------------===//
241
+
242
+ def : SysReg<"hgatp", 0x680>;
243
+
244
+ //===----------------------------------------------------------------------===//
245
+ // Debug/Trace Registers
246
+ //===----------------------------------------------------------------------===//
247
+
248
+ def : SysReg<"hcontext", 0x6A8>;
249
+
250
+ //===----------------------------------------------------------------------===//
251
+ // Hypervisor Counter/Timer Virtualization Registers
252
+ //===----------------------------------------------------------------------===//
253
+
254
+ def : SysReg<"htimedelta", 0x605>;
255
+ let isRV32Only = 1 in
256
+ def : SysReg<"htimedeltah", 0x615>;
257
+
258
+ //===----------------------------------------------------------------------===//
259
+ // Virtual Supervisor Registers
260
+ //===----------------------------------------------------------------------===//
261
+
262
+ def : SysReg<"vsstatus", 0x200>;
263
+ def : SysReg<"vsie", 0x204>;
264
+ def : SysReg<"vstvec", 0x205>;
265
+ def : SysReg<"vsscratch", 0x240>;
266
+ def : SysReg<"vsepc", 0x241>;
267
+ def : SysReg<"vscause", 0x242>;
268
+ def : SysReg<"vstval", 0x243>;
269
+ def : SysReg<"vsip", 0x244>;
270
+ def : SysReg<"vsatp", 0x280>;
271
+
272
+ //===----------------------------------------------------------------------===//
198
273
// Machine Information Registers
199
- //===-----------------------------
274
+ //===----------------------------------------------------------------------===//
200
275
201
276
def : SysReg<"mvendorid", 0xF11>;
202
277
def : SysReg<"marchid", 0xF12>;
203
278
def : SysReg<"mimpid", 0xF13>;
204
279
def : SysReg<"mhartid", 0xF14>;
280
+ def : SysReg<"mconfigptr", 0xF15>;
205
281
206
- //===-----------------------------
282
+ //===----------------------------------------------------------------------===//
207
283
// Machine Trap Setup
208
- //===-----------------------------
284
+ //===----------------------------------------------------------------------===//
209
285
def : SysReg<"mstatus", 0x300>;
210
286
def : SysReg<"misa", 0x301>;
211
287
def : SysReg<"medeleg", 0x302>;
212
288
def : SysReg<"mideleg", 0x303>;
213
289
def : SysReg<"mie", 0x304>;
214
290
def : SysReg<"mtvec", 0x305>;
215
291
def : SysReg<"mcounteren", 0x306>;
292
+ let isRV32Only = 1 in
293
+ def : SysReg<"mstatush", 0x310>;
216
294
217
- //===-----------------------------
295
+ //===----------------------------------------------------------------------===//
218
296
// Machine Trap Handling
219
- //===-----------------------------
297
+ //===----------------------------------------------------------------------===//
220
298
def : SysReg<"mscratch", 0x340>;
221
299
def : SysReg<"mepc", 0x341>;
222
300
def : SysReg<"mcause", 0x342>;
223
301
let DeprecatedName = "mbadaddr" in
224
302
def : SysReg<"mtval", 0x343>;
225
303
def : SysReg<"mip", 0x344>;
304
+ def : SysReg<"mtinst", 0x34A>;
305
+ def : SysReg<"mtval2", 0x34B>;
306
+
307
+ //===----------------------------------------------------------------------===//
308
+ // Machine Configuration
309
+ //===----------------------------------------------------------------------===//
310
+
311
+ def : SysReg<"menvcfg", 0x30A>;
312
+ let isRV32Only = 1 in
313
+ def : SysReg<"menvcfgh", 0x31A>;
314
+ def : SysReg<"mseccfg", 0x747>;
315
+ let isRV32Only = 1 in
316
+ def : SysReg<"mseccfgh", 0x757>;
226
317
227
- //===----------------------------------
318
+ //===----------------------------------------------------------------------===//
228
319
// Machine Protection and Translation
229
- //===----------------------------------
320
+ //===----------------------------------------------------------------------===//
230
321
def : SysReg<"pmpcfg0", 0x3A0>;
231
- def : SysReg<"pmpcfg2", 0x3A2>;
232
- let isRV32Only = 1 in {
322
+ let isRV32Only = 1 in
233
323
def : SysReg<"pmpcfg1", 0x3A1>;
324
+ def : SysReg<"pmpcfg2", 0x3A2>;
325
+ let isRV32Only = 1 in
234
326
def : SysReg<"pmpcfg3", 0x3A3>;
235
- }
327
+ def : SysReg<"pmpcfg4", 0x3A4>;
328
+ let isRV32Only = 1 in
329
+ def : SysReg<"pmpcfg5", 0x3A5>;
330
+ def : SysReg<"pmpcfg6", 0x3A6>;
331
+ let isRV32Only = 1 in
332
+ def : SysReg<"pmpcfg7", 0x3A7>;
333
+ def : SysReg<"pmpcfg8", 0x3A8>;
334
+ let isRV32Only = 1 in
335
+ def : SysReg<"pmpcfg9", 0x3A9>;
336
+ def : SysReg<"pmpcfg10", 0x3AA>;
337
+ let isRV32Only = 1 in
338
+ def : SysReg<"pmpcfg11", 0x3AB>;
339
+ def : SysReg<"pmpcfg12", 0x3AC>;
340
+ let isRV32Only = 1 in
341
+ def : SysReg<"pmpcfg13", 0x3AD>;
342
+ def : SysReg<"pmpcfg14", 0x3AE>;
343
+ let isRV32Only = 1 in
344
+ def : SysReg<"pmpcfg15", 0x3AF>;
236
345
237
346
def : SysReg<"pmpaddr0", 0x3B0>;
238
347
def : SysReg<"pmpaddr1", 0x3B1>;
@@ -250,11 +359,59 @@ def : SysReg<"pmpaddr12", 0x3BC>;
250
359
def : SysReg<"pmpaddr13", 0x3BD>;
251
360
def : SysReg<"pmpaddr14", 0x3BE>;
252
361
def : SysReg<"pmpaddr15", 0x3BF>;
362
+ def : SysReg<"pmpaddr16", 0x3C0>;
363
+ def : SysReg<"pmpaddr17", 0x3C1>;
364
+ def : SysReg<"pmpaddr18", 0x3C2>;
365
+ def : SysReg<"pmpaddr19", 0x3C3>;
366
+ def : SysReg<"pmpaddr20", 0x3C4>;
367
+ def : SysReg<"pmpaddr21", 0x3C5>;
368
+ def : SysReg<"pmpaddr22", 0x3C6>;
369
+ def : SysReg<"pmpaddr23", 0x3C7>;
370
+ def : SysReg<"pmpaddr24", 0x3C8>;
371
+ def : SysReg<"pmpaddr25", 0x3C9>;
372
+ def : SysReg<"pmpaddr26", 0x3CA>;
373
+ def : SysReg<"pmpaddr27", 0x3CB>;
374
+ def : SysReg<"pmpaddr28", 0x3CC>;
375
+ def : SysReg<"pmpaddr29", 0x3CD>;
376
+ def : SysReg<"pmpaddr30", 0x3CE>;
377
+ def : SysReg<"pmpaddr31", 0x3CF>;
378
+ def : SysReg<"pmpaddr32", 0x3D0>;
379
+ def : SysReg<"pmpaddr33", 0x3D1>;
380
+ def : SysReg<"pmpaddr34", 0x3D2>;
381
+ def : SysReg<"pmpaddr35", 0x3D3>;
382
+ def : SysReg<"pmpaddr36", 0x3D4>;
383
+ def : SysReg<"pmpaddr37", 0x3D5>;
384
+ def : SysReg<"pmpaddr38", 0x3D6>;
385
+ def : SysReg<"pmpaddr39", 0x3D7>;
386
+ def : SysReg<"pmpaddr40", 0x3D8>;
387
+ def : SysReg<"pmpaddr41", 0x3D9>;
388
+ def : SysReg<"pmpaddr42", 0x3DA>;
389
+ def : SysReg<"pmpaddr43", 0x3DB>;
390
+ def : SysReg<"pmpaddr44", 0x3DC>;
391
+ def : SysReg<"pmpaddr45", 0x3DD>;
392
+ def : SysReg<"pmpaddr46", 0x3DE>;
393
+ def : SysReg<"pmpaddr47", 0x3DF>;
394
+ def : SysReg<"pmpaddr48", 0x3E0>;
395
+ def : SysReg<"pmpaddr49", 0x3E1>;
396
+ def : SysReg<"pmpaddr50", 0x3E2>;
397
+ def : SysReg<"pmpaddr51", 0x3E3>;
398
+ def : SysReg<"pmpaddr52", 0x3E4>;
399
+ def : SysReg<"pmpaddr53", 0x3E5>;
400
+ def : SysReg<"pmpaddr54", 0x3E6>;
401
+ def : SysReg<"pmpaddr55", 0x3E7>;
402
+ def : SysReg<"pmpaddr56", 0x3E8>;
403
+ def : SysReg<"pmpaddr57", 0x3E9>;
404
+ def : SysReg<"pmpaddr58", 0x3EA>;
405
+ def : SysReg<"pmpaddr59", 0x3EB>;
406
+ def : SysReg<"pmpaddr60", 0x3EC>;
407
+ def : SysReg<"pmpaddr61", 0x3ED>;
408
+ def : SysReg<"pmpaddr62", 0x3EE>;
409
+ def : SysReg<"pmpaddr63", 0x3EF>;
253
410
254
411
255
- //===--------------------------
412
+ //===----------------------------------------------------------------------===//
256
413
// Machine Counter and Timers
257
- //===--------------------------
414
+ //===----------------------------------------------------------------------===//
258
415
def : SysReg<"mcycle", 0xB00>;
259
416
def : SysReg<"minstret", 0xB02>;
260
417
@@ -323,9 +480,9 @@ def: SysReg<"mhpmcounter30h", 0xB9E>;
323
480
def: SysReg<"mhpmcounter31h", 0xB9F>;
324
481
}
325
482
326
- //===--------------------------
483
+ //===----------------------------------------------------------------------===//
327
484
// Machine Counter Setup
328
- //===--------------------------
485
+ //===----------------------------------------------------------------------===//
329
486
let AltName = "mucounteren" in // Privileged spec v1.9.1 Name
330
487
def : SysReg<"mcountinhibit", 0x320>;
331
488
@@ -359,17 +516,18 @@ def : SysReg<"mhpmevent29", 0x33D>;
359
516
def : SysReg<"mhpmevent30", 0x33E>;
360
517
def : SysReg<"mhpmevent31", 0x33F>;
361
518
362
- //===-----------------------------------------------
519
+ //===----------------------------------------------------------------------===//
363
520
// Debug/ Trace Registers (shared with Debug Mode)
364
- //===-----------------------------------------------
521
+ //===----------------------------------------------------------------------===//
365
522
def : SysReg<"tselect", 0x7A0>;
366
523
def : SysReg<"tdata1", 0x7A1>;
367
524
def : SysReg<"tdata2", 0x7A2>;
368
525
def : SysReg<"tdata3", 0x7A3>;
526
+ def : SysReg<"mcontext", 0x7A8>;
369
527
370
- //===-----------------------------------------------
528
+ //===----------------------------------------------------------------------===//
371
529
// Debug Mode Registers
372
- //===-----------------------------------------------
530
+ //===----------------------------------------------------------------------===//
373
531
def : SysReg<"dcsr", 0x7B0>;
374
532
def : SysReg<"dpc", 0x7B1>;
375
533
@@ -379,9 +537,9 @@ let AltName = "dscratch" in
379
537
def : SysReg<"dscratch0", 0x7B2>;
380
538
def : SysReg<"dscratch1", 0x7B3>;
381
539
382
- //===-----------------------------------------------
540
+ //===----------------------------------------------------------------------===//
383
541
// User Vector CSRs
384
- //===-----------------------------------------------
542
+ //===----------------------------------------------------------------------===//
385
543
def : SysReg<"vstart", 0x008>;
386
544
def : SysReg<"vxsat", 0x009>;
387
545
def : SysReg<"vxrm", 0x00A>;
0 commit comments