diff --git a/llvm/lib/Target/RISCV/RISCVSystemOperands.td b/llvm/lib/Target/RISCV/RISCVSystemOperands.td index cabcb9eda06b1..5b46e7df25fc8 100644 --- a/llvm/lib/Target/RISCV/RISCVSystemOperands.td +++ b/llvm/lib/Target/RISCV/RISCVSystemOperands.td @@ -157,6 +157,8 @@ def : SysReg<"hideleg", 0x603>; def : SysReg<"hie", 0x604>; def : SysReg<"hcounteren", 0x606>; def : SysReg<"hgeie", 0x607>; +let isRV32Only = 1 in +def : SysReg<"hedelegh", 0x612>; //===----------------------------------------------------------------------===// // Hypervisor Trap Handling @@ -233,8 +235,10 @@ def : SysReg<"mideleg", 0x303>; def : SysReg<"mie", 0x304>; def : SysReg<"mtvec", 0x305>; def : SysReg<"mcounteren", 0x306>; -let isRV32Only = 1 in +let isRV32Only = 1 in { def : SysReg<"mstatush", 0x310>; +def : SysReg<"medelegh", 0x312>; +} // isRV32Only //===----------------------------------------------------------------------===// // Machine Trap Handling diff --git a/llvm/test/MC/RISCV/rv32-hypervisor-csr-names.s b/llvm/test/MC/RISCV/rv32-hypervisor-csr-names.s index aadee4fb4f3ad..79d87b3f2471c 100644 --- a/llvm/test/MC/RISCV/rv32-hypervisor-csr-names.s +++ b/llvm/test/MC/RISCV/rv32-hypervisor-csr-names.s @@ -219,3 +219,21 @@ csrrs t2, 0x214, zero csrrs t1, vsiph, zero # uimm12 csrrs t2, 0x254, zero + +################################## +# Hypervisor Trap Setup +################################## + +# hedelegh +# name +# CHECK-INST: csrrs t1, hedelegh, zero +# CHECK-ENC: encoding: [0x73,0x23,0x20,0x61] +# CHECK-INST-ALIAS: csrr t1, hedelegh +# uimm12 +# CHECK-INST: csrrs t2, hedelegh, zero +# CHECK-ENC: encoding: [0xf3,0x23,0x20,0x61] +# CHECK-INST-ALIAS: csrr t2, hedelegh +# name +csrrs t1, hedelegh, zero +# uimm12 +csrrs t2, 0x612, zero diff --git a/llvm/test/MC/RISCV/rv32-machine-csr-names.s b/llvm/test/MC/RISCV/rv32-machine-csr-names.s index 3d527e382376e..9e929b7eddeed 100644 --- a/llvm/test/MC/RISCV/rv32-machine-csr-names.s +++ b/llvm/test/MC/RISCV/rv32-machine-csr-names.s @@ -22,6 +22,20 @@ csrrs t1, mstatush, zero # uimm12 csrrs t2, 0x310, zero +# medelegh +# name +# CHECK-INST: csrrs t1, medelegh, zero +# CHECK-ENC: encoding: [0x73,0x23,0x20,0x31] +# CHECK-INST-ALIAS: csrr t1, medelegh +# uimm12 +# CHECK-INST: csrrs t2, medelegh, zero +# CHECK-ENC: encoding: [0xf3,0x23,0x20,0x31] +# CHECK-INST-ALIAS: csrr t2, medelegh +# name +csrrs t1, medelegh, zero +# uimm12 +csrrs t2, 0x312, zero + ######################### # Machine Configuration ######################### diff --git a/llvm/test/MC/RISCV/rv32-only-csr-names.s b/llvm/test/MC/RISCV/rv32-only-csr-names.s index db88eacf9396b..1604469210193 100644 --- a/llvm/test/MC/RISCV/rv32-only-csr-names.s +++ b/llvm/test/MC/RISCV/rv32-only-csr-names.s @@ -41,12 +41,16 @@ csrrs t1, henvcfgh, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system registe csrrs t1, htimedeltah, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'htimedeltah' is RV32 only +csrrs t1, hedelegh, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'hedelegh' is RV32 only + csrrs t1, mstatush, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'mstatush' is RV32 only csrrs t1, menvcfgh, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'menvcfgh' is RV32 only csrrs t1, mseccfgh, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'mseccfgh' is RV32 only +csrrs t1, medelegh, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'medelegh' is RV32 only + csrrs t1, pmpcfg1, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'pmpcfg1' is RV32 only csrrs t1, pmpcfg3, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'pmpcfg3' is RV32 only csrrs t1, pmpcfg5, zero # CHECK-NEED-RV32: :[[@LINE]]:11: error: system register 'pmpcfg5' is RV32 only