@@ -16,7 +16,8 @@ use stdarch_test::assert_instr;
1616#[target_feature(enable = "ssse3")]
1717#[cfg_attr(test, assert_instr(pabsb))]
1818#[stable(feature = "simd_x86", since = "1.27.0")]
19- pub fn _mm_abs_epi8(a: __m128i) -> __m128i {
19+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
20+ pub const fn _mm_abs_epi8(a: __m128i) -> __m128i {
2021 unsafe {
2122 let a = a.as_i8x16();
2223 let zero = i8x16::ZERO;
@@ -34,7 +35,8 @@ pub fn _mm_abs_epi8(a: __m128i) -> __m128i {
3435#[target_feature(enable = "ssse3")]
3536#[cfg_attr(test, assert_instr(pabsw))]
3637#[stable(feature = "simd_x86", since = "1.27.0")]
37- pub fn _mm_abs_epi16(a: __m128i) -> __m128i {
38+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
39+ pub const fn _mm_abs_epi16(a: __m128i) -> __m128i {
3840 unsafe {
3941 let a = a.as_i16x8();
4042 let zero = i16x8::ZERO;
@@ -52,7 +54,8 @@ pub fn _mm_abs_epi16(a: __m128i) -> __m128i {
5254#[target_feature(enable = "ssse3")]
5355#[cfg_attr(test, assert_instr(pabsd))]
5456#[stable(feature = "simd_x86", since = "1.27.0")]
55- pub fn _mm_abs_epi32(a: __m128i) -> __m128i {
57+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
58+ pub const fn _mm_abs_epi32(a: __m128i) -> __m128i {
5659 unsafe {
5760 let a = a.as_i32x4();
5861 let zero = i32x4::ZERO;
@@ -104,7 +107,8 @@ pub fn _mm_shuffle_epi8(a: __m128i, b: __m128i) -> __m128i {
104107#[cfg_attr(test, assert_instr(palignr, IMM8 = 15))]
105108#[rustc_legacy_const_generics(2)]
106109#[stable(feature = "simd_x86", since = "1.27.0")]
107- pub fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
110+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
111+ pub const fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
108112 static_assert_uimm_bits!(IMM8, 8);
109113 // If palignr is shifting the pair of vectors more than the size of two
110114 // lanes, emit zero.
@@ -163,7 +167,8 @@ pub fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
163167#[target_feature(enable = "ssse3")]
164168#[cfg_attr(test, assert_instr(phaddw))]
165169#[stable(feature = "simd_x86", since = "1.27.0")]
166- pub fn _mm_hadd_epi16(a: __m128i, b: __m128i) -> __m128i {
170+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
171+ pub const fn _mm_hadd_epi16(a: __m128i, b: __m128i) -> __m128i {
167172 let a = a.as_i16x8();
168173 let b = b.as_i16x8();
169174 unsafe {
@@ -194,7 +199,8 @@ pub fn _mm_hadds_epi16(a: __m128i, b: __m128i) -> __m128i {
194199#[target_feature(enable = "ssse3")]
195200#[cfg_attr(test, assert_instr(phaddd))]
196201#[stable(feature = "simd_x86", since = "1.27.0")]
197- pub fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
202+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
203+ pub const fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
198204 let a = a.as_i32x4();
199205 let b = b.as_i32x4();
200206 unsafe {
@@ -212,7 +218,8 @@ pub fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
212218#[target_feature(enable = "ssse3")]
213219#[cfg_attr(test, assert_instr(phsubw))]
214220#[stable(feature = "simd_x86", since = "1.27.0")]
215- pub fn _mm_hsub_epi16(a: __m128i, b: __m128i) -> __m128i {
221+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
222+ pub const fn _mm_hsub_epi16(a: __m128i, b: __m128i) -> __m128i {
216223 let a = a.as_i16x8();
217224 let b = b.as_i16x8();
218225 unsafe {
@@ -244,7 +251,8 @@ pub fn _mm_hsubs_epi16(a: __m128i, b: __m128i) -> __m128i {
244251#[target_feature(enable = "ssse3")]
245252#[cfg_attr(test, assert_instr(phsubd))]
246253#[stable(feature = "simd_x86", since = "1.27.0")]
247- pub fn _mm_hsub_epi32(a: __m128i, b: __m128i) -> __m128i {
254+ #[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
255+ pub const fn _mm_hsub_epi32(a: __m128i, b: __m128i) -> __m128i {
248256 let a = a.as_i32x4();
249257 let b = b.as_i32x4();
250258 unsafe {
@@ -353,24 +361,25 @@ unsafe extern "C" {
353361
354362#[cfg(test)]
355363mod tests {
364+ use crate::core_arch::assert_eq_const as assert_eq;
356365 use stdarch_test::simd_test;
357366
358367 use crate::core_arch::x86::*;
359368
360369 #[simd_test(enable = "ssse3")]
361- unsafe fn test_mm_abs_epi8() {
370+ const unsafe fn test_mm_abs_epi8() {
362371 let r = _mm_abs_epi8(_mm_set1_epi8(-5));
363372 assert_eq_m128i(r, _mm_set1_epi8(5));
364373 }
365374
366375 #[simd_test(enable = "ssse3")]
367- unsafe fn test_mm_abs_epi16() {
376+ const unsafe fn test_mm_abs_epi16() {
368377 let r = _mm_abs_epi16(_mm_set1_epi16(-5));
369378 assert_eq_m128i(r, _mm_set1_epi16(5));
370379 }
371380
372381 #[simd_test(enable = "ssse3")]
373- unsafe fn test_mm_abs_epi32() {
382+ const unsafe fn test_mm_abs_epi32() {
374383 let r = _mm_abs_epi32(_mm_set1_epi32(-5));
375384 assert_eq_m128i(r, _mm_set1_epi32(5));
376385 }
@@ -400,7 +409,7 @@ mod tests {
400409 }
401410
402411 #[simd_test(enable = "ssse3")]
403- unsafe fn test_mm_alignr_epi8() {
412+ const unsafe fn test_mm_alignr_epi8() {
404413 #[rustfmt::skip]
405414 let a = _mm_setr_epi8(
406415 1, 2, 3, 4, 5, 6, 7, 8,
@@ -440,7 +449,7 @@ mod tests {
440449 }
441450
442451 #[simd_test(enable = "ssse3")]
443- unsafe fn test_mm_hadd_epi16() {
452+ const unsafe fn test_mm_hadd_epi16() {
444453 let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
445454 let b = _mm_setr_epi16(4, 128, 4, 3, 24, 12, 6, 19);
446455 let expected = _mm_setr_epi16(3, 7, 11, 15, 132, 7, 36, 25);
@@ -490,7 +499,7 @@ mod tests {
490499 }
491500
492501 #[simd_test(enable = "ssse3")]
493- unsafe fn test_mm_hadd_epi32() {
502+ const unsafe fn test_mm_hadd_epi32() {
494503 let a = _mm_setr_epi32(1, 2, 3, 4);
495504 let b = _mm_setr_epi32(4, 128, 4, 3);
496505 let expected = _mm_setr_epi32(3, 7, 132, 7);
@@ -506,7 +515,7 @@ mod tests {
506515 }
507516
508517 #[simd_test(enable = "ssse3")]
509- unsafe fn test_mm_hsub_epi16() {
518+ const unsafe fn test_mm_hsub_epi16() {
510519 let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
511520 let b = _mm_setr_epi16(4, 128, 4, 3, 24, 12, 6, 19);
512521 let expected = _mm_setr_epi16(-1, -1, -1, -1, -124, 1, 12, -13);
@@ -556,7 +565,7 @@ mod tests {
556565 }
557566
558567 #[simd_test(enable = "ssse3")]
559- unsafe fn test_mm_hsub_epi32() {
568+ const unsafe fn test_mm_hsub_epi32() {
560569 let a = _mm_setr_epi32(1, 2, 3, 4);
561570 let b = _mm_setr_epi32(4, 128, 4, 3);
562571 let expected = _mm_setr_epi32(-1, -1, -124, 1);
0 commit comments