Skip to content

Commit 22d10c5

Browse files
committed
x86: Followup to add const for pack intrinsics
Add const to `sse2`, `sse41`, `avx2`, and `avx512bw` functions and tests
1 parent 1dc3d8c commit 22d10c5

2 files changed

Lines changed: 33 additions & 24 deletions

File tree

library/stdarch/crates/core_arch/src/x86/avx512bw.rs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6615,7 +6615,8 @@ pub fn _mm256_maskz_packs_epi32(k: __mmask16, a: __m256i, b: __m256i) -> __m256i
66156615
#[target_feature(enable = "avx512bw,avx512vl")]
66166616
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
66176617
#[cfg_attr(test, assert_instr(vpackssdw))]
6618-
pub fn _mm_mask_packs_epi32(src: __m128i, k: __mmask8, a: __m128i, b: __m128i) -> __m128i {
6618+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6619+
pub const fn _mm_mask_packs_epi32(src: __m128i, k: __mmask8, a: __m128i, b: __m128i) -> __m128i {
66196620
unsafe {
66206621
let pack = _mm_packs_epi32(a, b).as_i16x8();
66216622
transmute(simd_select_bitmask(k, pack, src.as_i16x8()))
@@ -6629,7 +6630,8 @@ pub fn _mm_mask_packs_epi32(src: __m128i, k: __mmask8, a: __m128i, b: __m128i) -
66296630
#[target_feature(enable = "avx512bw,avx512vl")]
66306631
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
66316632
#[cfg_attr(test, assert_instr(vpackssdw))]
6632-
pub fn _mm_maskz_packs_epi32(k: __mmask8, a: __m128i, b: __m128i) -> __m128i {
6633+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6634+
pub const fn _mm_maskz_packs_epi32(k: __mmask8, a: __m128i, b: __m128i) -> __m128i {
66336635
unsafe {
66346636
let pack = _mm_packs_epi32(a, b).as_i16x8();
66356637
transmute(simd_select_bitmask(k, pack, i16x8::ZERO))
@@ -6735,7 +6737,8 @@ pub fn _mm256_maskz_packs_epi16(k: __mmask32, a: __m256i, b: __m256i) -> __m256i
67356737
#[target_feature(enable = "avx512bw,avx512vl")]
67366738
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
67376739
#[cfg_attr(test, assert_instr(vpacksswb))]
6738-
pub fn _mm_mask_packs_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
6740+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6741+
pub const fn _mm_mask_packs_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
67396742
unsafe {
67406743
let pack = _mm_packs_epi16(a, b).as_i8x16();
67416744
transmute(simd_select_bitmask(k, pack, src.as_i8x16()))
@@ -6749,7 +6752,8 @@ pub fn _mm_mask_packs_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i)
67496752
#[target_feature(enable = "avx512bw,avx512vl")]
67506753
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
67516754
#[cfg_attr(test, assert_instr(vpacksswb))]
6752-
pub fn _mm_maskz_packs_epi16(k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
6755+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6756+
pub const fn _mm_maskz_packs_epi16(k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
67536757
unsafe {
67546758
let pack = _mm_packs_epi16(a, b).as_i8x16();
67556759
transmute(simd_select_bitmask(k, pack, i8x16::ZERO))
@@ -6975,7 +6979,8 @@ pub fn _mm256_maskz_packus_epi16(k: __mmask32, a: __m256i, b: __m256i) -> __m256
69756979
#[target_feature(enable = "avx512bw,avx512vl")]
69766980
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
69776981
#[cfg_attr(test, assert_instr(vpackuswb))]
6978-
pub fn _mm_mask_packus_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
6982+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6983+
pub const fn _mm_mask_packus_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
69796984
unsafe {
69806985
let pack = _mm_packus_epi16(a, b).as_i8x16();
69816986
transmute(simd_select_bitmask(k, pack, src.as_i8x16()))
@@ -6989,7 +6994,8 @@ pub fn _mm_mask_packus_epi16(src: __m128i, k: __mmask16, a: __m128i, b: __m128i)
69896994
#[target_feature(enable = "avx512bw,avx512vl")]
69906995
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
69916996
#[cfg_attr(test, assert_instr(vpackuswb))]
6992-
pub fn _mm_maskz_packus_epi16(k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
6997+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
6998+
pub const fn _mm_maskz_packus_epi16(k: __mmask16, a: __m128i, b: __m128i) -> __m128i {
69936999
unsafe {
69947000
let pack = _mm_packus_epi16(a, b).as_i8x16();
69957001
transmute(simd_select_bitmask(k, pack, i8x16::ZERO))
@@ -17854,7 +17860,7 @@ mod tests {
1785417860
}
1785517861

1785617862
#[simd_test(enable = "avx512bw,avx512vl")]
17857-
fn test_mm_mask_packs_epi32() {
17863+
const fn test_mm_mask_packs_epi32() {
1785817864
let a = _mm_set1_epi32(i32::MAX);
1785917865
let b = _mm_set1_epi32(1 << 16 | 1);
1786017866
let r = _mm_mask_packs_epi32(a, 0, a, b);
@@ -17865,7 +17871,7 @@ mod tests {
1786517871
}
1786617872

1786717873
#[simd_test(enable = "avx512bw,avx512vl")]
17868-
fn test_mm_maskz_packs_epi32() {
17874+
const fn test_mm_maskz_packs_epi32() {
1786917875
let a = _mm_set1_epi32(i32::MAX);
1787017876
let b = _mm_set1_epi32(1);
1787117877
let r = _mm_maskz_packs_epi32(0, a, b);
@@ -17954,7 +17960,7 @@ mod tests {
1795417960
}
1795517961

1795617962
#[simd_test(enable = "avx512bw,avx512vl")]
17957-
fn test_mm_mask_packs_epi16() {
17963+
const fn test_mm_mask_packs_epi16() {
1795817964
let a = _mm_set1_epi16(i16::MAX);
1795917965
let b = _mm_set1_epi16(1 << 8 | 1);
1796017966
let r = _mm_mask_packs_epi16(a, 0, a, b);
@@ -17966,7 +17972,7 @@ mod tests {
1796617972
}
1796717973

1796817974
#[simd_test(enable = "avx512bw,avx512vl")]
17969-
fn test_mm_maskz_packs_epi16() {
17975+
const fn test_mm_maskz_packs_epi16() {
1797017976
let a = _mm_set1_epi16(i16::MAX);
1797117977
let b = _mm_set1_epi16(1);
1797217978
let r = _mm_maskz_packs_epi16(0, a, b);
@@ -18137,7 +18143,7 @@ mod tests {
1813718143
}
1813818144

1813918145
#[simd_test(enable = "avx512bw,avx512vl")]
18140-
fn test_mm_mask_packus_epi16() {
18146+
const fn test_mm_mask_packus_epi16() {
1814118147
let a = _mm_set1_epi16(-1);
1814218148
let b = _mm_set1_epi16(1 << 8 | 1);
1814318149
let r = _mm_mask_packus_epi16(a, 0, a, b);
@@ -18148,7 +18154,7 @@ mod tests {
1814818154
}
1814918155

1815018156
#[simd_test(enable = "avx512bw,avx512vl")]
18151-
fn test_mm_maskz_packus_epi16() {
18157+
const fn test_mm_maskz_packus_epi16() {
1815218158
let a = _mm_set1_epi16(-1);
1815318159
let b = _mm_set1_epi16(1);
1815418160
let r = _mm_maskz_packus_epi16(0, a, b);

library/stdarch/crates/core_arch/src/x86/sse2.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1492,10 +1492,11 @@ pub const fn _mm_move_epi64(a: __m128i) -> __m128i {
14921492
#[target_feature(enable = "sse2")]
14931493
#[cfg_attr(test, assert_instr(packsswb))]
14941494
#[stable(feature = "simd_x86", since = "1.27.0")]
1495-
pub fn _mm_packs_epi16(a: __m128i, b: __m128i) -> __m128i {
1495+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
1496+
pub const fn _mm_packs_epi16(a: __m128i, b: __m128i) -> __m128i {
14961497
unsafe {
1497-
let max = simd_splat(i16::from(i8::MAX));
1498-
let min = simd_splat(i16::from(i8::MIN));
1498+
let max = simd_splat(i8::MAX as i16);
1499+
let min = simd_splat(i8::MIN as i16);
14991500

15001501
let clamped_a = simd_imax(simd_imin(a.as_i16x8(), max), min)
15011502
.as_m128i()
@@ -1521,10 +1522,11 @@ pub fn _mm_packs_epi16(a: __m128i, b: __m128i) -> __m128i {
15211522
#[target_feature(enable = "sse2")]
15221523
#[cfg_attr(test, assert_instr(packssdw))]
15231524
#[stable(feature = "simd_x86", since = "1.27.0")]
1524-
pub fn _mm_packs_epi32(a: __m128i, b: __m128i) -> __m128i {
1525+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
1526+
pub const fn _mm_packs_epi32(a: __m128i, b: __m128i) -> __m128i {
15251527
unsafe {
1526-
let max = simd_splat(i32::from(i16::MAX));
1527-
let min = simd_splat(i32::from(i16::MIN));
1528+
let max = simd_splat(i16::MAX as i32);
1529+
let min = simd_splat(i16::MIN as i32);
15281530

15291531
let clamped_a = simd_imax(simd_imin(a.as_i32x4(), max), min);
15301532
let clamped_b = simd_imax(simd_imin(b.as_i32x4(), max), min);
@@ -1546,10 +1548,11 @@ pub fn _mm_packs_epi32(a: __m128i, b: __m128i) -> __m128i {
15461548
#[target_feature(enable = "sse2")]
15471549
#[cfg_attr(test, assert_instr(packuswb))]
15481550
#[stable(feature = "simd_x86", since = "1.27.0")]
1549-
pub fn _mm_packus_epi16(a: __m128i, b: __m128i) -> __m128i {
1551+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
1552+
pub const fn _mm_packus_epi16(a: __m128i, b: __m128i) -> __m128i {
15501553
unsafe {
1551-
let max = simd_splat(i16::from(u8::MAX));
1552-
let min = simd_splat(i16::from(u8::MIN));
1554+
let max = simd_splat(u8::MAX as i16);
1555+
let min = simd_splat(u8::MIN as i16);
15531556

15541557
let clamped_a = simd_imax(simd_imin(a.as_i16x8(), max), min)
15551558
.as_m128i()
@@ -4329,7 +4332,7 @@ mod tests {
43294332
}
43304333

43314334
#[simd_test(enable = "sse2")]
4332-
fn test_mm_packs_epi16() {
4335+
const fn test_mm_packs_epi16() {
43334336
let a = _mm_setr_epi16(0x80, -0x81, 0, 0, 0, 0, 0, 0);
43344337
let b = _mm_setr_epi16(0, 0, 0, 0, 0, 0, -0x81, 0x80);
43354338
let r = _mm_packs_epi16(a, b);
@@ -4343,7 +4346,7 @@ mod tests {
43434346
}
43444347

43454348
#[simd_test(enable = "sse2")]
4346-
fn test_mm_packs_epi32() {
4349+
const fn test_mm_packs_epi32() {
43474350
let a = _mm_setr_epi32(0x8000, -0x8001, 0, 0);
43484351
let b = _mm_setr_epi32(0, 0, -0x8001, 0x8000);
43494352
let r = _mm_packs_epi32(a, b);
@@ -4354,7 +4357,7 @@ mod tests {
43544357
}
43554358

43564359
#[simd_test(enable = "sse2")]
4357-
fn test_mm_packus_epi16() {
4360+
const fn test_mm_packus_epi16() {
43584361
let a = _mm_setr_epi16(0x100, -1, 0, 0, 0, 0, 0, 0);
43594362
let b = _mm_setr_epi16(0, 0, 0, 0, 0, 0, -1, 0x100);
43604363
let r = _mm_packus_epi16(a, b);

0 commit comments

Comments
 (0)