From 0f295221cac3cfe507cafa6cbf012c51537ce1c8 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Wed, 1 Nov 2023 20:08:40 +0000 Subject: VM runtime now maintains a heap internally Now need to create some instructions which manage the heap --- vm/main.c | 4 ++++ vm/runtime.c | 11 +++++++++++ vm/runtime.h | 5 ++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/vm/main.c b/vm/main.c index 75549fd..cb2c3fb 100644 --- a/vm/main.c +++ b/vm/main.c @@ -55,10 +55,14 @@ int main(int argc, char *argv[]) byte *stack = calloc(stack_size, 1); registers_t registers = {0}; darr_init(®isters, 8 * WORD_SIZE); + heap_t heap = {0}; + heap_create(&heap); + vm_t vm = {0}; vm_load_stack(&vm, stack, stack_size); vm_load_program(&vm, instructions, number); vm_load_registers(&vm, registers); + vm_load_heap(&vm, heap); #if VERBOSE >= 1 printf("\t[%sVM-SETUP%s]: Loaded stack and program into VM\n", TERM_GREEN, diff --git a/vm/runtime.c b/vm/runtime.c index 622228f..0fbea05 100644 --- a/vm/runtime.c +++ b/vm/runtime.c @@ -326,11 +326,22 @@ void vm_load_registers(vm_t *vm, registers_t registers) vm->registers = registers; } +void vm_load_heap(vm_t *vm, heap_t heap) +{ + vm->heap = heap; +} + void vm_stop(vm_t *vm) { free(vm->registers.data); free(vm->program.instructions); free(vm->stack.data); + heap_stop(&vm->heap); + + vm->registers = (registers_t){0}; + vm->program = (struct Program){0}; + vm->stack = (struct Stack){0}; + vm->heap = (heap_t){0}; } void vm_print_registers(vm_t *vm, FILE *fp) diff --git a/vm/runtime.h b/vm/runtime.h index 45d467d..6c6042a 100644 --- a/vm/runtime.h +++ b/vm/runtime.h @@ -16,6 +16,7 @@ #include #include +#include #include typedef enum @@ -45,6 +46,7 @@ typedef struct byte *data; word ptr, max; } stack; + heap_t heap; struct Program { inst_t *instructions; @@ -56,8 +58,9 @@ err_t vm_execute(vm_t *); err_t vm_execute_all(vm_t *); void vm_load_stack(vm_t *, byte *, size_t); -void vm_load_program(vm_t *, inst_t *, size_t); void vm_load_registers(vm_t *, registers_t); +void vm_load_heap(vm_t *, heap_t); +void vm_load_program(vm_t *, inst_t *, size_t); void vm_stop(vm_t *); // Print routines -- cgit v1.2.3-13-gbd6f