Some bugfixes for CSR reading and setting FS for fflags updates (#43)
[riscv-isa-sim.git] / riscv / insns / csrrci.h
index 993f2d832ba8f6c0b2f42ea0698289ed2d764187..986d6013aa858bfad336e5c5f71dbd586b26e347 100644 (file)
@@ -1,4 +1,7 @@
-int csr = validate_csr(insn.csr(), true);
+bool write = insn.rs1() != 0;
+int csr = validate_csr(insn.csr(), write);
 reg_t old = p->get_csr(csr);
-p->set_csr(csr, old & ~(reg_t)insn.rs1());
+if (write) {
+  p->set_csr(csr, old & ~(reg_t)insn.rs1());
+}
 WRITE_RD(sext_xlen(old));