aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index 556fbe9..fac477a 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -134,18 +134,26 @@ vm_run(VM *vm) {
134 vm->regs[dst].f = 134 vm->regs[dst].f =
135 fmod(vm->regs[src_a].f, vm->chunk->constants[src_b].f); 135 fmod(vm->regs[src_a].f, vm->chunk->constants[src_b].f);
136 } break; 136 } break;
137 case OP_LDVAR: {
138 u8 dst = instruction.dst;
139 u8 src = instruction.a;
140 println("dst: %d src: %d", dst, src);
141 Variable var = vm->chunk->vars[src];
142 s64 *stack = (s64 *)&vm->stack[var.offset];
143 vm->regs[dst].i = *stack;
144 } break;
137 case OP_STVAR: { 145 case OP_STVAR: {
138 u8 dst = instruction.dst; 146 u8 dst = instruction.dst;
139 u8 src = instruction.a; 147 u8 src = instruction.a;
140 Variable var = vm->chunk->vars[dst]; 148 Variable var = vm->chunk->vars[dst];
141 s64 *stack = (s64*)&vm->stack[var.offset]; 149 s64 *stack = (s64 *)&vm->stack[var.offset];
142 *stack = vm->regs[src].i; 150 *stack = vm->regs[src].i;
143 } break; 151 } break;
144 case OP_STVARI: { 152 case OP_STVARI: {
145 u8 dst = instruction.dst; 153 u8 dst = instruction.dst;
146 u8 src = instruction.a; 154 u8 src = instruction.a;
147 Variable var = vm->chunk->vars[dst]; 155 Variable var = vm->chunk->vars[dst];
148 s64 *stack = (s64*)&vm->stack[var.offset]; 156 s64 *stack = (s64 *)&vm->stack[var.offset];
149 *stack = vm->chunk->constants[src].i; 157 *stack = vm->chunk->constants[src].i;
150 } break; 158 } break;
151 case OP_HALT: { 159 case OP_HALT: {