From fe51154698aaaeb254f4ff22f44e0a7da5ce0861 Mon Sep 17 00:00:00 2001 From: Toby Jaffey Date: Sun, 14 Dec 2025 00:58:35 +0000 Subject: [PATCH] Test for lb, lbu, lw, sb, sbu, sw explicitly --- test/extram/rom/rom.c | 19 ++++++++- test/extram/shared.h | 4 ++ test/extram/test/tests.c | 92 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletion(-) diff --git a/test/extram/rom/rom.c b/test/extram/rom/rom.c index c284bfb..00c06dc 100644 --- a/test/extram/rom/rom.c +++ b/test/extram/rom/rom.c @@ -77,7 +77,24 @@ void main(void) { // pass a string beyond end of extram println((uint32_t)UVM32_EXTRAM_BASE); // extram has been shrunk, this is now out of bounds, } break; - + case TEST15: { + int8_t *p = (int8_t *)UVM32_EXTRAM_BASE; + p[7] = -42; // single byte write + yield(0); + } break; + case TEST16: { + int8_t *p = (int8_t *)UVM32_EXTRAM_BASE; + printdec(p[7]); // single byte read + } break; + case TEST17: { + int16_t *p = (int16_t *)UVM32_EXTRAM_BASE; + p[7] = -1234; // short write + yield(0); + } break; + case TEST18: { + int16_t *p = (int16_t *)UVM32_EXTRAM_BASE; + printdec(p[7]); // short read + } break; } } diff --git a/test/extram/shared.h b/test/extram/shared.h index 05d77a8..0e83b66 100644 --- a/test/extram/shared.h +++ b/test/extram/shared.h @@ -16,5 +16,9 @@ enum { TEST12, TEST13, TEST14, + TEST15, + TEST16, + TEST17, + TEST18, }; diff --git a/test/extram/test/tests.c b/test/extram/test/tests.c index ebfadb5..a533d1c 100644 --- a/test/extram/test/tests.c +++ b/test/extram/test/tests.c @@ -401,3 +401,95 @@ void test_extram_buf_cstr_beyond_extram_end(void) { } +void test_extram_signed_byte_write(void) { + // run the vm + uvm32_run(&vmst, &evt, 100); + TEST_ASSERT_EQUAL(false, uvm32_extramDirty(&vmst)); + + // check for picktest syscall + TEST_ASSERT_EQUAL(evt.typ, UVM32_EVT_SYSCALL); + TEST_ASSERT_EQUAL(evt.data.syscall.code, SYSCALL_PICKTEST); + uvm32_arg_setval(&vmst, &evt, RET, TEST15); + + uvm32_run(&vmst, &evt, 100); + TEST_ASSERT_EQUAL(true, uvm32_extramDirty(&vmst)); + + // check that byte 7 only of extram has changed + int8_t *p = (int8_t *)extram; + for (int i=0;i