From cebcb4c9276b9481106684e29de8f888287cbdf7 Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Fri, 15 Nov 2019 14:55:53 -0800 Subject: [PATCH 1/9] Prepare for 0.10.2 release --- CHANGELOG.md | 2 + Cargo.lock | 146 ++++++++++++------------- Cargo.toml | 2 +- lib/clif-backend/Cargo.toml | 6 +- lib/dev-utils/Cargo.toml | 2 +- lib/emscripten-tests/Cargo.toml | 14 +-- lib/emscripten/Cargo.toml | 4 +- lib/llvm-backend/Cargo.toml | 4 +- lib/middleware-common-tests/Cargo.toml | 12 +- lib/middleware-common/Cargo.toml | 4 +- lib/runtime-c-api/Cargo.toml | 8 +- lib/runtime-core-tests/Cargo.toml | 10 +- lib/runtime-core/Cargo.toml | 2 +- lib/runtime/Cargo.toml | 8 +- lib/singlepass-backend/Cargo.toml | 4 +- lib/spectests/Cargo.toml | 10 +- lib/wasi-tests/Cargo.toml | 16 +-- lib/wasi/Cargo.toml | 4 +- lib/win-exception-handler/Cargo.toml | 4 +- scripts/update_version_numbers.sh | 4 +- src/installer/wasmer.iss | 2 +- 21 files changed, 135 insertions(+), 133 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41a4c2691..50dfff45a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## **[Unreleased]** +## 0.10.2 - 2019-11-15 + - [#968](https://github.com/wasmerio/wasmer/pull/968) Added `--invoke` option to the command - [#960](https://github.com/wasmerio/wasmer/pull/960) Fix `runtime-c-api` header files when compiled by clang. - [#925](https://github.com/wasmerio/wasmer/pull/925) Host functions can be closures with a captured environment. diff --git a/Cargo.lock b/Cargo.lock index 52ff96ffc..24fa874a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -720,8 +720,8 @@ version = "0.1.0" dependencies = [ "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime 0.10.1", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime 0.10.2", + "wasmer-runtime-core 0.10.2", ] [[package]] @@ -1333,7 +1333,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wasmer" -version = "0.10.1" +version = "0.10.2" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "errno 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1343,24 +1343,24 @@ dependencies = [ "structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "typetag 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-dev-utils 0.10.1", - "wasmer-emscripten 0.10.1", - "wasmer-emscripten-tests 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-dev-utils 0.10.2", + "wasmer-emscripten 0.10.2", + "wasmer-emscripten-tests 0.10.2", "wasmer-kernel-loader 0.1.0", - "wasmer-llvm-backend 0.10.1", - "wasmer-middleware-common 0.10.1", - "wasmer-middleware-common-tests 0.10.1", - "wasmer-runtime 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", - "wasmer-wasi 0.10.1", - "wasmer-wasi-tests 0.10.1", + "wasmer-llvm-backend 0.10.2", + "wasmer-middleware-common 0.10.2", + "wasmer-middleware-common-tests 0.10.2", + "wasmer-runtime 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", + "wasmer-wasi 0.10.2", + "wasmer-wasi-tests 0.10.2", ] [[package]] name = "wasmer-clif-backend" -version = "0.10.1" +version = "0.10.2" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "cranelift-codegen 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1376,8 +1376,8 @@ dependencies = [ "target-lexicon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-fork-frontend 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", "wasmer-clif-fork-wasm 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", - "wasmer-win-exception-handler 0.10.1", + "wasmer-runtime-core 0.10.2", + "wasmer-win-exception-handler 0.10.2", "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1409,35 +1409,35 @@ dependencies = [ [[package]] name = "wasmer-dev-utils" -version = "0.10.1" +version = "0.10.2" dependencies = [ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasmer-emscripten" -version = "0.10.1" +version = "0.10.2" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", ] [[package]] name = "wasmer-emscripten-tests" -version = "0.10.1" +version = "0.10.2" dependencies = [ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-dev-utils 0.10.1", - "wasmer-emscripten 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-dev-utils 0.10.2", + "wasmer-emscripten 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", ] [[package]] @@ -1445,12 +1445,12 @@ name = "wasmer-kernel-loader" version = "0.1.0" dependencies = [ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", ] [[package]] name = "wasmer-llvm-backend" -version = "0.10.1" +version = "0.10.2" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "cc 1.0.46 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1464,60 +1464,60 @@ dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", "wasmparser 0.39.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasmer-middleware-common" -version = "0.10.1" +version = "0.10.2" dependencies = [ - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", ] [[package]] name = "wasmer-middleware-common-tests" -version = "0.10.1" +version = "0.10.2" dependencies = [ "criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-middleware-common 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-middleware-common 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", ] [[package]] name = "wasmer-runtime" -version = "0.10.1" +version = "0.10.2" dependencies = [ "criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", ] [[package]] name = "wasmer-runtime-c-api" -version = "0.10.1" +version = "0.10.2" dependencies = [ "cbindgen 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-wasi 0.10.1", + "wasmer-runtime 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-wasi 0.10.2", ] [[package]] name = "wasmer-runtime-core" -version = "0.10.1" +version = "0.10.2" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2b_simd 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1543,18 +1543,18 @@ dependencies = [ [[package]] name = "wasmer-runtime-core-tests" -version = "0.10.1" +version = "0.10.2" dependencies = [ "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", ] [[package]] name = "wasmer-singlepass-backend" -version = "0.10.1" +version = "0.10.2" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "dynasm 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1563,24 +1563,24 @@ dependencies = [ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", ] [[package]] name = "wasmer-spectests" -version = "0.10.1" +version = "0.10.2" dependencies = [ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "wabt 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", ] [[package]] name = "wasmer-wasi" -version = "0.10.1" +version = "0.10.2" dependencies = [ "bincode 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1591,31 +1591,31 @@ dependencies = [ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "typetag 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasmer-wasi-tests" -version = "0.10.1" +version = "0.10.2" dependencies = [ "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-clif-backend 0.10.1", - "wasmer-dev-utils 0.10.1", - "wasmer-llvm-backend 0.10.1", - "wasmer-runtime 0.10.1", - "wasmer-runtime-core 0.10.1", - "wasmer-singlepass-backend 0.10.1", - "wasmer-wasi 0.10.1", + "wasmer-clif-backend 0.10.2", + "wasmer-dev-utils 0.10.2", + "wasmer-llvm-backend 0.10.2", + "wasmer-runtime 0.10.2", + "wasmer-runtime-core 0.10.2", + "wasmer-singlepass-backend 0.10.2", + "wasmer-wasi 0.10.2", ] [[package]] name = "wasmer-win-exception-handler" -version = "0.10.1" +version = "0.10.2" dependencies = [ "cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", - "wasmer-runtime-core 0.10.1", + "wasmer-runtime-core 0.10.2", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/Cargo.toml b/Cargo.toml index 3d0c6b7ad..8724d91d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer" -version = "0.10.1" +version = "0.10.2" authors = ["The Wasmer Engineering Team "] edition = "2018" repository = "https://github.com/wasmerio/wasmer" diff --git a/lib/clif-backend/Cargo.toml b/lib/clif-backend/Cargo.toml index b38e40b82..e3d568974 100644 --- a/lib/clif-backend/Cargo.toml +++ b/lib/clif-backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-clif-backend" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime Cranelift compiler backend" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -11,7 +11,7 @@ edition = "2018" readme = "README.md" [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } cranelift-native = "0.44.0" cranelift-codegen = "0.44.0" cranelift-entity = "0.44.0" @@ -37,7 +37,7 @@ version = "0.0.7" [target.'cfg(windows)'.dependencies] winapi = { version = "0.3", features = ["errhandlingapi", "minwindef", "minwinbase", "winnt"] } -wasmer-win-exception-handler = { path = "../win-exception-handler", version = "0.10.1" } +wasmer-win-exception-handler = { path = "../win-exception-handler", version = "0.10.2" } [features] debug = ["wasmer-runtime-core/debug"] diff --git a/lib/dev-utils/Cargo.toml b/lib/dev-utils/Cargo.toml index 9dc98607a..45722b9b6 100644 --- a/lib/dev-utils/Cargo.toml +++ b/lib/dev-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-dev-utils" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime core library" license = "MIT" authors = ["The Wasmer Engineering Team "] diff --git a/lib/emscripten-tests/Cargo.toml b/lib/emscripten-tests/Cargo.toml index 8cb8248f4..49880090f 100644 --- a/lib/emscripten-tests/Cargo.toml +++ b/lib/emscripten-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-emscripten-tests" -version = "0.10.1" +version = "0.10.2" description = "Tests for our Emscripten implementation" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -9,15 +9,15 @@ publish = false build = "build/mod.rs" [dependencies] -wasmer-emscripten = { path = "../emscripten", version = "0.10.1" } -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } -wasmer-clif-backend = { path = "../clif-backend", version = "0.10.1" } -wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.1", optional = true } -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } +wasmer-emscripten = { path = "../emscripten", version = "0.10.2" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } +wasmer-clif-backend = { path = "../clif-backend", version = "0.10.2" } +wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.2", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } [dev-dependencies] wabt = "0.9.1" -wasmer-dev-utils = { path = "../dev-utils", version = "0.10.1"} +wasmer-dev-utils = { path = "../dev-utils", version = "0.10.2"} [build-dependencies] glob = "0.3" diff --git a/lib/emscripten/Cargo.toml b/lib/emscripten/Cargo.toml index 3db03310f..27606a153 100644 --- a/lib/emscripten/Cargo.toml +++ b/lib/emscripten/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-emscripten" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime emscripten implementation library" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -14,7 +14,7 @@ byteorder = "1.3" lazy_static = "1.4" libc = "0.2.60" time = "0.1" -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } [target.'cfg(windows)'.dependencies] getrandom = "0.1" diff --git a/lib/llvm-backend/Cargo.toml b/lib/llvm-backend/Cargo.toml index a728a9cec..c3fe61811 100644 --- a/lib/llvm-backend/Cargo.toml +++ b/lib/llvm-backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-llvm-backend" -version = "0.10.1" +version = "0.10.2" license = "MIT" authors = ["The Wasmer Engineering Team "] repository = "https://github.com/wasmerio/wasmer" @@ -10,7 +10,7 @@ edition = "2018" readme = "README.md" [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } wasmparser = "0.39.1" smallvec = "0.6" goblin = "0.0.24" diff --git a/lib/middleware-common-tests/Cargo.toml b/lib/middleware-common-tests/Cargo.toml index c55a5a37a..5eb36d959 100644 --- a/lib/middleware-common-tests/Cargo.toml +++ b/lib/middleware-common-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-middleware-common-tests" -version = "0.10.1" +version = "0.10.2" authors = ["The Wasmer Engineering Team "] edition = "2018" repository = "https://github.com/wasmerio/wasmer" @@ -8,11 +8,11 @@ license = "MIT" publish = false [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } -wasmer-middleware-common = { path = "../middleware-common", version = "0.10.1" } -wasmer-clif-backend = { path = "../clif-backend", version = "0.10.1" } -wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.1", optional = true } -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } +wasmer-middleware-common = { path = "../middleware-common", version = "0.10.2" } +wasmer-clif-backend = { path = "../clif-backend", version = "0.10.2" } +wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.2", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } [features] clif = [] diff --git a/lib/middleware-common/Cargo.toml b/lib/middleware-common/Cargo.toml index 1c325183d..e151c7f3b 100644 --- a/lib/middleware-common/Cargo.toml +++ b/lib/middleware-common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-middleware-common" -version = "0.10.1" +version = "0.10.2" repository = "https://github.com/wasmerio/wasmer" description = "Wasmer runtime common middlewares" license = "MIT" @@ -10,4 +10,4 @@ categories = ["wasm"] edition = "2018" [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } diff --git a/lib/runtime-c-api/Cargo.toml b/lib/runtime-c-api/Cargo.toml index 90d97ff82..cae6cd744 100644 --- a/lib/runtime-c-api/Cargo.toml +++ b/lib/runtime-c-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-runtime-c-api" -version = "0.10.1" +version = "0.10.2" description = "Wasmer C API library" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -19,17 +19,17 @@ libc = "0.2.60" [dependencies.wasmer-runtime] default-features = false path = "../runtime" -version = "0.10.1" +version = "0.10.2" [dependencies.wasmer-runtime-core] default-features = false path = "../runtime-core" -version = "0.10.1" +version = "0.10.2" [dependencies.wasmer-wasi] default-features = false path = "../wasi" -version = "0.10.1" +version = "0.10.2" optional = true [features] diff --git a/lib/runtime-core-tests/Cargo.toml b/lib/runtime-core-tests/Cargo.toml index 73cbb03ce..0191d0e82 100644 --- a/lib/runtime-core-tests/Cargo.toml +++ b/lib/runtime-core-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-runtime-core-tests" -version = "0.10.1" +version = "0.10.2" description = "Tests for the Wasmer runtime core crate" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -9,10 +9,10 @@ publish = false [dependencies] wabt = "0.9.1" -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } -wasmer-clif-backend = { path = "../clif-backend", version = "0.10.1", optional = true } -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } -wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.1", optional = true } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } +wasmer-clif-backend = { path = "../clif-backend", version = "0.10.2", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } +wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.2", optional = true } [features] default = ["backend-cranelift"] diff --git a/lib/runtime-core/Cargo.toml b/lib/runtime-core/Cargo.toml index 8d89d9fa1..e269ad15a 100644 --- a/lib/runtime-core/Cargo.toml +++ b/lib/runtime-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-runtime-core" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime core library" license = "MIT" authors = ["The Wasmer Engineering Team "] diff --git a/lib/runtime/Cargo.toml b/lib/runtime/Cargo.toml index 8e272815a..902ea37ac 100644 --- a/lib/runtime/Cargo.toml +++ b/lib/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-runtime" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime library" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -11,17 +11,17 @@ edition = "2018" readme = "README.md" [dependencies] -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } lazy_static = "1.4" memmap = "0.7" [dependencies.wasmer-runtime-core] path = "../runtime-core" -version = "0.10.1" +version = "0.10.2" [dependencies.wasmer-clif-backend] path = "../clif-backend" -version = "0.10.1" +version = "0.10.2" optional = true [dev-dependencies] diff --git a/lib/singlepass-backend/Cargo.toml b/lib/singlepass-backend/Cargo.toml index 5c28ff5e1..c985546cc 100644 --- a/lib/singlepass-backend/Cargo.toml +++ b/lib/singlepass-backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-singlepass-backend" -version = "0.10.1" +version = "0.10.2" repository = "https://github.com/wasmerio/wasmer" description = "Wasmer runtime single pass compiler backend" license = "MIT" @@ -11,7 +11,7 @@ edition = "2018" readme = "README.md" [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } dynasm = "0.3.2" dynasmrt = "0.3.1" lazy_static = "1.4" diff --git a/lib/spectests/Cargo.toml b/lib/spectests/Cargo.toml index 82e5aca24..54c17ccc1 100644 --- a/lib/spectests/Cargo.toml +++ b/lib/spectests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-spectests" -version = "0.10.1" +version = "0.10.2" description = "Wasmer spectests library" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -9,10 +9,10 @@ edition = "2018" [dependencies] glob = "0.3" -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } -wasmer-clif-backend = { path = "../clif-backend", version = "0.10.1" } -wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.1", optional = true } -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } +wasmer-clif-backend = { path = "../clif-backend", version = "0.10.2" } +wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.2", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } [build-dependencies] wabt = "0.9.1" diff --git a/lib/wasi-tests/Cargo.toml b/lib/wasi-tests/Cargo.toml index 35aa31c0e..05544c7a3 100644 --- a/lib/wasi-tests/Cargo.toml +++ b/lib/wasi-tests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-wasi-tests" -version = "0.10.1" +version = "0.10.2" description = "Tests for our WASI implementation" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -9,20 +9,20 @@ publish = false build = "build/mod.rs" [dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } -wasmer-runtime = { path = "../runtime", version = "0.10.1" } -wasmer-wasi = { path = "../wasi", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } +wasmer-runtime = { path = "../runtime", version = "0.10.2" } +wasmer-wasi = { path = "../wasi", version = "0.10.2" } # hack to get tests to work -wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.1", optional = true } -wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.1", optional = true } +wasmer-singlepass-backend = { path = "../singlepass-backend", version = "0.10.2", optional = true } +wasmer-llvm-backend = { path = "../llvm-backend", version = "0.10.2", optional = true } [build-dependencies] glob = "0.3" [dev-dependencies] -wasmer-clif-backend = { path = "../clif-backend", version = "0.10.1" } -wasmer-dev-utils = { path = "../dev-utils", version = "0.10.1"} +wasmer-clif-backend = { path = "../clif-backend", version = "0.10.2" } +wasmer-dev-utils = { path = "../dev-utils", version = "0.10.2"} [features] clif = [] diff --git a/lib/wasi/Cargo.toml b/lib/wasi/Cargo.toml index 6341ffb54..ff0220aa4 100644 --- a/lib/wasi/Cargo.toml +++ b/lib/wasi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-wasi" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime WASI implementation library" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -19,7 +19,7 @@ getrandom = "0.1" time = "0.1" typetag = "0.1" serde = { version = "1", features = ["derive"] } -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } [target.'cfg(windows)'.dependencies] winapi = "0.3" diff --git a/lib/win-exception-handler/Cargo.toml b/lib/win-exception-handler/Cargo.toml index 4c0332e53..ef1cf619a 100644 --- a/lib/win-exception-handler/Cargo.toml +++ b/lib/win-exception-handler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "wasmer-win-exception-handler" -version = "0.10.1" +version = "0.10.2" description = "Wasmer runtime exception handling for Windows" license = "MIT" authors = ["The Wasmer Engineering Team "] @@ -8,7 +8,7 @@ repository = "https://github.com/wasmerio/wasmer" edition = "2018" [target.'cfg(windows)'.dependencies] -wasmer-runtime-core = { path = "../runtime-core", version = "0.10.1" } +wasmer-runtime-core = { path = "../runtime-core", version = "0.10.2" } winapi = { version = "0.3.8", features = ["winbase", "errhandlingapi", "minwindef", "minwinbase", "winnt"] } libc = "0.2.60" diff --git a/scripts/update_version_numbers.sh b/scripts/update_version_numbers.sh index 7a8585bfb..2ee5bb082 100755 --- a/scripts/update_version_numbers.sh +++ b/scripts/update_version_numbers.sh @@ -1,5 +1,5 @@ -PREVIOUS_VERSION='0.10.0' -NEXT_VERSION='0.10.1' +PREVIOUS_VERSION='0.10.1' +NEXT_VERSION='0.10.2' # quick hack fd Cargo.toml --exec sed -i '' "s/version = \"$PREVIOUS_VERSION\"/version = \"$NEXT_VERSION\"/" diff --git a/src/installer/wasmer.iss b/src/installer/wasmer.iss index 3279cd9f1..146680b05 100644 --- a/src/installer/wasmer.iss +++ b/src/installer/wasmer.iss @@ -1,6 +1,6 @@ [Setup] AppName=Wasmer -AppVersion=0.10.1 +AppVersion=0.10.2 DefaultDirName={pf}\Wasmer DefaultGroupName=Wasmer Compression=lzma2 From 7631aee4f4d2265e0c38d2f2a40ab991d2c5ded7 Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Fri, 15 Nov 2019 21:54:34 -0800 Subject: [PATCH 2/9] Add sign extension spec tests; add sign extension to singlepass --- lib/singlepass-backend/src/codegen_x64.rs | 125 +++++++++++++++++++++- lib/spectests/spectests/conversions.wast | 48 +++++++++ lib/spectests/tests/excludes.txt | 80 +++++++------- lib/spectests/tests/spectest.rs | 1 + src/bin/wasmer.rs | 1 + 5 files changed, 214 insertions(+), 41 deletions(-) diff --git a/lib/singlepass-backend/src/codegen_x64.rs b/lib/singlepass-backend/src/codegen_x64.rs index 7a71a289f..1b9e5e7dd 100644 --- a/lib/singlepass-backend/src/codegen_x64.rs +++ b/lib/singlepass-backend/src/codegen_x64.rs @@ -666,7 +666,11 @@ impl X64FunctionCode { a.emit_mov(Size::S64, src, Location::GPR(tmp_src)); src = Location::GPR(tmp_src); } - Location::Memory(_, _) | Location::GPR(_) => {} + Location::GPR(_) => { + a.emit_mov(Size::S64, src, Location::GPR(tmp_src)); + src = Location::GPR(tmp_src); + } + Location::Memory(_, _) => {} _ => unreachable!(), } @@ -2948,6 +2952,125 @@ impl FunctionCodeGenerator for X64FunctionCode { ret, ); } + Operator::I32Extend8S => { + let loc = + get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); + let ret = self.machine.acquire_locations( + a, + &[(WpType::I32, MachineValue::WasmStack(self.value_stack.len()))], + false, + )[0]; + self.value_stack.push(ret); + + let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); + a.emit_and(Size::S32, Location::Imm32(0xFF), Location::GPR(tmpg1)); + Self::emit_relaxed_zx_sx( + a, + &mut self.machine, + Assembler::emit_movsx, + Size::S8, + Location::GPR(tmpg1), + Size::S32, + ret, + ); + self.machine.release_temp_gpr(tmpg1); + } + Operator::I32Extend16S => { + let loc = + get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); + let ret = self.machine.acquire_locations( + a, + &[(WpType::I32, MachineValue::WasmStack(self.value_stack.len()))], + false, + )[0]; + self.value_stack.push(ret); + + let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); + a.emit_and(Size::S32, Location::Imm32(0xFFFF), Location::GPR(tmpg1)); + Self::emit_relaxed_zx_sx( + a, + &mut self.machine, + Assembler::emit_movsx, + Size::S16, + Location::GPR(tmpg1), + Size::S32, + ret, + ); + self.machine.release_temp_gpr(tmpg1); + } + Operator::I64Extend8S => { + let loc = + get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); + let ret = self.machine.acquire_locations( + a, + &[(WpType::I64, MachineValue::WasmStack(self.value_stack.len()))], + false, + )[0]; + self.value_stack.push(ret); + + let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); + a.emit_and(Size::S32, Location::Imm32(0xFF), Location::GPR(tmpg1)); + Self::emit_relaxed_zx_sx( + a, + &mut self.machine, + Assembler::emit_movsx, + Size::S8, + Location::GPR(tmpg1), + Size::S64, + ret, + ); + self.machine.release_temp_gpr(tmpg1); + } + Operator::I64Extend16S => { + let loc = + get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); + let ret = self.machine.acquire_locations( + a, + &[(WpType::I64, MachineValue::WasmStack(self.value_stack.len()))], + false, + )[0]; + self.value_stack.push(ret); + + let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); + a.emit_and(Size::S32, Location::Imm32(0xFFFF), Location::GPR(tmpg1)); + Self::emit_relaxed_zx_sx( + a, + &mut self.machine, + Assembler::emit_movsx, + Size::S16, + Location::GPR(tmpg1), + Size::S64, + ret, + ); + self.machine.release_temp_gpr(tmpg1); + } + Operator::I64Extend32S => { + let loc = + get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); + let ret = self.machine.acquire_locations( + a, + &[(WpType::I64, MachineValue::WasmStack(self.value_stack.len()))], + false, + )[0]; + self.value_stack.push(ret); + + let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); + Self::emit_relaxed_zx_sx( + a, + &mut self.machine, + Assembler::emit_movsx, + Size::S32, + Location::GPR(tmpg1), + Size::S64, + ret, + ); + self.machine.release_temp_gpr(tmpg1); + } Operator::I32WrapI64 => { let loc = get_location_released(a, &mut self.machine, self.value_stack.pop().unwrap()); diff --git a/lib/spectests/spectests/conversions.wast b/lib/spectests/spectests/conversions.wast index c0ae54a53..8022a1a60 100644 --- a/lib/spectests/spectests/conversions.wast +++ b/lib/spectests/spectests/conversions.wast @@ -1,6 +1,11 @@ (module (func (export "i64.extend_i32_s") (param $x i32) (result i64) (i64.extend_i32_s (local.get $x))) (func (export "i64.extend_i32_u") (param $x i32) (result i64) (i64.extend_i32_u (local.get $x))) + (func (export "i64.extend32_s") (param $x i64) (result i64) (i64.extend32_s (local.get $x))) + (func (export "i64.extend16_s") (param $x i64) (result i64) (i64.extend16_s (local.get $x))) + (func (export "i64.extend8_s") (param $x i64) (result i64) (i64.extend8_s (local.get $x))) + (func (export "i32.extend16_s") (param $x i32) (result i32) (i32.extend16_s (local.get $x))) + (func (export "i32.extend8_s") (param $x i32) (result i32) (i32.extend8_s (local.get $x))) (func (export "i32.wrap_i64") (param $x i64) (result i32) (i32.wrap_i64 (local.get $x))) (func (export "i32.trunc_f32_s") (param $x f32) (result i32) (i32.trunc_f32_s (local.get $x))) (func (export "i32.trunc_f32_u") (param $x f32) (result i32) (i32.trunc_f32_u (local.get $x))) @@ -497,3 +502,46 @@ (assert_invalid (module (func (result f64) (f64.convert_i64_u (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.promote_f32 (i32.const 0)))) "type mismatch") (assert_invalid (module (func (result f64) (f64.reinterpret_i64 (i32.const 0)))) "type mismatch") + +(assert_return (invoke "i32.extend8_s" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "i32.extend8_s" (i32.const 0x7f)) (i32.const 127)) +(assert_return (invoke "i32.extend8_s" (i32.const 0x80)) (i32.const -128)) +(assert_return (invoke "i32.extend8_s" (i32.const 0xff)) (i32.const -1)) +(assert_return (invoke "i32.extend8_s" (i32.const 0x012345_00)) (i32.const 0)) +(assert_return (invoke "i32.extend8_s" (i32.const 0xfedcba_80)) (i32.const -0x80)) +(assert_return (invoke "i32.extend8_s" (i32.const -1)) (i32.const -1)) + +(assert_return (invoke "i32.extend16_s" (i32.const 0)) (i32.const 0)) +(assert_return (invoke "i32.extend16_s" (i32.const 0x7fff)) (i32.const 32767)) +(assert_return (invoke "i32.extend16_s" (i32.const 0x8000)) (i32.const -32768)) +(assert_return (invoke "i32.extend16_s" (i32.const 0xffff)) (i32.const -1)) +(assert_return (invoke "i32.extend16_s" (i32.const 0x0123_0000)) (i32.const 0)) +(assert_return (invoke "i32.extend16_s" (i32.const 0xfedc_8000)) (i32.const -0x8000)) +(assert_return (invoke "i32.extend16_s" (i32.const -1)) (i32.const -1)) + +(assert_return (invoke "i64.extend8_s" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "i64.extend8_s" (i64.const 0x7f)) (i64.const 127)) +(assert_return (invoke "i64.extend8_s" (i64.const 0x80)) (i64.const -128)) +(assert_return (invoke "i64.extend8_s" (i64.const 0xff)) (i64.const -1)) +(assert_return (invoke "i64.extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0)) +(assert_return (invoke "i64.extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80)) +(assert_return (invoke "i64.extend8_s" (i64.const -1)) (i64.const -1)) + +(assert_return (invoke "i64.extend16_s" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "i64.extend16_s" (i64.const 0x7fff)) (i64.const 32767)) +(assert_return (invoke "i64.extend16_s" (i64.const 0x8000)) (i64.const -32768)) +(assert_return (invoke "i64.extend16_s" (i64.const 0xffff)) (i64.const -1)) +(assert_return (invoke "i64.extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0)) +(assert_return (invoke "i64.extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000)) +(assert_return (invoke "i64.extend16_s" (i64.const -1)) (i64.const -1)) + +(assert_return (invoke "i64.extend32_s" (i64.const 0)) (i64.const 0)) +(assert_return (invoke "i64.extend32_s" (i64.const 0x7fff)) (i64.const 32767)) +(assert_return (invoke "i64.extend32_s" (i64.const 0x8000)) (i64.const 32768)) +(assert_return (invoke "i64.extend32_s" (i64.const 0xffff)) (i64.const 65535)) +(assert_return (invoke "i64.extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff)) +(assert_return (invoke "i64.extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000)) +(assert_return (invoke "i64.extend32_s" (i64.const 0xffffffff)) (i64.const -1)) +(assert_return (invoke "i64.extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0)) +(assert_return (invoke "i64.extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000)) +(assert_return (invoke "i64.extend32_s" (i64.const -1)) (i64.const -1)) \ No newline at end of file diff --git a/lib/spectests/tests/excludes.txt b/lib/spectests/tests/excludes.txt index c77766939..628027693 100644 --- a/lib/spectests/tests/excludes.txt +++ b/lib/spectests/tests/excludes.txt @@ -396,73 +396,73 @@ singlepass:fail:call_indirect.wast:493 # AssertTrap - expected trap, got Runtime singlepass:fail:call_indirect.wast:494 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:call_indirect.wast:500 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:call_indirect.wast:501 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:70 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:71 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:72 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:73 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:74 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:75 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:76 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:77 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:92 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:93 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:94 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:95 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:96 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:78 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:79 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:80 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:81 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:82 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:97 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:98 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:99 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:115 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:116 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:117 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:118 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:119 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:100 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:101 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:102 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:103 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:104 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:120 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:121 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:122 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:138 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:139 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:140 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:141 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:142 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:123 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:124 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:125 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:126 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:127 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:143 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:144 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:145 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:146 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:147 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:148 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:166 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:167 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:168 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:169 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:170 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:149 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:150 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:151 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:152 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:153 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:171 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:172 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:173 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:186 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:187 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:188 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:189 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:190 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:174 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:175 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:176 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:177 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:178 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:191 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:192 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:193 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:211 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:212 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:213 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:214 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:215 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:194 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:195 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:196 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:197 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:198 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:216 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:217 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:218 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:235 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:236 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:237 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:238 # AssertTrap - expected trap, got Runtime:Error unknown error -singlepass:fail:conversions.wast:239 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:219 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:220 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:221 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:222 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:223 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:240 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:241 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:conversions.wast:242 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:243 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:244 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:245 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:246 # AssertTrap - expected trap, got Runtime:Error unknown error +singlepass:fail:conversions.wast:247 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:elem.wast:353 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:func_ptrs.wast:78 # AssertTrap - expected trap, got Runtime:Error unknown error singlepass:fail:func_ptrs.wast:79 # AssertTrap - expected trap, got Runtime:Error unknown error diff --git a/lib/spectests/tests/spectest.rs b/lib/spectests/tests/spectest.rs index 19114ff67..299971ee1 100644 --- a/lib/spectests/tests/spectest.rs +++ b/lib/spectests/tests/spectest.rs @@ -186,6 +186,7 @@ mod tests { let mut features = wabt::Features::new(); features.enable_simd(); features.enable_threads(); + features.enable_sign_extension(); let mut parser: ScriptParser = ScriptParser::from_source_and_name_with_features(&source, filename, features) .expect(&format!("Failed to parse script {}", &filename)); diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index 7af5df3e2..74f3ef470 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -394,6 +394,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { if !utils::is_wasm_binary(&wasm_binary) { let mut features = wabt::Features::new(); + features.enable_sign_extension(); if options.features.simd || options.features.all { features.enable_simd(); } From b36bf011884f664ed12f33e4563d28329d743783 Mon Sep 17 00:00:00 2001 From: losfair Date: Sun, 17 Nov 2019 04:38:40 +0800 Subject: [PATCH 3/9] Update Rust version to 1.39.0. --- Dockerfile | 2 +- README.md | 2 +- azure-pipelines.yml | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6affe470f..c118f0f57 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM circleci/rust:1.38.0-stretch as wasmer-build-env +FROM circleci/rust:1.39.0-stretch as wasmer-build-env RUN sudo apt-get update && \ sudo apt-get install -y --no-install-recommends \ cmake \ diff --git a/README.md b/README.md index 98533edf9..77fd34357 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,7 @@ nginx and Lua do not work on Windows - you can track the progress on [this issue ## Building -[![Rustc Version 1.38+](https://img.shields.io/badge/rustc-1.37+-red.svg?style=flat-square)](https://blog.rust-lang.org/2019/09/26/Rust-1.38.0.html) +[![Rustc Version 1.39+](https://img.shields.io/badge/rustc-1.39+-red.svg?style=flat-square)](https://blog.rust-lang.org/2019/09/26/Rust-1.39.0.html) Wasmer is built with [Cargo](https://crates.io/), the Rust package manager. diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a8b571e28..d99561a21 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,7 +22,7 @@ jobs: - script: cargo fmt --all -- --check displayName: Lint variables: - rust_toolchain: '1.38.0' + rust_toolchain: '1.39.0' - job: Test strategy: @@ -39,7 +39,7 @@ jobs: CARGO_HTTP_CHECK_REVOKE: false windows: imageName: "vs2017-win2016" - rust_toolchain: '1.38.0' + rust_toolchain: '1.39.0' pool: vmImage: $(imageName) condition: in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/heads/staging', 'refs/heads/trying') @@ -100,7 +100,7 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.10 windows: imageName: "vs2017-win2016" - rust_toolchain: '1.38.0' + rust_toolchain: '1.39.0' # RUSTFLAGS: -Ctarget-feature=+crt-static pool: vmImage: $(imageName) @@ -163,7 +163,7 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.10 windows: imageName: "vs2017-win2016" - rust_toolchain: '1.38.0' + rust_toolchain: '1.39.0' # RUSTFLAGS: -Ctarget-feature=+crt-static pool: vmImage: $(imageName) From 021a75244e52ec420bd6db65849b163e1673990c Mon Sep 17 00:00:00 2001 From: losfair Date: Sun, 17 Nov 2019 04:39:39 +0800 Subject: [PATCH 4/9] Reformat code for rust 1.39. --- lib/singlepass-backend/src/emitter_x64.rs | 88 +++++++++++++++++------ 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/lib/singlepass-backend/src/emitter_x64.rs b/lib/singlepass-backend/src/emitter_x64.rs index a40d5b5e5..251868231 100644 --- a/lib/singlepass-backend/src/emitter_x64.rs +++ b/lib/singlepass-backend/src/emitter_x64.rs @@ -709,14 +709,18 @@ impl Emitter for Assembler { match (sz, src) { (Size::S64, Location::Imm32(src)) => dynasm!(self ; push src as i32), (Size::S64, Location::GPR(src)) => dynasm!(self ; push Rq(src as u8)), - (Size::S64, Location::Memory(src, disp)) => dynasm!(self ; push QWORD [Rq(src as u8) + disp]), + (Size::S64, Location::Memory(src, disp)) => { + dynasm!(self ; push QWORD [Rq(src as u8) + disp]) + } _ => panic!("singlepass can't emit PUSH {:?} {:?}", sz, src), } } fn emit_pop(&mut self, sz: Size, dst: Location) { match (sz, dst) { (Size::S64, Location::GPR(dst)) => dynasm!(self ; pop Rq(dst as u8)), - (Size::S64, Location::Memory(dst, disp)) => dynasm!(self ; pop QWORD [Rq(dst as u8) + disp]), + (Size::S64, Location::Memory(dst, disp)) => { + dynasm!(self ; pop QWORD [Rq(dst as u8) + disp]) + } _ => panic!("singlepass can't emit POP {:?} {:?}", sz, dst), } } @@ -738,13 +742,21 @@ impl Emitter for Assembler { fn emit_neg(&mut self, sz: Size, value: Location) { match (sz, value) { (Size::S8, Location::GPR(value)) => dynasm!(self ; neg Rb(value as u8)), - (Size::S8, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), + (Size::S8, Location::Memory(value, disp)) => { + dynasm!(self ; neg [Rq(value as u8) + disp]) + } (Size::S16, Location::GPR(value)) => dynasm!(self ; neg Rw(value as u8)), - (Size::S16, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), + (Size::S16, Location::Memory(value, disp)) => { + dynasm!(self ; neg [Rq(value as u8) + disp]) + } (Size::S32, Location::GPR(value)) => dynasm!(self ; neg Rd(value as u8)), - (Size::S32, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), + (Size::S32, Location::Memory(value, disp)) => { + dynasm!(self ; neg [Rq(value as u8) + disp]) + } (Size::S64, Location::GPR(value)) => dynasm!(self ; neg Rq(value as u8)), - (Size::S64, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), + (Size::S64, Location::Memory(value, disp)) => { + dynasm!(self ; neg [Rq(value as u8) + disp]) + } _ => panic!("singlepass can't emit NEG {:?} {:?}", sz, value), } } @@ -997,18 +1009,30 @@ impl Emitter for Assembler { fn emit_vmovaps(&mut self, src: XMMOrMemory, dst: XMMOrMemory) { match (src, dst) { - (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => dynasm!(self ; movaps Rx(dst as u8), Rx(src as u8)), - (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => dynasm!(self ; movaps Rx(dst as u8), [Rq(base as u8) + disp]), - (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => dynasm!(self ; movaps [Rq(base as u8) + disp], Rx(src as u8)), + (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => { + dynasm!(self ; movaps Rx(dst as u8), Rx(src as u8)) + } + (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => { + dynasm!(self ; movaps Rx(dst as u8), [Rq(base as u8) + disp]) + } + (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => { + dynasm!(self ; movaps [Rq(base as u8) + disp], Rx(src as u8)) + } _ => panic!("singlepass can't emit VMOVAPS {:?} {:?}", src, dst), }; } fn emit_vmovapd(&mut self, src: XMMOrMemory, dst: XMMOrMemory) { match (src, dst) { - (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => dynasm!(self ; movapd Rx(dst as u8), Rx(src as u8)), - (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => dynasm!(self ; movapd Rx(dst as u8), [Rq(base as u8) + disp]), - (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => dynasm!(self ; movapd [Rq(base as u8) + disp], Rx(src as u8)), + (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => { + dynasm!(self ; movapd Rx(dst as u8), Rx(src as u8)) + } + (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => { + dynasm!(self ; movapd Rx(dst as u8), [Rq(base as u8) + disp]) + } + (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => { + dynasm!(self ; movapd [Rq(base as u8) + disp], Rx(src as u8)) + } _ => panic!("singlepass can't emit VMOVAPD {:?} {:?}", src, dst), }; } @@ -1080,57 +1104,77 @@ impl Emitter for Assembler { fn emit_vblendvps(&mut self, src1: XMM, src2: XMMOrMemory, mask: XMM, dst: XMM) { match src2 { - XMMOrMemory::XMM(src2) => dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)), + XMMOrMemory::XMM(src2) => { + dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)) + } + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)) + } } } fn emit_vblendvpd(&mut self, src1: XMM, src2: XMMOrMemory, mask: XMM, dst: XMM) { match src2 { - XMMOrMemory::XMM(src2) => dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)), + XMMOrMemory::XMM(src2) => { + dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)) + } + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)) + } } } fn emit_ucomiss(&mut self, src: XMMOrMemory, dst: XMM) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; ucomiss Rx(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; ucomiss Rx(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; ucomiss Rx(dst as u8), [Rq(base as u8) + disp]) + } } } fn emit_ucomisd(&mut self, src: XMMOrMemory, dst: XMM) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; ucomisd Rx(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; ucomisd Rx(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; ucomisd Rx(dst as u8), [Rq(base as u8) + disp]) + } } } fn emit_cvttss2si_32(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttss2si Rd(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttss2si Rd(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; cvttss2si Rd(dst as u8), [Rq(base as u8) + disp]) + } } } fn emit_cvttss2si_64(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttss2si Rq(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttss2si Rq(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; cvttss2si Rq(dst as u8), [Rq(base as u8) + disp]) + } } } fn emit_cvttsd2si_32(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttsd2si Rd(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttsd2si Rd(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; cvttsd2si Rd(dst as u8), [Rq(base as u8) + disp]) + } } } fn emit_cvttsd2si_64(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttsd2si Rq(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttsd2si Rq(dst as u8), [Rq(base as u8) + disp]), + XMMOrMemory::Memory(base, disp) => { + dynasm!(self ; cvttsd2si Rq(dst as u8), [Rq(base as u8) + disp]) + } } } From 2cbc7481880d4fefe8474beaf210727dd7391c4a Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Mon, 18 Nov 2019 09:59:07 -0800 Subject: [PATCH 5/9] Revert "Update Rust version to 1.39.0." --- Dockerfile | 2 +- README.md | 2 +- azure-pipelines.yml | 8 +-- lib/singlepass-backend/src/emitter_x64.rs | 88 ++++++----------------- 4 files changed, 28 insertions(+), 72 deletions(-) diff --git a/Dockerfile b/Dockerfile index c118f0f57..6affe470f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM circleci/rust:1.39.0-stretch as wasmer-build-env +FROM circleci/rust:1.38.0-stretch as wasmer-build-env RUN sudo apt-get update && \ sudo apt-get install -y --no-install-recommends \ cmake \ diff --git a/README.md b/README.md index 77fd34357..98533edf9 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,7 @@ nginx and Lua do not work on Windows - you can track the progress on [this issue ## Building -[![Rustc Version 1.39+](https://img.shields.io/badge/rustc-1.39+-red.svg?style=flat-square)](https://blog.rust-lang.org/2019/09/26/Rust-1.39.0.html) +[![Rustc Version 1.38+](https://img.shields.io/badge/rustc-1.37+-red.svg?style=flat-square)](https://blog.rust-lang.org/2019/09/26/Rust-1.38.0.html) Wasmer is built with [Cargo](https://crates.io/), the Rust package manager. diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d99561a21..a8b571e28 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,7 +22,7 @@ jobs: - script: cargo fmt --all -- --check displayName: Lint variables: - rust_toolchain: '1.39.0' + rust_toolchain: '1.38.0' - job: Test strategy: @@ -39,7 +39,7 @@ jobs: CARGO_HTTP_CHECK_REVOKE: false windows: imageName: "vs2017-win2016" - rust_toolchain: '1.39.0' + rust_toolchain: '1.38.0' pool: vmImage: $(imageName) condition: in(variables['Build.SourceBranch'], 'refs/heads/master', 'refs/heads/staging', 'refs/heads/trying') @@ -100,7 +100,7 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.10 windows: imageName: "vs2017-win2016" - rust_toolchain: '1.39.0' + rust_toolchain: '1.38.0' # RUSTFLAGS: -Ctarget-feature=+crt-static pool: vmImage: $(imageName) @@ -163,7 +163,7 @@ jobs: MACOSX_DEPLOYMENT_TARGET: 10.10 windows: imageName: "vs2017-win2016" - rust_toolchain: '1.39.0' + rust_toolchain: '1.38.0' # RUSTFLAGS: -Ctarget-feature=+crt-static pool: vmImage: $(imageName) diff --git a/lib/singlepass-backend/src/emitter_x64.rs b/lib/singlepass-backend/src/emitter_x64.rs index 251868231..a40d5b5e5 100644 --- a/lib/singlepass-backend/src/emitter_x64.rs +++ b/lib/singlepass-backend/src/emitter_x64.rs @@ -709,18 +709,14 @@ impl Emitter for Assembler { match (sz, src) { (Size::S64, Location::Imm32(src)) => dynasm!(self ; push src as i32), (Size::S64, Location::GPR(src)) => dynasm!(self ; push Rq(src as u8)), - (Size::S64, Location::Memory(src, disp)) => { - dynasm!(self ; push QWORD [Rq(src as u8) + disp]) - } + (Size::S64, Location::Memory(src, disp)) => dynasm!(self ; push QWORD [Rq(src as u8) + disp]), _ => panic!("singlepass can't emit PUSH {:?} {:?}", sz, src), } } fn emit_pop(&mut self, sz: Size, dst: Location) { match (sz, dst) { (Size::S64, Location::GPR(dst)) => dynasm!(self ; pop Rq(dst as u8)), - (Size::S64, Location::Memory(dst, disp)) => { - dynasm!(self ; pop QWORD [Rq(dst as u8) + disp]) - } + (Size::S64, Location::Memory(dst, disp)) => dynasm!(self ; pop QWORD [Rq(dst as u8) + disp]), _ => panic!("singlepass can't emit POP {:?} {:?}", sz, dst), } } @@ -742,21 +738,13 @@ impl Emitter for Assembler { fn emit_neg(&mut self, sz: Size, value: Location) { match (sz, value) { (Size::S8, Location::GPR(value)) => dynasm!(self ; neg Rb(value as u8)), - (Size::S8, Location::Memory(value, disp)) => { - dynasm!(self ; neg [Rq(value as u8) + disp]) - } + (Size::S8, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), (Size::S16, Location::GPR(value)) => dynasm!(self ; neg Rw(value as u8)), - (Size::S16, Location::Memory(value, disp)) => { - dynasm!(self ; neg [Rq(value as u8) + disp]) - } + (Size::S16, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), (Size::S32, Location::GPR(value)) => dynasm!(self ; neg Rd(value as u8)), - (Size::S32, Location::Memory(value, disp)) => { - dynasm!(self ; neg [Rq(value as u8) + disp]) - } + (Size::S32, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), (Size::S64, Location::GPR(value)) => dynasm!(self ; neg Rq(value as u8)), - (Size::S64, Location::Memory(value, disp)) => { - dynasm!(self ; neg [Rq(value as u8) + disp]) - } + (Size::S64, Location::Memory(value, disp)) => dynasm!(self ; neg [Rq(value as u8) + disp]), _ => panic!("singlepass can't emit NEG {:?} {:?}", sz, value), } } @@ -1009,30 +997,18 @@ impl Emitter for Assembler { fn emit_vmovaps(&mut self, src: XMMOrMemory, dst: XMMOrMemory) { match (src, dst) { - (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => { - dynasm!(self ; movaps Rx(dst as u8), Rx(src as u8)) - } - (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => { - dynasm!(self ; movaps Rx(dst as u8), [Rq(base as u8) + disp]) - } - (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => { - dynasm!(self ; movaps [Rq(base as u8) + disp], Rx(src as u8)) - } + (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => dynasm!(self ; movaps Rx(dst as u8), Rx(src as u8)), + (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => dynasm!(self ; movaps Rx(dst as u8), [Rq(base as u8) + disp]), + (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => dynasm!(self ; movaps [Rq(base as u8) + disp], Rx(src as u8)), _ => panic!("singlepass can't emit VMOVAPS {:?} {:?}", src, dst), }; } fn emit_vmovapd(&mut self, src: XMMOrMemory, dst: XMMOrMemory) { match (src, dst) { - (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => { - dynasm!(self ; movapd Rx(dst as u8), Rx(src as u8)) - } - (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => { - dynasm!(self ; movapd Rx(dst as u8), [Rq(base as u8) + disp]) - } - (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => { - dynasm!(self ; movapd [Rq(base as u8) + disp], Rx(src as u8)) - } + (XMMOrMemory::XMM(src), XMMOrMemory::XMM(dst)) => dynasm!(self ; movapd Rx(dst as u8), Rx(src as u8)), + (XMMOrMemory::Memory(base, disp), XMMOrMemory::XMM(dst)) => dynasm!(self ; movapd Rx(dst as u8), [Rq(base as u8) + disp]), + (XMMOrMemory::XMM(src), XMMOrMemory::Memory(base, disp)) => dynasm!(self ; movapd [Rq(base as u8) + disp], Rx(src as u8)), _ => panic!("singlepass can't emit VMOVAPD {:?} {:?}", src, dst), }; } @@ -1104,77 +1080,57 @@ impl Emitter for Assembler { fn emit_vblendvps(&mut self, src1: XMM, src2: XMMOrMemory, mask: XMM, dst: XMM) { match src2 { - XMMOrMemory::XMM(src2) => { - dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)) - } - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)) - } + XMMOrMemory::XMM(src2) => dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)), + XMMOrMemory::Memory(base, disp) => dynasm!(self ; vblendvps Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)), } } fn emit_vblendvpd(&mut self, src1: XMM, src2: XMMOrMemory, mask: XMM, dst: XMM) { match src2 { - XMMOrMemory::XMM(src2) => { - dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)) - } - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)) - } + XMMOrMemory::XMM(src2) => dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), Rx(src2 as u8), Rx(src1 as u8)), + XMMOrMemory::Memory(base, disp) => dynasm!(self ; vblendvpd Rx(dst as u8), Rx(mask as u8), [Rq(base as u8) + disp], Rx(src1 as u8)), } } fn emit_ucomiss(&mut self, src: XMMOrMemory, dst: XMM) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; ucomiss Rx(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; ucomiss Rx(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; ucomiss Rx(dst as u8), [Rq(base as u8) + disp]), } } fn emit_ucomisd(&mut self, src: XMMOrMemory, dst: XMM) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; ucomisd Rx(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; ucomisd Rx(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; ucomisd Rx(dst as u8), [Rq(base as u8) + disp]), } } fn emit_cvttss2si_32(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttss2si Rd(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; cvttss2si Rd(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttss2si Rd(dst as u8), [Rq(base as u8) + disp]), } } fn emit_cvttss2si_64(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttss2si Rq(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; cvttss2si Rq(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttss2si Rq(dst as u8), [Rq(base as u8) + disp]), } } fn emit_cvttsd2si_32(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttsd2si Rd(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; cvttsd2si Rd(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttsd2si Rd(dst as u8), [Rq(base as u8) + disp]), } } fn emit_cvttsd2si_64(&mut self, src: XMMOrMemory, dst: GPR) { match src { XMMOrMemory::XMM(x) => dynasm!(self ; cvttsd2si Rq(dst as u8), Rx(x as u8)), - XMMOrMemory::Memory(base, disp) => { - dynasm!(self ; cvttsd2si Rq(dst as u8), [Rq(base as u8) + disp]) - } + XMMOrMemory::Memory(base, disp) => dynasm!(self ; cvttsd2si Rq(dst as u8), [Rq(base as u8) + disp]), } } From 8b6a7b77fc32034205a041cc8062141ca87fbac7 Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Sat, 16 Nov 2019 11:25:33 -0800 Subject: [PATCH 6/9] Clean up from feedback --- lib/singlepass-backend/src/codegen_x64.rs | 41 ++++++++---------- src/bin/wasmer.rs | 52 ++++++++++++----------- 2 files changed, 46 insertions(+), 47 deletions(-) diff --git a/lib/singlepass-backend/src/codegen_x64.rs b/lib/singlepass-backend/src/codegen_x64.rs index 1b9e5e7dd..13333df90 100644 --- a/lib/singlepass-backend/src/codegen_x64.rs +++ b/lib/singlepass-backend/src/codegen_x64.rs @@ -658,36 +658,34 @@ impl X64FunctionCode { sz_dst: Size, dst: Location, ) { - let tmp_src = m.acquire_temp_gpr().unwrap(); - let tmp_dst = m.acquire_temp_gpr().unwrap(); - - match src { - Location::Imm32(_) | Location::Imm64(_) => { - a.emit_mov(Size::S64, src, Location::GPR(tmp_src)); - src = Location::GPR(tmp_src); - } - Location::GPR(_) => { - a.emit_mov(Size::S64, src, Location::GPR(tmp_src)); - src = Location::GPR(tmp_src); - } - Location::Memory(_, _) => {} - _ => unreachable!(), - } - - match dst { + let inner = |m: &mut Machine, a: &mut Assembler, src: Location| match dst { Location::Imm32(_) | Location::Imm64(_) => unreachable!(), Location::Memory(_, _) => { + let tmp_dst = m.acquire_temp_gpr().unwrap(); op(a, sz_src, src, sz_dst, Location::GPR(tmp_dst)); a.emit_mov(Size::S64, Location::GPR(tmp_dst), dst); + + m.release_temp_gpr(tmp_dst); } Location::GPR(_) => { op(a, sz_src, src, sz_dst, dst); } _ => unreachable!(), - } + }; - m.release_temp_gpr(tmp_dst); - m.release_temp_gpr(tmp_src); + match src { + Location::Imm32(_) | Location::Imm64(_) => { + let tmp_src = m.acquire_temp_gpr().unwrap(); + a.emit_mov(Size::S64, src, Location::GPR(tmp_src)); + src = Location::GPR(tmp_src); + + inner(m, a, src); + + m.release_temp_gpr(tmp_src); + } + Location::GPR(_) | Location::Memory(_, _) => inner(m, a, src), + _ => unreachable!(), + } } /// Moves `src` and `dst` to valid locations for generic instructions. @@ -2964,7 +2962,6 @@ impl FunctionCodeGenerator for X64FunctionCode { let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); - a.emit_and(Size::S32, Location::Imm32(0xFF), Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, @@ -2988,7 +2985,6 @@ impl FunctionCodeGenerator for X64FunctionCode { let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); - a.emit_and(Size::S32, Location::Imm32(0xFFFF), Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, @@ -3036,7 +3032,6 @@ impl FunctionCodeGenerator for X64FunctionCode { let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); - a.emit_and(Size::S32, Location::Imm32(0xFFFF), Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, diff --git a/src/bin/wasmer.rs b/src/bin/wasmer.rs index 74f3ef470..0caaefe22 100644 --- a/src/bin/wasmer.rs +++ b/src/bin/wasmer.rs @@ -96,6 +96,29 @@ struct PrestandardFeatures { all: bool, } +impl PrestandardFeatures { + /// Generate [`wabt::Features`] struct from CLI options + pub fn into_wabt_features(&self) -> wabt::Features { + let mut features = wabt::Features::new(); + if self.simd || self.all { + features.enable_simd(); + } + if self.threads || self.all { + features.enable_threads(); + } + features.enable_sign_extension(); + features + } + + /// Generate [`Features`] struct from CLI options + pub fn into_backend_features(&self) -> Features { + Features { + simd: self.simd || self.all, + threads: self.threads || self.all, + } + } +} + #[cfg(feature = "backend-llvm")] #[derive(Debug, StructOpt, Clone)] /// LLVM backend flags. @@ -393,14 +416,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { } if !utils::is_wasm_binary(&wasm_binary) { - let mut features = wabt::Features::new(); - features.enable_sign_extension(); - if options.features.simd || options.features.all { - features.enable_simd(); - } - if options.features.threads || options.features.all { - features.enable_threads(); - } + let features = options.features.into_wabt_features(); wasm_binary = wabt::wat2wasm_with_features(wasm_binary, features) .map_err(|e| format!("Can't convert from wast to wasm: {:?}", e))?; } @@ -444,10 +460,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { memory_bound_check_mode: MemoryBoundCheckMode::Disable, enforce_stack_check: true, track_state, - features: Features { - simd: options.features.simd || options.features.all, - threads: options.features.threads || options.features.all, - }, + features: options.features.into_backend_features(), }, &*compiler, ) @@ -458,10 +471,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { CompilerConfig { symbol_map: em_symbol_map.clone(), track_state, - features: Features { - simd: options.features.simd || options.features.all, - threads: options.features.threads || options.features.all, - }, + features: options.features.into_backend_features(), ..Default::default() }, &*compiler, @@ -506,10 +516,7 @@ fn execute_wasm(options: &Run) -> Result<(), String> { CompilerConfig { symbol_map: em_symbol_map.clone(), track_state, - features: Features { - simd: options.features.simd || options.features.all, - threads: options.features.threads || options.features.all, - }, + features: options.features.into_backend_features(), ..Default::default() }, &*compiler, @@ -807,10 +814,7 @@ fn validate_wasm(validate: Validate) -> Result<(), String> { wasmer_runtime_core::validate_and_report_errors_with_features( &wasm_binary, - Features { - simd: validate.features.simd || validate.features.all, - threads: validate.features.threads || validate.features.all, - }, + validate.features.into_backend_features(), ) .map_err(|err| format!("Validation failed: {}", err))?; From 8a096a09e4ea9724379de86319f66f35d9084bfb Mon Sep 17 00:00:00 2001 From: Mark McCaskey Date: Mon, 18 Nov 2019 11:47:58 -0800 Subject: [PATCH 7/9] Remove extra register use in sign extension instructions --- lib/singlepass-backend/src/codegen_x64.rs | 26 +++++------------------ 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/lib/singlepass-backend/src/codegen_x64.rs b/lib/singlepass-backend/src/codegen_x64.rs index c7154d215..e825c32e3 100644 --- a/lib/singlepass-backend/src/codegen_x64.rs +++ b/lib/singlepass-backend/src/codegen_x64.rs @@ -2964,18 +2964,15 @@ impl FunctionCodeGenerator for X64FunctionCode { )[0]; self.value_stack.push(ret); - let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); - a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, Assembler::emit_movsx, Size::S8, - Location::GPR(tmpg1), + loc, Size::S32, ret, ); - self.machine.release_temp_gpr(tmpg1); } Operator::I32Extend16S => { let loc = @@ -2987,18 +2984,15 @@ impl FunctionCodeGenerator for X64FunctionCode { )[0]; self.value_stack.push(ret); - let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); - a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, Assembler::emit_movsx, Size::S16, - Location::GPR(tmpg1), + loc, Size::S32, ret, ); - self.machine.release_temp_gpr(tmpg1); } Operator::I64Extend8S => { let loc = @@ -3010,19 +3004,15 @@ impl FunctionCodeGenerator for X64FunctionCode { )[0]; self.value_stack.push(ret); - let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); - a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); - a.emit_and(Size::S32, Location::Imm32(0xFF), Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, Assembler::emit_movsx, Size::S8, - Location::GPR(tmpg1), + loc, Size::S64, ret, ); - self.machine.release_temp_gpr(tmpg1); } Operator::I64Extend16S => { let loc = @@ -3034,18 +3024,15 @@ impl FunctionCodeGenerator for X64FunctionCode { )[0]; self.value_stack.push(ret); - let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); - a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, Assembler::emit_movsx, Size::S16, - Location::GPR(tmpg1), + loc, Size::S64, ret, ); - self.machine.release_temp_gpr(tmpg1); } Operator::I64Extend32S => { let loc = @@ -3057,18 +3044,15 @@ impl FunctionCodeGenerator for X64FunctionCode { )[0]; self.value_stack.push(ret); - let tmpg1 = self.machine.acquire_temp_gpr().unwrap(); - a.emit_mov(Size::S32, loc, Location::GPR(tmpg1)); Self::emit_relaxed_zx_sx( a, &mut self.machine, Assembler::emit_movsx, Size::S32, - Location::GPR(tmpg1), + loc, Size::S64, ret, ); - self.machine.release_temp_gpr(tmpg1); } Operator::I32WrapI64 => { let loc = From 95368aa5dc2c6ea78e1bf2958a15b66250393a8a Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 18 Nov 2019 13:19:05 -0800 Subject: [PATCH 8/9] Trigger azure pipeline job on new tag --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a8b571e28..23f806dca 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -205,7 +205,7 @@ jobs: dependsOn: - Build_CLI - Build_Library - condition: eq(variables['Build.SourceBranch'], 'refs/heads/master') + condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/tags')) steps: # - download: current - task: DownloadPipelineArtifact@1 @@ -259,3 +259,4 @@ trigger: - master - staging - trying + - refs/tags/* From 41c1e071c801e57269ea62fb5290fb316fd8f2a6 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 18 Nov 2019 15:42:08 -0800 Subject: [PATCH 9/9] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c55256d8..5ed6bfc74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ ## **[Unreleased]** -## 0.10.2 - 2019-11-15 +## 0.10.2 - 2019-11-18 - [#968](https://github.com/wasmerio/wasmer/pull/968) Added `--invoke` option to the command +- [#964](https://github.com/wasmerio/wasmer/pull/964) Enable cross-compilation for specific target - [#971](https://github.com/wasmerio/wasmer/pull/971) In LLVM backend, use unaligned loads and stores for non-atomic accesses to wasmer memory. - [#960](https://github.com/wasmerio/wasmer/pull/960) Fix `runtime-c-api` header files when compiled by clang. - [#925](https://github.com/wasmerio/wasmer/pull/925) Host functions can be closures with a captured environment.