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]
# Enable all supported architectures by default.
cranelift-codegen = { version = "0.49", features = ["enable-serde", "all-arch"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] }
cranelift-native = "0.49"
cranelift-codegen = { version = "0.50.0", features = ["enable-serde", "all-arch"] }
cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
cranelift-native = "0.50.0"
wasmtime = { path = "crates/api" }
wasmtime-debug = { path = "crates/debug" }
wasmtime-environ = { path = "crates/environ" }

View File

@@ -160,34 +160,18 @@ fn write_testsuite_tests(
/// Ignore tests that aren't supported yet.
fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
let is_multi_value = testsuite.ends_with("multi_value");
match strategy {
#[cfg(feature = "lightbeam")]
"Lightbeam" => match (testsuite, testname) {
(_, _) 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) {
// 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"),
}
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
}

View File

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

View File

@@ -51,19 +51,22 @@ fn main() -> Result<()> {
.context("Error instantiating module!")?,
);
// Extract export.
// Extract exports.
println!("Extracting export...");
let exports = Ref::map(instance.borrow(), |instance| instance.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.
println!("Calling export...");
// Call `$g`.
println!("Calling export \"g\"...");
let args = vec![Val::I32(1), Val::I64(3)];
let results = run_func
let results = g
.borrow()
.call(&args)
.map_err(|e| format_err!("> Error calling function: {:?}", e))?;
.map_err(|e| format_err!("> Error calling g! {:?}", e))?;
println!("Printing result...");
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[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.
println!("Shutting down...");
drop(store);

Binary file not shown.

View File

@@ -4,4 +4,19 @@
(func $g (export "g") (param i32 i64) (result i64 i32)
(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");
}
#[cfg(not(target_os = "windows"))]
#[test]
fn test_run_multi_example() {
run_example("multi");

View File

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

View File

@@ -12,9 +12,9 @@ readme = "README.md"
edition = "2018"
[dependencies]
cranelift-codegen = { version = "0.49", features = ["enable-serde"] }
cranelift-entity = { version = "0.49", features = ["enable-serde"] }
cranelift-wasm = { version = "0.49", features = ["enable-serde"] }
cranelift-codegen = { version = "0.50.0", features = ["enable-serde"] }
cranelift-entity = { version = "0.50.0", features = ["enable-serde"] }
cranelift-wasm = { version = "0.50.0", features = ["enable-serde"] }
lightbeam = { path = "../lightbeam", optional = true }
indexmap = "1.0.2"
rayon = "1.2"
@@ -44,7 +44,7 @@ tempfile = "3"
target-lexicon = { version = "0.9.0", default-features = false }
pretty_env_logger = "0.3.0"
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"
[features]

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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