diff options
Diffstat (limited to 'src/vm.c')
-rw-r--r-- | src/vm.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -196,8 +196,14 @@ vm_run(VM *vm) { | |||
196 | Variable var = vm->chunk->vars[src]; | 196 | Variable var = vm->chunk->vars[src]; |
197 | vm->regs[dst].i = (ptrsize)&vm->fp[var.offset / 8]; | 197 | vm->regs[dst].i = (ptrsize)&vm->fp[var.offset / 8]; |
198 | } break; | 198 | } break; |
199 | case OP_LDSTR: { | ||
200 | u8 dst = instruction.dst; | ||
201 | u8 src = instruction.a; | ||
202 | Str *str = &vm->chunk->strings[src]; | ||
203 | vm->regs[dst].ptr = (ptrsize)str; | ||
204 | } break; | ||
199 | case OP_ST64I: { | 205 | case OP_ST64I: { |
200 | sz value = vm->regs[instruction.dst].i; | 206 | sz value = vm->regs[instruction.dst].ptr; |
201 | s64 *addr = (s64 *)vm->regs[instruction.a].ptr; | 207 | s64 *addr = (s64 *)vm->regs[instruction.a].ptr; |
202 | sz offset = vm->chunk->constants[instruction.b].i; | 208 | sz offset = vm->chunk->constants[instruction.b].i; |
203 | addr[offset] = value; | 209 | addr[offset] = value; |
@@ -293,6 +299,11 @@ vm_run(VM *vm) { | |||
293 | } break; | 299 | } break; |
294 | case OP_PRINTSTR: { | 300 | case OP_PRINTSTR: { |
295 | u8 idx = instruction.dst; | 301 | u8 idx = instruction.dst; |
302 | Str *string = (Str*)vm->regs[idx].ptr; | ||
303 | print("%s", *string); | ||
304 | } break; | ||
305 | case OP_PRINTSTRI: { | ||
306 | u8 idx = instruction.dst; | ||
296 | Str string = vm->chunk->strings[idx]; | 307 | Str string = vm->chunk->strings[idx]; |
297 | print("%s", string); | 308 | print("%s", string); |
298 | } break; | 309 | } break; |