Merge pull request #467 from fitzgen/update-cranelift-for-full-multi-value
Update cranelift for full multi-value
This commit is contained in:
@@ -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" }
|
||||
|
||||
18
build.rs
18
build.rs
@@ -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
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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.
@@ -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)
|
||||
)
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
||||
@@ -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" }
|
||||
|
||||
Reference in New Issue
Block a user