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) {