summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-04-23 17:13:25 +0200
committerGitHub <noreply@github.com>2021-04-23 17:13:25 +0200
commit31b2963da98595a54a7233720f526c1096819109 (patch)
tree53dc781be5db82663b758147f33bc6f31bd4b0de
parentcdc0aa188e72ee100bd61943cf7c81ac28be9a81 (diff)
parentc4f50fb06ff22e2f566e7eb8dc6b7efc2d91811a (diff)
downloadrust-31b2963da98595a54a7233720f526c1096819109.tar.gz
Merge pull request #1163 from mominul/target_cpu
Support -Ctarget-cpu
-rw-r--r--Cargo.lock1
-rw-r--r--Cargo.toml2
-rw-r--r--src/lib.rs26
3 files changed, 25 insertions, 4 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 16c2732eac9..e6792def567 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -306,6 +306,7 @@ dependencies = [
"cranelift-frontend",
"cranelift-jit",
"cranelift-module",
+ "cranelift-native",
"cranelift-object",
"gimli",
"indexmap",
diff --git a/Cargo.toml b/Cargo.toml
index 248540cf1a3..2789207c655 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,6 +12,7 @@ crate-type = ["dylib"]
cranelift-codegen = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main", features = ["unwind"] }
cranelift-frontend = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main" }
cranelift-module = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main" }
+cranelift-native = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main" }
cranelift-jit = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main", optional = true }
cranelift-object = { git = "https://github.com/bytecodealliance/wasmtime/", branch = "main" }
target-lexicon = "0.12.0"
@@ -28,6 +29,7 @@ smallvec = "1.6.1"
#cranelift-codegen = { path = "../wasmtime/cranelift/codegen" }
#cranelift-frontend = { path = "../wasmtime/cranelift/frontend" }
#cranelift-module = { path = "../wasmtime/cranelift/module" }
+#cranelift-native = { path = ../wasmtime/cranelift/native" }
#cranelift-jit = { path = "../wasmtime/cranelift/jit" }
#cranelift-object = { path = "../wasmtime/cranelift/object" }
diff --git a/src/lib.rs b/src/lib.rs
index 5a75b9be0cb..32f40395702 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -272,10 +272,28 @@ fn build_isa(sess: &Session, backend_config: &BackendConfig) -> Box<dyn isa::Tar
let flags = settings::Flags::new(flags_builder);
let variant = cranelift_codegen::isa::BackendVariant::MachInst;
- let mut isa_builder = cranelift_codegen::isa::lookup_variant(target_triple, variant).unwrap();
- // Don't use "haswell", as it implies `has_lzcnt`.macOS CI is still at Ivy Bridge EP, so `lzcnt`
- // is interpreted as `bsr`.
- isa_builder.enable("nehalem").unwrap();
+
+ let isa_builder = match sess.opts.cg.target_cpu.as_deref() {
+ Some("native") => {
+ let builder = cranelift_native::builder_with_options(variant, true).unwrap();
+ builder
+ }
+ Some(value) => {
+ let mut builder = cranelift_codegen::isa::lookup_variant(target_triple, variant).unwrap();
+ if let Err(_) = builder.enable(value) {
+ sess.fatal("The specified target cpu isn't currently supported by Cranelift.");
+ }
+ builder
+ }
+ None => {
+ let mut builder = cranelift_codegen::isa::lookup_variant(target_triple, variant).unwrap();
+ // Don't use "haswell" as the default, as it implies `has_lzcnt`.
+ // macOS CI is still at Ivy Bridge EP, so `lzcnt` is interpreted as `bsr`.
+ builder.enable("nehalem").unwrap();
+ builder
+ }
+ };
+
isa_builder.finish(flags)
}