Skip to content

Commit b791f02

Browse files
committed
Auto merge of #3081 - eduardosm:avx512-tests, r=RalfJung
Put AVX512 tests together
2 parents 00a8d48 + 413ff38 commit b791f02

File tree

2 files changed

+85
-126
lines changed

2 files changed

+85
-126
lines changed

src/tools/miri/tests/pass/intrinsics-x86-avx512bitalg.rs renamed to src/tools/miri/tests/pass/intrinsics-x86-avx512.rs

+85-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//@ignore-target-s390x
77
//@ignore-target-thumbv7em
88
//@ignore-target-wasm32
9-
//@compile-flags: -C target-feature=+avx512bitalg,+avx512f,+avx512vl
9+
//@compile-flags: -C target-feature=+avx512f,+avx512vl,+avx512bitalg,+avx512vpopcntdq
1010

1111
#![feature(avx512_target_feature)]
1212
#![feature(stdsimd)]
@@ -18,12 +18,14 @@ use std::arch::x86_64::*;
1818
use std::mem::transmute;
1919

2020
fn main() {
21-
assert!(is_x86_feature_detected!("avx512bitalg"));
2221
assert!(is_x86_feature_detected!("avx512f"));
2322
assert!(is_x86_feature_detected!("avx512vl"));
23+
assert!(is_x86_feature_detected!("avx512bitalg"));
24+
assert!(is_x86_feature_detected!("avx512vpopcntdq"));
2425

2526
unsafe {
2627
test_avx512bitalg();
28+
test_avx512vpopcntdq();
2729
}
2830
}
2931

@@ -117,6 +119,87 @@ unsafe fn test_avx512bitalg() {
117119
test_mm_popcnt_epi8();
118120
}
119121

122+
#[target_feature(enable = "avx512vpopcntdq,avx512f,avx512vl")]
123+
unsafe fn test_avx512vpopcntdq() {
124+
// Mostly copied from library/stdarch/crates/core_arch/src/x86/avx512vpopcntdq.rs
125+
126+
#[target_feature(enable = "avx512vpopcntdq,avx512f")]
127+
unsafe fn test_mm512_popcnt_epi32() {
128+
let test_data = _mm512_set_epi32(
129+
0,
130+
1,
131+
-1,
132+
2,
133+
7,
134+
0xFF_FE,
135+
0x7F_FF_FF_FF,
136+
-100,
137+
0x40_00_00_00,
138+
103,
139+
371,
140+
552,
141+
432_948,
142+
818_826_998,
143+
255,
144+
256,
145+
);
146+
let actual_result = _mm512_popcnt_epi32(test_data);
147+
let reference_result =
148+
_mm512_set_epi32(0, 1, 32, 1, 3, 15, 31, 28, 1, 5, 6, 3, 10, 17, 8, 1);
149+
assert_eq_m512i(actual_result, reference_result);
150+
}
151+
test_mm512_popcnt_epi32();
152+
153+
#[target_feature(enable = "avx512vpopcntdq,avx512f,avx512vl")]
154+
unsafe fn test_mm256_popcnt_epi32() {
155+
let test_data = _mm256_set_epi32(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF, -100);
156+
let actual_result = _mm256_popcnt_epi32(test_data);
157+
let reference_result = _mm256_set_epi32(0, 1, 32, 1, 3, 15, 31, 28);
158+
assert_eq_m256i(actual_result, reference_result);
159+
}
160+
test_mm256_popcnt_epi32();
161+
162+
#[target_feature(enable = "avx512vpopcntdq,avx512f,avx512vl")]
163+
unsafe fn test_mm_popcnt_epi32() {
164+
let test_data = _mm_set_epi32(0, 1, -1, -100);
165+
let actual_result = _mm_popcnt_epi32(test_data);
166+
let reference_result = _mm_set_epi32(0, 1, 32, 28);
167+
assert_eq_m128i(actual_result, reference_result);
168+
}
169+
test_mm_popcnt_epi32();
170+
171+
#[target_feature(enable = "avx512vpopcntdq,avx512f")]
172+
unsafe fn test_mm512_popcnt_epi64() {
173+
let test_data = _mm512_set_epi64(0, 1, -1, 2, 7, 0xFF_FE, 0x7F_FF_FF_FF_FF_FF_FF_FF, -100);
174+
let actual_result = _mm512_popcnt_epi64(test_data);
175+
let reference_result = _mm512_set_epi64(0, 1, 64, 1, 3, 15, 63, 60);
176+
assert_eq_m512i(actual_result, reference_result);
177+
}
178+
test_mm512_popcnt_epi64();
179+
180+
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
181+
unsafe fn test_mm256_popcnt_epi64() {
182+
let test_data = _mm256_set_epi64x(0, 1, -1, -100);
183+
let actual_result = _mm256_popcnt_epi64(test_data);
184+
let reference_result = _mm256_set_epi64x(0, 1, 64, 60);
185+
assert_eq_m256i(actual_result, reference_result);
186+
}
187+
test_mm256_popcnt_epi64();
188+
189+
#[target_feature(enable = "avx512vpopcntdq,avx512vl")]
190+
unsafe fn test_mm_popcnt_epi64() {
191+
let test_data = _mm_set_epi64x(0, 1);
192+
let actual_result = _mm_popcnt_epi64(test_data);
193+
let reference_result = _mm_set_epi64x(0, 1);
194+
assert_eq_m128i(actual_result, reference_result);
195+
let test_data = _mm_set_epi64x(-1, -100);
196+
let actual_result = _mm_popcnt_epi64(test_data);
197+
let reference_result = _mm_set_epi64x(64, 60);
198+
assert_eq_m128i(actual_result, reference_result);
199+
}
200+
test_mm_popcnt_epi64();
201+
}
202+
120203
#[track_caller]
121204
unsafe fn assert_eq_m512i(a: __m512i, b: __m512i) {
122205
assert_eq!(transmute::<_, [i32; 16]>(a), transmute::<_, [i32; 16]>(b))

src/tools/miri/tests/pass/intrinsics-x86-avx512vpopcntdq.rs

-124
This file was deleted.

0 commit comments

Comments
 (0)