mirror of
https://github.com/rust-lang/rust.git
synced 2025-11-17 09:16:47 +00:00
Extend SSSE3 hadd/hsub tests to check overflow behavior (wrapping or saturating)
This commit is contained in:
parent
0d09b65521
commit
c07535ca79
@ -426,6 +426,22 @@ mod tests {
|
||||
let expected = _mm_setr_epi16(3, 7, 11, 15, 132, 7, 36, 25);
|
||||
let r = _mm_hadd_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test wrapping on overflow
|
||||
let a = _mm_setr_epi16(i16::MAX, 1, i16::MAX, 2, i16::MAX, 3, i16::MAX, 4);
|
||||
let b = _mm_setr_epi16(i16::MIN, -1, i16::MIN, -2, i16::MIN, -3, i16::MIN, -4);
|
||||
let expected = _mm_setr_epi16(
|
||||
i16::MIN,
|
||||
i16::MIN + 1,
|
||||
i16::MIN + 2,
|
||||
i16::MIN + 3,
|
||||
i16::MAX,
|
||||
i16::MAX - 1,
|
||||
i16::MAX - 2,
|
||||
i16::MAX - 3,
|
||||
);
|
||||
let r = _mm_hadd_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
@ -435,6 +451,22 @@ mod tests {
|
||||
let expected = _mm_setr_epi16(3, 7, 11, 15, 132, 7, 32767, -32768);
|
||||
let r = _mm_hadds_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test saturating on overflow
|
||||
let a = _mm_setr_epi16(i16::MAX, 1, i16::MAX, 2, i16::MAX, 3, i16::MAX, 4);
|
||||
let b = _mm_setr_epi16(i16::MIN, -1, i16::MIN, -2, i16::MIN, -3, i16::MIN, -4);
|
||||
let expected = _mm_setr_epi16(
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
);
|
||||
let r = _mm_hadds_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
@ -444,6 +476,13 @@ mod tests {
|
||||
let expected = _mm_setr_epi32(3, 7, 132, 7);
|
||||
let r = _mm_hadd_epi32(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test wrapping on overflow
|
||||
let a = _mm_setr_epi32(i32::MAX, 1, i32::MAX, 2);
|
||||
let b = _mm_setr_epi32(i32::MIN, -1, i32::MIN, -2);
|
||||
let expected = _mm_setr_epi32(i32::MIN, i32::MIN + 1, i32::MAX, i32::MAX - 1);
|
||||
let r = _mm_hadd_epi32(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
@ -453,6 +492,22 @@ mod tests {
|
||||
let expected = _mm_setr_epi16(-1, -1, -1, -1, -124, 1, 12, -13);
|
||||
let r = _mm_hsub_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test wrapping on overflow
|
||||
let a = _mm_setr_epi16(i16::MAX, -1, i16::MAX, -2, i16::MAX, -3, i16::MAX, -4);
|
||||
let b = _mm_setr_epi16(i16::MIN, 1, i16::MIN, 2, i16::MIN, 3, i16::MIN, 4);
|
||||
let expected = _mm_setr_epi16(
|
||||
i16::MIN,
|
||||
i16::MIN + 1,
|
||||
i16::MIN + 2,
|
||||
i16::MIN + 3,
|
||||
i16::MAX,
|
||||
i16::MAX - 1,
|
||||
i16::MAX - 2,
|
||||
i16::MAX - 3,
|
||||
);
|
||||
let r = _mm_hsub_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
@ -462,6 +517,22 @@ mod tests {
|
||||
let expected = _mm_setr_epi16(-1, -1, -1, -1, -124, 1, 32767, -32768);
|
||||
let r = _mm_hsubs_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test saturating on overflow
|
||||
let a = _mm_setr_epi16(i16::MAX, -1, i16::MAX, -2, i16::MAX, -3, i16::MAX, -4);
|
||||
let b = _mm_setr_epi16(i16::MIN, 1, i16::MIN, 2, i16::MIN, 3, i16::MIN, 4);
|
||||
let expected = _mm_setr_epi16(
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MAX,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
i16::MIN,
|
||||
);
|
||||
let r = _mm_hsubs_epi16(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
@ -471,6 +542,13 @@ mod tests {
|
||||
let expected = _mm_setr_epi32(-1, -1, -124, 1);
|
||||
let r = _mm_hsub_epi32(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
|
||||
// Test wrapping on overflow
|
||||
let a = _mm_setr_epi32(i32::MAX, -1, i32::MAX, -2);
|
||||
let b = _mm_setr_epi32(i32::MIN, 1, i32::MIN, 2);
|
||||
let expected = _mm_setr_epi32(i32::MIN, i32::MIN + 1, i32::MAX, i32::MAX - 1);
|
||||
let r = _mm_hsub_epi32(a, b);
|
||||
assert_eq_m128i(r, expected);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "ssse3")]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user