From 09b22f2e082350f398dcd142b6af70a30f105ce1 Mon Sep 17 00:00:00 2001 From: litvin Date: Mon, 12 Jan 2015 10:18:17 +0300 Subject: Add missed instructions: SLB,SRB,JAE,JAO,JXE,JXO (from volume 2, section 4.5.2) --- mixlib/mix_types.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'mixlib/mix_types.c') 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 -- cgit v1.2.3