features! {
@TARGET: x86;
@MACRO_NAME: is_x86_feature_detected;
@MACRO_ATTRS:
@BIND_FEATURE_NAME: "abm"; "lzcnt"; @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: 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: avx512gfni: "avx512gfni";
@FEATURE: avx512vaes: "avx512vaes";
@FEATURE: avx512vpclmulqdq: "avx512vpclmulqdq";
@FEATURE: avx512vnni: "avx512vnni";
@FEATURE: avx512bitalg: "avx512bitalg";
@FEATURE: avx512bf16: "avx512bf16";
@FEATURE: avx512vp2intersect: "avx512vp2intersect";
@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: adx: "adx";
@FEATURE: rtm: "rtm";
}