Browse code

READ1,8,16,32,64->READN

Török Edvin authored on 2010/03/06 22:54:14
Showing 1 changed files
... ...
@@ -256,24 +256,19 @@ static always_inline struct stack_entry *pop_stack(struct stack *stack,
256 256
     TRACE_W(x, p, PSIZE*8);\
257 257
     *(void**)&values[p] = x
258 258
 
259
-#define READ1(x, p) CHECK_GT(func->numBytes, p);\
260
-    x = (*(uint8_t*)&values[p])&1;\
261
-    TRACE_R(x)
262
-#define READ8(x, p) CHECK_GT(func->numBytes, p);\
263
-    x = *(uint8_t*)&values[p];\
264
-    TRACE_R(x)
265
-#define READ16(x, p) CHECK_GT(func->numBytes, p+1);\
266
-    CHECK_EQ((p)&1, 0);\
267
-    x = *(uint16_t*)&values[p];\
268
-    TRACE_R(x)
269
-#define READ32(x, p) CHECK_GT(func->numBytes, p+3);\
270
-    CHECK_EQ((p)&3, 0);\
271
-    x = *(uint32_t*)&values[p];\
272
-    TRACE_R(x)
273
-#define READ64(x, p) CHECK_GT(func->numBytes, p+7);\
274
-    CHECK_EQ((p)&7, 0);\
275
-    x = *(uint64_t*)&values[p];\
259
+#define uint_type(n) uint##n##_t
260
+#define READN(x, n, p)\
261
+    CHECK_GT(func->numBytes, p+(n/8)-1);\
262
+    x = *(uint_type(n)*)&values[p];\
276 263
     TRACE_R(x)
264
+
265
+#define READ1(x, p) READN(x, 8, p);\
266
+    x = x&1
267
+#define READ8(x, p) READN(x, 8, p)
268
+#define READ16(x, p) READN(x, 16, p)
269
+#define READ32(x, p) READN(x, 32, p)
270
+#define READ64(x, p) READN(x, 64, p)
271
+
277 272
 #define PSIZE sizeof(void*)
278 273
 #define READP(x, p) CHECK_GT(func->numBytes, p+PSIZE-1);\
279 274
     CHECK_EQ((p)&(PSIZE-1), 0);\