Move some things, fix string to number
This commit is contained in:
parent
7634bbe1c9
commit
94a1375d51
21
src/test.c
21
src/test.c
|
@ -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},
|
||||||
|
|
27
src/vm.c
27
src/vm.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
4
src/vm.h
4
src/vm.h
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue