From d2970f45141b744ad7486a449906260b0564c2a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20S=C3=A1nchez=20Mu=C3=B1oz?= Date: Mon, 16 Oct 2023 18:48:30 +0200 Subject: [PATCH] Extend _mm_madd_epi16 test to check cases with large values. --- .../stdarch/crates/core_arch/src/x86/sse2.rs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/library/stdarch/crates/core_arch/src/x86/sse2.rs b/library/stdarch/crates/core_arch/src/x86/sse2.rs index 7831ea74353d..bc9133913817 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse2.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse2.rs @@ -3139,6 +3139,32 @@ mod tests { let r = _mm_madd_epi16(a, b); let e = _mm_setr_epi32(29, 81, 149, 233); assert_eq_m128i(r, e); + + // Test large values. + // MIN*MIN+MIN*MIN will overflow into i32::MIN. + let a = _mm_setr_epi16( + i16::MAX, + i16::MAX, + i16::MIN, + i16::MIN, + i16::MIN, + i16::MAX, + 0, + 0, + ); + let b = _mm_setr_epi16( + i16::MAX, + i16::MAX, + i16::MIN, + i16::MIN, + i16::MAX, + i16::MIN, + 0, + 0, + ); + let r = _mm_madd_epi16(a, b); + let e = _mm_setr_epi32(0x7FFE0002, i32::MIN, -0x7FFF0000, 0); + assert_eq_m128i(r, e); } #[simd_test(enable = "sse2")]