diff options
author | litvin <litvindev@gmail.com> | 2015-01-12 10:18:17 +0300 |
---|---|---|
committer | jao <jao@gnu.org> | 2015-03-03 19:24:16 +0100 |
commit | 09b22f2e082350f398dcd142b6af70a30f105ce1 (patch) | |
tree | 7a6237a66ba550a3a96da5a371de11af036d2a9b /mixlib/mix_types.c | |
parent | b83ce265d72783b8cc60e4020ec87908470cb8b6 (diff) | |
download | mdk-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/mix_types.c')
-rw-r--r-- | mixlib/mix_types.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/mixlib/mix_types.c b/mixlib/mix_types.c index 46e87a2..4dac3ba 100644 --- a/mixlib/mix_types.c +++ b/mixlib/mix_types.c @@ -463,6 +463,40 @@ mix_word_shift_right_circular (mix_word_t A, mix_word_t X, gulong count, | ( mix_word_magnitude (A1) >> c ) | ( MIX_WORD_MAX & (X1 << (30 - c)) ); } +void +mix_word_shift_left_binary (mix_word_t A, mix_word_t X, gulong count, + mix_word_t *pA, mix_word_t *pX) +{ + if ( pX != NULL ) *pX = mix_word_sign (X); + if ( pA != NULL ) *pA = mix_word_sign (A); + if (count < 30) { + if ( pX != NULL ) *pX |= MIX_WORD_MAX & (X << count); + if ( pA != NULL ) + *pA |= MIX_WORD_MAX & ( (A << count) | + (mix_word_magnitude (X) >> (30 - count)) ); + } else if (count < 60 && pA != NULL) + *pA |= MIX_WORD_MAX & (X << (count - 30)); + else + ; +} + +void +mix_word_shift_right_binary (mix_word_t A, mix_word_t X, gulong count, + mix_word_t *pA, mix_word_t *pX) +{ + if ( pX != NULL ) *pX = mix_word_sign (X); + if ( pA != NULL ) *pA = mix_word_sign (A); + if (count < 30) { + if ( pA != NULL ) + *pA |= mix_word_magnitude (A) >> count; + if ( pX != NULL ) + *pX |= MIX_WORD_MAX & ( (mix_word_magnitude (X) >> count) + | (A << (30 - count)) ); + } else if (count < 60 && pX != NULL) + *pX |= mix_word_magnitude (A) >> (count - 30); + else + ; +} /* Printable representation */ void |