1#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
11#[macro_export]
12macro_rules! simd_multiversion {
13 ($($item:tt)*) => {
14 #[multiversion::multiversion(targets(
15 "x86_64+sse+sse2+sse3+ssse3+sse4.1+sse4.2+popcnt+cmpxchg16b+avx+avx2+bmi1+bmi2+f16c+fma+lzcnt+movbe+xsave+fxsr",
17 ))]
18 $($item)*
19 };
20}
21
22#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
24#[macro_export]
25macro_rules! simd_multiversion_extended {
26 ($($item:tt)*) => {
27 #[multiversion::multiversion(targets(
28 "x86_64+sse+sse2+sse3+ssse3+sse4.1+sse4.2+popcnt+cmpxchg16b+avx+avx2+bmi1+bmi2+f16c+fma+lzcnt+movbe+xsave+fxsr+avx512f+avx512bw+avx512dq+avx512vl+avx512cd+gfni+vaes+vpclmulqdq",
30 "x86_64+sse+sse2+sse3+ssse3+sse4.1+sse4.2+popcnt+cmpxchg16b+avx+avx2+bmi1+bmi2+f16c+fma+lzcnt+movbe+xsave+fxsr",
32 ))]
33 $($item)*
34 };
35}
36
37#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
39#[macro_export]
40macro_rules! simd_multiversion_full {
41 ($($item:tt)*) => {
42 #[multiversion::multiversion(targets(
43 "x86_64+sse+sse2+sse3+ssse3+sse4.1+sse4.2+popcnt+cmpxchg16b+avx+avx2+bmi1+bmi2+f16c+fma+lzcnt+movbe+xsave+fxsr+avx512f+avx512bw+avx512dq+avx512vl+avx512cd+gfni+vaes+vpclmulqdq",
45 "x86_64+sse+sse2+sse3+ssse3+sse4.1+sse4.2+popcnt+cmpxchg16b+avx+avx2+bmi1+bmi2+f16c+fma+lzcnt+movbe+xsave+fxsr",
47 ))]
48 $($item)*
49 };
50}
51
52#[cfg(target_arch = "aarch64")]
58#[macro_export]
59macro_rules! simd_multiversion {
60 ($($item:tt)*) => {
61 #[multiversion::multiversion(targets(
62 "aarch64+neon+lse+aes+sha2+crc",
64 ))]
65 $($item)*
66 };
67}
68
69#[cfg(target_arch = "aarch64")]
71#[macro_export]
72macro_rules! simd_multiversion_extended {
73 ($($item:tt)*) => {
74 #[multiversion::multiversion(targets(
75 "aarch64+neon+lse+aes+sha2+crc+dotprod+rcpc+fp16+fhm",
77 "aarch64+neon+lse+aes+sha2+crc",
79 ))]
80 $($item)*
81 };
82}
83
84#[cfg(target_arch = "aarch64")]
86#[macro_export]
87macro_rules! simd_multiversion_full {
88 ($($item:tt)*) => {
89 #[multiversion::multiversion(targets(
90 "aarch64+neon+lse+aes+sha2+crc+dotprod+rcpc+fp16+fhm+sve2+sve2-bitperm+i8mm+bf16",
92 "aarch64+neon+lse+aes+sha2+sha3+crc+dotprod+rcpc+fp16+fhm+fcma",
94 "aarch64+neon+lse+aes+sha2+crc+dotprod+rcpc+fp16+fhm",
96 "aarch64+neon+lse+aes+sha2+crc",
98 ))]
99 $($item)*
100 };
101}
102
103#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
109#[macro_export]
110macro_rules! simd_multiversion {
111 ($($item:tt)*) => {
112 $($item)*
113 };
114}
115
116#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
118#[macro_export]
119macro_rules! simd_multiversion_extended {
120 ($($item:tt)*) => {
121 $($item)*
122 };
123}
124
125#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
127#[macro_export]
128macro_rules! simd_multiversion_full {
129 ($($item:tt)*) => {
130 $($item)*
131 };
132}
133
134