diff --git a/nemu/src/memory/memory.cc b/nemu/src/memory/memory.cc index f4ce3bf89836de568c700095f03384f0db196bf4..5fb2155def3c9ab4487f22957523225ff60945a7 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) {