Make avx512vpopcntdq functions const

This commit is contained in:
sayantn 2025-09-23 19:06:52 +05:30
parent 2e6bdf2b73
commit 4506af45dd
No known key found for this signature in database
GPG key ID: B60412E056614AA4

View file

@ -26,7 +26,8 @@ use stdarch_test::assert_instr;
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm512_popcnt_epi32(a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_popcnt_epi32(a: __m512i) -> __m512i {
unsafe { transmute(simd_ctpop(a.as_i32x16())) }
}
@ -40,7 +41,8 @@ pub fn _mm512_popcnt_epi32(a: __m512i) -> __m512i {
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm512_maskz_popcnt_epi32(k: __mmask16, a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_maskz_popcnt_epi32(k: __mmask16, a: __m512i) -> __m512i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -60,7 +62,8 @@ pub fn _mm512_maskz_popcnt_epi32(k: __mmask16, a: __m512i) -> __m512i {
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm512_mask_popcnt_epi32(src: __m512i, k: __mmask16, a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_mask_popcnt_epi32(src: __m512i, k: __mmask16, a: __m512i) -> __m512i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -77,7 +80,8 @@ pub fn _mm512_mask_popcnt_epi32(src: __m512i, k: __mmask16, a: __m512i) -> __m51
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm256_popcnt_epi32(a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_popcnt_epi32(a: __m256i) -> __m256i {
unsafe { transmute(simd_ctpop(a.as_i32x8())) }
}
@ -91,7 +95,8 @@ pub fn _mm256_popcnt_epi32(a: __m256i) -> __m256i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm256_maskz_popcnt_epi32(k: __mmask8, a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_maskz_popcnt_epi32(k: __mmask8, a: __m256i) -> __m256i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -111,7 +116,8 @@ pub fn _mm256_maskz_popcnt_epi32(k: __mmask8, a: __m256i) -> __m256i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm256_mask_popcnt_epi32(src: __m256i, k: __mmask8, a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_mask_popcnt_epi32(src: __m256i, k: __mmask8, a: __m256i) -> __m256i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -128,7 +134,8 @@ pub fn _mm256_mask_popcnt_epi32(src: __m256i, k: __mmask8, a: __m256i) -> __m256
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm_popcnt_epi32(a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_popcnt_epi32(a: __m128i) -> __m128i {
unsafe { transmute(simd_ctpop(a.as_i32x4())) }
}
@ -142,7 +149,8 @@ pub fn _mm_popcnt_epi32(a: __m128i) -> __m128i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm_maskz_popcnt_epi32(k: __mmask8, a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_maskz_popcnt_epi32(k: __mmask8, a: __m128i) -> __m128i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -162,7 +170,8 @@ pub fn _mm_maskz_popcnt_epi32(k: __mmask8, a: __m128i) -> __m128i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntd))]
pub fn _mm_mask_popcnt_epi32(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_mask_popcnt_epi32(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -179,7 +188,8 @@ pub fn _mm_mask_popcnt_epi32(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm512_popcnt_epi64(a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_popcnt_epi64(a: __m512i) -> __m512i {
unsafe { transmute(simd_ctpop(a.as_i64x8())) }
}
@ -193,7 +203,8 @@ pub fn _mm512_popcnt_epi64(a: __m512i) -> __m512i {
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm512_maskz_popcnt_epi64(k: __mmask8, a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_maskz_popcnt_epi64(k: __mmask8, a: __m512i) -> __m512i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -213,7 +224,8 @@ pub fn _mm512_maskz_popcnt_epi64(k: __mmask8, a: __m512i) -> __m512i {
#[target_feature(enable = "avx512vpopcntdq")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm512_mask_popcnt_epi64(src: __m512i, k: __mmask8, a: __m512i) -> __m512i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm512_mask_popcnt_epi64(src: __m512i, k: __mmask8, a: __m512i) -> __m512i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -230,7 +242,8 @@ pub fn _mm512_mask_popcnt_epi64(src: __m512i, k: __mmask8, a: __m512i) -> __m512
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm256_popcnt_epi64(a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_popcnt_epi64(a: __m256i) -> __m256i {
unsafe { transmute(simd_ctpop(a.as_i64x4())) }
}
@ -244,7 +257,8 @@ pub fn _mm256_popcnt_epi64(a: __m256i) -> __m256i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm256_maskz_popcnt_epi64(k: __mmask8, a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_maskz_popcnt_epi64(k: __mmask8, a: __m256i) -> __m256i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -264,7 +278,8 @@ pub fn _mm256_maskz_popcnt_epi64(k: __mmask8, a: __m256i) -> __m256i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm256_mask_popcnt_epi64(src: __m256i, k: __mmask8, a: __m256i) -> __m256i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm256_mask_popcnt_epi64(src: __m256i, k: __mmask8, a: __m256i) -> __m256i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -281,7 +296,8 @@ pub fn _mm256_mask_popcnt_epi64(src: __m256i, k: __mmask8, a: __m256i) -> __m256
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm_popcnt_epi64(a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_popcnt_epi64(a: __m128i) -> __m128i {
unsafe { transmute(simd_ctpop(a.as_i64x2())) }
}
@ -295,7 +311,8 @@ pub fn _mm_popcnt_epi64(a: __m128i) -> __m128i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm_maskz_popcnt_epi64(k: __mmask8, a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_maskz_popcnt_epi64(k: __mmask8, a: __m128i) -> __m128i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -315,7 +332,8 @@ pub fn _mm_maskz_popcnt_epi64(k: __mmask8, a: __m128i) -> __m128i {
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
#[cfg_attr(test, assert_instr(vpopcntq))]
pub fn _mm_mask_popcnt_epi64(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
pub const fn _mm_mask_popcnt_epi64(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
unsafe {
transmute(simd_select_bitmask(
k,
@ -327,12 +345,13 @@ pub fn _mm_mask_popcnt_epi64(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
#[cfg(test)]
mod tests {
use crate::core_arch::assert_eq_const as assert_eq;
use stdarch_test::simd_test;
use crate::core_arch::x86::*;
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_popcnt_epi32() {
const unsafe fn test_mm512_popcnt_epi32() {
let test_data = _mm512_set_epi32(
0,
1,
@ -358,7 +377,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_mask_popcnt_epi32() {
const unsafe fn test_mm512_mask_popcnt_epi32() {
let test_data = _mm512_set_epi32(
0,
1,
@ -401,7 +420,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_maskz_popcnt_epi32() {
const unsafe fn test_mm512_maskz_popcnt_epi32() {
let test_data = _mm512_set_epi32(
0,
1,
@ -427,7 +446,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm256_popcnt_epi32() {
const unsafe fn test_mm256_popcnt_epi32() {
let test_data = _mm256_set_epi32(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF, -100);
let actual_result = _mm256_popcnt_epi32(test_data);
let reference_result = _mm256_set_epi32(0, 1, 32, 1, 3, 15, 31, 28);
@ -435,7 +454,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm256_mask_popcnt_epi32() {
const unsafe fn test_mm256_mask_popcnt_epi32() {
let test_data = _mm256_set_epi32(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF, -100);
let mask = 0xF0;
let actual_result = _mm256_mask_popcnt_epi32(test_data, mask, test_data);
@ -444,7 +463,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm256_maskz_popcnt_epi32() {
const unsafe fn test_mm256_maskz_popcnt_epi32() {
let test_data = _mm256_set_epi32(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF, -100);
let mask = 0xF0;
let actual_result = _mm256_maskz_popcnt_epi32(mask, test_data);
@ -453,7 +472,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm_popcnt_epi32() {
const unsafe fn test_mm_popcnt_epi32() {
let test_data = _mm_set_epi32(0, 1, -1, -100);
let actual_result = _mm_popcnt_epi32(test_data);
let reference_result = _mm_set_epi32(0, 1, 32, 28);
@ -461,7 +480,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm_mask_popcnt_epi32() {
const unsafe fn test_mm_mask_popcnt_epi32() {
let test_data = _mm_set_epi32(0, 1, -1, -100);
let mask = 0xE;
let actual_result = _mm_mask_popcnt_epi32(test_data, mask, test_data);
@ -470,7 +489,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f,avx512vl")]
unsafe fn test_mm_maskz_popcnt_epi32() {
const unsafe fn test_mm_maskz_popcnt_epi32() {
let test_data = _mm_set_epi32(0, 1, -1, -100);
let mask = 0xE;
let actual_result = _mm_maskz_popcnt_epi32(mask, test_data);
@ -479,7 +498,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_popcnt_epi64() {
const unsafe fn test_mm512_popcnt_epi64() {
let test_data = _mm512_set_epi64(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF_FF_FF_FF_FF, -100);
let actual_result = _mm512_popcnt_epi64(test_data);
let reference_result = _mm512_set_epi64(0, 1, 64, 1, 3, 15, 63, 60);
@ -487,7 +506,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_mask_popcnt_epi64() {
const unsafe fn test_mm512_mask_popcnt_epi64() {
let test_data = _mm512_set_epi64(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF_FF_FF_FF_FF, -100);
let mask = 0xF0;
let actual_result = _mm512_mask_popcnt_epi64(test_data, mask, test_data);
@ -497,7 +516,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512f")]
unsafe fn test_mm512_maskz_popcnt_epi64() {
const unsafe fn test_mm512_maskz_popcnt_epi64() {
let test_data = _mm512_set_epi64(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF_FF_FF_FF_FF, -100);
let mask = 0xF0;
let actual_result = _mm512_maskz_popcnt_epi64(mask, test_data);
@ -506,7 +525,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm256_popcnt_epi64() {
const unsafe fn test_mm256_popcnt_epi64() {
let test_data = _mm256_set_epi64x(0, 1, -1, -100);
let actual_result = _mm256_popcnt_epi64(test_data);
let reference_result = _mm256_set_epi64x(0, 1, 64, 60);
@ -514,7 +533,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm256_mask_popcnt_epi64() {
const unsafe fn test_mm256_mask_popcnt_epi64() {
let test_data = _mm256_set_epi64x(0, 1, -1, -100);
let mask = 0xE;
let actual_result = _mm256_mask_popcnt_epi64(test_data, mask, test_data);
@ -523,7 +542,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm256_maskz_popcnt_epi64() {
const unsafe fn test_mm256_maskz_popcnt_epi64() {
let test_data = _mm256_set_epi64x(0, 1, -1, -100);
let mask = 0xE;
let actual_result = _mm256_maskz_popcnt_epi64(mask, test_data);
@ -532,7 +551,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm_popcnt_epi64() {
const unsafe fn test_mm_popcnt_epi64() {
let test_data = _mm_set_epi64x(0, 1);
let actual_result = _mm_popcnt_epi64(test_data);
let reference_result = _mm_set_epi64x(0, 1);
@ -544,7 +563,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm_mask_popcnt_epi64() {
const unsafe fn test_mm_mask_popcnt_epi64() {
let test_data = _mm_set_epi64x(0, -100);
let mask = 0x2;
let actual_result = _mm_mask_popcnt_epi64(test_data, mask, test_data);
@ -558,7 +577,7 @@ mod tests {
}
#[simd_test(enable = "avx512vpopcntdq,avx512vl")]
unsafe fn test_mm_maskz_popcnt_epi64() {
const unsafe fn test_mm_maskz_popcnt_epi64() {
let test_data = _mm_set_epi64x(0, 1);
let mask = 0x2;
let actual_result = _mm_maskz_popcnt_epi64(mask, test_data);