diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-15 22:16:31 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-10-15 22:16:31 +0100 |
commit | cd19f1e1d30f52c073b6871c436e770ce2ffdda0 (patch) | |
tree | e91d680d6f7cc52d790e5fe708fb09551206d3bf /src/runtime.c | |
parent | 1cb54dc9949f80ce1bc8c54a806ebea920c70ec5 (diff) | |
download | ovm-cd19f1e1d30f52c073b6871c436e770ce2ffdda0.tar.gz ovm-cd19f1e1d30f52c073b6871c436e770ce2ffdda0.tar.bz2 ovm-cd19f1e1d30f52c073b6871c436e770ce2ffdda0.zip |
Better checking of opcode types
Introduced an enum (opcode_type_t) for the masks and values of each
opcode, which allows defining a single enum which checks an opcode by
a opcode_type_t.
Diffstat (limited to 'src/runtime.c')
-rw-r--r-- | src/runtime.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/runtime.c b/src/runtime.c index b9870de..9d78b09 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -23,26 +23,26 @@ void vm_execute(vm_t *vm) return; inst_t instruction = prog->instructions[prog->ptr]; - if (OPCODE_IS_PUSH(instruction.opcode)) + if (OPCODE_IS_TYPE(instruction.opcode, OP_TYPE_PUSH)) { PUSH_ROUTINES[instruction.opcode](vm, instruction.operand); vm->registers.ret = instruction.operand.as_word; prog->ptr++; } - else if (OPCODE_IS_PUSH_REG(instruction.opcode)) + else if (OPCODE_IS_TYPE(instruction.opcode, OP_TYPE_PUSH_REGISTER)) { PUSH_REG_ROUTINES[instruction.opcode](vm, instruction.reg); vm->registers.ret = instruction.operand.as_word; prog->ptr++; } - else if (OPCODE_IS_POP(instruction.opcode)) + else if (OPCODE_IS_TYPE(instruction.opcode, OP_TYPE_POP)) { // NOTE: We use the `ret` register for the result of this pop data_t d = POP_ROUTINES[instruction.opcode](vm); vm->registers.ret = d.as_word; prog->ptr++; } - else if (OPCODE_IS_MOV(instruction.opcode)) + else if (OPCODE_IS_TYPE(instruction.opcode, OP_TYPE_MOV)) { MOV_ROUTINES[instruction.opcode](vm, instruction.operand, instruction.reg); vm->registers.ret = instruction.operand.as_word; |