summaryrefslogtreecommitdiffhomepage
path: root/mixlib/xmix_vm.c
diff options
context:
space:
mode:
authorlitvin <litvindev@gmail.com>2015-01-12 10:18:17 +0300
committerjao <jao@gnu.org>2015-03-03 19:24:16 +0100
commit09b22f2e082350f398dcd142b6af70a30f105ce1 (patch)
tree7a6237a66ba550a3a96da5a371de11af036d2a9b /mixlib/xmix_vm.c
parentb83ce265d72783b8cc60e4020ec87908470cb8b6 (diff)
downloadmdk-09b22f2e082350f398dcd142b6af70a30f105ce1.tar.gz
mdk-09b22f2e082350f398dcd142b6af70a30f105ce1.tar.bz2
Add missed instructions: SLB,SRB,JAE,JAO,JXE,JXO (from volume 2, section 4.5.2)
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);
}