Browse Source
* csrrc[i] and csrrs[i] don't write CSRs if rs/zimm == 0 * Dirty fp state when setting new fp exceptions * Set FS to dirty for all non-zero fflags writes.pull/39/head
committed by
Andrew Waterman
5 changed files with 24 additions and 9 deletions
@ -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 & ~RS1); |
|||
if (write) { |
|||
p->set_csr(csr, old & ~RS1); |
|||
} |
|||
WRITE_RD(sext_xlen(old)); |
|||
|
|||
@ -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)); |
|||
|
|||
@ -1,4 +1,7 @@ |
|||
int csr = validate_csr(insn.csr(), insn.rs1() != 0); |
|||
bool write = insn.rs1() != 0; |
|||
int csr = validate_csr(insn.csr(), write); |
|||
reg_t old = p->get_csr(csr); |
|||
p->set_csr(csr, old | RS1); |
|||
if (write) { |
|||
p->set_csr(csr, old | RS1); |
|||
} |
|||
WRITE_RD(sext_xlen(old)); |
|||
|
|||
@ -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 | insn.rs1()); |
|||
if (write) { |
|||
p->set_csr(csr, old | insn.rs1()); |
|||
} |
|||
WRITE_RD(sext_xlen(old)); |
|||
|
|||
Loading…
Reference in new issue