From: Fei Wu <fe...@in...> - 2023-05-26 13:57:53
|
Signed-off-by: Fei Wu <fe...@in...> --- VEX/priv/guest_riscv64_toIR.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/VEX/priv/guest_riscv64_toIR.c b/VEX/priv/guest_riscv64_toIR.c index 30644e171..ccad384d4 100644 --- a/VEX/priv/guest_riscv64_toIR.c +++ b/VEX/priv/guest_riscv64_toIR.c @@ -826,6 +826,8 @@ static const HChar* nameCSR(UInt csr) return "frm"; case 0x003: return "fcsr"; + case 0xc20: + return "vl"; default: vpanic("nameCSR(riscv64)"); } @@ -3376,7 +3378,7 @@ static Bool dis_RV64Zicsr(/*MB_OUT*/ DisResult* dres, UInt rd = INSN(11, 7); UInt rs1 = INSN(19, 15); UInt csr = INSN(31, 20); - if (csr != 0x001 && csr != 0x002 && csr != 0x003) { + if (csr != 0x001 && csr != 0x002 && csr != 0x003 && csr != 0xc20) { /* Invalid CSRRS, fall through. */ } else { switch (csr) { @@ -3419,6 +3421,15 @@ static Bool dis_RV64Zicsr(/*MB_OUT*/ DisResult* dres, binop(Iop_And32, getIReg32(rs1), mkU32(0xff)))); break; } + case 0xc20: { + /* vl */ + IRTemp vl = newTemp(irsb, Ity_I64); + assign(irsb, vl, IRExpr_Get(OFFB_VL, Ity_I64)); + if (rd != 0) + putIReg64(irsb, rd, mkexpr(vl)); + vassert(rs1 == 0); + break; + } default: vassert(0); } -- 2.25.1 |