From 47c7d6baf7d39da5e2683edc3674494fcd3874ba Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sun, 22 Oct 2023 17:01:15 +0100 Subject: Store the result of OP_POP in the last register as a word Instead of making routines to handle data in the `ret` register, just store the result of POP into the last word register. This means we are no longer using vm_pop_* or POP_ROUTINES for the vm_execute script on OP_POP: instead we'll just use vm_mov_* which automatically pops the datum for us, while moving the datum to the last register. --- src/runtime.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/runtime.h') diff --git a/src/runtime.h b/src/runtime.h index 2ec01df..3e4c295 100644 --- a/src/runtime.h +++ b/src/runtime.h @@ -24,7 +24,9 @@ typedef struct { struct Registers { + // Used for internal word ret; + // General registers word reg[VM_REGISTERS]; } registers; struct Stack @@ -50,12 +52,15 @@ void vm_load_stack(vm_t *, byte *, size_t); void vm_load_program(vm_t *, inst_t *, size_t); // Print routines +#define VM_PRINT_PROGRAM_EXCERPT 5 void vm_print_registers(vm_t *, FILE *); void vm_print_stack(vm_t *, FILE *); -#define VM_PRINT_PROGRAM_EXCERPT 5 void vm_print_program(vm_t *, FILE *); void vm_print_all(vm_t *, FILE *); +data_t vm_peek(vm_t *, data_type_t); + +// Execution routines void vm_push_byte(vm_t *, data_t); void vm_push_hword(vm_t *, data_t); void vm_push_word(vm_t *, data_t); @@ -93,13 +98,6 @@ data_t vm_pop_byte(vm_t *); data_t vm_pop_hword(vm_t *); data_t vm_pop_word(vm_t *); -typedef data_t (*pop_f)(vm_t *); -static const pop_f POP_ROUTINES[] = { - [OP_POP_BYTE] = vm_pop_byte, - [OP_POP_HWORD] = vm_pop_hword, - [OP_POP_WORD] = vm_pop_word, -}; - void vm_not_byte(vm_t *); void vm_not_hword(vm_t *); void vm_not_word(vm_t *); -- cgit v1.2.3-13-gbd6f