Macro std::is_x86_feature_detected

1.27.0 · source ·
macro_rules! is_x86_feature_detected {
    ("aes") => { ... };
    ("pclmulqdq") => { ... };
    ("rdrand") => { ... };
    ("rdseed") => { ... };
    ("tsc") => { ... };
    ("mmx") => { ... };
    ("sse") => { ... };
    ("sse2") => { ... };
    ("sse3") => { ... };
    ("ssse3") => { ... };
    ("sse4.1") => { ... };
    ("sse4.2") => { ... };
    ("sse4a") => { ... };
    ("sha") => { ... };
    ("avx") => { ... };
    ("avx2") => { ... };
    ("avx512f") => { ... };
    ("avx512cd") => { ... };
    ("avx512er") => { ... };
    ("avx512pf") => { ... };
    ("avx512bw") => { ... };
    ("avx512dq") => { ... };
    ("avx512vl") => { ... };
    ("avx512ifma") => { ... };
    ("avx512vbmi") => { ... };
    ("avx512vpopcntdq") => { ... };
    ("avx512vbmi2") => { ... };
    ("gfni") => { ... };
    ("vaes") => { ... };
    ("vpclmulqdq") => { ... };
    ("avx512vnni") => { ... };
    ("avx512bitalg") => { ... };
    ("avx512bf16") => { ... };
    ("avx512vp2intersect") => { ... };
    ("f16c") => { ... };
    ("fma") => { ... };
    ("bmi1") => { ... };
    ("bmi2") => { ... };
    ("lzcnt") => { ... };
    ("tbm") => { ... };
    ("popcnt") => { ... };
    ("fxsr") => { ... };
    ("xsave") => { ... };
    ("xsaveopt") => { ... };
    ("xsaves") => { ... };
    ("xsavec") => { ... };
    ("cmpxchg16b") => { ... };
    ("adx") => { ... };
    ("rtm") => { ... };
    ("movbe") => { ... };
    ("ermsb") => { ... };
    ("abm") => { ... };
    ("avx512gfni") => { ... };
    ("avx512vaes") => { ... };
    ("avx512vpclmulqdq") => { ... };
    ($t:tt,) => { ... };
    ($t:tt) => { ... };
}
Available on x86 or x86-64 only.
Expand description

一个在运行时测试 x86/x86-64 平台上是否具有 CPU 特性的宏。

标准库中提供了此宏,它将在运行时检测是否检测到指定的 CPU 特性。

除非在整个 crate 中启用了指定特性,否则在编译时不会解析。 当前,运行时检测主要依赖于 cpuid 指令。

该宏仅使用一个参数,该参数是要测试的特性的字符串字面量。 支持的特性名称是 their 文档 中 Intel 定义的特性的小写版本。

支持的参数

该宏支持 #[target_feature] 支持的相同名称。 但是,与 #[target_feature] 不同,此宏不支持用逗号分隔的名称。 相反,现在必须通过单独的宏调用来测试多个特性。

支持的参数有:

  • "aes"
  • "pclmulqdq"
  • "rdrand"
  • "rdseed"
  • "tsc"
  • "mmx"
  • "sse"
  • "sse2"
  • "sse3"
  • "ssse3"
  • "sse4.1"
  • "sse4.2"
  • "sse4a"
  • "sha"
  • "avx"
  • "avx2"
  • "avx512f"
  • "avx512cd"
  • "avx512er"
  • "avx512pf"
  • "avx512bw"
  • "avx512dq"
  • "avx512vl"
  • "avx512ifma"
  • "avx512vbmi"
  • "avx512vpopcntdq"
  • "avx512vbmi2"
  • "gfni"
  • "vaes"
  • "vpclmulqdq"
  • "avx512vnni"
  • "avx512bitalg"
  • "avx512bf16"
  • "avx512vp2intersect"
  • "f16c"
  • "fma"
  • "bmi1"
  • "bmi2"
  • "abm"
  • "lzcnt"
  • "tbm"
  • "popcnt"
  • "fxsr"
  • "xsave"
  • "xsaveopt"
  • "xsaves"
  • "xsavec"
  • "cmpxchg16b"
  • "adx"
  • "rtm"
  • "movbe"
  • "ermsb"