blob: deb0f88f45704ef2270e2c8954eaeb3e2141587e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <immintrin.h>
#ifdef __INTEL_COMPILER
__attribute__ ((target ("avx512f")))
#else
__attribute__ ((target ("avx512f,avx512bw,avx512dq,avx512vnni")))
#endif
bool Foo() {
// AVX512F
__m512i value = _mm512_set1_epi32(1);
// AVX512BW
value = _mm512_maddubs_epi16(value, value);
// AVX512DQ
__m256i value2 = _mm256_set1_epi8(1);
value = _mm512_inserti32x8(value, value2, 1);
// AVX512VNNI
value = _mm512_dpbusd_epi32(value, value, value);
return *(int*)&value;
}
int main() {
return Foo()
#if defined(__GNUC__) || defined(__clang__)
// uses cpuid
#elif defined(__INTEL_COMPILER)
&& _may_i_use_cpu_feature(_FEATURE_AVX512_VNNI)
#else
&& __builtin_cpu_supports("avx512vnni")
#endif
;
}
|