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