Move some things, fix string to number

This commit is contained in:
zongor 2025-09-09 22:50:03 -07:00
parent 7634bbe1c9
commit 94a1375d51
3 changed files with 24 additions and 28 deletions

View File

@ -2,6 +2,27 @@
#include "vm.h" #include "vm.h"
#include <string.h> #include <string.h>
uint32_t real_alloc(VM *vm, float v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].f = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
uint32_t nat_alloc(VM *vm, uint32_t v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].u = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
uint32_t int_alloc(VM *vm, int32_t v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].i = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
/* Array of test mappings */ /* Array of test mappings */
struct TestMapping internal_tests[] = { struct TestMapping internal_tests[] = {
{"simple.ul", test_simple_compile}, {"simple.ul", test_simple_compile},

View File

@ -54,27 +54,6 @@ uint32_t str_alloc(VM *vm, const char *str, uint32_t length) {
return str_addr; return str_addr;
} }
uint32_t real_alloc(VM *vm, float v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].f = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
uint32_t nat_alloc(VM *vm, uint32_t v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].u = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
uint32_t int_alloc(VM *vm, int32_t v) {
uint32_t addr = vm->mp;
vm->memory[vm->mp++].i = v;
vm->frames[vm->fp].allocated.end++;
return addr;
}
/** /**
* Step to the next opcode in the vm. * Step to the next opcode in the vm.
*/ */
@ -462,21 +441,21 @@ bool step_vm(VM *vm) {
uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u;
uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u;
char *endptr; char *endptr;
int32_t value = (int32_t)strtol((char*)&vm->memory[src_addr], &endptr, 10); int32_t value = (int32_t)strtol((char*)&vm->memory[src_addr + 1], &endptr, 10);
vm->memory[dest_addr].i = value; vm->memory[dest_addr].i = value;
return true; return true;
} }
case OP_STRING_TO_UINT: { case OP_STRING_TO_UINT: {
uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u;
uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u;
long value = atol((char*)&vm->memory[src_addr]); long value = atol((char*)&vm->memory[src_addr + 1]);
vm->memory[dest_addr].u = value; vm->memory[dest_addr].u = value;
return true; return true;
} }
case OP_STRING_TO_REAL: { case OP_STRING_TO_REAL: {
uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u; uint32_t src_addr = (uint32_t)vm->frames[vm->fp].registers[src1].u;
uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u; uint32_t dest_addr = (uint32_t)vm->frames[vm->fp].registers[dest].u;
float value = atof((char*)&vm->memory[src_addr]); float value = atof((char*)&vm->memory[src_addr + 1]);
vm->memory[dest_addr].u = value; vm->memory[dest_addr].u = value;
return true; return true;
} }

View File

@ -3,11 +3,7 @@
#include "opcodes.h" #include "opcodes.h"
VM* init_vm();
bool step_vm(VM *vm); bool step_vm(VM *vm);
uint32_t str_alloc(VM *vm, const char *str, uint32_t length); uint32_t str_alloc(VM *vm, const char *str, uint32_t length);
uint32_t real_alloc(VM *vm, float v);
uint32_t nat_alloc(VM *vm, uint32_t v);
uint32_t int_alloc(VM *vm, int32_t v);
#endif #endif