Make the feature whitelists constants

This simplifies the code a bit and makes the types nicer, too.
This commit is contained in:
Andrea Canciani 2016-04-20 09:08:25 +02:00
parent 1ad85610e4
commit deaa2fe753
1 changed files with 25 additions and 25 deletions

View File

@ -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.).
///
@ -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");