[breaking change]: mask argument type of _mm_shuffle_ps
diff --git a/coresimd/x86/sse.rs b/coresimd/x86/sse.rs
index 3d2cc65..515f393 100644
--- a/coresimd/x86/sse.rs
+++ b/coresimd/x86/sse.rs
@@ -981,8 +981,8 @@
#[inline]
#[allow(non_snake_case)]
#[unstable(feature = "stdsimd", issue = "27731")]
-pub const fn _MM_SHUFFLE(z: u32, y: u32, x: u32, w: u32) -> u32 {
- (z << 6) | (y << 4) | (x << 2) | w
+pub const fn _MM_SHUFFLE(z: u32, y: u32, x: u32, w: u32) -> i32 {
+ ((z << 6) | (y << 4) | (x << 2) | w) as i32
}
/// Shuffle packed single-precision (32-bit) floating-point elements in `a` and
@@ -997,7 +997,7 @@
#[cfg_attr(test, assert_instr(shufps, mask = 3))]
#[rustc_args_required_const(2)]
#[stable(feature = "simd_x86", since = "1.27.0")]
-pub unsafe fn _mm_shuffle_ps(a: __m128, b: __m128, mask: u32) -> __m128 {
+pub unsafe fn _mm_shuffle_ps(a: __m128, b: __m128, mask: i32) -> __m128 {
let mask = (mask & 0xFF) as u8;
macro_rules! shuffle_done {
diff --git a/crates/stdsimd-verify/tests/x86-intel.rs b/crates/stdsimd-verify/tests/x86-intel.rs
index 2bb8f19..ce1201d 100644
--- a/crates/stdsimd-verify/tests/x86-intel.rs
+++ b/crates/stdsimd-verify/tests/x86-intel.rs
@@ -142,7 +142,11 @@
// verified.
"__readeflags" | "__writeeflags" | "__cpuid_count" | "__cpuid"
| "__get_cpuid_max" => continue,
-
+ // Intel requires the mask argument for _mm_shuffle_ps to be an
+ // unsigned integer, but all other _mm_shuffle_.. intrinsics
+ // take a signed-integer. This breaks `_MM_SHUFFLE` for
+ // `_mm_shuffle_ps`:
+ "_mm_shuffle_ps" => continue,
_ => {}
}