From 1d200524659fadeeeebac6fc832675f985baebe5 Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Sun, 9 Mar 2025 18:17:31 +0100 Subject: [PATCH] test mem --- src/emu.rs | 2 +- tests/check/mem.S | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/check/mem.S diff --git a/src/emu.rs b/src/emu.rs index bd703b5..897fd28 100644 --- a/src/emu.rs +++ b/src/emu.rs @@ -250,7 +250,7 @@ impl Emulator { } Inst::Lhu { offset, dest, base } => { let addr = self[base].wrapping_add(offset); - self[dest] = self.mem.load_u8(addr)? as u32; + self[dest] = self.mem.load_u16(addr)? as u32; } Inst::Lw { offset, dest, base } => { let addr = self[base].wrapping_add(offset); diff --git a/tests/check/mem.S b/tests/check/mem.S new file mode 100644 index 0000000..1ffc3fa --- /dev/null +++ b/tests/check/mem.S @@ -0,0 +1,77 @@ +# Load and Store Instructions + +#include "../helper.S" + + +.macro CASE_NO_OFFSET_DIFF_RESULT s l value result + li t1, \value + \s t1, 0(t0) + \l t2, 0(t0) + ASSERT_EQ t2, \result +.endm + +.macro CASE_NO_OFFSET s l value + CASE_NO_OFFSET_DIFF_RESULT \s, \l, \value, \value +.endm + +.macro CASE_SAME_OFFSET s l value offset + li t1, \value + \s t1, \offset(t0) + \l t2, \offset(t0) + ASSERT_EQ t2, \value +.endm + +.macro CASE_ADDED_OFFSET s l value offset + addi t3, t0, \offset + li t1, \value + \s t1, \offset(t0) + \l t2, 0(t3) + ASSERT_EQ t2, \value +.endm + +START_TEST + li t0, 0 + + ##### word + + CASE_NO_OFFSET sw, lw, -4 + CASE_SAME_OFFSET sw, lw, -5, 4 + CASE_SAME_OFFSET sw, lw, -6, 1000 + CASE_ADDED_OFFSET sw, lw, -7, 4 + CASE_ADDED_OFFSET sw, lw, -8, 1000 + + ##### half + + CASE_NO_OFFSET_DIFF_RESULT sh, lh, 65535, -1 + CASE_NO_OFFSET sh, lhu, 65535 + + CASE_NO_OFFSET sh, lh, 21450 + CASE_SAME_OFFSET sh, lh, 21451, 4 + CASE_SAME_OFFSET sh, lh, 21452, 1000 + CASE_ADDED_OFFSET sh, lh, 21453, 4 + CASE_ADDED_OFFSET sh, lh, 21454, 1000 + + CASE_NO_OFFSET sh, lhu, 20420 + CASE_SAME_OFFSET sh, lhu, 20421, 4 + CASE_SAME_OFFSET sh, lhu, 20422, 1000 + CASE_ADDED_OFFSET sh, lhu, 20423, 4 + CASE_ADDED_OFFSET sh, lhu, 20424, 1000 + + ##### byte + + CASE_NO_OFFSET_DIFF_RESULT sb, lb, 255, -1 + CASE_NO_OFFSET sb, lbu, 255 + + CASE_NO_OFFSET sb, lb, 90 + CASE_SAME_OFFSET sb, lb, 90, 4 + CASE_SAME_OFFSET sb, lb, 91, 1000 + CASE_ADDED_OFFSET sb, lb, 92, 4 + CASE_ADDED_OFFSET sb, lb, 93, 1000 + + CASE_NO_OFFSET sb, lbu, 110 + CASE_SAME_OFFSET sb, lbu, 110, 4 + CASE_SAME_OFFSET sb, lbu, 111, 1000 + CASE_ADDED_OFFSET sb, lbu, 112, 4 + CASE_ADDED_OFFSET sb, lbu, 113, 1000 + + PASS