From de16a763e6bf266ad49384fa131a502a6174e7ba Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Fri, 29 Apr 2016 00:06:43 -0700 Subject: Use mbadaddr to speed up misaligned ld/st emulation --- machine/misaligned_ldst.c | 4 ++-- 1 file 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); -- cgit v1.1