... | ... |
@@ -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);\ |