From 7dd0e93318e80287c7498418305128c92a58535b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 1/7] Convert `_mm_srli_epi16` to const generics --- crates/core_arch/src/x86/avx512bw.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/x86/avx512bw.rs b/crates/core_arch/src/x86/avx512bw.rs index 2abb335434..96d51054ff 100644 --- a/crates/core_arch/src/x86/avx512bw.rs +++ b/crates/core_arch/src/x86/avx512bw.rs @@ -5530,7 +5530,7 @@ pub unsafe fn _mm256_maskz_srli_epi16(k: __mmask16, a: __m256i, imm8: i32) -> __ pub unsafe fn _mm_mask_srli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: i32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi16(a, $imm8) + _mm_srli_epi16::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -5547,7 +5547,7 @@ pub unsafe fn _mm_mask_srli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: i pub unsafe fn _mm_maskz_srli_epi16(k: __mmask8, a: __m128i, imm8: i32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi16(a, $imm8) + _mm_srli_epi16::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index ae98df5288..d5ab2e3539 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -713,16 +713,10 @@ unsafe fn _mm_srli_si128_impl(a: __m128i, imm8: i32) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(psrlw, imm8 = 1))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_srli_epi16(a: __m128i, imm8: i32) -> __m128i { - let a = a.as_i16x8(); - macro_rules! call { - ($imm8:expr) => { - transmute(psrliw(a, $imm8)) - }; - } - constify_imm8!(imm8, call) +pub unsafe fn _mm_srli_epi16(a: __m128i) -> __m128i { + transmute(psrliw(a.as_i16x8(), imm8)) } /// Shifts packed 16-bit integers in `a` right by `count` while shifting in @@ -3563,7 +3557,7 @@ mod tests { let a = _mm_setr_epi16( 0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0, ); - let r = _mm_srli_epi16(a, 4); + let r = _mm_srli_epi16::<4>(a); #[rustfmt::skip] let e = _mm_setr_epi16( 0xFFF as u16 as i16, 0xFF as u16 as i16, 0xF, 0, 0, 0, 0, 0, From caba6f4667bbabbf50304d61a33295c24ca3ba74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 2/7] Convert `_mm_srli_epi32` to const generics --- crates/core_arch/src/x86/avx512f.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/x86/avx512f.rs b/crates/core_arch/src/x86/avx512f.rs index 9fbfb209db..096ef03dee 100644 --- a/crates/core_arch/src/x86/avx512f.rs +++ b/crates/core_arch/src/x86/avx512f.rs @@ -18309,7 +18309,7 @@ pub unsafe fn _mm256_maskz_srli_epi32(k: __mmask8, a: __m256i, imm8: u32) -> __m pub unsafe fn _mm_mask_srli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi32(a, $imm8) + _mm_srli_epi32::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -18326,7 +18326,7 @@ pub unsafe fn _mm_mask_srli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u pub unsafe fn _mm_maskz_srli_epi32(k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi32(a, $imm8) + _mm_srli_epi32::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index d5ab2e3539..314c89ea7c 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -738,16 +738,10 @@ pub unsafe fn _mm_srl_epi16(a: __m128i, count: __m128i) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(psrld, imm8 = 8))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_srli_epi32(a: __m128i, imm8: i32) -> __m128i { - let a = a.as_i32x4(); - macro_rules! call { - ($imm8:expr) => { - transmute(psrlid(a, $imm8)) - }; - } - constify_imm8!(imm8, call) +pub unsafe fn _mm_srli_epi32(a: __m128i) -> __m128i { + transmute(psrlid(a.as_i32x4(), imm8)) } /// Shifts packed 32-bit integers in `a` right by `count` while shifting in @@ -3576,7 +3570,7 @@ mod tests { #[simd_test(enable = "sse2")] unsafe fn test_mm_srli_epi32() { - let r = _mm_srli_epi32(_mm_set1_epi32(0xFFFF), 4); + let r = _mm_srli_epi32::<4>(_mm_set1_epi32(0xFFFF)); assert_eq_m128i(r, _mm_set1_epi32(0xFFF)); } From d886af78530ce9ecf266a07f1a4c799f181d659e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 3/7] Convert `_mm_srli_epi64` to const generics --- crates/core_arch/src/x86/avx512f.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/core_arch/src/x86/avx512f.rs b/crates/core_arch/src/x86/avx512f.rs index 096ef03dee..e83c27e9ef 100644 --- a/crates/core_arch/src/x86/avx512f.rs +++ b/crates/core_arch/src/x86/avx512f.rs @@ -18559,7 +18559,7 @@ pub unsafe fn _mm256_maskz_srli_epi64(k: __mmask8, a: __m256i, imm8: u32) -> __m pub unsafe fn _mm_mask_srli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi64(a, $imm8) + _mm_srli_epi64::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -18576,7 +18576,7 @@ pub unsafe fn _mm_mask_srli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u pub unsafe fn _mm_maskz_srli_epi64(k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_srli_epi64(a, $imm8) + _mm_srli_epi64::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index 314c89ea7c..7d1629031b 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -763,9 +763,9 @@ pub unsafe fn _mm_srl_epi32(a: __m128i, count: __m128i) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(psrlq, imm8 = 1))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_srli_epi64(a: __m128i, imm8: i32) -> __m128i { +pub unsafe fn _mm_srli_epi64(a: __m128i) -> __m128i { transmute(psrliq(a.as_i64x2(), imm8)) } @@ -3584,7 +3584,7 @@ mod tests { #[simd_test(enable = "sse2")] unsafe fn test_mm_srli_epi64() { - let r = _mm_srli_epi64(_mm_set1_epi64x(0xFFFFFFFF), 4); + let r = _mm_srli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF)); assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFF)); } From 7a99b22219475a8e0754b88efaa42074c5063c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 4/7] Convert `_mm_slli_epi16` to const generics --- crates/core_arch/src/x86/avx512bw.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/x86/avx512bw.rs b/crates/core_arch/src/x86/avx512bw.rs index 96d51054ff..16dfdf7eec 100644 --- a/crates/core_arch/src/x86/avx512bw.rs +++ b/crates/core_arch/src/x86/avx512bw.rs @@ -5201,7 +5201,7 @@ pub unsafe fn _mm256_maskz_slli_epi16(k: __mmask16, a: __m256i, imm8: u32) -> __ pub unsafe fn _mm_mask_slli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi16(a, $imm8) + _mm_slli_epi16::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -5218,7 +5218,7 @@ pub unsafe fn _mm_mask_slli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: u pub unsafe fn _mm_maskz_slli_epi16(k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi16(a, $imm8) + _mm_slli_epi16::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index 7d1629031b..fcb94e42e6 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -503,16 +503,10 @@ pub unsafe fn _mm_bsrli_si128(a: __m128i, imm8: i32) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(psllw, imm8 = 7))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_slli_epi16(a: __m128i, imm8: i32) -> __m128i { - let a = a.as_i16x8(); - macro_rules! call { - ($imm8:expr) => { - transmute(pslliw(a, $imm8)) - }; - } - constify_imm8!(imm8, call) +pub unsafe fn _mm_slli_epi16(a: __m128i) -> __m128i { + transmute(pslliw(a.as_i16x8(), imm8)) } /// Shifts packed 16-bit integers in `a` left by `count` while shifting in @@ -3427,7 +3421,7 @@ mod tests { let a = _mm_setr_epi16( 0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0, ); - let r = _mm_slli_epi16(a, 4); + let r = _mm_slli_epi16::<4>(a); #[rustfmt::skip] let e = _mm_setr_epi16( From 843084eca270787bc5b0d7bd5b944fd181ac8033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 5/7] Convert `_mm_slli_epi32` to const generics --- crates/core_arch/src/x86/avx512f.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/x86/avx512f.rs b/crates/core_arch/src/x86/avx512f.rs index e83c27e9ef..6bf16e7a39 100644 --- a/crates/core_arch/src/x86/avx512f.rs +++ b/crates/core_arch/src/x86/avx512f.rs @@ -18184,7 +18184,7 @@ pub unsafe fn _mm256_maskz_slli_epi32(k: __mmask8, a: __m256i, imm8: u32) -> __m pub unsafe fn _mm_mask_slli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi32(a, $imm8) + _mm_slli_epi32::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -18201,7 +18201,7 @@ pub unsafe fn _mm_mask_slli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u pub unsafe fn _mm_maskz_slli_epi32(k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi32(a, $imm8) + _mm_slli_epi32::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index fcb94e42e6..65412a0abe 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -527,16 +527,10 @@ pub unsafe fn _mm_sll_epi16(a: __m128i, count: __m128i) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(pslld, imm8 = 7))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_slli_epi32(a: __m128i, imm8: i32) -> __m128i { - let a = a.as_i32x4(); - macro_rules! call { - ($imm8:expr) => { - transmute(psllid(a, $imm8)) - }; - } - constify_imm8!(imm8, call) +pub unsafe fn _mm_slli_epi32(a: __m128i) -> __m128i { + transmute(psllid(a.as_i32x4(), imm8)) } /// Shifts packed 32-bit integers in `a` left by `count` while shifting in @@ -3442,7 +3436,7 @@ mod tests { #[simd_test(enable = "sse2")] unsafe fn test_mm_slli_epi32() { - let r = _mm_slli_epi32(_mm_set1_epi32(0xFFFF), 4); + let r = _mm_slli_epi32::<4>(_mm_set1_epi32(0xFFFF)); assert_eq_m128i(r, _mm_set1_epi32(0xFFFF0)); } From aedd2f5aa913c6ae4920fb5ae23002103fb4ef72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sat, 27 Feb 2021 00:00:00 +0000 Subject: [PATCH 6/7] Convert `_mm_slli_epi64` to const generics --- crates/core_arch/src/x86/avx512f.rs | 4 ++-- crates/core_arch/src/x86/sse2.rs | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/crates/core_arch/src/x86/avx512f.rs b/crates/core_arch/src/x86/avx512f.rs index 6bf16e7a39..b450963c2b 100644 --- a/crates/core_arch/src/x86/avx512f.rs +++ b/crates/core_arch/src/x86/avx512f.rs @@ -18434,7 +18434,7 @@ pub unsafe fn _mm256_maskz_slli_epi64(k: __mmask8, a: __m256i, imm8: u32) -> __m pub unsafe fn _mm_mask_slli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi64(a, $imm8) + _mm_slli_epi64::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); @@ -18451,7 +18451,7 @@ pub unsafe fn _mm_mask_slli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u pub unsafe fn _mm_maskz_slli_epi64(k: __mmask8, a: __m128i, imm8: u32) -> __m128i { macro_rules! call { ($imm8:expr) => { - _mm_slli_epi64(a, $imm8) + _mm_slli_epi64::<$imm8>(a) }; } let shf = constify_imm8_sae!(imm8, call); diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index 65412a0abe..9df799364e 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -551,16 +551,10 @@ pub unsafe fn _mm_sll_epi32(a: __m128i, count: __m128i) -> __m128i { #[inline] #[target_feature(enable = "sse2")] #[cfg_attr(test, assert_instr(psllq, imm8 = 7))] -#[rustc_args_required_const(1)] +#[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] -pub unsafe fn _mm_slli_epi64(a: __m128i, imm8: i32) -> __m128i { - let a = a.as_i64x2(); - macro_rules! call { - ($imm8:expr) => { - transmute(pslliq(a, $imm8)) - }; - } - constify_imm8!(imm8, call) +pub unsafe fn _mm_slli_epi64(a: __m128i) -> __m128i { + transmute(pslliq(a.as_i64x2(), imm8)) } /// Shifts packed 64-bit integers in `a` left by `count` while shifting in @@ -3450,7 +3444,7 @@ mod tests { #[simd_test(enable = "sse2")] unsafe fn test_mm_slli_epi64() { - let r = _mm_slli_epi64(_mm_set1_epi64x(0xFFFFFFFF), 4); + let r = _mm_slli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF)); assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFFF0)); } From 61474931a54277fd5dd7d14bbfef5a0a2533ab26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= Date: Sun, 28 Feb 2021 00:00:00 +0000 Subject: [PATCH 7/7] Use static assertion to check range of imm8 arguments --- crates/core_arch/src/x86/sse2.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs index 9df799364e..a49c0a70b2 100644 --- a/crates/core_arch/src/x86/sse2.rs +++ b/crates/core_arch/src/x86/sse2.rs @@ -506,6 +506,7 @@ pub unsafe fn _mm_bsrli_si128(a: __m128i, imm8: i32) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_slli_epi16(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(pslliw(a.as_i16x8(), imm8)) } @@ -530,6 +531,7 @@ pub unsafe fn _mm_sll_epi16(a: __m128i, count: __m128i) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_slli_epi32(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(psllid(a.as_i32x4(), imm8)) } @@ -554,6 +556,7 @@ pub unsafe fn _mm_sll_epi32(a: __m128i, count: __m128i) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_slli_epi64(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(pslliq(a.as_i64x2(), imm8)) } @@ -698,6 +701,7 @@ unsafe fn _mm_srli_si128_impl(a: __m128i, imm8: i32) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_srli_epi16(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(psrliw(a.as_i16x8(), imm8)) } @@ -723,6 +727,7 @@ pub unsafe fn _mm_srl_epi16(a: __m128i, count: __m128i) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_srli_epi32(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(psrlid(a.as_i32x4(), imm8)) } @@ -748,6 +753,7 @@ pub unsafe fn _mm_srl_epi32(a: __m128i, count: __m128i) -> __m128i { #[rustc_legacy_const_generics(1)] #[stable(feature = "simd_x86", since = "1.27.0")] pub unsafe fn _mm_srli_epi64(a: __m128i) -> __m128i { + static_assert_imm8!(imm8); transmute(psrliq(a.as_i64x2(), imm8)) }