diff options
Diffstat (limited to 'ops')
| -rw-r--r-- | ops/common.h | 13 | ||||
| -rw-r--r-- | ops/end.c | 3 |
2 files changed, 9 insertions, 7 deletions
diff --git a/ops/common.h b/ops/common.h index 546b064..6b124b3 100644 --- a/ops/common.h +++ b/ops/common.h @@ -6,19 +6,22 @@ typedef unsigned long reg_t; typedef signed long sreg_t; -typedef void (*op_call)(reg_t *sp, reg_t a, reg_t x, reg_t y, reg_t o); +typedef reg_t (*op_call)(reg_t *sp, reg_t a, reg_t x, reg_t y, reg_t o); #define NEXT_OP(sp, a, x, y, o) \ - ((op_call)(&__next_op))((sp), (a), (x), (y), (o)); + return ((op_call)(&__next_op))((sp), (a), (x), (y), (o)); -#define JUMP(target, sp, a, x, y, o) \ +#define CALL(target, sp, a, x, y, o) \ ((op_call)(target))((sp), (a), (x), (y), (o)); +#define JUMP(target, sp, a, x, y, o) \ + return CALL(target, sp, a, x, y, o); + #define BRANCH(target, cond, sp, a, x, y, o) \ - ((op_call)((cond) ? (void *)(target) : (void *)&__next_op)) \ + return ((op_call)((cond) ? (void *)(target) : (void *)&__next_op)) \ ((sp), (a), (x), (y), (o)); \ -#define DEFINE_OP(name) void _op(reg_t *sp, reg_t a, reg_t x, reg_t y, reg_t o) +#define DEFINE_OP(name) reg_t _op(reg_t *sp, reg_t a, reg_t x, reg_t y, reg_t o) #define UNUSED(x) (void)(x); @@ -6,8 +6,7 @@ DEFINE_OP(end) { UNUSED(sp); UNUSED(a); - UNUSED(x); UNUSED(y); UNUSED(o); - return; + return x; } |
