summaryrefslogtreecommitdiffhomepage
path: root/mixlib/xmix_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'mixlib/xmix_vm.c')
-rw-r--r--mixlib/xmix_vm.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/mixlib/xmix_vm.c b/mixlib/xmix_vm.c
index 0f1104a..cf20ee1 100644
--- a/mixlib/xmix_vm.c
+++ b/mixlib/xmix_vm.c
@@ -188,6 +188,14 @@ sla_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
mix_word_shift_right_circular (get_rA_ (vm), get_rX_ (vm), n,
&get_rA_ (vm), &get_rX_ (vm));
break;
+ case mix_SLB:
+ mix_word_shift_left_binary (get_rA_ (vm), get_rX_ (vm), n,
+ &get_rA_ (vm), &get_rX_ (vm));
+ break;
+ case mix_SRB:
+ mix_word_shift_right_binary (get_rA_ (vm), get_rX_ (vm), n,
+ &get_rA_ (vm), &get_rX_ (vm));
+ break;
default:
fail_unexpected_ (vm);
}
@@ -481,6 +489,12 @@ jpx_handler_ (mix_vm_t *vm, const mix_ins_t *ins)
jump = mix_word_magnitude (val) == MIX_WORD_ZERO
|| mix_word_is_negative (val);
break;
+ case mix_JAE: case mix_JXE:
+ jump = mix_word_is_even (val);
+ break;
+ case mix_JAO: case mix_JXO:
+ jump = mix_word_is_odd (val);
+ break;
default:
fail_unexpected_ (vm);
}