diff options
-rw-r--r-- | machine/misaligned_ldst.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/machine/misaligned_ldst.c b/machine/misaligned_ldst.c index cf6b1d6..2225ea1 100644 --- a/machine/misaligned_ldst.c +++ b/machine/misaligned_ldst.c @@ -14,7 +14,7 @@ void misaligned_load_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) union byte_array val; uintptr_t mstatus; insn_t insn = get_insn(mepc, &mstatus); - uintptr_t addr = GET_RS1(insn, regs) + IMM_I(insn); + uintptr_t addr = read_csr(mbadaddr); int shift = 0, fp = 0, len; if ((insn & MASK_LW) == MATCH_LW) @@ -77,7 +77,7 @@ void misaligned_store_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) else return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - uintptr_t addr = GET_RS1(insn, regs) + IMM_S(insn); + uintptr_t addr = read_csr(mbadaddr); for (int i = 0; i < len; i++) store_uint8_t((void *)(addr + i), val.bytes[i], mepc); |