From 4deb6bf80c7876f8855b0c7d4a38cc8d4370d2e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Mon, 1 Mar 2021 19:00:06 +0100 Subject: [PATCH] Convert `_mm_insert_epi16` to const generics --- .../stdarch/crates/core_arch/src/x86/avx2.rs | 8 ++++---- .../stdarch/crates/core_arch/src/x86/sse2.rs | 17 ++++++----------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/x86/avx2.rs b/library/stdarch/crates/core_arch/src/x86/avx2.rs index f5168151d57b..a18f1aa06715 100644 --- a/library/stdarch/crates/core_arch/src/x86/avx2.rs +++ b/library/stdarch/crates/core_arch/src/x86/avx2.rs @@ -4498,14 +4498,14 @@ mod tests { #[simd_test(enable = "avx2")] unsafe fn test_mm_broadcastw_epi16() { - let a = _mm_insert_epi16(_mm_set1_epi16(0x2a), 0x22b, 0); + let a = _mm_insert_epi16::<0>(_mm_set1_epi16(0x2a), 0x22b); let res = _mm_broadcastw_epi16(a); assert_eq_m128i(res, _mm_set1_epi16(0x22b)); } #[simd_test(enable = "avx2")] unsafe fn test_mm256_broadcastw_epi16() { - let a = _mm_insert_epi16(_mm_set1_epi16(0x2a), 0x22b, 0); + let a = _mm_insert_epi16::<0>(_mm_set1_epi16(0x2a), 0x22b); let res = _mm256_broadcastw_epi16(a); assert_eq_m256i(res, _mm256_set1_epi16(0x22b)); } @@ -5196,7 +5196,7 @@ mod tests { #[simd_test(enable = "avx2")] unsafe fn test_mm256_sll_epi16() { let a = _mm256_set1_epi16(0xFF); - let b = _mm_insert_epi16(_mm_set1_epi16(0), 4, 0); + let b = _mm_insert_epi16::<0>(_mm_set1_epi16(0), 4); let r = _mm256_sll_epi16(a, b); assert_eq_m256i(r, _mm256_set1_epi16(0xFF0)); } @@ -5357,7 +5357,7 @@ mod tests { #[simd_test(enable = "avx2")] unsafe fn test_mm256_srl_epi16() { let a = _mm256_set1_epi16(0xFF); - let b = _mm_insert_epi16(_mm_set1_epi16(0), 4, 0); + let b = _mm_insert_epi16::<0>(_mm_set1_epi16(0), 4); let r = _mm256_srl_epi16(a, b); assert_eq_m256i(r, _mm256_set1_epi16(0xF)); } diff --git a/library/stdarch/crates/core_arch/src/x86/sse2.rs b/library/stdarch/crates/core_arch/src/x86/sse2.rs index a8aa8de399fc..bbf98250ba73 100644 --- a/library/stdarch/crates/core_arch/src/x86/sse2.rs +++ b/library/stdarch/crates/core_arch/src/x86/sse2.rs @@ -1361,17 +1361,12 @@ pub unsafe fn _mm_extract_epi16(a: __m128i) -> i32 { /// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_insert_epi16) #[inline] #[target_feature(enable = "sse2")] -#[cfg_attr(test, assert_instr(pinsrw, imm8 = 9))] -#[rustc_args_required_const(2)] +#[cfg_attr(test, assert_instr(pinsrw, IMM8 = 7))] +#[rustc_legacy_const_generics(2)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_insert_epi16(a: __m128i, i: i32, imm8: i32) -> __m128i { - let a = a.as_i16x8(); - macro_rules! call { - ($imm3:expr) => { - transmute(simd_insert(a, $imm3, i as i16)) - }; - } - constify_imm3!(imm8, call) +pub unsafe fn _mm_insert_epi16(a: __m128i, i: i32) -> __m128i { + static_assert_imm3!(IMM8); + transmute(simd_insert(a.as_i16x8(), IMM8 as u32, i as i16)) } /// Returns a mask of the most significant bit of each element in `a`. @@ -3888,7 +3883,7 @@ mod tests { #[simd_test(enable = "sse2")] unsafe fn test_mm_insert_epi16() { let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7); - let r = _mm_insert_epi16(a, 9, 0); + let r = _mm_insert_epi16::<0>(a, 9); let e = _mm_setr_epi16(9, 1, 2, 3, 4, 5, 6, 7); assert_eq_m128i(r, e); }