X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Finsns%2Fcsrrs.h;h=4e8bde96379935755ef87b32903e5aadd81a5227;hb=4299874ad4b07ef457776513a64e5b2397a6a75e;hp=ba315d41fa121c5f514ee5d83dba226e977de590;hpb=e23899eae22505d001f94e9e0d00f7abc3191475;p=riscv-isa-sim.git diff --git a/riscv/insns/csrrs.h b/riscv/insns/csrrs.h index ba315d4..4e8bde9 100644 --- a/riscv/insns/csrrs.h +++ b/riscv/insns/csrrs.h @@ -1,2 +1,8 @@ -int csr = validate_csr(insn.csr(), insn.rs1() != 0); -WRITE_RD(sext_xprlen(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();