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