Skip to content

Commit 49bb1a6

Browse files
committed
Updated the list of white-listed target features for x86
This PR both adds in-source documentation on what to look out for when adding a new (X86) feature set and adds all that are detectable at run-time in Rust stable as of 1.27.0. This should only enable the use of the corresponding LLVM intrinsics. Actual intrinsics need to be added separately in rust-lang/stdarch. It also re-orders the run-time-detect test statements to be more consistent with the actual list of intrinsics whitelisted and removes underscores not present in the actual names (which might be mistaken as being part of the name)
1 parent 4266aa0 commit 49bb1a6

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

std/tests/run-time-detect.rs

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -54,42 +54,55 @@ fn powerpc64_linux() {
5454
#[test]
5555
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
5656
fn x86_all() {
57+
// the below is in alphabetical order and matches
58+
// the order of X86_ALLOWED_FEATURES in rustc_codegen_ssa's target_features.rs
59+
60+
println!("adx: {:?}", is_x86_feature_detected!("adx"));
5761
println!("aes: {:?}", is_x86_feature_detected!("aes"));
58-
println!("pcmulqdq: {:?}", is_x86_feature_detected!("pclmulqdq"));
62+
println!("avx: {:?}", is_x86_feature_detected!("avx"));
63+
println!("avx2: {:?}", is_x86_feature_detected!("avx2"));
64+
println!("avx512bf16: {:?}", is_x86_feature_detected!("avx512bf16"));
65+
println!("avx512bitalg: {:?}", is_x86_feature_detected!("avx512bitalg"));
66+
println!("avx512bw: {:?}", is_x86_feature_detected!("avx512bw"));
67+
println!("avx512cd: {:?}", is_x86_feature_detected!("avx512cd"));
68+
println!("avx512dq: {:?}", is_x86_feature_detected!("avx512dq"));
69+
println!("avx512er: {:?}", is_x86_feature_detected!("avx512er"));
70+
println!("avx512f: {:?}", is_x86_feature_detected!("avx512f"));
71+
println!("avx512gfni: {:?}", is_x86_feature_detected!("avx512gfni"));
72+
println!("avx512ifma: {:?}", is_x86_feature_detected!("avx512ifma"));
73+
println!("avx512pf: {:?}", is_x86_feature_detected!("avx512pf"));
74+
println!("avx512vaes: {:?}", is_x86_feature_detected!("avx512vaes"));
75+
println!("avx512vbmi: {:?}", is_x86_feature_detected!("avx512vbmi"));
76+
println!("avx512vbmi2: {:?}", is_x86_feature_detected!("avx512vbmi2"));
77+
println!("avx512vl: {:?}", is_x86_feature_detected!("avx512vl"));
78+
println!("avx512vnni: {:?}", is_x86_feature_detected!("avx512vnni"));
79+
println!("avx512vp2intersect: {:?}", is_x86_feature_detected!("avx512vp2intersect"));
80+
println!("avx512vpclmulqdq: {:?}", is_x86_feature_detected!("avx512vpclmulqdq"));
81+
println!("avx512vpopcntdq: {:?}", is_x86_feature_detected!("avx512vpopcntdq"));
82+
println!("bmi1: {:?}", is_x86_feature_detected!("bmi1"));
83+
println!("bmi2: {:?}", is_x86_feature_detected!("bmi2"));
84+
println!("cmpxchg16b: {:?}", is_x86_feature_detected!("cmpxchg16b"));
85+
println!("f16c: {:?}", is_x86_feature_detected!("f16c"));
86+
println!("fma: {:?}", is_x86_feature_detected!("fma"));
87+
println!("fxsr: {:?}", is_x86_feature_detected!("fxsr"));
88+
println!("lzcnt: {:?}", is_x86_feature_detected!("lzcnt"));
89+
println!("movbe: {:?}", is_x86_feature_detected!("movbe"));
90+
println!("pclmulqdq: {:?}", is_x86_feature_detected!("pclmulqdq"));
91+
println!("popcnt: {:?}", is_x86_feature_detected!("popcnt"));
5992
println!("rdrand: {:?}", is_x86_feature_detected!("rdrand"));
6093
println!("rdseed: {:?}", is_x86_feature_detected!("rdseed"));
61-
println!("tsc: {:?}", is_x86_feature_detected!("tsc"));
62-
println!("mmx: {:?}", is_x86_feature_detected!("mmx"));
94+
println!("rtm: {:?}", is_x86_feature_detected!("rtm"));
95+
println!("sha: {:?}", is_x86_feature_detected!("sha"));
6396
println!("sse: {:?}", is_x86_feature_detected!("sse"));
6497
println!("sse2: {:?}", is_x86_feature_detected!("sse2"));
6598
println!("sse3: {:?}", is_x86_feature_detected!("sse3"));
66-
println!("ssse3: {:?}", is_x86_feature_detected!("ssse3"));
6799
println!("sse4.1: {:?}", is_x86_feature_detected!("sse4.1"));
68100
println!("sse4.2: {:?}", is_x86_feature_detected!("sse4.2"));
69101
println!("sse4a: {:?}", is_x86_feature_detected!("sse4a"));
70-
println!("sha: {:?}", is_x86_feature_detected!("sha"));
71-
println!("avx: {:?}", is_x86_feature_detected!("avx"));
72-
println!("avx2: {:?}", is_x86_feature_detected!("avx2"));
73-
println!("avx512f {:?}", is_x86_feature_detected!("avx512f"));
74-
println!("avx512cd {:?}", is_x86_feature_detected!("avx512cd"));
75-
println!("avx512er {:?}", is_x86_feature_detected!("avx512er"));
76-
println!("avx512pf {:?}", is_x86_feature_detected!("avx512pf"));
77-
println!("avx512bw {:?}", is_x86_feature_detected!("avx512bw"));
78-
println!("avx512dq {:?}", is_x86_feature_detected!("avx512dq"));
79-
println!("avx512vl {:?}", is_x86_feature_detected!("avx512vl"));
80-
println!("avx512_ifma {:?}", is_x86_feature_detected!("avx512ifma"));
81-
println!("avx512_vbmi {:?}", is_x86_feature_detected!("avx512vbmi"));
82-
println!("avx512_vpopcntdq {:?}", is_x86_feature_detected!("avx512vpopcntdq"));
83-
println!("fma: {:?}", is_x86_feature_detected!("fma"));
84-
println!("bmi1: {:?}", is_x86_feature_detected!("bmi1"));
85-
println!("bmi2: {:?}", is_x86_feature_detected!("bmi2"));
86-
println!("abm: {:?}", is_x86_feature_detected!("abm"));
87-
println!("lzcnt: {:?}", is_x86_feature_detected!("lzcnt"));
102+
println!("ssse3: {:?}", is_x86_feature_detected!("ssse3"));
88103
println!("tbm: {:?}", is_x86_feature_detected!("tbm"));
89-
println!("popcnt: {:?}", is_x86_feature_detected!("popcnt"));
90-
println!("fxsr: {:?}", is_x86_feature_detected!("fxsr"));
91104
println!("xsave: {:?}", is_x86_feature_detected!("xsave"));
105+
println!("xsavec: {:?}", is_x86_feature_detected!("xsavec"));
92106
println!("xsaveopt: {:?}", is_x86_feature_detected!("xsaveopt"));
93107
println!("xsaves: {:?}", is_x86_feature_detected!("xsaves"));
94-
println!("xsavec: {:?}", is_x86_feature_detected!("xsavec"));
95108
}

0 commit comments

Comments
 (0)