X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=riscv%2Finsns%2Fcsrrci.h;h=4d83cc0617edd871ebb9ad823d86a4663c310ce9;hb=4299874ad4b07ef457776513a64e5b2397a6a75e;hp=fc980569e61fbc28940e2bf6cb734744f4061a6d;hpb=bd9a5a429dad8ab54ae28d783eea6c3d7b6905f3;p=riscv-isa-sim.git diff --git a/riscv/insns/csrrci.h b/riscv/insns/csrrci.h index fc98056..4d83cc0 100644 --- a/riscv/insns/csrrci.h +++ b/riscv/insns/csrrci.h @@ -1,2 +1,8 @@ -int csr = validate_csr(insn.csr(), true); -WRITE_RD(p->set_pcr(csr, p->get_pcr(csr) & ~(reg_t)insn.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 & ~(reg_t)insn.rs1()); +} +WRITE_RD(sext_xlen(old)); +serialize();