From 580a179bbe4a06f1c66059a95b03a838f132aee6 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Thu, 26 Feb 2026 00:42:04 +0000 Subject: [PATCH 01/10] Add missing runtime tests for alias intrinsics: _mm_cvt_ss2si, _mm_cvtt_ss2si, _mm_cvt_si2ss, _mm_set_ps1 --- .../stdarch/crates/core_arch/src/x86/sse.rs | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 3f7781cc7dc4..0ec842f9fc7c 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3013,6 +3013,22 @@ fn test_mm_cvtss_si32() { } } + #[simd_test(enable = "sse")] + fn test_mm_cvt_ss2si() { + let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; + let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; + for i in 0..inputs.len() { + let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); + let e = result[i]; + let r = _mm_cvt_ss2si(x); + assert_eq!( + e, r, + "TestCase #{} _mm_cvt_ss2si({:?}) = {}, expected: {}", + i, x, r, e + ); + } + } + #[simd_test(enable = "sse")] fn test_mm_cvttss_si32() { let inputs = &[ @@ -3038,6 +3054,31 @@ fn test_mm_cvttss_si32() { } } + #[simd_test(enable = "sse")] + fn test_mm_cvtt_ss2si() { + let inputs = &[ + (42.0f32, 42i32), + (-31.4, -31), + (-33.5, -33), + (-34.5, -34), + (10.999, 10), + (-5.99, -5), + (4.0e10, i32::MIN), + (4.0e-10, 0), + (NAN, i32::MIN), + (2147483500.1, 2147483520), + ]; + for (i, &(xi, e)) in inputs.iter().enumerate() { + let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); + let r = _mm_cvtt_ss2si(x); + assert_eq!( + e, r, + "TestCase #{} _mm_cvtt_ss2si({:?}) = {}, expected: {}", + i, x, r, e + ); + } + } + #[simd_test(enable = "sse")] const fn test_mm_cvtsi32_ss() { let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); @@ -3059,6 +3100,27 @@ const fn test_mm_cvtsi32_ss() { assert_eq_m128(e, r); } + #[simd_test(enable = "sse")] + fn test_mm_cvt_si2ss() { + let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); + + let r = _mm_cvt_si2ss(a, 4555); + let e = _mm_setr_ps(4555.0, 6.0, 7.0, 8.0); + assert_eq_m128(e, r); + + let r = _mm_cvt_si2ss(a, 322223333); + let e = _mm_setr_ps(322223333.0, 6.0, 7.0, 8.0); + assert_eq_m128(e, r); + + let r = _mm_cvt_si2ss(a, -432); + let e = _mm_setr_ps(-432.0, 6.0, 7.0, 8.0); + assert_eq_m128(e, r); + + let r = _mm_cvt_si2ss(a, -322223333); + let e = _mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0); + assert_eq_m128(e, r); + } + #[simd_test(enable = "sse")] const fn test_mm_cvtss_f32() { let a = _mm_setr_ps(312.0134, 5.0, 6.0, 7.0); @@ -3085,6 +3147,15 @@ const fn test_mm_set1_ps() { assert_eq!(get_m128(r2, 3), 4.25); } + #[simd_test(enable = "sse")] + const fn test_mm_set_ps1() { + let r = _mm_set_ps1(black_box(4.25)); + assert_eq!(get_m128(r, 0), 4.25); + assert_eq!(get_m128(r, 1), 4.25); + assert_eq!(get_m128(r, 2), 4.25); + assert_eq!(get_m128(r, 3), 4.25); + } + #[simd_test(enable = "sse")] const fn test_mm_set_ps() { let r = _mm_set_ps( From 63fb6c3c59898ada456b098aad6dcd9fb76807f3 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Thu, 26 Feb 2026 16:18:30 +0000 Subject: [PATCH 02/10] Refactor alias tests using meta function pattern and add missing tests for _mm_undefined_ps, _mm_prefetch, _mm_load_ps1, _mm_store_ps1 --- .../stdarch/crates/core_arch/src/x86/sse.rs | 244 ++++++++---------- .../crates/stdarch-verify/tests/x86-intel.rs | 7 +- 2 files changed, 108 insertions(+), 143 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 0ec842f9fc7c..4e9a3a3cb174 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -2997,128 +2997,83 @@ fn test_mm_ucomineq_ss() { } } - #[simd_test(enable = "sse")] - fn test_mm_cvtss_si32() { + fn test_mm_cvtss_si32_impl(f: fn(__m128) -> i32) { let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; for i in 0..inputs.len() { - let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); + let x = unsafe { _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0) }; let e = result[i]; - let r = _mm_cvtss_si32(x); - assert_eq!( - e, r, - "TestCase #{} _mm_cvtss_si32({:?}) = {}, expected: {}", - i, x, r, e - ); + let r = f(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } } + #[simd_test(enable = "sse")] + fn test_mm_cvtss_si32() { + test_mm_cvtss_si32_impl(_mm_cvtss_si32); + } + #[simd_test(enable = "sse")] fn test_mm_cvt_ss2si() { - let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; - let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; - for i in 0..inputs.len() { - let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); - let e = result[i]; - let r = _mm_cvt_ss2si(x); - assert_eq!( - e, r, - "TestCase #{} _mm_cvt_ss2si({:?}) = {}, expected: {}", - i, x, r, e - ); + test_mm_cvtss_si32_impl(_mm_cvt_ss2si); + } + + fn test_cvttss_si32_impl(f: fn(__m128) -> i32) { + let inputs = &[ + (42.0f32, 42i32), + (-31.4, -31), + (-33.5, -33), + (-34.5, -34), + (10.999, 10), + (-5.99, -5), + (4.0e10, i32::MIN), + (4.0e-10, 0), + (NAN, i32::MIN), + (2147483500.1, 2147483520), + ]; + for (i, &(xi, e)) in inputs.iter().enumerate() { + let x = unsafe { _mm_setr_ps(xi, 1.0, 3.0, 4.0) }; + let r = f(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } } #[simd_test(enable = "sse")] fn test_mm_cvttss_si32() { - let inputs = &[ - (42.0f32, 42i32), - (-31.4, -31), - (-33.5, -33), - (-34.5, -34), - (10.999, 10), - (-5.99, -5), - (4.0e10, i32::MIN), - (4.0e-10, 0), - (NAN, i32::MIN), - (2147483500.1, 2147483520), - ]; - for (i, &(xi, e)) in inputs.iter().enumerate() { - let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); - let r = _mm_cvttss_si32(x); - assert_eq!( - e, r, - "TestCase #{} _mm_cvttss_si32({:?}) = {}, expected: {}", - i, x, r, e - ); - } + test_cvttss_si32_impl(_mm_cvttss_si32); } #[simd_test(enable = "sse")] fn test_mm_cvtt_ss2si() { - let inputs = &[ - (42.0f32, 42i32), - (-31.4, -31), - (-33.5, -33), - (-34.5, -34), - (10.999, 10), - (-5.99, -5), - (4.0e10, i32::MIN), - (4.0e-10, 0), - (NAN, i32::MIN), - (2147483500.1, 2147483520), - ]; - for (i, &(xi, e)) in inputs.iter().enumerate() { - let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); - let r = _mm_cvtt_ss2si(x); - assert_eq!( - e, r, - "TestCase #{} _mm_cvtt_ss2si({:?}) = {}, expected: {}", - i, x, r, e - ); + test_cvttss_si32_impl(_mm_cvtt_ss2si) + } + + fn test_mm_cvtsi32_ss_impl(f: fn(__m128, i32) -> __m128) { + unsafe { + let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); + + let r = f(a, 4555); + assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); + + let r = f(a, 322223333); + assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); + + let r = f(a, -432); + assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); + + let r = f(a, -322223333); + assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); } } #[simd_test(enable = "sse")] - const fn test_mm_cvtsi32_ss() { - let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); - - let r = _mm_cvtsi32_ss(a, 4555); - let e = _mm_setr_ps(4555.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvtsi32_ss(a, 322223333); - let e = _mm_setr_ps(322223333.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvtsi32_ss(a, -432); - let e = _mm_setr_ps(-432.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvtsi32_ss(a, -322223333); - let e = _mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); + fn test_mm_cvtsi32_ss() { + test_mm_cvtsi32_ss_impl(_mm_cvtsi32_ss); } #[simd_test(enable = "sse")] fn test_mm_cvt_si2ss() { - let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); - - let r = _mm_cvt_si2ss(a, 4555); - let e = _mm_setr_ps(4555.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvt_si2ss(a, 322223333); - let e = _mm_setr_ps(322223333.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvt_si2ss(a, -432); - let e = _mm_setr_ps(-432.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); - - let r = _mm_cvt_si2ss(a, -322223333); - let e = _mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0); - assert_eq_m128(e, r); + test_mm_cvtsi32_ss_impl(_mm_cvt_si2ss); } #[simd_test(enable = "sse")] @@ -3133,27 +3088,25 @@ const fn test_mm_set_ss() { assert_eq_m128(r, _mm_setr_ps(4.25, 0.0, 0.0, 0.0)); } - #[simd_test(enable = "sse")] - const fn test_mm_set1_ps() { - let r1 = _mm_set1_ps(black_box(4.25)); - let r2 = _mm_set_ps1(black_box(4.25)); - assert_eq!(get_m128(r1, 0), 4.25); - assert_eq!(get_m128(r1, 1), 4.25); - assert_eq!(get_m128(r1, 2), 4.25); - assert_eq!(get_m128(r1, 3), 4.25); - assert_eq!(get_m128(r2, 0), 4.25); - assert_eq!(get_m128(r2, 1), 4.25); - assert_eq!(get_m128(r2, 2), 4.25); - assert_eq!(get_m128(r2, 3), 4.25); + fn test_mm_set1_ps_impl(f: fn(f32) -> __m128) { + unsafe { + let r = f(black_box(4.25)); + assert_eq!(get_m128(r, 0), 4.25); + assert_eq!(get_m128(r, 1), 4.25); + assert_eq!(get_m128(r, 2), 4.25); + assert_eq!(get_m128(r, 3), 4.25); + } } #[simd_test(enable = "sse")] - const fn test_mm_set_ps1() { - let r = _mm_set_ps1(black_box(4.25)); - assert_eq!(get_m128(r, 0), 4.25); - assert_eq!(get_m128(r, 1), 4.25); - assert_eq!(get_m128(r, 2), 4.25); - assert_eq!(get_m128(r, 3), 4.25); + fn test_mm_set1_ps() { + test_mm_set1_ps_impl(_mm_set1_ps); + test_mm_set1_ps_impl(_mm_set_ps1); + } + + #[simd_test(enable = "sse")] + fn test_mm_set_ps1() { + test_mm_set1_ps_impl(_mm_set_ps1); } #[simd_test(enable = "sse")] @@ -3242,11 +3195,20 @@ const fn test_mm_load_ss() { assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0)); } - #[simd_test(enable = "sse")] - const fn test_mm_load1_ps() { + fn test_mm_load1_ps_impl(f: unsafe fn(*const f32) -> __m128) { let a = 42.0f32; - let r = unsafe { _mm_load1_ps(ptr::addr_of!(a)) }; - assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); + let r = unsafe { f(ptr::addr_of!(a)) }; + unsafe { assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)) }; + } + + #[simd_test(enable = "sse")] + fn test_mm_load1_ps() { + test_mm_load1_ps_impl(_mm_load1_ps); + } + + #[simd_test(enable = "sse")] + fn test_mm_load_ps1() { + test_mm_load1_ps_impl(_mm_load_ps1); } #[simd_test(enable = "sse")] @@ -3298,34 +3260,24 @@ const fn test_mm_store_ss() { assert_eq!(vals[2], 0.0); } - #[simd_test(enable = "sse")] - const fn test_mm_store1_ps() { + fn test_mm_store1_ps_impl(f: unsafe fn(*mut f32, __m128)) { let mut vals = Memory { data: [0.0f32; 4] }; - let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); - - // guaranteed to be aligned to 16 bytes + let a = unsafe { _mm_setr_ps(1.0, 2.0, 3.0, 4.0) }; let p = vals.data.as_mut_ptr(); - unsafe { - _mm_store1_ps(p, *black_box(&a)); + f(p, *black_box(&a)); } - assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); } #[simd_test(enable = "sse")] - const fn test_mm_store_ps() { - let mut vals = Memory { data: [0.0f32; 4] }; - let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); + fn test_mm_store1_ps() { + test_mm_store1_ps_impl(_mm_store1_ps); + } - // guaranteed to be aligned to 16 bytes - let p = vals.data.as_mut_ptr(); - - unsafe { - _mm_store_ps(p, *black_box(&a)); - } - - assert_eq!(vals.data, [1.0, 2.0, 3.0, 4.0]); + #[simd_test(enable = "sse")] + fn test_mm_store_ps1() { + test_mm_store1_ps_impl(_mm_store_ps1); } #[simd_test(enable = "sse")] @@ -3364,6 +3316,24 @@ struct Memory8 { assert_eq!(vals.data, [0.0, 1.0, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0]); } + #[simd_test(enable = "sse")] + fn test_mm_undefined_ps() { + // _mm_undefined_ps returns a vector with indeterminate elements, + // so we can only verify it doesn't crash. + let _r = _mm_undefined_ps(); + } + + #[simd_test(enable = "sse")] + fn test_mm_prefetch() { + // Prefetch only affects cache behavior, not program correctness, + // so we can only verify it doesn't crash for each hint strategy. + let data = 42.0f32; + _mm_prefetch::<_MM_HINT_T0>(ptr::addr_of!(data) as *const i8); + _mm_prefetch::<_MM_HINT_T1>(ptr::addr_of!(data) as *const i8); + _mm_prefetch::<_MM_HINT_T2>(ptr::addr_of!(data) as *const i8); + _mm_prefetch::<_MM_HINT_NTA>(ptr::addr_of!(data) as *const i8); + } + #[simd_test(enable = "sse")] const fn test_mm_move_ss() { let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); diff --git a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs index 2ac05e28cb4c..85f718038e8d 100644 --- a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs +++ b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs @@ -209,12 +209,9 @@ fn verify_all_signatures() { "_rdseed16_step", "_rdseed32_step", "_rdseed64_step", - // Prefetch - "_mm_prefetch", // CMPXCHG "cmpxchg16b", - // Undefined - "_mm_undefined_ps", + // Undefined, "_mm_undefined_pd", "_mm_undefined_si128", "_mm_undefined_ph", @@ -250,8 +247,6 @@ fn verify_all_signatures() { "_mm_cvtt_ss2si", "_mm_cvt_si2ss", "_mm_set_ps1", - "_mm_load_ps1", - "_mm_store_ps1", "_mm_bslli_si128", "_mm_bsrli_si128", "_bextr2_u32", From 455b21ba99ed10bb569c011250148607a7eb1c02 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Thu, 26 Feb 2026 16:27:41 +0000 Subject: [PATCH 03/10] Restore deleted test_mm_store_ps --- library/stdarch/crates/core_arch/src/x86/sse.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 4e9a3a3cb174..6a857f22b0c9 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3275,6 +3275,21 @@ fn test_mm_store1_ps() { test_mm_store1_ps_impl(_mm_store1_ps); } + #[simd_test(enable = "sse")] + const fn test_mm_store_ps() { + let mut vals = Memory { data: [0.0f32; 4] }; + let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); + + // guaranteed to be aligned to 16 bytes + let p = vals.data.as_mut_ptr(); + + unsafe { + _mm_store_ps(p, *black_box(&a)); + } + + assert_eq!(vals.data, [1.0, 2.0, 3.0, 4.0]); + } + #[simd_test(enable = "sse")] fn test_mm_store_ps1() { test_mm_store1_ps_impl(_mm_store_ps1); From 952302abacf629a6fc8b57ede7a97d9eae9b3cdd Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Fri, 27 Feb 2026 18:28:23 +0000 Subject: [PATCH 04/10] Remove redundant tests for _mm_prefetch and _mm_undefined_ps Already verified by assert_instr; no output to assert at runtime. --- .../stdarch/crates/core_arch/src/x86/sse.rs | 18 ------------------ .../crates/stdarch-verify/tests/x86-intel.rs | 3 +++ 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 6a857f22b0c9..95666b5c3d73 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3331,24 +3331,6 @@ struct Memory8 { assert_eq!(vals.data, [0.0, 1.0, 2.0, 3.0, 4.0, 0.0, 0.0, 0.0]); } - #[simd_test(enable = "sse")] - fn test_mm_undefined_ps() { - // _mm_undefined_ps returns a vector with indeterminate elements, - // so we can only verify it doesn't crash. - let _r = _mm_undefined_ps(); - } - - #[simd_test(enable = "sse")] - fn test_mm_prefetch() { - // Prefetch only affects cache behavior, not program correctness, - // so we can only verify it doesn't crash for each hint strategy. - let data = 42.0f32; - _mm_prefetch::<_MM_HINT_T0>(ptr::addr_of!(data) as *const i8); - _mm_prefetch::<_MM_HINT_T1>(ptr::addr_of!(data) as *const i8); - _mm_prefetch::<_MM_HINT_T2>(ptr::addr_of!(data) as *const i8); - _mm_prefetch::<_MM_HINT_NTA>(ptr::addr_of!(data) as *const i8); - } - #[simd_test(enable = "sse")] const fn test_mm_move_ss() { let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); diff --git a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs index 85f718038e8d..0ee32c826bb1 100644 --- a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs +++ b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs @@ -211,7 +211,10 @@ fn verify_all_signatures() { "_rdseed64_step", // CMPXCHG "cmpxchg16b", + //PREFETCH + "_mm_prefetch", // Undefined, + "_mm_undefined_ps", "_mm_undefined_pd", "_mm_undefined_si128", "_mm_undefined_ph", From 58e5c0e8795c002b92c218a527ea07e0307c0466 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Thu, 12 Mar 2026 13:01:57 +0000 Subject: [PATCH 05/10] Refactor alias tests using macros instead of meta functions --- .../stdarch/crates/core_arch/src/x86/sse.rs | 192 ++++++++---------- 1 file changed, 84 insertions(+), 108 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 95666b5c3d73..93b281686962 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -2997,84 +2997,73 @@ fn test_mm_ucomineq_ss() { } } - fn test_mm_cvtss_si32_impl(f: fn(__m128) -> i32) { - let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; - let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; - for i in 0..inputs.len() { - let x = unsafe { _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0) }; - let e = result[i]; - let r = f(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + macro_rules! test_mm_cvtss_si32 { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { + let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; + let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; + for i in 0..inputs.len() { + let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); + let e = result[i]; + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + } + } + )*} + } + + test_mm_cvtss_si32!(test_mm_cvtss_si32: _mm_cvtss_si32, test_mm_cvt_ss2si: _mm_cvt_ss2si); + + macro_rules! test_cvttss_si32 { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { + let inputs = &[ + (42.0f32, 42i32), + (-31.4, -31), + (-33.5, -33), + (-34.5, -34), + (10.999, 10), + (-5.99, -5), + (4.0e10, i32::MIN), + (4.0e-10, 0), + (NAN, i32::MIN), + (2147483500.1, 2147483520), + ]; + for (i, &(xi, e)) in inputs.iter().enumerate() { + let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + } } - } + )*} +} - #[simd_test(enable = "sse")] - fn test_mm_cvtss_si32() { - test_mm_cvtss_si32_impl(_mm_cvtss_si32); - } +test_cvttss_si32!(test_cvttss_si32: _mm_cvttss_si32, test_mm_cvtt_ss2si: _mm_cvtt_ss2si); - #[simd_test(enable = "sse")] - fn test_mm_cvt_ss2si() { - test_mm_cvtss_si32_impl(_mm_cvt_ss2si); - } - - fn test_cvttss_si32_impl(f: fn(__m128) -> i32) { - let inputs = &[ - (42.0f32, 42i32), - (-31.4, -31), - (-33.5, -33), - (-34.5, -34), - (10.999, 10), - (-5.99, -5), - (4.0e10, i32::MIN), - (4.0e-10, 0), - (NAN, i32::MIN), - (2147483500.1, 2147483520), - ]; - for (i, &(xi, e)) in inputs.iter().enumerate() { - let x = unsafe { _mm_setr_ps(xi, 1.0, 3.0, 4.0) }; - let r = f(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); - } - } - - #[simd_test(enable = "sse")] - fn test_mm_cvttss_si32() { - test_cvttss_si32_impl(_mm_cvttss_si32); - } - - #[simd_test(enable = "sse")] - fn test_mm_cvtt_ss2si() { - test_cvttss_si32_impl(_mm_cvtt_ss2si) - } - - fn test_mm_cvtsi32_ss_impl(f: fn(__m128, i32) -> __m128) { - unsafe { +macro_rules! test_mm_cvtsi32_ss { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); - let r = f(a, 4555); + let r = $alias(a, 4555); assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); - let r = f(a, 322223333); + let r = $alias(a, 322223333); assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); - let r = f(a, -432); + let r = $alias(a, -432); assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); - let r = f(a, -322223333); + let r = $alias(a, -322223333); assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); } - } + )*} +} - #[simd_test(enable = "sse")] - fn test_mm_cvtsi32_ss() { - test_mm_cvtsi32_ss_impl(_mm_cvtsi32_ss); - } - - #[simd_test(enable = "sse")] - fn test_mm_cvt_si2ss() { - test_mm_cvtsi32_ss_impl(_mm_cvt_si2ss); - } +test_mm_cvtsi32_ss!(test_mm_cvtsi32_ss: _mm_cvtsi32_ss, test_mm_cvt_si2ss: _mm_cvt_si2ss); #[simd_test(enable = "sse")] const fn test_mm_cvtss_f32() { @@ -3088,26 +3077,20 @@ const fn test_mm_set_ss() { assert_eq_m128(r, _mm_setr_ps(4.25, 0.0, 0.0, 0.0)); } - fn test_mm_set1_ps_impl(f: fn(f32) -> __m128) { - unsafe { - let r = f(black_box(4.25)); +macro_rules! test_mm_set1_ps { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { + let r = $alias(black_box(4.25)); assert_eq!(get_m128(r, 0), 4.25); assert_eq!(get_m128(r, 1), 4.25); assert_eq!(get_m128(r, 2), 4.25); assert_eq!(get_m128(r, 3), 4.25); } - } + )*} +} - #[simd_test(enable = "sse")] - fn test_mm_set1_ps() { - test_mm_set1_ps_impl(_mm_set1_ps); - test_mm_set1_ps_impl(_mm_set_ps1); - } - - #[simd_test(enable = "sse")] - fn test_mm_set_ps1() { - test_mm_set1_ps_impl(_mm_set_ps1); - } +test_mm_set1_ps!(test_mm_set1_ps: _mm_set1_ps, test_mm_set_ps1: _mm_set_ps1); #[simd_test(enable = "sse")] const fn test_mm_set_ps() { @@ -3195,21 +3178,18 @@ const fn test_mm_load_ss() { assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0)); } - fn test_mm_load1_ps_impl(f: unsafe fn(*const f32) -> __m128) { - let a = 42.0f32; - let r = unsafe { f(ptr::addr_of!(a)) }; - unsafe { assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)) }; - } + macro_rules! test_mm_load1_ps { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { + let a = 42.0f32; + let r = $alias(ptr::addr_of!(a)); + assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); + } + )*} +} - #[simd_test(enable = "sse")] - fn test_mm_load1_ps() { - test_mm_load1_ps_impl(_mm_load1_ps); - } - - #[simd_test(enable = "sse")] - fn test_mm_load_ps1() { - test_mm_load1_ps_impl(_mm_load_ps1); - } +test_mm_load1_ps!(test_mm_load1_ps: _mm_load1_ps, test_mm_load_ps1: _mm_load_ps1); #[simd_test(enable = "sse")] const fn test_mm_load_ps() { @@ -3260,20 +3240,20 @@ const fn test_mm_store_ss() { assert_eq!(vals[2], 0.0); } - fn test_mm_store1_ps_impl(f: unsafe fn(*mut f32, __m128)) { - let mut vals = Memory { data: [0.0f32; 4] }; - let a = unsafe { _mm_setr_ps(1.0, 2.0, 3.0, 4.0) }; - let p = vals.data.as_mut_ptr(); - unsafe { - f(p, *black_box(&a)); +macro_rules! test_mm_store1_ps { + ($($test_name:ident : $alias:ident),*) => {$( + #[simd_test(enable = "sse")] + unsafe fn $test_name() { + let mut vals = Memory { data: [0.0f32; 4] }; + let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); + let p = vals.data.as_mut_ptr(); + $alias(p, *black_box(&a)); + assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); } - assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); - } + )*} +} - #[simd_test(enable = "sse")] - fn test_mm_store1_ps() { - test_mm_store1_ps_impl(_mm_store1_ps); - } +test_mm_store1_ps!(test_mm_store1_ps: _mm_store1_ps, test_mm_store_ps1: _mm_store_ps1); #[simd_test(enable = "sse")] const fn test_mm_store_ps() { @@ -3290,10 +3270,6 @@ const fn test_mm_store_ps() { assert_eq!(vals.data, [1.0, 2.0, 3.0, 4.0]); } - #[simd_test(enable = "sse")] - fn test_mm_store_ps1() { - test_mm_store1_ps_impl(_mm_store_ps1); - } #[simd_test(enable = "sse")] const fn test_mm_storer_ps() { From 0eb04eb555ea1d15ad83991f129062ac9ff2611c Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Thu, 12 Mar 2026 13:16:36 +0000 Subject: [PATCH 06/10] Fix formatting --- .../stdarch/crates/core_arch/src/x86/sse.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 93b281686962..e12087da23d9 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3040,9 +3040,9 @@ unsafe fn $test_name() { )*} } -test_cvttss_si32!(test_cvttss_si32: _mm_cvttss_si32, test_mm_cvtt_ss2si: _mm_cvtt_ss2si); + test_cvttss_si32!(test_cvttss_si32: _mm_cvttss_si32, test_mm_cvtt_ss2si: _mm_cvtt_ss2si); -macro_rules! test_mm_cvtsi32_ss { + macro_rules! test_mm_cvtsi32_ss { ($($test_name:ident : $alias:ident),*) => {$( #[simd_test(enable = "sse")] unsafe fn $test_name() { @@ -3063,7 +3063,7 @@ unsafe fn $test_name() { )*} } -test_mm_cvtsi32_ss!(test_mm_cvtsi32_ss: _mm_cvtsi32_ss, test_mm_cvt_si2ss: _mm_cvt_si2ss); + test_mm_cvtsi32_ss!(test_mm_cvtsi32_ss: _mm_cvtsi32_ss, test_mm_cvt_si2ss: _mm_cvt_si2ss); #[simd_test(enable = "sse")] const fn test_mm_cvtss_f32() { @@ -3077,7 +3077,7 @@ const fn test_mm_set_ss() { assert_eq_m128(r, _mm_setr_ps(4.25, 0.0, 0.0, 0.0)); } -macro_rules! test_mm_set1_ps { + macro_rules! test_mm_set1_ps { ($($test_name:ident : $alias:ident),*) => {$( #[simd_test(enable = "sse")] unsafe fn $test_name() { @@ -3090,7 +3090,7 @@ unsafe fn $test_name() { )*} } -test_mm_set1_ps!(test_mm_set1_ps: _mm_set1_ps, test_mm_set_ps1: _mm_set_ps1); + test_mm_set1_ps!(test_mm_set1_ps: _mm_set1_ps, test_mm_set_ps1: _mm_set_ps1); #[simd_test(enable = "sse")] const fn test_mm_set_ps() { @@ -3178,7 +3178,7 @@ const fn test_mm_load_ss() { assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0)); } - macro_rules! test_mm_load1_ps { + macro_rules! test_mm_load1_ps { ($($test_name:ident : $alias:ident),*) => {$( #[simd_test(enable = "sse")] unsafe fn $test_name() { @@ -3189,7 +3189,7 @@ unsafe fn $test_name() { )*} } -test_mm_load1_ps!(test_mm_load1_ps: _mm_load1_ps, test_mm_load_ps1: _mm_load_ps1); + test_mm_load1_ps!(test_mm_load1_ps: _mm_load1_ps, test_mm_load_ps1: _mm_load_ps1); #[simd_test(enable = "sse")] const fn test_mm_load_ps() { @@ -3240,7 +3240,7 @@ const fn test_mm_store_ss() { assert_eq!(vals[2], 0.0); } -macro_rules! test_mm_store1_ps { + macro_rules! test_mm_store1_ps { ($($test_name:ident : $alias:ident),*) => {$( #[simd_test(enable = "sse")] unsafe fn $test_name() { @@ -3253,7 +3253,7 @@ unsafe fn $test_name() { )*} } -test_mm_store1_ps!(test_mm_store1_ps: _mm_store1_ps, test_mm_store_ps1: _mm_store_ps1); + test_mm_store1_ps!(test_mm_store1_ps: _mm_store1_ps, test_mm_store_ps1: _mm_store_ps1); #[simd_test(enable = "sse")] const fn test_mm_store_ps() { @@ -3270,7 +3270,6 @@ const fn test_mm_store_ps() { assert_eq!(vals.data, [1.0, 2.0, 3.0, 4.0]); } - #[simd_test(enable = "sse")] const fn test_mm_storer_ps() { let mut vals = Memory { data: [0.0f32; 4] }; From 68a6acef71af4ae7130a8da46b9777afe0f9f242 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Tue, 17 Mar 2026 22:16:33 +0000 Subject: [PATCH 07/10] Use macros for test body deduplication in SSE alias tests --- .../stdarch/crates/core_arch/src/x86/sse.rs | 204 ++++++++++-------- 1 file changed, 117 insertions(+), 87 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index e12087da23d9..fbce52fc29ea 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -2997,73 +2997,88 @@ fn test_mm_ucomineq_ss() { } } - macro_rules! test_mm_cvtss_si32 { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; - let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; - for i in 0..inputs.len() { - let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); - let e = result[i]; - let r = $alias(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); - } + macro_rules! test_mm_cvtss_si32_impl { + ($alias:ident) => { + let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; + let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; + for i in 0..inputs.len() { + let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); + let e = result[i]; + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } - )*} + } } - test_mm_cvtss_si32!(test_mm_cvtss_si32: _mm_cvtss_si32, test_mm_cvt_ss2si: _mm_cvt_ss2si); + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvtss_si32() { + test_mm_cvtss_si32_impl!(_mm_cvtss_si32); + } - macro_rules! test_cvttss_si32 { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let inputs = &[ - (42.0f32, 42i32), - (-31.4, -31), - (-33.5, -33), - (-34.5, -34), - (10.999, 10), - (-5.99, -5), - (4.0e10, i32::MIN), - (4.0e-10, 0), - (NAN, i32::MIN), - (2147483500.1, 2147483520), - ]; - for (i, &(xi, e)) in inputs.iter().enumerate() { - let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); - let r = $alias(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvt_ss2si() { + test_mm_cvtss_si32_impl!(_mm_cvt_ss2si); + } + + macro_rules! test_cvttss_si32_impl { + ($alias:ident) => { + let inputs = &[ + (42.0f32, 42i32), + (-31.4, -31), + (-33.5, -33), + (-34.5, -34), + (10.999, 10), + (-5.99, -5), + (4.0e10, i32::MIN), + (4.0e-10, 0), + (NAN, i32::MIN), + (2147483500.1, 2147483520), + ]; + for (i, &(xi, e)) in inputs.iter().enumerate() { + let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } } - )*} -} + } - test_cvttss_si32!(test_cvttss_si32: _mm_cvttss_si32, test_mm_cvtt_ss2si: _mm_cvtt_ss2si); + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvttss_si32() { + test_cvttss_si32_impl!(_mm_cvttss_si32); + } - macro_rules! test_mm_cvtsi32_ss { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvtt_ss2si() { + test_cvttss_si32_impl!(_mm_cvtt_ss2si); + } - let r = $alias(a, 4555); - assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); + macro_rules! test_mm_cvtsi32_ss_impl { + ($alias:ident) => { + let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); - let r = $alias(a, 322223333); - assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, 4555); + assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); - let r = $alias(a, -432); - assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, 322223333); + assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); - let r = $alias(a, -322223333); - assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, -432); + assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); + + let r = $alias(a, -322223333); + assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); } - )*} -} + } - test_mm_cvtsi32_ss!(test_mm_cvtsi32_ss: _mm_cvtsi32_ss, test_mm_cvt_si2ss: _mm_cvt_si2ss); + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvtsi32_ss() { + test_mm_cvtsi32_ss_impl!(_mm_cvtsi32_ss); + } + + #[simd_test(enable = "sse")] + unsafe fn test_mm_cvt_si2ss() { + test_mm_cvtsi32_ss_impl!(_mm_cvt_si2ss); + } #[simd_test(enable = "sse")] const fn test_mm_cvtss_f32() { @@ -3077,20 +3092,25 @@ const fn test_mm_set_ss() { assert_eq_m128(r, _mm_setr_ps(4.25, 0.0, 0.0, 0.0)); } - macro_rules! test_mm_set1_ps { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let r = $alias(black_box(4.25)); - assert_eq!(get_m128(r, 0), 4.25); - assert_eq!(get_m128(r, 1), 4.25); - assert_eq!(get_m128(r, 2), 4.25); - assert_eq!(get_m128(r, 3), 4.25); + macro_rules! test_mm_set1_ps_impl { + ($alias:ident) => { + let r = $alias(black_box(4.25)); + assert_eq!(get_m128(r, 0), 4.25); + assert_eq!(get_m128(r, 1), 4.25); + assert_eq!(get_m128(r, 2), 4.25); + assert_eq!(get_m128(r, 3), 4.25); } - )*} -} + } - test_mm_set1_ps!(test_mm_set1_ps: _mm_set1_ps, test_mm_set_ps1: _mm_set_ps1); + #[simd_test(enable = "sse")] + unsafe fn test_mm_set1_ps() { + test_mm_set1_ps_impl!(_mm_set1_ps); + } + + #[simd_test(enable = "sse")] + unsafe fn test_mm_set_ps1() { + test_mm_set1_ps_impl!(_mm_set_ps1); + } #[simd_test(enable = "sse")] const fn test_mm_set_ps() { @@ -3178,18 +3198,23 @@ const fn test_mm_load_ss() { assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0)); } - macro_rules! test_mm_load1_ps { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let a = 42.0f32; - let r = $alias(ptr::addr_of!(a)); - assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); + macro_rules! test_mm_load1_ps_impl { + ($alias:ident) => { + let a = 42.0f32; + let r = $alias(ptr::addr_of!(a)); + assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); } - )*} -} + } - test_mm_load1_ps!(test_mm_load1_ps: _mm_load1_ps, test_mm_load_ps1: _mm_load_ps1); + #[simd_test(enable = "sse")] + unsafe fn test_mm_load1_ps() { + test_mm_load1_ps_impl!(_mm_load1_ps); + } + + #[simd_test(enable = "sse")] + unsafe fn test_mm_load_ps1() { + test_mm_load1_ps_impl!(_mm_load_ps1); + } #[simd_test(enable = "sse")] const fn test_mm_load_ps() { @@ -3240,20 +3265,25 @@ const fn test_mm_store_ss() { assert_eq!(vals[2], 0.0); } - macro_rules! test_mm_store1_ps { - ($($test_name:ident : $alias:ident),*) => {$( - #[simd_test(enable = "sse")] - unsafe fn $test_name() { - let mut vals = Memory { data: [0.0f32; 4] }; - let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); - let p = vals.data.as_mut_ptr(); - $alias(p, *black_box(&a)); - assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); + macro_rules! test_mm_store1_ps_impl { + ($alias:ident) => { + let mut vals = Memory { data: [0.0f32; 4] }; + let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); + let p = vals.data.as_mut_ptr(); + $alias(p, *black_box(&a)); + assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); } - )*} -} + } - test_mm_store1_ps!(test_mm_store1_ps: _mm_store1_ps, test_mm_store_ps1: _mm_store_ps1); + #[simd_test(enable = "sse")] + unsafe fn test_mm_store1_ps() { + test_mm_store1_ps_impl!(_mm_store1_ps); + } + + #[simd_test(enable = "sse")] + unsafe fn test_mm_store_ps1() { + test_mm_store1_ps_impl!(_mm_store_ps1); + } #[simd_test(enable = "sse")] const fn test_mm_store_ps() { From 7da5fbcf42216bde5aa7350046acc9dfcba2a701 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Tue, 17 Mar 2026 22:18:40 +0000 Subject: [PATCH 08/10] Fix formatting --- .../stdarch/crates/core_arch/src/x86/sse.rs | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index fbce52fc29ea..11fb3a865b30 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -2998,16 +2998,16 @@ fn test_mm_ucomineq_ss() { } macro_rules! test_mm_cvtss_si32_impl { - ($alias:ident) => { - let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; - let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; - for i in 0..inputs.len() { - let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); - let e = result[i]; - let r = $alias(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + ($alias:ident) => { + let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1]; + let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520]; + for i in 0..inputs.len() { + let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0); + let e = result[i]; + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } - } + }; } #[simd_test(enable = "sse")] @@ -3021,25 +3021,25 @@ unsafe fn test_mm_cvt_ss2si() { } macro_rules! test_cvttss_si32_impl { - ($alias:ident) => { - let inputs = &[ - (42.0f32, 42i32), - (-31.4, -31), - (-33.5, -33), - (-34.5, -34), - (10.999, 10), - (-5.99, -5), - (4.0e10, i32::MIN), - (4.0e-10, 0), - (NAN, i32::MIN), - (2147483500.1, 2147483520), - ]; - for (i, &(xi, e)) in inputs.iter().enumerate() { - let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); - let r = $alias(x); - assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); + ($alias:ident) => { + let inputs = &[ + (42.0f32, 42i32), + (-31.4, -31), + (-33.5, -33), + (-34.5, -34), + (10.999, 10), + (-5.99, -5), + (4.0e10, i32::MIN), + (4.0e-10, 0), + (NAN, i32::MIN), + (2147483500.1, 2147483520), + ]; + for (i, &(xi, e)) in inputs.iter().enumerate() { + let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0); + let r = $alias(x); + assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e); } - } + }; } #[simd_test(enable = "sse")] @@ -3053,21 +3053,21 @@ unsafe fn test_mm_cvtt_ss2si() { } macro_rules! test_mm_cvtsi32_ss_impl { - ($alias:ident) => { - let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); + ($alias:ident) => { + let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0); - let r = $alias(a, 4555); - assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, 4555); + assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r); - let r = $alias(a, 322223333); - assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, 322223333); + assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r); - let r = $alias(a, -432); - assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); + let r = $alias(a, -432); + assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r); - let r = $alias(a, -322223333); - assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); - } + let r = $alias(a, -322223333); + assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r); + }; } #[simd_test(enable = "sse")] @@ -3093,13 +3093,13 @@ const fn test_mm_set_ss() { } macro_rules! test_mm_set1_ps_impl { - ($alias:ident) => { - let r = $alias(black_box(4.25)); - assert_eq!(get_m128(r, 0), 4.25); - assert_eq!(get_m128(r, 1), 4.25); - assert_eq!(get_m128(r, 2), 4.25); - assert_eq!(get_m128(r, 3), 4.25); - } + ($alias:ident) => { + let r = $alias(black_box(4.25)); + assert_eq!(get_m128(r, 0), 4.25); + assert_eq!(get_m128(r, 1), 4.25); + assert_eq!(get_m128(r, 2), 4.25); + assert_eq!(get_m128(r, 3), 4.25); + }; } #[simd_test(enable = "sse")] @@ -3199,11 +3199,11 @@ const fn test_mm_load_ss() { } macro_rules! test_mm_load1_ps_impl { - ($alias:ident) => { - let a = 42.0f32; - let r = $alias(ptr::addr_of!(a)); - assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); - } + ($alias:ident) => { + let a = 42.0f32; + let r = $alias(ptr::addr_of!(a)); + assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); + }; } #[simd_test(enable = "sse")] @@ -3266,13 +3266,13 @@ const fn test_mm_store_ss() { } macro_rules! test_mm_store1_ps_impl { - ($alias:ident) => { - let mut vals = Memory { data: [0.0f32; 4] }; - let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); - let p = vals.data.as_mut_ptr(); - $alias(p, *black_box(&a)); - assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); - } + ($alias:ident) => { + let mut vals = Memory { data: [0.0f32; 4] }; + let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); + let p = vals.data.as_mut_ptr(); + $alias(p, *black_box(&a)); + assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); + }; } #[simd_test(enable = "sse")] From 2c76cb3479129ab9653c9b6be9ea83925352b1f8 Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Sun, 22 Mar 2026 19:50:07 +0000 Subject: [PATCH 09/10] Use const fn and remove unsafe from alias test wrappers --- .../stdarch/crates/core_arch/src/x86/sse.rs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 11fb3a865b30..4d052186bcae 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3011,12 +3011,12 @@ macro_rules! test_mm_cvtss_si32_impl { } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvtss_si32() { + fn test_mm_cvtss_si32() { test_mm_cvtss_si32_impl!(_mm_cvtss_si32); } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvt_ss2si() { + fn test_mm_cvt_ss2si() { test_mm_cvtss_si32_impl!(_mm_cvt_ss2si); } @@ -3043,12 +3043,12 @@ macro_rules! test_cvttss_si32_impl { } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvttss_si32() { + fn test_mm_cvttss_si32() { test_cvttss_si32_impl!(_mm_cvttss_si32); } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvtt_ss2si() { + fn test_mm_cvtt_ss2si() { test_cvttss_si32_impl!(_mm_cvtt_ss2si); } @@ -3071,12 +3071,12 @@ macro_rules! test_mm_cvtsi32_ss_impl { } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvtsi32_ss() { + fn test_mm_cvtsi32_ss() { test_mm_cvtsi32_ss_impl!(_mm_cvtsi32_ss); } #[simd_test(enable = "sse")] - unsafe fn test_mm_cvt_si2ss() { + fn test_mm_cvt_si2ss() { test_mm_cvtsi32_ss_impl!(_mm_cvt_si2ss); } @@ -3103,12 +3103,12 @@ macro_rules! test_mm_set1_ps_impl { } #[simd_test(enable = "sse")] - unsafe fn test_mm_set1_ps() { + const fn test_mm_set1_ps() { test_mm_set1_ps_impl!(_mm_set1_ps); } #[simd_test(enable = "sse")] - unsafe fn test_mm_set_ps1() { + const fn test_mm_set_ps1() { test_mm_set1_ps_impl!(_mm_set_ps1); } @@ -3201,18 +3201,18 @@ const fn test_mm_load_ss() { macro_rules! test_mm_load1_ps_impl { ($alias:ident) => { let a = 42.0f32; - let r = $alias(ptr::addr_of!(a)); + let r = unsafe { $alias(ptr::addr_of!(a)) }; assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0)); }; } #[simd_test(enable = "sse")] - unsafe fn test_mm_load1_ps() { + fn test_mm_load1_ps() { test_mm_load1_ps_impl!(_mm_load1_ps); } #[simd_test(enable = "sse")] - unsafe fn test_mm_load_ps1() { + fn test_mm_load_ps1() { test_mm_load1_ps_impl!(_mm_load_ps1); } @@ -3270,18 +3270,18 @@ macro_rules! test_mm_store1_ps_impl { let mut vals = Memory { data: [0.0f32; 4] }; let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0); let p = vals.data.as_mut_ptr(); - $alias(p, *black_box(&a)); + unsafe { $alias(p, *black_box(&a)) }; assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]); }; } #[simd_test(enable = "sse")] - unsafe fn test_mm_store1_ps() { + fn test_mm_store1_ps() { test_mm_store1_ps_impl!(_mm_store1_ps); } #[simd_test(enable = "sse")] - unsafe fn test_mm_store_ps1() { + fn test_mm_store_ps1() { test_mm_store1_ps_impl!(_mm_store_ps1); } From 30573344b0ab160c2aef0e0e2cf51b92d7ab69ef Mon Sep 17 00:00:00 2001 From: ArunTamil21 Date: Tue, 24 Mar 2026 12:23:05 +0000 Subject: [PATCH 10/10] Mark alias test wrappers as const fn where supported and clean up skip list --- library/stdarch/crates/core_arch/src/x86/sse.rs | 10 +++++----- .../stdarch/crates/stdarch-verify/tests/x86-intel.rs | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/sse.rs b/library/stdarch/crates/core_arch/src/x86/sse.rs index 4d052186bcae..c6531e839a7d 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse.rs @@ -3071,7 +3071,7 @@ macro_rules! test_mm_cvtsi32_ss_impl { } #[simd_test(enable = "sse")] - fn test_mm_cvtsi32_ss() { + const fn test_mm_cvtsi32_ss() { test_mm_cvtsi32_ss_impl!(_mm_cvtsi32_ss); } @@ -3207,12 +3207,12 @@ macro_rules! test_mm_load1_ps_impl { } #[simd_test(enable = "sse")] - fn test_mm_load1_ps() { + const fn test_mm_load1_ps() { test_mm_load1_ps_impl!(_mm_load1_ps); } #[simd_test(enable = "sse")] - fn test_mm_load_ps1() { + const fn test_mm_load_ps1() { test_mm_load1_ps_impl!(_mm_load_ps1); } @@ -3276,12 +3276,12 @@ macro_rules! test_mm_store1_ps_impl { } #[simd_test(enable = "sse")] - fn test_mm_store1_ps() { + const fn test_mm_store1_ps() { test_mm_store1_ps_impl!(_mm_store1_ps); } #[simd_test(enable = "sse")] - fn test_mm_store_ps1() { + const fn test_mm_store_ps1() { test_mm_store1_ps_impl!(_mm_store_ps1); } diff --git a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs index 754be9dc39f9..024a873de16e 100644 --- a/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs +++ b/library/stdarch/crates/stdarch-verify/tests/x86-intel.rs @@ -250,7 +250,6 @@ fn verify_all_signatures() { "_mm_cvt_ss2si", "_mm_cvtt_ss2si", "_mm_cvt_si2ss", - "_mm_set_ps1", "_mm_bslli_si128", "_mm_bsrli_si128", "_bextr2_u32",