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