From 626e4f47d79dc50569097c2008c8cd2e946e07ea Mon Sep 17 00:00:00 2001 From: Nunuhara Cabbage Date: Mon, 7 Oct 2019 16:12:24 -0700 Subject: [PATCH] Arithmetic assignment instructions (+=, -=, etc.) --- vm.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/vm.c b/vm.c index f4ee7ec..997a60f 100644 --- a/vm.c +++ b/vm.c @@ -333,6 +333,57 @@ static void execute_instruction(int16_t opcode) a = stack_pop(); stack_push(a == b ? 1 : 0); break; + // +=, -=, etc. + case PLUSA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] += v; + break; + case MINUSA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] -= v; + break; + case MULA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] *= v; + break; + case DIVA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] /= v; + break; + case MODA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] %= v; + break; + case ANDA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] &= v; + break; + case ORA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] |= v; + break; + case XORA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] ^= v; + break; + case LSHIFTA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] <<= v; + break; + case RSHIFTA: + v = stack_pop(); + index = stack_pop_ref(); + frame_stack[index] >>= v; + break; // // --- Strings --- //