1#[macro_export]
#[doc = r" Check for the presence of a CPU feature at runtime."]
#[doc = r""]
#[doc =
r" When the feature is known to be enabled at compile time (e.g. via `-Ctarget-feature`)"]
#[doc = r" the macro expands to `true`."]
#[doc = r""]
#[doc =
r" Runtime detection currently relies mostly on the `cpuid` instruction."]
#[doc = r""]
#[doc =
r" This macro only takes one argument which is a string literal of the feature"]
#[doc =
r" being tested for. The feature names supported are the lowercase versions of"]
#[doc = r" the ones defined by Intel in [their documentation][docs]."]
#[doc = r""]
#[doc = r" ## Supported arguments"]
#[doc = r""]
#[doc =
r" This macro supports the same names that `#[target_feature]` supports. Unlike"]
#[doc =
r" `#[target_feature]`, however, this macro does not support names separated"]
#[doc =
r" with a comma. Instead testing for multiple features must be done through"]
#[doc = r" separate macro invocations for now."]
#[doc = r""]
#[doc = r" Supported arguments are:"]
#[doc = r""]
#[doc = r#" * `"aes"`"#]
#[doc = r#" * `"pclmulqdq"`"#]
#[doc = r#" * `"rdrand"`"#]
#[doc = r#" * `"rdseed"`"#]
#[doc = r#" * `"tsc"`"#]
#[doc = r#" * `"mmx"`"#]
#[doc = r#" * `"sse"`"#]
#[doc = r#" * `"sse2"`"#]
#[doc = r#" * `"sse3"`"#]
#[doc = r#" * `"ssse3"`"#]
#[doc = r#" * `"sse4.1"`"#]
#[doc = r#" * `"sse4.2"`"#]
#[doc = r#" * `"sse4a"`"#]
#[doc = r#" * `"sha"`"#]
#[doc = r#" * `"avx"`"#]
#[doc = r#" * `"avx2"`"#]
#[doc = r#" * `"sha512"`"#]
#[doc = r#" * `"sm3"`"#]
#[doc = r#" * `"sm4"`"#]
#[doc = r#" * `"avx512f"`"#]
#[doc = r#" * `"avx512cd"`"#]
#[doc = r#" * `"avx512er"`"#]
#[doc = r#" * `"avx512pf"`"#]
#[doc = r#" * `"avx512bw"`"#]
#[doc = r#" * `"avx512dq"`"#]
#[doc = r#" * `"avx512vl"`"#]
#[doc = r#" * `"avx512ifma"`"#]
#[doc = r#" * `"avx512vbmi"`"#]
#[doc = r#" * `"avx512vpopcntdq"`"#]
#[doc = r#" * `"avx512vbmi2"`"#]
#[doc = r#" * `"gfni"`"#]
#[doc = r#" * `"vaes"`"#]
#[doc = r#" * `"vpclmulqdq"`"#]
#[doc = r#" * `"avx512vnni"`"#]
#[doc = r#" * `"avx512bitalg"`"#]
#[doc = r#" * `"avx512bf16"`"#]
#[doc = r#" * `"avx512vp2intersect"`"#]
#[doc = r#" * `"avx512fp16"`"#]
#[doc = r#" * `"avxvnni"`"#]
#[doc = r#" * `"avxifma"`"#]
#[doc = r#" * `"avxneconvert"`"#]
#[doc = r#" * `"avxvnniint8"`"#]
#[doc = r#" * `"avxvnniint16"`"#]
#[doc = r#" * `"amx-tile"`"#]
#[doc = r#" * `"amx-int8"`"#]
#[doc = r#" * `"amx-bf16"`"#]
#[doc = r#" * `"amx-fp16"`"#]
#[doc = r#" * `"amx-complex"`"#]
#[doc = r#" * `"amx-avx512"`"#]
#[doc = r#" * `"amx-fp8"`"#]
#[doc = r#" * `"amx-movrs"`"#]
#[doc = r#" * `"amx-tf32"`"#]
#[doc = r#" * `"f16c"`"#]
#[doc = r#" * `"fma"`"#]
#[doc = r#" * `"bmi1"`"#]
#[doc = r#" * `"bmi2"`"#]
#[doc = r#" * `"abm"`"#]
#[doc = r#" * `"lzcnt"`"#]
#[doc = r#" * `"tbm"`"#]
#[doc = r#" * `"popcnt"`"#]
#[doc = r#" * `"fxsr"`"#]
#[doc = r#" * `"xsave"`"#]
#[doc = r#" * `"xsaveopt"`"#]
#[doc = r#" * `"xsaves"`"#]
#[doc = r#" * `"xsavec"`"#]
#[doc = r#" * `"cmpxchg16b"`"#]
#[doc = r#" * `"kl"`"#]
#[doc = r#" * `"widekl"`"#]
#[doc = r#" * `"adx"`"#]
#[doc = r#" * `"rtm"`"#]
#[doc = r#" * `"movbe"`"#]
#[doc = r#" * `"ermsb"`"#]
#[doc = r#" * `"movrs"`"#]
#[doc = r#" * `"xop"`"#]
#[doc = r""]
#[doc =
r" [docs]: https://software.intel.com/sites/landingpage/IntrinsicsGuide"]
#[stable(feature = "simd_x86", since = "1.27.0")]
#[allow_internal_unstable(stdarch_internal)]
macro_rules! is_x86_feature_detected {
("aes") => { crate :: detect_feature! (aes, "aes") }; ("pclmulqdq") =>
{ crate :: detect_feature! (pclmulqdq, "pclmulqdq") }; ("rdrand") =>
{ crate :: detect_feature! (rdrand, "rdrand") }; ("rdseed") =>
{ crate :: detect_feature! (rdseed, "rdseed") }; ("tsc") =>
{ crate :: detect_feature! (tsc, "tsc", without cfg check : true) };
("mmx") =>
{ crate :: detect_feature! (mmx, "mmx", without cfg check : true) };
("sse") => { crate :: detect_feature! (sse, "sse") }; ("sse2") =>
{ crate :: detect_feature! (sse2, "sse2") }; ("sse3") =>
{ crate :: detect_feature! (sse3, "sse3") }; ("ssse3") =>
{ crate :: detect_feature! (ssse3, "ssse3") }; ("sse4.1") =>
{ crate :: detect_feature! (sse4_1, "sse4.1") }; ("sse4.2") =>
{ crate :: detect_feature! (sse4_2, "sse4.2") }; ("sse4a") =>
{ crate :: detect_feature! (sse4a, "sse4a") }; ("sha") =>
{ crate :: detect_feature! (sha, "sha") }; ("avx") =>
{ crate :: detect_feature! (avx, "avx") }; ("avx2") =>
{ crate :: detect_feature! (avx2, "avx2") }; ("sha512") =>
{ crate :: detect_feature! (sha512, "sha512") }; ("sm3") =>
{ crate :: detect_feature! (sm3, "sm3") }; ("sm4") =>
{ crate :: detect_feature! (sm4, "sm4") }; ("avx512f") =>
{ crate :: detect_feature! (avx512f, "avx512f") }; ("avx512cd") =>
{ crate :: detect_feature! (avx512cd, "avx512cd") }; ("avx512er") =>
{
crate :: detect_feature!
(avx512er, "avx512er", without cfg check : true)
}; ("avx512pf") =>
{
crate :: detect_feature!
(avx512pf, "avx512pf", without cfg check : true)
}; ("avx512bw") => { crate :: detect_feature! (avx512bw, "avx512bw") };
("avx512dq") => { crate :: detect_feature! (avx512dq, "avx512dq") };
("avx512vl") => { crate :: detect_feature! (avx512vl, "avx512vl") };
("avx512ifma") => { crate :: detect_feature! (avx512ifma, "avx512ifma") };
("avx512vbmi") => { crate :: detect_feature! (avx512vbmi, "avx512vbmi") };
("avx512vpopcntdq") =>
{ crate :: detect_feature! (avx512vpopcntdq, "avx512vpopcntdq") };
("avx512vbmi2") =>
{ crate :: detect_feature! (avx512vbmi2, "avx512vbmi2") }; ("gfni") =>
{ crate :: detect_feature! (gfni, "gfni") }; ("vaes") =>
{ crate :: detect_feature! (vaes, "vaes") }; ("vpclmulqdq") =>
{ crate :: detect_feature! (vpclmulqdq, "vpclmulqdq") }; ("avx512vnni") =>
{ crate :: detect_feature! (avx512vnni, "avx512vnni") }; ("avx512bitalg")
=> { crate :: detect_feature! (avx512bitalg, "avx512bitalg") };
("avx512bf16") => { crate :: detect_feature! (avx512bf16, "avx512bf16") };
("avx512vp2intersect") =>
{ crate :: detect_feature! (avx512vp2intersect, "avx512vp2intersect") };
("avx512fp16") => { crate :: detect_feature! (avx512fp16, "avx512fp16") };
("avxifma") => { crate :: detect_feature! (avxifma, "avxifma") };
("avxneconvert") =>
{ crate :: detect_feature! (avxneconvert, "avxneconvert") }; ("avxvnni")
=> { crate :: detect_feature! (avxvnni, "avxvnni") }; ("avxvnniint16") =>
{ crate :: detect_feature! (avxvnniint16, "avxvnniint16") };
("avxvnniint8") =>
{ crate :: detect_feature! (avxvnniint8, "avxvnniint8") }; ("amx-tile") =>
{ crate :: detect_feature! (amx_tile, "amx-tile") }; ("amx-int8") =>
{ crate :: detect_feature! (amx_int8, "amx-int8") }; ("amx-bf16") =>
{ crate :: detect_feature! (amx_bf16, "amx-bf16") }; ("amx-fp16") =>
{ crate :: detect_feature! (amx_fp16, "amx-fp16") }; ("amx-complex") =>
{ crate :: detect_feature! (amx_complex, "amx-complex") }; ("amx-avx512")
=> { crate :: detect_feature! (amx_avx512, "amx-avx512") }; ("amx-fp8") =>
{ crate :: detect_feature! (amx_fp8, "amx-fp8") }; ("amx-movrs") =>
{ crate :: detect_feature! (amx_movrs, "amx-movrs") }; ("amx-tf32") =>
{ crate :: detect_feature! (amx_tf32, "amx-tf32") }; ("apxf") =>
{ crate :: detect_feature! (apxf, "apxf") }; ("avx10.1") =>
{ crate :: detect_feature! (avx10_1, "avx10.1") }; ("avx10.2") =>
{ crate :: detect_feature! (avx10_2, "avx10.2") }; ("f16c") =>
{ crate :: detect_feature! (f16c, "f16c") }; ("fma") =>
{ crate :: detect_feature! (fma, "fma") }; ("bmi1") =>
{ crate :: detect_feature! (bmi1, "bmi1") }; ("bmi2") =>
{ crate :: detect_feature! (bmi2, "bmi2") }; ("lzcnt") =>
{ crate :: detect_feature! (lzcnt, "lzcnt") }; ("tbm") =>
{ crate :: detect_feature! (tbm, "tbm") }; ("popcnt") =>
{ crate :: detect_feature! (popcnt, "popcnt") }; ("fxsr") =>
{ crate :: detect_feature! (fxsr, "fxsr") }; ("xsave") =>
{ crate :: detect_feature! (xsave, "xsave") }; ("xsaveopt") =>
{ crate :: detect_feature! (xsaveopt, "xsaveopt") }; ("xsaves") =>
{ crate :: detect_feature! (xsaves, "xsaves") }; ("xsavec") =>
{ crate :: detect_feature! (xsavec, "xsavec") }; ("cmpxchg16b") =>
{ crate :: detect_feature! (cmpxchg16b, "cmpxchg16b") }; ("kl") =>
{ crate :: detect_feature! (kl, "kl") }; ("widekl") =>
{ crate :: detect_feature! (widekl, "widekl") }; ("adx") =>
{ crate :: detect_feature! (adx, "adx") }; ("rtm") =>
{ crate :: detect_feature! (rtm, "rtm") }; ("movbe") =>
{ crate :: detect_feature! (movbe, "movbe") }; ("movrs") =>
{ crate :: detect_feature! (movrs, "movrs") }; ("ermsb") =>
{ crate :: detect_feature! (ermsb, "ermsb") }; ("xop") =>
{ crate :: detect_feature! (xop, "xop") }; ("abm") =>
{ { crate :: is_x86_feature_detected ! ("lzcnt") } }; ("avx512gfni") =>
{
{
#[deprecated(since = "1.67.0", note =
"the `avx512gfni` feature has been renamed to `gfni`")]
macro_rules! deprecated_feature { {} => {}; } deprecated_feature!
{}; crate :: is_x86_feature_detected ! ("gfni")
}
}; ("avx512vaes") =>
{
{
#[deprecated(since = "1.67.0", note =
"the `avx512vaes` feature has been renamed to `vaes`")]
macro_rules! deprecated_feature { {} => {}; } deprecated_feature!
{}; crate :: is_x86_feature_detected ! ("vaes")
}
}; ("avx512vpclmulqdq") =>
{
{
#[deprecated(since = "1.67.0", note =
"the `avx512vpclmulqdq` feature has been renamed to `vpclmulqdq`")]
macro_rules! deprecated_feature { {} => {}; } deprecated_feature!
{}; crate :: is_x86_feature_detected ! ("vpclmulqdq")
}
}; ($t : tt,) => { crate :: is_x86_feature_detected ! ($t); }; ($t : tt)
=>
{
compile_error!
(concat!
(concat! ("unknown ", stringify! (x86)), concat!
(" target feature: ", $t)))
};
}
#[deny(unexpected_cfgs)]
#[deny(unfulfilled_lint_expectations)]
const _: () =
{
false;
;
false;
;
false;
;
false;
;
#[allow(unexpected_cfgs, reason = "tsc")]
{ false };
#[allow(unexpected_cfgs, reason = "mmx")]
{ false };
true;
;
true;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
#[allow(unexpected_cfgs, reason = "avx512er")]
{ false };
#[allow(unexpected_cfgs, reason = "avx512pf")]
{ false };
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
true;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
false;
;
};
#[doc(hidden)]
#[allow(non_camel_case_types)]
#[repr(u8)]
#[unstable(feature = "stdarch_internal", issue = "none")]
pub(crate) enum Feature {
#[doc = r" AES (Advanced Encryption Standard New Instructions AES-NI)"]
aes,
#[doc = r" CLMUL (Carry-less Multiplication)"]
pclmulqdq,
#[doc = r" RDRAND"]
rdrand,
#[doc = r" RDSEED"]
rdseed,
#[doc = r" TSC (Time Stamp Counter)"]
tsc,
#[doc = r" MMX (MultiMedia eXtensions)"]
mmx,
#[doc = r" SSE (Streaming SIMD Extensions)"]
sse,
#[doc = r" SSE2 (Streaming SIMD Extensions 2)"]
sse2,
#[doc = r" SSE3 (Streaming SIMD Extensions 3)"]
sse3,
#[doc = r" SSSE3 (Supplemental Streaming SIMD Extensions 3)"]
ssse3,
#[doc = r" SSE4.1 (Streaming SIMD Extensions 4.1)"]
sse4_1,
#[doc = r" SSE4.2 (Streaming SIMD Extensions 4.2)"]
sse4_2,
#[doc = r" SSE4a (Streaming SIMD Extensions 4a)"]
sse4a,
#[doc = r" SHA"]
sha,
#[doc = r" AVX (Advanced Vector Extensions)"]
avx,
#[doc = r" AVX2 (Advanced Vector Extensions 2)"]
avx2,
#[doc = r" SHA512"]
sha512,
#[doc = r" SM3"]
sm3,
#[doc = r" SM4"]
sm4,
#[doc = r" AVX-512 F (Foundation)"]
avx512f,
#[doc = r" AVX-512 CD (Conflict Detection Instructions)"]
avx512cd,
#[doc = r" AVX-512 ER (Expo nential and Reciprocal Instructions)"]
avx512er,
#[doc = r" AVX-512 PF (Prefetch Instructions)"]
avx512pf,
#[doc = r" AVX-512 BW (Byte and Word Instructions)"]
avx512bw,
#[doc = r" AVX-512 DQ (Doubleword and Quadword)"]
avx512dq,
#[doc = r" AVX-512 VL (Vector Length Extensions)"]
avx512vl,
#[doc = r" AVX-512 IFMA (Integer Fused Multiply Add)"]
avx512ifma,
#[doc = r" AVX-512 VBMI (Vector Byte Manipulation Instructions)"]
avx512vbmi,
#[doc =
r" AVX-512 VPOPCNTDQ (Vector Population Count Doubleword and Quadword)"]
avx512vpopcntdq,
#[doc =
r" AVX-512 VBMI2 (Additional byte, word, dword and qword capabilities)"]
avx512vbmi2,
#[doc = r" AVX-512 GFNI (Galois Field New Instruction)"]
gfni,
#[doc = r" AVX-512 VAES (Vector AES instruction)"]
vaes,
#[doc = r" AVX-512 VPCLMULQDQ (Vector PCLMULQDQ instructions)"]
vpclmulqdq,
#[doc = r" AVX-512 VNNI (Vector Neural Network Instructions)"]
avx512vnni,
#[doc = r" AVX-512 BITALG (Support for VPOPCNT\[B,W\] and VPSHUFBITQMB)"]
avx512bitalg,
#[doc = r" AVX-512 BF16 (BFLOAT16 instructions)"]
avx512bf16,
#[doc = r" AVX-512 P2INTERSECT"]
avx512vp2intersect,
#[doc = r" AVX-512 FP16 (FLOAT16 instructions)"]
avx512fp16,
#[doc = r" AVX-IFMA (Integer Fused Multiply Add)"]
avxifma,
#[doc = r" AVX-NE-CONVERT (Exceptionless Convert)"]
avxneconvert,
#[doc = r" AVX-VNNI (Vector Neural Network Instructions)"]
avxvnni,
#[doc = r" AVX-VNNI_INT8 (VNNI with 16-bit Integers)"]
avxvnniint16,
#[doc = r" AVX-VNNI_INT16 (VNNI with 8-bit integers)"]
avxvnniint8,
#[doc = r" AMX (Advanced Matrix Extensions) - Tile load/store"]
amx_tile,
#[doc = r" AMX-INT8 (Operations on 8-bit integers)"]
amx_int8,
#[doc = r" AMX-BF16 (BFloat16 Operations)"]
amx_bf16,
#[doc = r" AMX-FP16 (Float16 Operations)"]
amx_fp16,
#[doc = r" AMX-COMPLEX (Complex number Operations)"]
amx_complex,
#[doc = r" AMX-AVX512 (AVX512 operations extended to matrices)"]
amx_avx512,
#[doc = r" AMX-FP8 (Float8 Operations)"]
amx_fp8,
#[doc = r" AMX-MOVRS (Matrix MOVERS operations)"]
amx_movrs,
#[doc = r" AMX-TF32 (TensorFloat32 Operations)"]
amx_tf32,
#[doc = r" APX-F (Advanced Performance Extensions - Foundation)"]
apxf,
#[doc = r" AVX10.1"]
avx10_1,
#[doc = r" AVX10.2"]
avx10_2,
#[doc =
r" F16C (Conversions between IEEE-754 `binary16` and `binary32` formats)"]
f16c,
#[doc = r" FMA (Fused Multiply Add)"]
fma,
#[doc = r" BMI1 (Bit Manipulation Instructions 1)"]
bmi1,
#[doc = r" BMI2 (Bit Manipulation Instructions 2)"]
bmi2,
#[doc = r" ABM (Advanced Bit Manipulation) / LZCNT (Leading Zero Count)"]
lzcnt,
#[doc = r" TBM (Trailing Bit Manipulation)"]
tbm,
#[doc = r" POPCNT (Population Count)"]
popcnt,
#[doc = r" FXSR (Floating-point context fast save and restore)"]
fxsr,
#[doc = r" XSAVE (Save Processor Extended States)"]
xsave,
#[doc = r" XSAVEOPT (Save Processor Extended States Optimized)"]
xsaveopt,
#[doc = r" XSAVES (Save Processor Extended States Supervisor)"]
xsaves,
#[doc = r" XSAVEC (Save Processor Extended States Compacted)"]
xsavec,
#[doc = r" CMPXCH16B (16-byte compare-and-swap instruction)"]
cmpxchg16b,
#[doc = r" Intel Key Locker"]
kl,
#[doc = r" Intel Key Locker Wide"]
widekl,
#[doc =
r" ADX, Intel ADX (Multi-Precision Add-Carry Instruction Extensions)"]
adx,
#[doc = r" RTM, Intel (Restricted Transactional Memory)"]
rtm,
#[doc = r" MOVBE (Move Data After Swapping Bytes)"]
movbe,
#[doc = r" MOVRS (Move data with the read-shared hint)"]
movrs,
#[doc = r" ERMSB, Enhanced REP MOVSB and STOSB"]
ermsb,
#[doc = r" XOP: eXtended Operations (AMD)"]
xop,
_last,
}
#[automatically_derived]
#[allow(non_camel_case_types)]
#[unstable(feature = "stdarch_internal", issue = "none")]
impl ::core::marker::Copy for Feature { }
#[automatically_derived]
#[doc(hidden)]
#[allow(non_camel_case_types)]
#[unstable(feature = "stdarch_internal", issue = "none")]
unsafe impl ::core::clone::TrivialClone for Feature { }
#[automatically_derived]
#[allow(non_camel_case_types)]
#[unstable(feature = "stdarch_internal", issue = "none")]
impl ::core::clone::Clone for Feature {
#[inline]
fn clone(&self) -> Feature { *self }
}
impl Feature {
pub(crate) fn to_str(self) -> &'static str {
match self {
Feature::aes => "aes",
Feature::pclmulqdq => "pclmulqdq",
Feature::rdrand => "rdrand",
Feature::rdseed => "rdseed",
Feature::tsc => "tsc",
Feature::mmx => "mmx",
Feature::sse => "sse",
Feature::sse2 => "sse2",
Feature::sse3 => "sse3",
Feature::ssse3 => "ssse3",
Feature::sse4_1 => "sse4.1",
Feature::sse4_2 => "sse4.2",
Feature::sse4a => "sse4a",
Feature::sha => "sha",
Feature::avx => "avx",
Feature::avx2 => "avx2",
Feature::sha512 => "sha512",
Feature::sm3 => "sm3",
Feature::sm4 => "sm4",
Feature::avx512f => "avx512f",
Feature::avx512cd => "avx512cd",
Feature::avx512er => "avx512er",
Feature::avx512pf => "avx512pf",
Feature::avx512bw => "avx512bw",
Feature::avx512dq => "avx512dq",
Feature::avx512vl => "avx512vl",
Feature::avx512ifma => "avx512ifma",
Feature::avx512vbmi => "avx512vbmi",
Feature::avx512vpopcntdq => "avx512vpopcntdq",
Feature::avx512vbmi2 => "avx512vbmi2",
Feature::gfni => "gfni",
Feature::vaes => "vaes",
Feature::vpclmulqdq => "vpclmulqdq",
Feature::avx512vnni => "avx512vnni",
Feature::avx512bitalg => "avx512bitalg",
Feature::avx512bf16 => "avx512bf16",
Feature::avx512vp2intersect => "avx512vp2intersect",
Feature::avx512fp16 => "avx512fp16",
Feature::avxifma => "avxifma",
Feature::avxneconvert => "avxneconvert",
Feature::avxvnni => "avxvnni",
Feature::avxvnniint16 => "avxvnniint16",
Feature::avxvnniint8 => "avxvnniint8",
Feature::amx_tile => "amx-tile",
Feature::amx_int8 => "amx-int8",
Feature::amx_bf16 => "amx-bf16",
Feature::amx_fp16 => "amx-fp16",
Feature::amx_complex => "amx-complex",
Feature::amx_avx512 => "amx-avx512",
Feature::amx_fp8 => "amx-fp8",
Feature::amx_movrs => "amx-movrs",
Feature::amx_tf32 => "amx-tf32",
Feature::apxf => "apxf",
Feature::avx10_1 => "avx10.1",
Feature::avx10_2 => "avx10.2",
Feature::f16c => "f16c",
Feature::fma => "fma",
Feature::bmi1 => "bmi1",
Feature::bmi2 => "bmi2",
Feature::lzcnt => "lzcnt",
Feature::tbm => "tbm",
Feature::popcnt => "popcnt",
Feature::fxsr => "fxsr",
Feature::xsave => "xsave",
Feature::xsaveopt => "xsaveopt",
Feature::xsaves => "xsaves",
Feature::xsavec => "xsavec",
Feature::cmpxchg16b => "cmpxchg16b",
Feature::kl => "kl",
Feature::widekl => "widekl",
Feature::adx => "adx",
Feature::rtm => "rtm",
Feature::movbe => "movbe",
Feature::movrs => "movrs",
Feature::ermsb => "ermsb",
Feature::xop => "xop",
Feature::_last =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
}
#[doc(hidden)]
#[unstable(feature = "stdarch_internal", issue = "none")]
pub mod __is_feature_detected {
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn aes() -> bool {
crate::detect::check_for(crate::detect::Feature::aes)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn pclmulqdq() -> bool {
crate::detect::check_for(crate::detect::Feature::pclmulqdq)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn rdrand() -> bool {
crate::detect::check_for(crate::detect::Feature::rdrand)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn rdseed() -> bool {
crate::detect::check_for(crate::detect::Feature::rdseed)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn tsc() -> bool {
crate::detect::check_for(crate::detect::Feature::tsc)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn mmx() -> bool {
crate::detect::check_for(crate::detect::Feature::mmx)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse() -> bool {
crate::detect::check_for(crate::detect::Feature::sse)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse2() -> bool {
crate::detect::check_for(crate::detect::Feature::sse2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse3() -> bool {
crate::detect::check_for(crate::detect::Feature::sse3)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn ssse3() -> bool {
crate::detect::check_for(crate::detect::Feature::ssse3)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse4_1() -> bool {
crate::detect::check_for(crate::detect::Feature::sse4_1)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse4_2() -> bool {
crate::detect::check_for(crate::detect::Feature::sse4_2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sse4a() -> bool {
crate::detect::check_for(crate::detect::Feature::sse4a)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn sha() -> bool {
crate::detect::check_for(crate::detect::Feature::sha)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx() -> bool {
crate::detect::check_for(crate::detect::Feature::avx)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx2() -> bool {
crate::detect::check_for(crate::detect::Feature::avx2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "sha512_sm_x86", since = "1.89.0")]
pub fn sha512() -> bool {
crate::detect::check_for(crate::detect::Feature::sha512)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "sha512_sm_x86", since = "1.89.0")]
pub fn sm3() -> bool {
crate::detect::check_for(crate::detect::Feature::sm3)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "sha512_sm_x86", since = "1.89.0")]
pub fn sm4() -> bool {
crate::detect::check_for(crate::detect::Feature::sm4)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512f() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512f)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512cd() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512cd)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512er() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512er)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512pf() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512pf)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512bw() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512bw)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512dq() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512dq)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vl() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vl)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512ifma() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512ifma)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vbmi() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vbmi)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vpopcntdq() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vpopcntdq)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vbmi2() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vbmi2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn gfni() -> bool {
crate::detect::check_for(crate::detect::Feature::gfni)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn vaes() -> bool {
crate::detect::check_for(crate::detect::Feature::vaes)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn vpclmulqdq() -> bool {
crate::detect::check_for(crate::detect::Feature::vpclmulqdq)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vnni() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vnni)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512bitalg() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512bitalg)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512bf16() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512bf16)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512vp2intersect() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512vp2intersect)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn avx512fp16() -> bool {
crate::detect::check_for(crate::detect::Feature::avx512fp16)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "avx512_target_feature", since = "1.89.0")]
pub fn avxifma() -> bool {
crate::detect::check_for(crate::detect::Feature::avxifma)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "avx512_target_feature", since = "1.89.0")]
pub fn avxneconvert() -> bool {
crate::detect::check_for(crate::detect::Feature::avxneconvert)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "avx512_target_feature", since = "1.89.0")]
pub fn avxvnni() -> bool {
crate::detect::check_for(crate::detect::Feature::avxvnni)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "avx512_target_feature", since = "1.89.0")]
pub fn avxvnniint16() -> bool {
crate::detect::check_for(crate::detect::Feature::avxvnniint16)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "avx512_target_feature", since = "1.89.0")]
pub fn avxvnniint8() -> bool {
crate::detect::check_for(crate::detect::Feature::avxvnniint8)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_tile() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_tile)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_int8() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_int8)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_bf16() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_bf16)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_fp16() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_fp16)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_complex() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_complex)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_avx512() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_avx512)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_fp8() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_fp8)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_movrs() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_movrs)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "x86_amx_intrinsics", issue = "126622")]
pub fn amx_tf32() -> bool {
crate::detect::check_for(crate::detect::Feature::amx_tf32)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "apx_target_feature", issue = "139284")]
pub fn apxf() -> bool {
crate::detect::check_for(crate::detect::Feature::apxf)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "avx10_target_feature", issue = "138843")]
pub fn avx10_1() -> bool {
crate::detect::check_for(crate::detect::Feature::avx10_1)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "avx10_target_feature", issue = "138843")]
pub fn avx10_2() -> bool {
crate::detect::check_for(crate::detect::Feature::avx10_2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn f16c() -> bool {
crate::detect::check_for(crate::detect::Feature::f16c)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn fma() -> bool {
crate::detect::check_for(crate::detect::Feature::fma)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn bmi1() -> bool {
crate::detect::check_for(crate::detect::Feature::bmi1)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn bmi2() -> bool {
crate::detect::check_for(crate::detect::Feature::bmi2)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn lzcnt() -> bool {
crate::detect::check_for(crate::detect::Feature::lzcnt)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn tbm() -> bool {
crate::detect::check_for(crate::detect::Feature::tbm)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn popcnt() -> bool {
crate::detect::check_for(crate::detect::Feature::popcnt)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn fxsr() -> bool {
crate::detect::check_for(crate::detect::Feature::fxsr)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn xsave() -> bool {
crate::detect::check_for(crate::detect::Feature::xsave)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn xsaveopt() -> bool {
crate::detect::check_for(crate::detect::Feature::xsaveopt)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn xsaves() -> bool {
crate::detect::check_for(crate::detect::Feature::xsaves)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn xsavec() -> bool {
crate::detect::check_for(crate::detect::Feature::xsavec)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn cmpxchg16b() -> bool {
crate::detect::check_for(crate::detect::Feature::cmpxchg16b)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "keylocker_x86", since = "1.89.0")]
pub fn kl() -> bool {
crate::detect::check_for(crate::detect::Feature::kl)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "keylocker_x86", since = "1.89.0")]
pub fn widekl() -> bool {
crate::detect::check_for(crate::detect::Feature::widekl)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86_adx", since = "1.33.0")]
pub fn adx() -> bool {
crate::detect::check_for(crate::detect::Feature::adx)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn rtm() -> bool {
crate::detect::check_for(crate::detect::Feature::rtm)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "movbe_target_feature", since = "1.67.0")]
pub fn movbe() -> bool {
crate::detect::check_for(crate::detect::Feature::movbe)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "movrs_target_feature", issue = "137976")]
pub fn movrs() -> bool {
crate::detect::check_for(crate::detect::Feature::movrs)
}
#[inline]
#[doc(hidden)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub fn ermsb() -> bool {
crate::detect::check_for(crate::detect::Feature::ermsb)
}
#[inline]
#[doc(hidden)]
#[unstable(feature = "xop_target_feature", issue = "127208")]
pub fn xop() -> bool {
crate::detect::check_for(crate::detect::Feature::xop)
}
}features! {
19 @TARGET: x86;
20 @CFG: any(target_arch = "x86", target_arch = "x86_64");
21 @MACRO_NAME: is_x86_feature_detected;
22 @MACRO_ATTRS:
23 #[stable(feature = "simd_x86", since = "1.27.0")]
120 @BIND_FEATURE_NAME: "abm"; "lzcnt"; @BIND_FEATURE_NAME: "avx512gfni"; "gfni"; #[deprecated(since = "1.67.0", note = "the `avx512gfni` feature has been renamed to `gfni`")];
122 @BIND_FEATURE_NAME: "avx512vaes"; "vaes"; #[deprecated(since = "1.67.0", note = "the `avx512vaes` feature has been renamed to `vaes`")];
123 @BIND_FEATURE_NAME: "avx512vpclmulqdq"; "vpclmulqdq"; #[deprecated(since = "1.67.0", note = "the `avx512vpclmulqdq` feature has been renamed to `vpclmulqdq`")];
124 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] aes: "aes";
125 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] pclmulqdq: "pclmulqdq";
127 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] rdrand: "rdrand";
129 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] rdseed: "rdseed";
131 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] tsc: "tsc";
133 without cfg check: true;
134 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] mmx: "mmx";
136 without cfg check: true;
137 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse: "sse";
139 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse2: "sse2";
141 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse3: "sse3";
143 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] ssse3: "ssse3";
145 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse4_1: "sse4.1";
147 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse4_2: "sse4.2";
149 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sse4a: "sse4a";
151 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] sha: "sha";
153 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx: "avx";
155 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx2: "avx2";
157 @FEATURE: #[stable(feature = "sha512_sm_x86", since = "1.89.0")] sha512: "sha512";
159 @FEATURE: #[stable(feature = "sha512_sm_x86", since = "1.89.0")] sm3: "sm3";
161 @FEATURE: #[stable(feature = "sha512_sm_x86", since = "1.89.0")] sm4: "sm4";
163 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512f: "avx512f" ;
165 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512cd: "avx512cd" ;
167 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512er: "avx512er";
169 without cfg check: true;
170 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512pf: "avx512pf";
172 without cfg check: true;
173 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512bw: "avx512bw";
175 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512dq: "avx512dq";
177 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vl: "avx512vl";
179 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512ifma: "avx512ifma";
181 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vbmi: "avx512vbmi";
183 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vpopcntdq: "avx512vpopcntdq";
185 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vbmi2: "avx512vbmi2";
187 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] gfni: "gfni";
189 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] vaes: "vaes";
191 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] vpclmulqdq: "vpclmulqdq";
193 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vnni: "avx512vnni";
195 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512bitalg: "avx512bitalg";
197 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512bf16: "avx512bf16";
199 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512vp2intersect: "avx512vp2intersect";
201 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512fp16: "avx512fp16";
203 @FEATURE: #[stable(feature = "avx512_target_feature", since = "1.89.0")] avxifma: "avxifma";
205 @FEATURE: #[stable(feature = "avx512_target_feature", since = "1.89.0")] avxneconvert: "avxneconvert";
207 @FEATURE: #[stable(feature = "avx512_target_feature", since = "1.89.0")] avxvnni: "avxvnni";
209 @FEATURE: #[stable(feature = "avx512_target_feature", since = "1.89.0")] avxvnniint16: "avxvnniint16";
211 @FEATURE: #[stable(feature = "avx512_target_feature", since = "1.89.0")] avxvnniint8: "avxvnniint8";
213 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_tile: "amx-tile";
215 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_int8: "amx-int8";
217 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_bf16: "amx-bf16";
219 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_fp16: "amx-fp16";
221 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_complex: "amx-complex";
223 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_avx512: "amx-avx512";
225 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_fp8: "amx-fp8";
227 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_movrs: "amx-movrs";
229 @FEATURE: #[unstable(feature = "x86_amx_intrinsics", issue = "126622")] amx_tf32: "amx-tf32";
231 @FEATURE: #[unstable(feature = "apx_target_feature", issue = "139284")] apxf: "apxf";
233 @FEATURE: #[unstable(feature = "avx10_target_feature", issue = "138843")] avx10_1: "avx10.1";
235 @FEATURE: #[unstable(feature = "avx10_target_feature", issue = "138843")] avx10_2: "avx10.2";
237 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] f16c: "f16c";
239 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] fma: "fma";
241 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] bmi1: "bmi1" ;
243 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] bmi2: "bmi2" ;
245 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] lzcnt: "lzcnt";
247 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] tbm: "tbm";
249 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] popcnt: "popcnt";
251 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] fxsr: "fxsr";
253 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] xsave: "xsave";
255 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] xsaveopt: "xsaveopt";
257 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] xsaves: "xsaves";
259 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] xsavec: "xsavec";
261 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] cmpxchg16b: "cmpxchg16b";
263 @FEATURE: #[stable(feature = "keylocker_x86", since = "1.89.0")] kl: "kl";
265 @FEATURE: #[stable(feature = "keylocker_x86", since = "1.89.0")] widekl: "widekl";
267 @FEATURE: #[stable(feature = "simd_x86_adx", since = "1.33.0")] adx: "adx";
269 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] rtm: "rtm";
271 @FEATURE: #[stable(feature = "movbe_target_feature", since = "1.67.0")] movbe: "movbe";
273 @FEATURE: #[unstable(feature = "movrs_target_feature", issue = "137976")] movrs: "movrs";
275 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] ermsb: "ermsb";
277 @FEATURE: #[unstable(feature = "xop_target_feature", issue = "127208")] xop: "xop";
279 }