Merge pull request #467 from fitzgen/update-cranelift-for-full-multi-value

Update cranelift for full multi-value
This commit is contained in:
Nick Fitzgerald
2019-11-11 16:17:54 -08:00
committed by GitHub
20 changed files with 102 additions and 69 deletions

View File

@@ -14,10 +14,10 @@ default-run = "wasmtime"
[dependencies] [dependencies]
# Enable all supported architectures by default. # Enable all supported architectures by default.
cranelift-codegen = { version = "0.49", features = ["enable-serde", "all-arch"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde", "all-arch"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
cranelift-native = "0.49" cranelift-native = "0.50.0"
wasmtime = { path = "crates/api" } wasmtime = { path = "crates/api" }
wasmtime-debug = { path = "crates/debug" } wasmtime-debug = { path = "crates/debug" }
wasmtime-environ = { path = "crates/environ" } wasmtime-environ = { path = "crates/environ" }

View File

@@ -160,34 +160,18 @@ fn write_testsuite_tests(
/// Ignore tests that aren't supported yet. /// Ignore tests that aren't supported yet.
fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool { fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
let is_multi_value = testsuite.ends_with("multi_value");
match strategy { match strategy {
#[cfg(feature = "lightbeam")] #[cfg(feature = "lightbeam")]
"Lightbeam" => match (testsuite, testname) { "Lightbeam" => match (testsuite, testname) {
(_, _) if testname.starts_with("simd") => return true, (_, _) if testname.starts_with("simd") => return true,
(_, _) if is_multi_value => return true, (_, _) if testsuite.ends_with("multi_value") => return true,
_ => (), _ => (),
}, },
"Cranelift" => match (testsuite, testname) { "Cranelift" => match (testsuite, testname) {
// We don't currently support more return values than available
// registers, and this contains a function with many, many more
// return values than that.
(_, "func") if is_multi_value => return true,
_ => {} _ => {}
}, },
_ => panic!("unrecognized strategy"), _ => panic!("unrecognized strategy"),
} }
if cfg!(windows) {
return match (testsuite, testname) {
// Currently, our multi-value support only works with however many
// extra return registers we have available, and windows' fastcall
// ABI only has a single return register, so we need to wait on full
// multi-value support in Cranelift.
(_, _) if is_multi_value => true,
(_, _) => false,
};
}
false false
} }

View File

@@ -13,11 +13,11 @@ name = "wasmtime_api"
crate-type = ["lib", "staticlib", "cdylib"] crate-type = ["lib", "staticlib", "cdylib"]
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-native = "0.49" cranelift-native = "0.50.0"
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
cranelift-frontend = "0.49" cranelift-frontend = "0.50.0"
wasmtime-runtime = { path = "../runtime" } wasmtime-runtime = { path = "../runtime" }
wasmtime-environ = { path = "../environ" } wasmtime-environ = { path = "../environ" }
wasmtime-jit = { path = "../jit" } wasmtime-jit = { path = "../jit" }

View File

@@ -51,19 +51,22 @@ fn main() -> Result<()> {
.context("Error instantiating module!")?, .context("Error instantiating module!")?,
); );
// Extract export. // Extract exports.
println!("Extracting export..."); println!("Extracting export...");
let exports = Ref::map(instance.borrow(), |instance| instance.exports()); let exports = Ref::map(instance.borrow(), |instance| instance.exports());
ensure!(!exports.is_empty(), "Error accessing exports!"); ensure!(!exports.is_empty(), "Error accessing exports!");
let run_func = exports[0].func().context("Error accessing exports!")?; let g = exports[0].func().context("> Error accessing export $g!")?;
let round_trip_many = exports[1]
.func()
.context("> Error accessing export $round_trip_many")?;
// Call. // Call `$g`.
println!("Calling export..."); println!("Calling export \"g\"...");
let args = vec![Val::I32(1), Val::I64(3)]; let args = vec![Val::I32(1), Val::I64(3)];
let results = run_func let results = g
.borrow() .borrow()
.call(&args) .call(&args)
.map_err(|e| format_err!("> Error calling function: {:?}", e))?; .map_err(|e| format_err!("> Error calling g! {:?}", e))?;
println!("Printing result..."); println!("Printing result...");
println!("> {} {}", results[0].i64(), results[1].i32()); println!("> {} {}", results[0].i64(), results[1].i32());
@@ -71,6 +74,38 @@ fn main() -> Result<()> {
debug_assert_eq!(results[0].i64(), 4); debug_assert_eq!(results[0].i64(), 4);
debug_assert_eq!(results[1].i32(), 2); debug_assert_eq!(results[1].i32(), 2);
// Call `$round_trip_many`.
println!("Calling export \"round_trip_many\"...");
let args = vec![
Val::I64(0),
Val::I64(1),
Val::I64(2),
Val::I64(3),
Val::I64(4),
Val::I64(5),
Val::I64(6),
Val::I64(7),
Val::I64(8),
Val::I64(9),
];
let results = round_trip_many
.borrow()
.call(&args)
.map_err(|e| format_err!("> Error calling round_trip_many! {:?}", e))?;
println!("Printing result...");
print!(">");
for r in results.iter() {
print!(" {}", r.i64());
}
println!();
debug_assert_eq!(results.len(), 10);
debug_assert!(args
.iter()
.zip(results.iter())
.all(|(a, r)| a.i64() == r.i64()));
// Shut down. // Shut down.
println!("Shutting down..."); println!("Shutting down...");
drop(store); drop(store);

Binary file not shown.

View File

@@ -4,4 +4,19 @@
(func $g (export "g") (param i32 i64) (result i64 i32) (func $g (export "g") (param i32 i64) (result i64 i32)
(call $f (local.get 0) (local.get 1)) (call $f (local.get 0) (local.get 1))
) )
(func $round_trip_many
(export "round_trip_many")
(param i64 i64 i64 i64 i64 i64 i64 i64 i64 i64)
(result i64 i64 i64 i64 i64 i64 i64 i64 i64 i64)
local.get 0
local.get 1
local.get 2
local.get 3
local.get 4
local.get 5
local.get 6
local.get 7
local.get 8
local.get 9)
) )

View File

@@ -32,7 +32,6 @@ fn test_run_memory_example() {
run_example("memory"); run_example("memory");
} }
#[cfg(not(target_os = "windows"))]
#[test] #[test]
fn test_run_multi_example() { fn test_run_multi_example() {
run_example("multi"); run_example("multi");

View File

@@ -14,9 +14,9 @@ edition = "2018"
[dependencies] [dependencies]
gimli = "0.19.0" gimli = "0.19.0"
wasmparser = "0.39.2" wasmparser = "0.39.2"
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
faerie = "0.12.0" faerie = "0.12.0"
wasmtime-environ = { path = "../environ", default-features = false } wasmtime-environ = { path = "../environ", default-features = false }
target-lexicon = { version = "0.9.0", default-features = false } target-lexicon = { version = "0.9.0", default-features = false }

View File

@@ -12,9 +12,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
lightbeam = { path = "../lightbeam", optional = true } lightbeam = { path = "../lightbeam", optional = true }
indexmap = "1.0.2" indexmap = "1.0.2"
rayon = "1.2" rayon = "1.2"
@@ -44,7 +44,7 @@ tempfile = "3"
target-lexicon = { version = "0.9.0", default-features = false } target-lexicon = { version = "0.9.0", default-features = false }
pretty_env_logger = "0.3.0" pretty_env_logger = "0.3.0"
rand = { version = "0.7.0", features = ["small_rng"] } rand = { version = "0.7.0", features = ["small_rng"] }
cranelift-codegen = { version = "0.49", features = ["enable-serde", "all-arch"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde", "all-arch"] }
filetime = "0.2.7" filetime = "0.2.7"
[features] [features]

View File

@@ -12,7 +12,7 @@ edition = "2018"
[dependencies] [dependencies]
anyhow = "1.0.19" anyhow = "1.0.19"
cranelift-codegen = { version = "0.49", default-features = false } cranelift-codegen = { version = "0.50.0", default-features = false }
walrus = "0.13" walrus = "0.13"
wasmparser = { version = "0.39.2", default-features = false } wasmparser = { version = "0.39.2", default-features = false }
wasm-webidl-bindings = "0.6" wasm-webidl-bindings = "0.6"

View File

@@ -11,10 +11,10 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
cranelift-frontend = "0.49" cranelift-frontend = "0.50.0"
wasmtime-environ = { path = "../environ", default-features = false } wasmtime-environ = { path = "../environ", default-features = false }
wasmtime-runtime = { path = "../runtime", default-features = false } wasmtime-runtime = { path = "../runtime", default-features = false }
wasmtime-debug = { path = "../debug", default-features = false } wasmtime-debug = { path = "../debug", default-features = false }

View File

@@ -20,7 +20,7 @@ memoffset = "0.5.1"
itertools = "0.8" itertools = "0.8"
capstone = "0.6.0" capstone = "0.6.0"
thiserror = "1.0.4" thiserror = "1.0.4"
cranelift-codegen = "0.49" cranelift-codegen = "0.50.0"
multi_mut = "0.1" multi_mut = "0.1"
either = "1.5" either = "1.5"
typemap = "0.3" typemap = "0.3"

View File

@@ -15,11 +15,11 @@ name = "_wasmtime"
crate-type = ["cdylib"] crate-type = ["cdylib"]
[dependencies] [dependencies]
cranelift-codegen = "0.49" cranelift-codegen = "0.50.0"
cranelift-native = "0.49" cranelift-native = "0.50.0"
cranelift-entity = "0.49" cranelift-entity = "0.50.0"
cranelift-wasm = "0.49" cranelift-wasm = "0.50.0"
cranelift-frontend = "0.49" cranelift-frontend = "0.50.0"
wasmtime-environ = { path = "../../environ" } wasmtime-environ = { path = "../../environ" }
wasmtime-interface-types = { path = "../../interface-types" } wasmtime-interface-types = { path = "../../interface-types" }
wasmtime-jit = { path = "../../jit" } wasmtime-jit = { path = "../../jit" }

View File

@@ -15,8 +15,8 @@ test = false
doctest = false doctest = false
[dependencies] [dependencies]
cranelift-codegen = "0.49" cranelift-codegen = "0.50.0"
cranelift-native = "0.49" cranelift-native = "0.50.0"
wasmtime-interface-types = { path = "../../interface-types" } wasmtime-interface-types = { path = "../../interface-types" }
wasmtime-jit = { path = "../../jit" } wasmtime-jit = { path = "../../jit" }
wasmtime-rust-macro = { path = "./macro" } wasmtime-rust-macro = { path = "./macro" }

View File

@@ -11,9 +11,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
wasmtime-environ = { path = "../environ" } wasmtime-environ = { path = "../environ" }
faerie = "0.12.0" faerie = "0.12.0"
more-asserts = "0.2.1" more-asserts = "0.2.1"

View File

@@ -11,9 +11,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
wasmtime-environ = { path = "../environ", default-features = false } wasmtime-environ = { path = "../environ", default-features = false }
region = "2.0.0" region = "2.0.0"
lazy_static = "1.2.0" lazy_static = "1.2.0"

View File

@@ -14,9 +14,9 @@ edition = "2018"
wasmtime-runtime = { path = "../runtime" } wasmtime-runtime = { path = "../runtime" }
wasmtime-environ = { path = "../environ" } wasmtime-environ = { path = "../environ" }
wasmtime-jit = { path = "../jit" } wasmtime-jit = { path = "../jit" }
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
target-lexicon = "0.9.0" target-lexicon = "0.9.0"
log = { version = "0.4.8", default-features = false } log = { version = "0.4.8", default-features = false }
libc = "0.2.60" libc = "0.2.60"

View File

@@ -42,7 +42,7 @@ wasmtime-environ = { path = "../environ" }
wasmtime-jit = { path = "../jit" } wasmtime-jit = { path = "../jit" }
wasmtime-wasi = { path = "../wasi" } wasmtime-wasi = { path = "../wasi" }
wasmtime = { path = "../api" } wasmtime = { path = "../api" }
cranelift-codegen = "0.49.0" cranelift-codegen = "0.50.0"
target-lexicon = "0.9.0" target-lexicon = "0.9.0"
pretty_env_logger = "0.3.0" pretty_env_logger = "0.3.0"
tempfile = "3.1.0" tempfile = "3.1.0"

View File

@@ -15,9 +15,9 @@ wasmtime-runtime = { path = "../runtime" }
wasmtime-environ = { path = "../environ" } wasmtime-environ = { path = "../environ" }
wasmtime-jit = { path = "../jit" } wasmtime-jit = { path = "../jit" }
wasi-common = { path = "../wasi-common" } wasi-common = { path = "../wasi-common" }
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
target-lexicon = "0.9.0" target-lexicon = "0.9.0"
log = { version = "0.4.8", default-features = false } log = { version = "0.4.8", default-features = false }

View File

@@ -11,9 +11,9 @@ readme = "README.md"
edition = "2018" edition = "2018"
[dependencies] [dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] } cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] } cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] } cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
wasmtime-jit = { path = "../jit" } wasmtime-jit = { path = "../jit" }
wasmtime-runtime = { path = "../runtime" } wasmtime-runtime = { path = "../runtime" }
wasmtime-environ = { path = "../environ" } wasmtime-environ = { path = "../environ" }