Arithmetic assignment instructions (+=, -=, etc.)

This commit is contained in:
Nunuhara Cabbage
2019-10-07 16:12:24 -07:00
parent 587dc34ddb
commit 626e4f47d7
+51
View File
@@ -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 ---
//