Skip to content

Commit

Permalink
Make the feature whitelists constants
Browse files Browse the repository at this point in the history
This simplifies the code a bit and makes the types nicer, too.
  • Loading branch information
ranma42 committed Apr 20, 2016
1 parent 1ad8561 commit deaa2fe
Showing 1 changed file with 25 additions and 25 deletions.
50 changes: 25 additions & 25 deletions src/librustc_driver/target_features.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,28 @@ use syntax::parse::token::InternedString;
use syntax::parse::token::intern_and_get_ident as intern;
use libc::c_char;

// WARNING: the features must be known to LLVM or the feature
// detection code will walk past the end of the feature array,
// leading to crashes.

const ARM_WHITELIST: &'static [&'static str] = &[
"neon\0",
"vfp2\0",
"vfp3\0",
"vfp4\0",
];

const X86_WHITELIST: &'static [&'static str] = &[
"avx\0",
"avx2\0",
"sse\0",
"sse2\0",
"sse3\0",
"sse4.1\0",
"sse4.2\0",
"ssse3\0",
];

/// Add `target_feature = "..."` cfgs for a variety of platform
/// specific features (SSE, NEON etc.).
///
Expand All @@ -24,32 +46,10 @@ use libc::c_char;
pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session) {
let target_machine = create_target_machine(sess);

// WARNING: the features must be known to LLVM or the feature
// detection code will walk past the end of the feature array,
// leading to crashes.

let arm_whitelist = [
"neon\0",
"vfp2\0",
"vfp3\0",
"vfp4\0",
];

let x86_whitelist = [
"avx\0",
"avx2\0",
"sse\0",
"sse2\0",
"sse3\0",
"sse4.1\0",
"sse4.2\0",
"ssse3\0",
];

let whitelist = match &*sess.target.target.arch {
"arm" => &arm_whitelist[..],
"x86" | "x86_64" => &x86_whitelist[..],
_ => &[][..],
"arm" => ARM_WHITELIST,
"x86" | "x86_64" => X86_WHITELIST,
_ => &[],
};

let tf = InternedString::new("target_feature");
Expand Down

0 comments on commit deaa2fe

Please sign in to comment.