-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Updated the list of white-listed target features for x86 #78361
Changes from 3 commits
9feb567
cd95e93
3daa93f
72b83af
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -54,42 +54,62 @@ fn powerpc64_linux() { | |
#[test] | ||
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] | ||
fn x86_all() { | ||
// the below is the set of features we can test at runtime, but don't actually | ||
// use to gate anything and are thus not part of the X86_ALLOWED_FEATURES list | ||
|
||
println!("abm: {:?}", is_x86_feature_detected!("abm")); // this is a synonym for lzcnt but we test it anyways | ||
println!("mmx: {:?}", is_x86_feature_detected!("mmx")); | ||
println!("tsc: {:?}", is_x86_feature_detected!("tsc")); | ||
|
||
// the below is in alphabetical order and matches | ||
// the order of X86_ALLOWED_FEATURES in rustc_codegen_ssa's target_features.rs | ||
|
||
println!("adx: {:?}", is_x86_feature_detected!("adx")); | ||
println!("aes: {:?}", is_x86_feature_detected!("aes")); | ||
println!("pcmulqdq: {:?}", is_x86_feature_detected!("pclmulqdq")); | ||
println!("avx: {:?}", is_x86_feature_detected!("avx")); | ||
println!("avx2: {:?}", is_x86_feature_detected!("avx2")); | ||
println!("avx512bf16: {:?}", is_x86_feature_detected!("avx512bf16")); | ||
println!("avx512bitalg: {:?}", is_x86_feature_detected!("avx512bitalg")); | ||
println!("avx512bw: {:?}", is_x86_feature_detected!("avx512bw")); | ||
println!("avx512cd: {:?}", is_x86_feature_detected!("avx512cd")); | ||
println!("avx512dq: {:?}", is_x86_feature_detected!("avx512dq")); | ||
println!("avx512er: {:?}", is_x86_feature_detected!("avx512er")); | ||
println!("avx512f: {:?}", is_x86_feature_detected!("avx512f")); | ||
println!("avx512gfni: {:?}", is_x86_feature_detected!("avx512gfni")); | ||
println!("avx512ifma: {:?}", is_x86_feature_detected!("avx512ifma")); | ||
println!("avx512pf: {:?}", is_x86_feature_detected!("avx512pf")); | ||
println!("avx512vaes: {:?}", is_x86_feature_detected!("avx512vaes")); | ||
println!("avx512vbmi: {:?}", is_x86_feature_detected!("avx512vbmi")); | ||
println!("avx512vbmi2: {:?}", is_x86_feature_detected!("avx512vbmi2")); | ||
println!("avx512vl: {:?}", is_x86_feature_detected!("avx512vl")); | ||
println!("avx512vnni: {:?}", is_x86_feature_detected!("avx512vnni")); | ||
println!("avx512vp2intersect: {:?}", is_x86_feature_detected!("avx512vp2intersect")); | ||
println!("avx512vpclmulqdq: {:?}", is_x86_feature_detected!("avx512vpclmulqdq")); | ||
println!("avx512vpopcntdq: {:?}", is_x86_feature_detected!("avx512vpopcntdq")); | ||
println!("bmi1: {:?}", is_x86_feature_detected!("bmi1")); | ||
println!("bmi2: {:?}", is_x86_feature_detected!("bmi2")); | ||
println!("cmpxchg16b: {:?}", is_x86_feature_detected!("cmpxchg16b")); | ||
println!("f16c: {:?}", is_x86_feature_detected!("f16c")); | ||
println!("fma: {:?}", is_x86_feature_detected!("fma")); | ||
println!("fxsr: {:?}", is_x86_feature_detected!("fxsr")); | ||
println!("lzcnt: {:?}", is_x86_feature_detected!("lzcnt")); | ||
//println!("movbe: {:?}", is_x86_feature_detected!("movbe")); // movbe is unsupported as a target feature | ||
println!("pclmulqdq: {:?}", is_x86_feature_detected!("pclmulqdq")); | ||
println!("popcnt: {:?}", is_x86_feature_detected!("popcnt")); | ||
println!("rdrand: {:?}", is_x86_feature_detected!("rdrand")); | ||
println!("rdseed: {:?}", is_x86_feature_detected!("rdseed")); | ||
println!("tsc: {:?}", is_x86_feature_detected!("tsc")); | ||
println!("mmx: {:?}", is_x86_feature_detected!("mmx")); | ||
Comment on lines
-61
to
-62
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is not intended that MMX feature detection be removed from Rust, in spite of the fact we don't do anything with it. The detection of capabilities and emission of such code are two entirely different concerns. Likewise it is not clear why tsc is being removed here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This removal (as well as the removal of the test for the |
||
println!("rtm: {:?}", is_x86_feature_detected!("rtm")); | ||
println!("sha: {:?}", is_x86_feature_detected!("sha")); | ||
println!("sse: {:?}", is_x86_feature_detected!("sse")); | ||
println!("sse2: {:?}", is_x86_feature_detected!("sse2")); | ||
println!("sse3: {:?}", is_x86_feature_detected!("sse3")); | ||
println!("ssse3: {:?}", is_x86_feature_detected!("ssse3")); | ||
println!("sse4.1: {:?}", is_x86_feature_detected!("sse4.1")); | ||
println!("sse4.2: {:?}", is_x86_feature_detected!("sse4.2")); | ||
println!("sse4a: {:?}", is_x86_feature_detected!("sse4a")); | ||
println!("sha: {:?}", is_x86_feature_detected!("sha")); | ||
println!("avx: {:?}", is_x86_feature_detected!("avx")); | ||
println!("avx2: {:?}", is_x86_feature_detected!("avx2")); | ||
println!("avx512f {:?}", is_x86_feature_detected!("avx512f")); | ||
println!("avx512cd {:?}", is_x86_feature_detected!("avx512cd")); | ||
println!("avx512er {:?}", is_x86_feature_detected!("avx512er")); | ||
println!("avx512pf {:?}", is_x86_feature_detected!("avx512pf")); | ||
println!("avx512bw {:?}", is_x86_feature_detected!("avx512bw")); | ||
println!("avx512dq {:?}", is_x86_feature_detected!("avx512dq")); | ||
println!("avx512vl {:?}", is_x86_feature_detected!("avx512vl")); | ||
println!("avx512_ifma {:?}", is_x86_feature_detected!("avx512ifma")); | ||
println!("avx512_vbmi {:?}", is_x86_feature_detected!("avx512vbmi")); | ||
println!("avx512_vpopcntdq {:?}", is_x86_feature_detected!("avx512vpopcntdq")); | ||
println!("fma: {:?}", is_x86_feature_detected!("fma")); | ||
println!("bmi1: {:?}", is_x86_feature_detected!("bmi1")); | ||
println!("bmi2: {:?}", is_x86_feature_detected!("bmi2")); | ||
println!("abm: {:?}", is_x86_feature_detected!("abm")); | ||
println!("lzcnt: {:?}", is_x86_feature_detected!("lzcnt")); | ||
println!("ssse3: {:?}", is_x86_feature_detected!("ssse3")); | ||
println!("tbm: {:?}", is_x86_feature_detected!("tbm")); | ||
println!("popcnt: {:?}", is_x86_feature_detected!("popcnt")); | ||
println!("fxsr: {:?}", is_x86_feature_detected!("fxsr")); | ||
println!("xsave: {:?}", is_x86_feature_detected!("xsave")); | ||
println!("xsavec: {:?}", is_x86_feature_detected!("xsavec")); | ||
println!("xsaveopt: {:?}", is_x86_feature_detected!("xsaveopt")); | ||
println!("xsaves: {:?}", is_x86_feature_detected!("xsaves")); | ||
println!("xsavec: {:?}", is_x86_feature_detected!("xsavec")); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You should remind people to check out the submodule in our repo and its current commit, e.g. currently https://github.com/rust-lang/llvm-project/tree/ee1617457899ef2eb55dcf7ee2758b4340b6533f
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added that as well as a note that the git submodule isn't the whole truth but instead external supported LLVM versions need to also be considered - the internal one seems to be LLVM 11 (ish)