refactor to reduce repeats

This commit is contained in:
zongor 2025-06-14 14:54:38 -04:00
parent bf2609c6ee
commit 29a6a3d471
1 changed files with 17 additions and 30 deletions

View File

@ -14,6 +14,13 @@ const char radix_set[11] = "0123456789";
return pc; \
} while (0)
#define MATH_OP(accessor, op) \
do { \
memory[dest_addr].accessor = \
memory[src1_addr].accessor op memory[src2_addr].accessor; \
return pc; \
} while (0)
/**
* String copy in data memory.
*/
@ -47,45 +54,25 @@ uint32_t step_vm(Word *memory, uint32_t memory_size, uint32_t pc) {
case OP_HALT:
return 0;
case OP_ADD_INT:
memory[dest_addr].u = memory[src1_addr].i + memory[src2_addr].i;
return pc;
MATH_OP(i, +);
case OP_SUB_INT:
memory[dest_addr].u = memory[src1_addr].i - memory[src2_addr].i;
return pc;
MATH_OP(i, -);
case OP_MUL_INT:
memory[dest_addr].u = memory[src1_addr].i * memory[src2_addr].i;
return pc;
MATH_OP(i, *);
case OP_DIV_INT:
memory[dest_addr].u = memory[src1_addr].i / memory[src2_addr].i;
return pc;
MATH_OP(i, /);
case OP_ADD_UINT:
memory[dest_addr].u = memory[src1_addr].u + memory[src2_addr].u;
return pc;
MATH_OP(u, +);
case OP_SUB_UINT:
memory[dest_addr].u = memory[src1_addr].u - memory[src2_addr].u;
return pc;
MATH_OP(u, -);
case OP_MUL_UINT:
memory[dest_addr].u = memory[src1_addr].u * memory[src2_addr].u;
return pc;
MATH_OP(u, *);
case OP_DIV_UINT:
memory[dest_addr].u = memory[src1_addr].u / memory[src2_addr].u;
return pc;
MATH_OP(u, /);
case OP_ADD_REAL:
memory[dest_addr].q = memory[src1_addr].q + memory[src2_addr].q;
return pc;
MATH_OP(q, +);
case OP_SUB_REAL:
memory[dest_addr].q = memory[src1_addr].q - memory[src2_addr].q;
return pc;
MATH_OP(q, -);
case OP_MUL_REAL: {
int32_t a = memory[src1_addr].q;
int32_t b = memory[src2_addr].q;