diff options
Diffstat (limited to 'src/vm.c')
-rw-r--r-- | src/vm.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -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: { |