Merge pull request #3362 from dheaton-arm/implement-unarrow

Implement `Unarrow`, `Uunarrow`, and `Snarrow` for the interpreter
This commit is contained in:
Chris Fallin
2021-09-21 10:06:46 -07:00
committed by GitHub
9 changed files with 166 additions and 10 deletions

View File

@@ -79,6 +79,30 @@ impl Type {
}
}
/// Get the (minimum, maximum) values represented by each lane in the type.
/// Note that these are returned as unsigned 'bit patterns'.
pub fn bounds(self, signed: bool) -> (u128, u128) {
if signed {
match self.lane_type() {
I8 => (i8::MIN as u128, i8::MAX as u128),
I16 => (i16::MIN as u128, i16::MAX as u128),
I32 => (i32::MIN as u128, i32::MAX as u128),
I64 => (i64::MIN as u128, i64::MAX as u128),
I128 => (i128::MIN as u128, i128::MAX as u128),
_ => unimplemented!(),
}
} else {
match self.lane_type() {
I8 => (u8::MIN as u128, u8::MAX as u128),
I16 => (u16::MIN as u128, u16::MAX as u128),
I32 => (u32::MIN as u128, u32::MAX as u128),
I64 => (u64::MIN as u128, u64::MAX as u128),
I128 => (u128::MIN, u128::MAX),
_ => unimplemented!(),
}
}
}
/// Get an integer type with the requested number of bits.
pub fn int(bits: u16) -> Option<Self> {
match bits {