diff --git a/src/vm.c b/src/vm.c index 66eabc9..046c80b 100644 --- a/src/vm.c +++ b/src/vm.c @@ -843,6 +843,14 @@ static enum opcode execute_instruction(enum opcode opcode) stack_push(src_var); break; } + case R_EQUALE: { + int rhs_var = stack_pop().i; + int rhs_page = stack_pop().i; + int lhs_var = stack_pop().i; + int lhs_page = stack_pop().i; + stack_push(lhs_page == rhs_page && lhs_var == rhs_var ? 1 : 0); + break; + } case NEW: { union vm_value v; create_struct(stack_pop().i, &v); @@ -1747,6 +1755,14 @@ static enum opcode execute_instruction(enum opcode opcode) global_set(get_argument(0), local_get(get_argument(1)), true); break; } + case SH_STRUCTREF_GT_IMM: { + stack_push(member_get(get_argument(0)).i > get_argument(1) ? 1 : 0); + break; + } + case SH_STRUCT_ASSIGN_LOCALREF_ITOB: { + member_set(get_argument(0), !!local_get(get_argument(1)).i); + break; + } case SH_LOCAL_ASSIGN_STRUCTREF: { local_set(get_argument(0), member_get(get_argument(1)).i); break;