Skip to content

Commit 283e6a8

Browse files
authored
Convert _mm_slli_epi{16,32,64} & _mm_srli_epi{16,32,64} to const generics (#1020)
1 parent aba9587 commit 283e6a8

File tree

3 files changed

+41
-65
lines changed

3 files changed

+41
-65
lines changed

crates/core_arch/src/x86/avx512bw.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -5201,7 +5201,7 @@ pub unsafe fn _mm256_maskz_slli_epi16(k: __mmask16, a: __m256i, imm8: u32) -> __
52015201
pub unsafe fn _mm_mask_slli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
52025202
macro_rules! call {
52035203
($imm8:expr) => {
5204-
_mm_slli_epi16(a, $imm8)
5204+
_mm_slli_epi16::<$imm8>(a)
52055205
};
52065206
}
52075207
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
52185218
pub unsafe fn _mm_maskz_slli_epi16(k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
52195219
macro_rules! call {
52205220
($imm8:expr) => {
5221-
_mm_slli_epi16(a, $imm8)
5221+
_mm_slli_epi16::<$imm8>(a)
52225222
};
52235223
}
52245224
let shf = constify_imm8_sae!(imm8, call);
@@ -5530,7 +5530,7 @@ pub unsafe fn _mm256_maskz_srli_epi16(k: __mmask16, a: __m256i, imm8: i32) -> __
55305530
pub unsafe fn _mm_mask_srli_epi16(src: __m128i, k: __mmask8, a: __m128i, imm8: i32) -> __m128i {
55315531
macro_rules! call {
55325532
($imm8:expr) => {
5533-
_mm_srli_epi16(a, $imm8)
5533+
_mm_srli_epi16::<$imm8>(a)
55345534
};
55355535
}
55365536
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
55475547
pub unsafe fn _mm_maskz_srli_epi16(k: __mmask8, a: __m128i, imm8: i32) -> __m128i {
55485548
macro_rules! call {
55495549
($imm8:expr) => {
5550-
_mm_srli_epi16(a, $imm8)
5550+
_mm_srli_epi16::<$imm8>(a)
55515551
};
55525552
}
55535553
let shf = constify_imm8_sae!(imm8, call);

crates/core_arch/src/x86/avx512f.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -18184,7 +18184,7 @@ pub unsafe fn _mm256_maskz_slli_epi32(k: __mmask8, a: __m256i, imm8: u32) -> __m
1818418184
pub unsafe fn _mm_mask_slli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1818518185
macro_rules! call {
1818618186
($imm8:expr) => {
18187-
_mm_slli_epi32(a, $imm8)
18187+
_mm_slli_epi32::<$imm8>(a)
1818818188
};
1818918189
}
1819018190
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
1820118201
pub unsafe fn _mm_maskz_slli_epi32(k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1820218202
macro_rules! call {
1820318203
($imm8:expr) => {
18204-
_mm_slli_epi32(a, $imm8)
18204+
_mm_slli_epi32::<$imm8>(a)
1820518205
};
1820618206
}
1820718207
let shf = constify_imm8_sae!(imm8, call);
@@ -18309,7 +18309,7 @@ pub unsafe fn _mm256_maskz_srli_epi32(k: __mmask8, a: __m256i, imm8: u32) -> __m
1830918309
pub unsafe fn _mm_mask_srli_epi32(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1831018310
macro_rules! call {
1831118311
($imm8:expr) => {
18312-
_mm_srli_epi32(a, $imm8)
18312+
_mm_srli_epi32::<$imm8>(a)
1831318313
};
1831418314
}
1831518315
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
1832618326
pub unsafe fn _mm_maskz_srli_epi32(k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1832718327
macro_rules! call {
1832818328
($imm8:expr) => {
18329-
_mm_srli_epi32(a, $imm8)
18329+
_mm_srli_epi32::<$imm8>(a)
1833018330
};
1833118331
}
1833218332
let shf = constify_imm8_sae!(imm8, call);
@@ -18434,7 +18434,7 @@ pub unsafe fn _mm256_maskz_slli_epi64(k: __mmask8, a: __m256i, imm8: u32) -> __m
1843418434
pub unsafe fn _mm_mask_slli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1843518435
macro_rules! call {
1843618436
($imm8:expr) => {
18437-
_mm_slli_epi64(a, $imm8)
18437+
_mm_slli_epi64::<$imm8>(a)
1843818438
};
1843918439
}
1844018440
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
1845118451
pub unsafe fn _mm_maskz_slli_epi64(k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1845218452
macro_rules! call {
1845318453
($imm8:expr) => {
18454-
_mm_slli_epi64(a, $imm8)
18454+
_mm_slli_epi64::<$imm8>(a)
1845518455
};
1845618456
}
1845718457
let shf = constify_imm8_sae!(imm8, call);
@@ -18559,7 +18559,7 @@ pub unsafe fn _mm256_maskz_srli_epi64(k: __mmask8, a: __m256i, imm8: u32) -> __m
1855918559
pub unsafe fn _mm_mask_srli_epi64(src: __m128i, k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1856018560
macro_rules! call {
1856118561
($imm8:expr) => {
18562-
_mm_srli_epi64(a, $imm8)
18562+
_mm_srli_epi64::<$imm8>(a)
1856318563
};
1856418564
}
1856518565
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
1857618576
pub unsafe fn _mm_maskz_srli_epi64(k: __mmask8, a: __m128i, imm8: u32) -> __m128i {
1857718577
macro_rules! call {
1857818578
($imm8:expr) => {
18579-
_mm_srli_epi64(a, $imm8)
18579+
_mm_srli_epi64::<$imm8>(a)
1858018580
};
1858118581
}
1858218582
let shf = constify_imm8_sae!(imm8, call);

crates/core_arch/src/x86/sse2.rs

+29-53
Original file line numberDiff line numberDiff line change
@@ -503,16 +503,11 @@ pub unsafe fn _mm_bsrli_si128(a: __m128i, imm8: i32) -> __m128i {
503503
#[inline]
504504
#[target_feature(enable = "sse2")]
505505
#[cfg_attr(test, assert_instr(psllw, imm8 = 7))]
506-
#[rustc_args_required_const(1)]
506+
#[rustc_legacy_const_generics(1)]
507507
#[stable(feature = "simd_x86", since = "1.27.0")]
508-
pub unsafe fn _mm_slli_epi16(a: __m128i, imm8: i32) -> __m128i {
509-
let a = a.as_i16x8();
510-
macro_rules! call {
511-
($imm8:expr) => {
512-
transmute(pslliw(a, $imm8))
513-
};
514-
}
515-
constify_imm8!(imm8, call)
508+
pub unsafe fn _mm_slli_epi16<const imm8: i32>(a: __m128i) -> __m128i {
509+
static_assert_imm8!(imm8);
510+
transmute(pslliw(a.as_i16x8(), imm8))
516511
}
517512

518513
/// Shifts packed 16-bit integers in `a` left by `count` while shifting in
@@ -533,16 +528,11 @@ pub unsafe fn _mm_sll_epi16(a: __m128i, count: __m128i) -> __m128i {
533528
#[inline]
534529
#[target_feature(enable = "sse2")]
535530
#[cfg_attr(test, assert_instr(pslld, imm8 = 7))]
536-
#[rustc_args_required_const(1)]
531+
#[rustc_legacy_const_generics(1)]
537532
#[stable(feature = "simd_x86", since = "1.27.0")]
538-
pub unsafe fn _mm_slli_epi32(a: __m128i, imm8: i32) -> __m128i {
539-
let a = a.as_i32x4();
540-
macro_rules! call {
541-
($imm8:expr) => {
542-
transmute(psllid(a, $imm8))
543-
};
544-
}
545-
constify_imm8!(imm8, call)
533+
pub unsafe fn _mm_slli_epi32<const imm8: i32>(a: __m128i) -> __m128i {
534+
static_assert_imm8!(imm8);
535+
transmute(psllid(a.as_i32x4(), imm8))
546536
}
547537

548538
/// Shifts packed 32-bit integers in `a` left by `count` while shifting in
@@ -563,16 +553,11 @@ pub unsafe fn _mm_sll_epi32(a: __m128i, count: __m128i) -> __m128i {
563553
#[inline]
564554
#[target_feature(enable = "sse2")]
565555
#[cfg_attr(test, assert_instr(psllq, imm8 = 7))]
566-
#[rustc_args_required_const(1)]
556+
#[rustc_legacy_const_generics(1)]
567557
#[stable(feature = "simd_x86", since = "1.27.0")]
568-
pub unsafe fn _mm_slli_epi64(a: __m128i, imm8: i32) -> __m128i {
569-
let a = a.as_i64x2();
570-
macro_rules! call {
571-
($imm8:expr) => {
572-
transmute(pslliq(a, $imm8))
573-
};
574-
}
575-
constify_imm8!(imm8, call)
558+
pub unsafe fn _mm_slli_epi64<const imm8: i32>(a: __m128i) -> __m128i {
559+
static_assert_imm8!(imm8);
560+
transmute(pslliq(a.as_i64x2(), imm8))
576561
}
577562

578563
/// Shifts packed 64-bit integers in `a` left by `count` while shifting in
@@ -713,16 +698,11 @@ unsafe fn _mm_srli_si128_impl(a: __m128i, imm8: i32) -> __m128i {
713698
#[inline]
714699
#[target_feature(enable = "sse2")]
715700
#[cfg_attr(test, assert_instr(psrlw, imm8 = 1))]
716-
#[rustc_args_required_const(1)]
701+
#[rustc_legacy_const_generics(1)]
717702
#[stable(feature = "simd_x86", since = "1.27.0")]
718-
pub unsafe fn _mm_srli_epi16(a: __m128i, imm8: i32) -> __m128i {
719-
let a = a.as_i16x8();
720-
macro_rules! call {
721-
($imm8:expr) => {
722-
transmute(psrliw(a, $imm8))
723-
};
724-
}
725-
constify_imm8!(imm8, call)
703+
pub unsafe fn _mm_srli_epi16<const imm8: i32>(a: __m128i) -> __m128i {
704+
static_assert_imm8!(imm8);
705+
transmute(psrliw(a.as_i16x8(), imm8))
726706
}
727707

728708
/// Shifts packed 16-bit integers in `a` right by `count` while shifting in
@@ -744,16 +724,11 @@ pub unsafe fn _mm_srl_epi16(a: __m128i, count: __m128i) -> __m128i {
744724
#[inline]
745725
#[target_feature(enable = "sse2")]
746726
#[cfg_attr(test, assert_instr(psrld, imm8 = 8))]
747-
#[rustc_args_required_const(1)]
727+
#[rustc_legacy_const_generics(1)]
748728
#[stable(feature = "simd_x86", since = "1.27.0")]
749-
pub unsafe fn _mm_srli_epi32(a: __m128i, imm8: i32) -> __m128i {
750-
let a = a.as_i32x4();
751-
macro_rules! call {
752-
($imm8:expr) => {
753-
transmute(psrlid(a, $imm8))
754-
};
755-
}
756-
constify_imm8!(imm8, call)
729+
pub unsafe fn _mm_srli_epi32<const imm8: i32>(a: __m128i) -> __m128i {
730+
static_assert_imm8!(imm8);
731+
transmute(psrlid(a.as_i32x4(), imm8))
757732
}
758733

759734
/// Shifts packed 32-bit integers in `a` right by `count` while shifting in
@@ -775,9 +750,10 @@ pub unsafe fn _mm_srl_epi32(a: __m128i, count: __m128i) -> __m128i {
775750
#[inline]
776751
#[target_feature(enable = "sse2")]
777752
#[cfg_attr(test, assert_instr(psrlq, imm8 = 1))]
778-
#[rustc_args_required_const(1)]
753+
#[rustc_legacy_const_generics(1)]
779754
#[stable(feature = "simd_x86", since = "1.27.0")]
780-
pub unsafe fn _mm_srli_epi64(a: __m128i, imm8: i32) -> __m128i {
755+
pub unsafe fn _mm_srli_epi64<const imm8: i32>(a: __m128i) -> __m128i {
756+
static_assert_imm8!(imm8);
781757
transmute(psrliq(a.as_i64x2(), imm8))
782758
}
783759

@@ -3439,7 +3415,7 @@ mod tests {
34393415
let a = _mm_setr_epi16(
34403416
0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0,
34413417
);
3442-
let r = _mm_slli_epi16(a, 4);
3418+
let r = _mm_slli_epi16::<4>(a);
34433419

34443420
#[rustfmt::skip]
34453421
let e = _mm_setr_epi16(
@@ -3460,7 +3436,7 @@ mod tests {
34603436

34613437
#[simd_test(enable = "sse2")]
34623438
unsafe fn test_mm_slli_epi32() {
3463-
let r = _mm_slli_epi32(_mm_set1_epi32(0xFFFF), 4);
3439+
let r = _mm_slli_epi32::<4>(_mm_set1_epi32(0xFFFF));
34643440
assert_eq_m128i(r, _mm_set1_epi32(0xFFFF0));
34653441
}
34663442

@@ -3474,7 +3450,7 @@ mod tests {
34743450

34753451
#[simd_test(enable = "sse2")]
34763452
unsafe fn test_mm_slli_epi64() {
3477-
let r = _mm_slli_epi64(_mm_set1_epi64x(0xFFFFFFFF), 4);
3453+
let r = _mm_slli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF));
34783454
assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFFF0));
34793455
}
34803456

@@ -3563,7 +3539,7 @@ mod tests {
35633539
let a = _mm_setr_epi16(
35643540
0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0,
35653541
);
3566-
let r = _mm_srli_epi16(a, 4);
3542+
let r = _mm_srli_epi16::<4>(a);
35673543
#[rustfmt::skip]
35683544
let e = _mm_setr_epi16(
35693545
0xFFF as u16 as i16, 0xFF as u16 as i16, 0xF, 0, 0, 0, 0, 0,
@@ -3582,7 +3558,7 @@ mod tests {
35823558

35833559
#[simd_test(enable = "sse2")]
35843560
unsafe fn test_mm_srli_epi32() {
3585-
let r = _mm_srli_epi32(_mm_set1_epi32(0xFFFF), 4);
3561+
let r = _mm_srli_epi32::<4>(_mm_set1_epi32(0xFFFF));
35863562
assert_eq_m128i(r, _mm_set1_epi32(0xFFF));
35873563
}
35883564

@@ -3596,7 +3572,7 @@ mod tests {
35963572

35973573
#[simd_test(enable = "sse2")]
35983574
unsafe fn test_mm_srli_epi64() {
3599-
let r = _mm_srli_epi64(_mm_set1_epi64x(0xFFFFFFFF), 4);
3575+
let r = _mm_srli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF));
36003576
assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFF));
36013577
}
36023578

0 commit comments

Comments
 (0)