X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Finsns%2Fcsrrc.h;h=0472d80efd5164b885d99d94f7a58d8359a26037;hb=4299874ad4b07ef457776513a64e5b2397a6a75e;hp=8ca7c4173783806ed54e91389e658dc7216f93dd;hpb=e85cb99c5e042ebce78f64213677a48ee7ba0491;p=riscv-isa-sim.git diff --git a/riscv/insns/csrrc.h b/riscv/insns/csrrc.h index 8ca7c41..0472d80 100644 --- a/riscv/insns/csrrc.h +++ b/riscv/insns/csrrc.h @@ -1,2 +1,8 @@ -int csr = validate_csr(insn.csr(), true); -WRITE_RD(p->set_pcr(csr, p->get_pcr(csr) & ~RS1)); +bool write = insn.rs1() != 0; +int csr = validate_csr(insn.csr(), write); +reg_t old = p->get_csr(csr); +if (write) { + p->set_csr(csr, old & ~RS1); +} +WRITE_RD(sext_xlen(old)); +serialize();