This commit is contained in:
Trevor Spiteri 2019-02-02 02:32:10 +01:00
parent 0787f10480
commit b20969dc6d
1 changed files with 6 additions and 5 deletions

View File

@ -15,7 +15,6 @@
use core::cmp::Ordering;
use core::fmt::{Debug, Display};
use core::i32;
use frac::{Bit, False, True, Unsigned, U0, U1, U128, U16, U32, U64, U7, U8};
use sealed::{Fixed, Widest};
use {
@ -152,14 +151,15 @@ macro_rules! sealed_int {
let overflow = src_bits - dst_bits > need_to_shr + leading_zeros as i32;
let bits_128 = u128::from(self);
let (bits, lost_bits) = match need_to_shr {
i32::MIN..=-128 => (0, false),
-0x7fff_ffff..=-128 => (0, false),
-127..=-1 => (bits_128 << -need_to_shr, false),
0 => (bits_128, false),
1..=127 => {
let shifted = bits_128 >> need_to_shr;
(shifted, shifted << need_to_shr != bits_128)
}
_ => (0, true),
128..=0x7fff_ffff => (0, true),
_ => unreachable!(),
};
let dir = if lost_bits { Ordering::Less } else { Ordering::Equal };
(Widest::Unsigned(bits), dir, overflow)
@ -218,14 +218,15 @@ macro_rules! sealed_int {
let overflow = src_bits - dst_bits > need_to_shr + leading_ones as i32 - 1;
let bits_128 = i128::from(self);
let (bits, lost_bits) = match need_to_shr {
i32::MIN..=-128 => (0, false),
-0x7fff_ffff..=-128 => (0, false),
-127..=-1 => (bits_128 << -need_to_shr, false),
0 => (bits_128, false),
1..=127 => {
let shifted = bits_128 >> need_to_shr;
(shifted, shifted << need_to_shr != bits_128)
}
_ => (-1, true),
128..=0x7fff_ffff => (-1, true),
_ => unreachable!(),
};
let dir = if lost_bits { Ordering::Less } else { Ordering::Equal };
(Widest::Negative(bits), dir, overflow)