From e568ce539e9273edf17a6f20aa0124b934c597ee Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Sun, 29 Dec 2019 23:07:04 +0800 Subject: [PATCH] another trial --- nemu/src/memory/memory.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/nemu/src/memory/memory.cc b/nemu/src/memory/memory.cc index f4ce3bf..5fb2155 100644 --- a/nemu/src/memory/memory.cc +++ b/nemu/src/memory/memory.cc @@ -12,14 +12,16 @@ uint8_t pmem[PMEM_SIZE]; /* Memory accessing interfaces */ __attribute__((hot)) uint32_t paddr_read(paddr_t addr, int len) { - switch(len) { - case 4: return pmem_rw(addr, uint32_t); - case 2: return pmem_rw(addr, uint32_t) & 0x0000ffff; - case 1: return pmem_rw(addr, uint32_t) & 0x000000ff; - case 3: return pmem_rw(addr, uint32_t) & 0x00ffffff; - case 0: return 0; - } - return pmem_rw(addr, uint32_t) & (~0u >> ((4 - len) << 3)); + static const uint32_t niddle[] = {0, 0xff, 0xffff, 0xffffff, 0xffffffff}; + return pmem_rw(addr, uint32_t) & niddle[len]; +// switch(len) { +// case 4: return pmem_rw(addr, uint32_t); +// case 2: return pmem_rw(addr, uint32_t) & 0x0000ffff; +// case 1: return pmem_rw(addr, uint32_t) & 0x000000ff; +// case 3: return pmem_rw(addr, uint32_t) & 0x00ffffff; +// case 0: return 0; +// } +// return pmem_rw(addr, uint32_t) & (~0u >> ((4 - len) << 3)); } void paddr_write(paddr_t addr, uint32_t data, int len) { -- GitLab