Skip to content

Commit 37fe365

Browse files
Rename misleading features (#1355)
1 parent 32d6def commit 37fe365

File tree

10 files changed

+135
-121
lines changed

10 files changed

+135
-121
lines changed

crates/core_arch/src/x86/avx512gfni.rs renamed to crates/core_arch/src/x86/gfni.rs

+54-54
Large diffs are not rendered by default.

crates/core_arch/src/x86/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -835,17 +835,17 @@ pub use self::avx512vnni::*;
835835
mod avx512bitalg;
836836
pub use self::avx512bitalg::*;
837837

838-
mod avx512gfni;
839-
pub use self::avx512gfni::*;
838+
mod gfni;
839+
pub use self::gfni::*;
840840

841841
mod avx512vpopcntdq;
842842
pub use self::avx512vpopcntdq::*;
843843

844-
mod avx512vaes;
845-
pub use self::avx512vaes::*;
844+
mod vaes;
845+
pub use self::vaes::*;
846846

847-
mod avx512vpclmulqdq;
848-
pub use self::avx512vpclmulqdq::*;
847+
mod vpclmulqdq;
848+
pub use self::vpclmulqdq::*;
849849

850850
mod bt;
851851
pub use self::bt::*;

crates/core_arch/src/x86/avx512vaes.rs renamed to crates/core_arch/src/x86/vaes.rs

+26-26
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ extern "C" {
3838
///
3939
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_aesenc_epi128)
4040
#[inline]
41-
#[target_feature(enable = "avx512vaes")]
41+
#[target_feature(enable = "vaes")]
4242
#[cfg_attr(test, assert_instr(vaesenc))]
4343
pub unsafe fn _mm256_aesenc_epi128(a: __m256i, round_key: __m256i) -> __m256i {
4444
aesenc_256(a, round_key)
@@ -49,7 +49,7 @@ pub unsafe fn _mm256_aesenc_epi128(a: __m256i, round_key: __m256i) -> __m256i {
4949
///
5050
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_aesenclast_epi128)
5151
#[inline]
52-
#[target_feature(enable = "avx512vaes")]
52+
#[target_feature(enable = "vaes")]
5353
#[cfg_attr(test, assert_instr(vaesenclast))]
5454
pub unsafe fn _mm256_aesenclast_epi128(a: __m256i, round_key: __m256i) -> __m256i {
5555
aesenclast_256(a, round_key)
@@ -60,7 +60,7 @@ pub unsafe fn _mm256_aesenclast_epi128(a: __m256i, round_key: __m256i) -> __m256
6060
///
6161
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_aesdec_epi128)
6262
#[inline]
63-
#[target_feature(enable = "avx512vaes")]
63+
#[target_feature(enable = "vaes")]
6464
#[cfg_attr(test, assert_instr(vaesdec))]
6565
pub unsafe fn _mm256_aesdec_epi128(a: __m256i, round_key: __m256i) -> __m256i {
6666
aesdec_256(a, round_key)
@@ -71,7 +71,7 @@ pub unsafe fn _mm256_aesdec_epi128(a: __m256i, round_key: __m256i) -> __m256i {
7171
///
7272
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_aesdeclast_epi128)
7373
#[inline]
74-
#[target_feature(enable = "avx512vaes")]
74+
#[target_feature(enable = "vaes")]
7575
#[cfg_attr(test, assert_instr(vaesdeclast))]
7676
pub unsafe fn _mm256_aesdeclast_epi128(a: __m256i, round_key: __m256i) -> __m256i {
7777
aesdeclast_256(a, round_key)
@@ -82,7 +82,7 @@ pub unsafe fn _mm256_aesdeclast_epi128(a: __m256i, round_key: __m256i) -> __m256
8282
///
8383
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_aesenc_epi128)
8484
#[inline]
85-
#[target_feature(enable = "avx512vaes,avx512f")]
85+
#[target_feature(enable = "vaes,avx512f")]
8686
#[cfg_attr(test, assert_instr(vaesenc))]
8787
pub unsafe fn _mm512_aesenc_epi128(a: __m512i, round_key: __m512i) -> __m512i {
8888
aesenc_512(a, round_key)
@@ -93,7 +93,7 @@ pub unsafe fn _mm512_aesenc_epi128(a: __m512i, round_key: __m512i) -> __m512i {
9393
///
9494
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_aesenclast_epi128)
9595
#[inline]
96-
#[target_feature(enable = "avx512vaes,avx512f")]
96+
#[target_feature(enable = "vaes,avx512f")]
9797
#[cfg_attr(test, assert_instr(vaesenclast))]
9898
pub unsafe fn _mm512_aesenclast_epi128(a: __m512i, round_key: __m512i) -> __m512i {
9999
aesenclast_512(a, round_key)
@@ -104,7 +104,7 @@ pub unsafe fn _mm512_aesenclast_epi128(a: __m512i, round_key: __m512i) -> __m512
104104
///
105105
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_aesdec_epi128)
106106
#[inline]
107-
#[target_feature(enable = "avx512vaes,avx512f")]
107+
#[target_feature(enable = "vaes,avx512f")]
108108
#[cfg_attr(test, assert_instr(vaesdec))]
109109
pub unsafe fn _mm512_aesdec_epi128(a: __m512i, round_key: __m512i) -> __m512i {
110110
aesdec_512(a, round_key)
@@ -115,7 +115,7 @@ pub unsafe fn _mm512_aesdec_epi128(a: __m512i, round_key: __m512i) -> __m512i {
115115
///
116116
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_aesdeclast_epi128)
117117
#[inline]
118-
#[target_feature(enable = "avx512vaes,avx512f")]
118+
#[target_feature(enable = "vaes,avx512f")]
119119
#[cfg_attr(test, assert_instr(vaesdeclast))]
120120
pub unsafe fn _mm512_aesdeclast_epi128(a: __m512i, round_key: __m512i) -> __m512i {
121121
aesdeclast_512(a, round_key)
@@ -138,7 +138,7 @@ mod tests {
138138
// ideally we'd be using quickcheck here instead
139139

140140
#[target_feature(enable = "avx2")]
141-
unsafe fn helper_for_256_avx512vaes(
141+
unsafe fn helper_for_256_vaes(
142142
linear: unsafe fn(__m128i, __m128i) -> __m128i,
143143
vectorized: unsafe fn(__m256i, __m256i) -> __m256i,
144144
) {
@@ -187,7 +187,7 @@ mod tests {
187187
setup_state_key(_mm512_broadcast_i32x4)
188188
}
189189

190-
#[simd_test(enable = "avx512vaes,avx512vl")]
190+
#[simd_test(enable = "vaes,avx512vl")]
191191
unsafe fn test_mm256_aesdec_epi128() {
192192
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664949.aspx.
193193
let (a, k) = setup_state_key_256();
@@ -196,10 +196,10 @@ mod tests {
196196
let r = _mm256_aesdec_epi128(a, k);
197197
assert_eq_m256i(r, e);
198198

199-
helper_for_256_avx512vaes(_mm_aesdec_si128, _mm256_aesdec_epi128);
199+
helper_for_256_vaes(_mm_aesdec_si128, _mm256_aesdec_epi128);
200200
}
201201

202-
#[simd_test(enable = "avx512vaes,avx512vl")]
202+
#[simd_test(enable = "vaes,avx512vl")]
203203
unsafe fn test_mm256_aesdeclast_epi128() {
204204
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714178.aspx.
205205
let (a, k) = setup_state_key_256();
@@ -208,10 +208,10 @@ mod tests {
208208
let r = _mm256_aesdeclast_epi128(a, k);
209209
assert_eq_m256i(r, e);
210210

211-
helper_for_256_avx512vaes(_mm_aesdeclast_si128, _mm256_aesdeclast_epi128);
211+
helper_for_256_vaes(_mm_aesdeclast_si128, _mm256_aesdeclast_epi128);
212212
}
213213

214-
#[simd_test(enable = "avx512vaes,avx512vl")]
214+
#[simd_test(enable = "vaes,avx512vl")]
215215
unsafe fn test_mm256_aesenc_epi128() {
216216
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664810.aspx.
217217
// they are repeated appropriately
@@ -221,10 +221,10 @@ mod tests {
221221
let r = _mm256_aesenc_epi128(a, k);
222222
assert_eq_m256i(r, e);
223223

224-
helper_for_256_avx512vaes(_mm_aesenc_si128, _mm256_aesenc_epi128);
224+
helper_for_256_vaes(_mm_aesenc_si128, _mm256_aesenc_epi128);
225225
}
226226

227-
#[simd_test(enable = "avx512vaes,avx512vl")]
227+
#[simd_test(enable = "vaes,avx512vl")]
228228
unsafe fn test_mm256_aesenclast_epi128() {
229229
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714136.aspx.
230230
let (a, k) = setup_state_key_256();
@@ -233,11 +233,11 @@ mod tests {
233233
let r = _mm256_aesenclast_epi128(a, k);
234234
assert_eq_m256i(r, e);
235235

236-
helper_for_256_avx512vaes(_mm_aesenclast_si128, _mm256_aesenclast_epi128);
236+
helper_for_256_vaes(_mm_aesenclast_si128, _mm256_aesenclast_epi128);
237237
}
238238

239239
#[target_feature(enable = "avx512f")]
240-
unsafe fn helper_for_512_avx512vaes(
240+
unsafe fn helper_for_512_vaes(
241241
linear: unsafe fn(__m128i, __m128i) -> __m128i,
242242
vectorized: unsafe fn(__m512i, __m512i) -> __m512i,
243243
) {
@@ -282,7 +282,7 @@ mod tests {
282282
assert_eq_m128i(_mm512_extracti32x4_epi32::<3>(r), e_decomp[3]);
283283
}
284284

285-
#[simd_test(enable = "avx512vaes,avx512f")]
285+
#[simd_test(enable = "vaes,avx512f")]
286286
unsafe fn test_mm512_aesdec_epi128() {
287287
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664949.aspx.
288288
let (a, k) = setup_state_key_512();
@@ -291,10 +291,10 @@ mod tests {
291291
let r = _mm512_aesdec_epi128(a, k);
292292
assert_eq_m512i(r, e);
293293

294-
helper_for_512_avx512vaes(_mm_aesdec_si128, _mm512_aesdec_epi128);
294+
helper_for_512_vaes(_mm_aesdec_si128, _mm512_aesdec_epi128);
295295
}
296296

297-
#[simd_test(enable = "avx512vaes,avx512f")]
297+
#[simd_test(enable = "vaes,avx512f")]
298298
unsafe fn test_mm512_aesdeclast_epi128() {
299299
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714178.aspx.
300300
let (a, k) = setup_state_key_512();
@@ -303,10 +303,10 @@ mod tests {
303303
let r = _mm512_aesdeclast_epi128(a, k);
304304
assert_eq_m512i(r, e);
305305

306-
helper_for_512_avx512vaes(_mm_aesdeclast_si128, _mm512_aesdeclast_epi128);
306+
helper_for_512_vaes(_mm_aesdeclast_si128, _mm512_aesdeclast_epi128);
307307
}
308308

309-
#[simd_test(enable = "avx512vaes,avx512f")]
309+
#[simd_test(enable = "vaes,avx512f")]
310310
unsafe fn test_mm512_aesenc_epi128() {
311311
// Constants taken from https://msdn.microsoft.com/en-us/library/cc664810.aspx.
312312
let (a, k) = setup_state_key_512();
@@ -315,10 +315,10 @@ mod tests {
315315
let r = _mm512_aesenc_epi128(a, k);
316316
assert_eq_m512i(r, e);
317317

318-
helper_for_512_avx512vaes(_mm_aesenc_si128, _mm512_aesenc_epi128);
318+
helper_for_512_vaes(_mm_aesenc_si128, _mm512_aesenc_epi128);
319319
}
320320

321-
#[simd_test(enable = "avx512vaes,avx512f")]
321+
#[simd_test(enable = "vaes,avx512f")]
322322
unsafe fn test_mm512_aesenclast_epi128() {
323323
// Constants taken from https://msdn.microsoft.com/en-us/library/cc714136.aspx.
324324
let (a, k) = setup_state_key_512();
@@ -327,6 +327,6 @@ mod tests {
327327
let r = _mm512_aesenclast_epi128(a, k);
328328
assert_eq_m512i(r, e);
329329

330-
helper_for_512_avx512vaes(_mm_aesenclast_si128, _mm512_aesenclast_epi128);
330+
helper_for_512_vaes(_mm_aesenclast_si128, _mm512_aesenclast_epi128);
331331
}
332332
}

crates/core_arch/src/x86/avx512vpclmulqdq.rs renamed to crates/core_arch/src/x86/vpclmulqdq.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ extern "C" {
3232
///
3333
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_clmulepi64_epi128)
3434
#[inline]
35-
#[target_feature(enable = "avx512vpclmulqdq,avx512f")]
35+
#[target_feature(enable = "vpclmulqdq,avx512f")]
3636
// technically according to Intel's documentation we don't need avx512f here, however LLVM gets confused otherwise
3737
#[cfg_attr(test, assert_instr(vpclmul, IMM8 = 0))]
3838
#[rustc_legacy_const_generics(2)]
@@ -50,7 +50,7 @@ pub unsafe fn _mm512_clmulepi64_epi128<const IMM8: i32>(a: __m512i, b: __m512i)
5050
///
5151
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_clmulepi64_epi128)
5252
#[inline]
53-
#[target_feature(enable = "avx512vpclmulqdq")]
53+
#[target_feature(enable = "vpclmulqdq")]
5454
#[cfg_attr(test, assert_instr(vpclmul, IMM8 = 0))]
5555
#[rustc_legacy_const_generics(2)]
5656
pub unsafe fn _mm256_clmulepi64_epi128<const IMM8: i32>(a: __m256i, b: __m256i) -> __m256i {
@@ -121,7 +121,7 @@ mod tests {
121121

122122
// this function tests one of the possible 4 instances
123123
// with different inputs across lanes
124-
#[target_feature(enable = "avx512vpclmulqdq,avx512f")]
124+
#[target_feature(enable = "vpclmulqdq,avx512f")]
125125
unsafe fn verify_512_helper(
126126
linear: unsafe fn(__m128i, __m128i) -> __m128i,
127127
vectorized: unsafe fn(__m512i, __m512i) -> __m512i,
@@ -162,7 +162,7 @@ mod tests {
162162

163163
// this function tests one of the possible 4 instances
164164
// with different inputs across lanes for the VL version
165-
#[target_feature(enable = "avx512vpclmulqdq,avx512vl")]
165+
#[target_feature(enable = "vpclmulqdq,avx512vl")]
166166
unsafe fn verify_256_helper(
167167
linear: unsafe fn(__m128i, __m128i) -> __m128i,
168168
vectorized: unsafe fn(__m256i, __m256i) -> __m256i,
@@ -204,7 +204,7 @@ mod tests {
204204
unroll! {assert_eq_m128i(_mm256_extracti128_si256::<2>(r),e_decomp[2]);}
205205
}
206206

207-
#[simd_test(enable = "avx512vpclmulqdq,avx512f")]
207+
#[simd_test(enable = "vpclmulqdq,avx512f")]
208208
unsafe fn test_mm512_clmulepi64_epi128() {
209209
verify_kat_pclmul!(
210210
_mm512_broadcast_i32x4,
@@ -230,7 +230,7 @@ mod tests {
230230
);
231231
}
232232

233-
#[simd_test(enable = "avx512vpclmulqdq,avx512vl")]
233+
#[simd_test(enable = "vpclmulqdq,avx512vl")]
234234
unsafe fn test_mm256_clmulepi64_epi128() {
235235
verify_kat_pclmul!(
236236
_mm256_broadcastsi128_si256,

crates/core_arch/tests/cpu-detection.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,9 @@ fn x86_all() {
3131
is_x86_feature_detected!("avx512vpopcntdq")
3232
);
3333
println!("avx512vbmi2 {:?}", is_x86_feature_detected!("avx512vbmi2"));
34-
println!("avx512gfni {:?}", is_x86_feature_detected!("avx512gfni"));
35-
println!("avx512vaes {:?}", is_x86_feature_detected!("avx512vaes"));
36-
println!(
37-
"avx512vpclmulqdq {:?}",
38-
is_x86_feature_detected!("avx512vpclmulqdq")
39-
);
34+
println!("gfni {:?}", is_x86_feature_detected!("gfni"));
35+
println!("vaes {:?}", is_x86_feature_detected!("vaes"));
36+
println!("vpclmulqdq {:?}", is_x86_feature_detected!("vpclmulqdq"));
4037
println!("avx512vnni {:?}", is_x86_feature_detected!("avx512vnni"));
4138
println!(
4239
"avx512bitalg {:?}",
@@ -61,3 +58,15 @@ fn x86_all() {
6158
println!("xsaves: {:?}", is_x86_feature_detected!("xsaves"));
6259
println!("xsavec: {:?}", is_x86_feature_detected!("xsavec"));
6360
}
61+
62+
#[test]
63+
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
64+
#[allow(deprecated)]
65+
fn x86_deprecated() {
66+
println!("avx512gfni {:?}", is_x86_feature_detected!("avx512gfni"));
67+
println!("avx512vaes {:?}", is_x86_feature_detected!("avx512vaes"));
68+
println!(
69+
"avx512vpclmulqdq {:?}",
70+
is_x86_feature_detected!("avx512vpclmulqdq")
71+
);
72+
}

crates/std_detect/src/detect/arch/x86.rs

+9-6
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ features! {
6868
/// * `"avx512vbmi"`
6969
/// * `"avx512vpopcntdq"`
7070
/// * `"avx512vbmi2"`
71-
/// * `"avx512gfni"`
72-
/// * `"avx512vaes"`
73-
/// * `"avx512vpclmulqdq"`
71+
/// * `"gfni"`
72+
/// * `"vaes"`
73+
/// * `"vpclmulqdq"`
7474
/// * `"avx512vnni"`
7575
/// * `"avx512bitalg"`
7676
/// * `"avx512bf16"`
@@ -95,6 +95,9 @@ features! {
9595
/// [docs]: https://software.intel.com/sites/landingpage/IntrinsicsGuide
9696
#[stable(feature = "simd_x86", since = "1.27.0")]
9797
@BIND_FEATURE_NAME: "abm"; "lzcnt"; // abm is a synonym for lzcnt
98+
@BIND_FEATURE_NAME: "avx512gfni"; "gfni"; #[deprecated(since = "1.67.0", note = "the `avx512gfni` feature has been renamed to `gfni`")];
99+
@BIND_FEATURE_NAME: "avx512vaes"; "vaes"; #[deprecated(since = "1.67.0", note = "the `avx512vaes` feature has been renamed to `vaes`")];
100+
@BIND_FEATURE_NAME: "avx512vpclmulqdq"; "vpclmulqdq"; #[deprecated(since = "1.67.0", note = "the `avx512vpclmulqdq` feature has been renamed to `vpclmulqdq`")];
98101
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] aes: "aes";
99102
/// AES (Advanced Encryption Standard New Instructions AES-NI)
100103
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] pclmulqdq: "pclmulqdq";
@@ -150,11 +153,11 @@ features! {
150153
/// Quadword)
151154
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vbmi2: "avx512vbmi2";
152155
/// AVX-512 VBMI2 (Additional byte, word, dword and qword capabilities)
153-
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512gfni: "avx512gfni";
156+
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] gfni: "gfni";
154157
/// AVX-512 GFNI (Galois Field New Instruction)
155-
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vaes: "avx512vaes";
158+
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] vaes: "vaes";
156159
/// AVX-512 VAES (Vector AES instruction)
157-
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vpclmulqdq: "avx512vpclmulqdq";
160+
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] vpclmulqdq: "vpclmulqdq";
158161
/// AVX-512 VPCLMULQDQ (Vector PCLMULQDQ instructions)
159162
@FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vnni: "avx512vnni";
160163
/// AVX-512 VNNI (Vector Neural Network Instructions)

crates/std_detect/src/detect/macros.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ macro_rules! features {
1717
@CFG: $cfg:meta;
1818
@MACRO_NAME: $macro_name:ident;
1919
@MACRO_ATTRS: $(#[$macro_attrs:meta])*
20-
$(@BIND_FEATURE_NAME: $bind_feature:tt; $feature_impl:tt; )*
20+
$(@BIND_FEATURE_NAME: $bind_feature:tt; $feature_impl:tt; $(#[$deprecate_attr:meta];)?)*
2121
$(@NO_RUNTIME_DETECTION: $nort_feature:tt; )*
2222
$(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt;
2323
$(implied by target_features: [$($target_feature_lit:tt),*];)?
@@ -35,7 +35,15 @@ macro_rules! features {
3535
};
3636
)*
3737
$(
38-
($bind_feature) => { $crate::$macro_name!($feature_impl) };
38+
($bind_feature) => {
39+
{
40+
$(
41+
#[$deprecate_attr] macro_rules! deprecated_feature { {} => {}; }
42+
deprecated_feature! {};
43+
)?
44+
$crate::$macro_name!($feature_impl)
45+
}
46+
};
3947
)*
4048
$(
4149
($nort_feature) => {

crates/std_detect/src/detect/os/x86.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,10 @@ pub(crate) fn detect_features() -> cache::Initializer {
211211
enable(extended_features_ecx, 1, Feature::avx512vbmi);
212212
enable(extended_features_ecx, 5, Feature::avx512bf16);
213213
enable(extended_features_ecx, 6, Feature::avx512vbmi2);
214-
enable(extended_features_ecx, 8, Feature::avx512gfni);
214+
enable(extended_features_ecx, 8, Feature::gfni);
215215
enable(extended_features_ecx, 8, Feature::avx512vp2intersect);
216-
enable(extended_features_ecx, 9, Feature::avx512vaes);
217-
enable(extended_features_ecx, 10, Feature::avx512vpclmulqdq);
216+
enable(extended_features_ecx, 9, Feature::vaes);
217+
enable(extended_features_ecx, 10, Feature::vpclmulqdq);
218218
enable(extended_features_ecx, 11, Feature::avx512vnni);
219219
enable(extended_features_ecx, 12, Feature::avx512bitalg);
220220
enable(extended_features_ecx, 14, Feature::avx512vpopcntdq);

0 commit comments

Comments
 (0)