1- //===- RISCVSystemOperands.td ----------------------------*- tablegen -*-===//
1+ //===- RISCVSystemOperands.td ------------------------------ *- tablegen -*-===//
22//
33// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44// See https://llvm.org/LICENSE.txt for license information.
@@ -70,34 +70,34 @@ def lookupSysRegByDeprecatedName : SearchIndex {
7070// 2.3, 2.4 and 2.5 in the RISC-V Instruction Set Manual
7171// Volume II: Privileged Architecture.
7272
73- //===--------------------------
73+ //===----------------------------------------------------------------------===//
7474// User Trap Setup
75- //===--------------------------
75+ //===----------------------------------------------------------------------===//
7676def : SysReg<"ustatus", 0x000>;
7777def : SysReg<"uie", 0x004>;
7878def : SysReg<"utvec", 0x005>;
7979
80- //===--------------------------
80+ //===----------------------------------------------------------------------===//
8181// User Trap Handling
82- //===--------------------------
82+ //===----------------------------------------------------------------------===//
8383def : SysReg<"uscratch", 0x040>;
8484def : SysReg<"uepc", 0x041>;
8585def : SysReg<"ucause", 0x042>;
8686let DeprecatedName = "ubadaddr" in
8787def : SysReg<"utval", 0x043>;
8888def : SysReg<"uip", 0x044>;
8989
90- //===--------------------------
90+ //===----------------------------------------------------------------------===//
9191// User Floating-Point CSRs
92- //===--------------------------
92+ //===----------------------------------------------------------------------===//
9393
9494def SysRegFFLAGS : SysReg<"fflags", 0x001>;
9595def SysRegFRM : SysReg<"frm", 0x002>;
9696def SysRegFCSR : SysReg<"fcsr", 0x003>;
9797
98- //===--------------------------
98+ //===----------------------------------------------------------------------===//
9999// User Counter/Timers
100- //===--------------------------
100+ //===----------------------------------------------------------------------===//
101101def CYCLE : SysReg<"cycle", 0xC00>;
102102def TIME : SysReg<"time", 0xC01>;
103103def INSTRET : SysReg<"instret", 0xC02>;
@@ -168,71 +168,180 @@ def: SysReg<"hpmcounter30h", 0xC9E>;
168168def: SysReg<"hpmcounter31h", 0xC9F>;
169169}
170170
171- //===--------------------------
171+ //===----------------------------------------------------------------------===//
172172// Supervisor Trap Setup
173- //===--------------------------
173+ //===----------------------------------------------------------------------===//
174174def : SysReg<"sstatus", 0x100>;
175175def : SysReg<"sedeleg", 0x102>;
176176def : SysReg<"sideleg", 0x103>;
177177def : SysReg<"sie", 0x104>;
178178def : SysReg<"stvec", 0x105>;
179179def : SysReg<"scounteren", 0x106>;
180180
181- //===--------------------------
181+ //===----------------------------------------------------------------------===//
182+ // Supervisor Configuration
183+ //===----------------------------------------------------------------------===//
184+
185+ def : SysReg<"senvcfg", 0x10A>;
186+
187+ //===----------------------------------------------------------------------===//
182188// Supervisor Trap Handling
183- //===--------------------------
189+ //===----------------------------------------------------------------------===//
184190def : SysReg<"sscratch", 0x140>;
185191def : SysReg<"sepc", 0x141>;
186192def : SysReg<"scause", 0x142>;
187193let DeprecatedName = "sbadaddr" in
188194def : SysReg<"stval", 0x143>;
189195def : SysReg<"sip", 0x144>;
190196
191- //===-------------------------------------
197+ //===----------------------------------------------------------------------===//
192198// Supervisor Protection and Translation
193- //===-------------------------------------
199+ //===----------------------------------------------------------------------===//
194200let DeprecatedName = "sptbr" in
195201def : SysReg<"satp", 0x180>;
196202
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+ //===----------------------------------------------------------------------===//
198273// Machine Information Registers
199- //===-----------------------------
274+ //===----------------------------------------------------------------------===//
200275
201276def : SysReg<"mvendorid", 0xF11>;
202277def : SysReg<"marchid", 0xF12>;
203278def : SysReg<"mimpid", 0xF13>;
204279def : SysReg<"mhartid", 0xF14>;
280+ def : SysReg<"mconfigptr", 0xF15>;
205281
206- //===-----------------------------
282+ //===----------------------------------------------------------------------===//
207283// Machine Trap Setup
208- //===-----------------------------
284+ //===----------------------------------------------------------------------===//
209285def : SysReg<"mstatus", 0x300>;
210286def : SysReg<"misa", 0x301>;
211287def : SysReg<"medeleg", 0x302>;
212288def : SysReg<"mideleg", 0x303>;
213289def : SysReg<"mie", 0x304>;
214290def : SysReg<"mtvec", 0x305>;
215291def : SysReg<"mcounteren", 0x306>;
292+ let isRV32Only = 1 in
293+ def : SysReg<"mstatush", 0x310>;
216294
217- //===-----------------------------
295+ //===----------------------------------------------------------------------===//
218296// Machine Trap Handling
219- //===-----------------------------
297+ //===----------------------------------------------------------------------===//
220298def : SysReg<"mscratch", 0x340>;
221299def : SysReg<"mepc", 0x341>;
222300def : SysReg<"mcause", 0x342>;
223301let DeprecatedName = "mbadaddr" in
224302def : SysReg<"mtval", 0x343>;
225303def : 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>;
226317
227- //===----------------------------------
318+ //===----------------------------------------------------------------------===//
228319// Machine Protection and Translation
229- //===----------------------------------
320+ //===----------------------------------------------------------------------===//
230321def : SysReg<"pmpcfg0", 0x3A0>;
231- def : SysReg<"pmpcfg2", 0x3A2>;
232- let isRV32Only = 1 in {
322+ let isRV32Only = 1 in
233323def : SysReg<"pmpcfg1", 0x3A1>;
324+ def : SysReg<"pmpcfg2", 0x3A2>;
325+ let isRV32Only = 1 in
234326def : 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>;
236345
237346def : SysReg<"pmpaddr0", 0x3B0>;
238347def : SysReg<"pmpaddr1", 0x3B1>;
@@ -250,11 +359,59 @@ def : SysReg<"pmpaddr12", 0x3BC>;
250359def : SysReg<"pmpaddr13", 0x3BD>;
251360def : SysReg<"pmpaddr14", 0x3BE>;
252361def : 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>;
253410
254411
255- //===--------------------------
412+ //===----------------------------------------------------------------------===//
256413// Machine Counter and Timers
257- //===--------------------------
414+ //===----------------------------------------------------------------------===//
258415def : SysReg<"mcycle", 0xB00>;
259416def : SysReg<"minstret", 0xB02>;
260417
@@ -323,9 +480,9 @@ def: SysReg<"mhpmcounter30h", 0xB9E>;
323480def: SysReg<"mhpmcounter31h", 0xB9F>;
324481}
325482
326- //===--------------------------
483+ //===----------------------------------------------------------------------===//
327484// Machine Counter Setup
328- //===--------------------------
485+ //===----------------------------------------------------------------------===//
329486let AltName = "mucounteren" in // Privileged spec v1.9.1 Name
330487def : SysReg<"mcountinhibit", 0x320>;
331488
@@ -359,17 +516,18 @@ def : SysReg<"mhpmevent29", 0x33D>;
359516def : SysReg<"mhpmevent30", 0x33E>;
360517def : SysReg<"mhpmevent31", 0x33F>;
361518
362- //===-----------------------------------------------
519+ //===----------------------------------------------------------------------===//
363520// Debug/ Trace Registers (shared with Debug Mode)
364- //===-----------------------------------------------
521+ //===----------------------------------------------------------------------===//
365522def : SysReg<"tselect", 0x7A0>;
366523def : SysReg<"tdata1", 0x7A1>;
367524def : SysReg<"tdata2", 0x7A2>;
368525def : SysReg<"tdata3", 0x7A3>;
526+ def : SysReg<"mcontext", 0x7A8>;
369527
370- //===-----------------------------------------------
528+ //===----------------------------------------------------------------------===//
371529// Debug Mode Registers
372- //===-----------------------------------------------
530+ //===----------------------------------------------------------------------===//
373531def : SysReg<"dcsr", 0x7B0>;
374532def : SysReg<"dpc", 0x7B1>;
375533
@@ -379,9 +537,9 @@ let AltName = "dscratch" in
379537def : SysReg<"dscratch0", 0x7B2>;
380538def : SysReg<"dscratch1", 0x7B3>;
381539
382- //===-----------------------------------------------
540+ //===----------------------------------------------------------------------===//
383541// User Vector CSRs
384- //===-----------------------------------------------
542+ //===----------------------------------------------------------------------===//
385543def : SysReg<"vstart", 0x008>;
386544def : SysReg<"vxsat", 0x009>;
387545def : SysReg<"vxrm", 0x00A>;
0 commit comments