Repository: bytecodealliance/wasmtime
Pull request #1867 (2020-06-11 21:49:55)

Remove a runaway explicit drop
Looks like a runaway from the latest `wiggle`-related improvements.


Patch:
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 28f18dffd..d1485a34a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -107,6 +107,12 @@ jobs:
     - run: cargo check --target wasm32-unknown-emscripten -p wasi-common
     - run: cargo check --target armv7-unknown-linux-gnueabihf -p wasi-common
 
+    # Check that codegen and wasm crates typecheck on 1.41.0; this is required
+    # for Firefox.
+    - run: rustup install 1.41.0
+    - run: cargo +1.41.0 check -p cranelift-codegen
+    - run: cargo +1.41.0 check -p cranelift-wasm
+
 
   fuzz_targets:
     name: Fuzz Targets
@@ -117,7 +123,7 @@ jobs:
         submodules: true
     - uses: ./.github/actions/install-rust
       with:
-        toolchain: nightly
+        toolchain: nightly-2020-06-03
     - run: cargo install cargo-fuzz --vers "^0.7"
     - run: cargo fetch
       working-directory: ./fuzz
@@ -235,9 +241,9 @@ jobs:
     # Build and test lightbeam if we're using the nightly toolchain. Note that
     # Lightbeam tests fail right now, but we don't want to block on that.
     - run: cargo build --package lightbeam
-      if: matrix.rust == 'nightly-2020-06-03'
+      if: matrix.build == 'nightly'
     - run: cargo test --package lightbeam
-      if: matrix.rust == 'nightly-2020-06-03'
+      if: matrix.build == 'nightly'
       continue-on-error: true
       env:
         RUST_BACKTRACE: 1
@@ -276,7 +282,7 @@ jobs:
         - build: x86_64-mingw
           os: windows-latest
           target: x86_64-pc-windows-gnu
-          rust: nightly     # needs rust-lang/rust#69351 to ride to stable
+          rust: beta        # needs rust-lang/rust#69351 to ride to stable
         - build: aarch64-linux
           os: ubuntu-latest
           rust: stable
diff --git a/Cargo.lock b/Cargo.lock
index a41b6bf60..db92d0197 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -11,9 +11,9 @@ dependencies = [
 
 [[package]]
 name = "ahash"
-version = "0.3.5"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3e0bf23f51883cce372d5d5892211236856e4bb37fb942e1eb135ee0f146e3"
+checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"
 
 [[package]]
 name = "aho-corasick"
@@ -351,7 +351,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-frontend",
@@ -359,14 +359,14 @@ dependencies = [
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-entity",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "bincode",
  "byteorder",
@@ -388,7 +388,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen-shared",
  "cranelift-entity",
@@ -396,18 +396,18 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.64.0"
+version = "0.65.0"
 
 [[package]]
 name = "cranelift-entity"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "cranelift-faerie"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -419,7 +419,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-filetests"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "byteorder",
  "cranelift-codegen",
@@ -441,7 +441,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "hashbrown 0.7.2",
@@ -452,7 +452,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-interpreter"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -467,7 +467,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-module"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -479,7 +479,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-native"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "raw-cpuid",
@@ -488,8 +488,9 @@ dependencies = [
 
 [[package]]
 name = "cranelift-object"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
+ "anyhow",
  "cranelift-codegen",
  "cranelift-module",
  "object",
@@ -498,7 +499,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-preopt"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -506,7 +507,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-reader"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "smallvec",
@@ -516,7 +517,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-serde"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "clap",
  "cranelift-codegen",
@@ -528,7 +529,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-simplejit"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift",
  "cranelift-codegen",
@@ -546,7 +547,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-tools"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "capstone",
  "cfg-if",
@@ -581,7 +582,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -730,11 +731,10 @@ dependencies = [
 
 [[package]]
 name = "dirs-sys"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
+checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
 dependencies = [
- "cfg-if",
  "libc",
  "redox_users",
  "winapi",
@@ -966,7 +966,7 @@ version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf"
 dependencies = [
- "ahash 0.3.5",
+ "ahash 0.3.8",
  "autocfg 1.0.0",
 ]
 
@@ -1101,7 +1101,7 @@ dependencies = [
 
 [[package]]
 name = "lightbeam"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "capstone",
@@ -1224,13 +1224,12 @@ checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
 
 [[package]]
 name = "object"
-version = "0.18.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5666bbb90bc4d1e5bdcb26c0afda1822d25928341e9384ab187a9b37ab69e36"
+checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2"
 dependencies = [
  "crc32fast",
  "indexmap",
- "target-lexicon",
 ]
 
 [[package]]
@@ -1266,7 +1265,7 @@ dependencies = [
 
 [[package]]
 name = "peepmatic"
-version = "0.64.0"
+version = "0.65.0"
 dependencies = [
  "anyhow",
  "peepmatic-automata",
@@ -1278,14 +1277,14 @@ dependencies = [
 
 [[package]]
 name = "peepmatic-automata"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "peepmatic-fuzzing"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "arbitrary",
  "bincode",
@@ -1303,7 +1302,7 @@ dependencies = [
 
 [[package]]
 name = "peepmatic-macro"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1312,7 +1311,7 @@ dependencies = [
 
 [[package]]
 name = "peepmatic-runtime"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "bincode",
  "bumpalo",
@@ -1326,7 +1325,7 @@ dependencies = [
 
 [[package]]
 name = "peepmatic-test"
-version = "0.1.0"
+version = "0.2.0"
 dependencies = [
  "env_logger",
  "log",
@@ -1437,9 +1436,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea"
+checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
 dependencies = [
  "proc-macro2",
 ]
@@ -1725,7 +1724,7 @@ dependencies = [
 
 [[package]]
 name = "run-examples"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "cc",
 ]
@@ -2022,7 +2021,7 @@ dependencies = [
 
 [[package]]
 name = "test-programs"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -2254,7 +2253,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
 
 [[package]]
 name = "wasi-common"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -2296,7 +2295,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "backtrace",
@@ -2319,7 +2318,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "env_logger",
@@ -2333,7 +2332,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api-macros"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2341,7 +2340,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cli"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "env_logger",
@@ -2372,7 +2371,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-debug"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "gimli",
@@ -2386,7 +2385,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-environ"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "base64 0.12.1",
@@ -2432,7 +2431,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-fuzzing"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "arbitrary",
@@ -2449,7 +2448,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -2474,7 +2473,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-obj"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "more-asserts",
@@ -2484,7 +2483,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-profiling"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -2502,7 +2501,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-runtime"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "backtrace",
  "cc",
@@ -2520,7 +2519,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-rust"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "wasmtime",
@@ -2530,7 +2529,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-rust-macro"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2539,7 +2538,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "log",
@@ -2552,7 +2551,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wast"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "wasmtime",
@@ -2586,18 +2585,27 @@ dependencies = [
  "leb128",
 ]
 
+[[package]]
+name = "wast"
+version = "18.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b1f23531740a81f9300bd2febd397a95c76bfa4aa4bfaf4ca8b1ee3438f337"
+dependencies = [
+ "leb128",
+]
+
 [[package]]
 name = "wat"
-version = "1.0.18"
+version = "1.0.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b50f9e5e5c81e6fd987ae6997a9f4bbb751df2dec1d8cadb0b5778f1ec13bbe"
+checksum = "4006d418d59293172aebfeeadb7673459dc151874a79135946ea7996b6a98515"
 dependencies = [
- "wast 17.0.0",
+ "wast 18.0.0",
 ]
 
 [[package]]
 name = "wig"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -2607,7 +2615,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "proptest",
  "thiserror",
@@ -2619,7 +2627,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-generate"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "heck",
@@ -2631,7 +2639,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-macro"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "quote",
  "syn",
@@ -2642,7 +2650,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-test"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "env_logger",
  "proptest",
@@ -2685,7 +2693,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
 name = "winx"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "bitflags",
  "cvt",
@@ -2707,7 +2715,7 @@ dependencies = [
 
 [[package]]
 name = "yanix"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "bitflags",
  "cfg-if",
diff --git a/Cargo.toml b/Cargo.toml
index e419dd425..b95970a33 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-cli"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Command-line interface for Wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -22,16 +22,16 @@ doc = false
 
 [dependencies]
 # Enable all supported architectures by default.
-wasmtime = { path = "crates/wasmtime", version = "0.17.0", default-features = false }
-wasmtime-debug = { path = "crates/debug", version = "0.17.0" }
-wasmtime-environ = { path = "crates/environ", version = "0.17.0" }
-wasmtime-jit = { path = "crates/jit", version = "0.17.0" }
-wasmtime-obj = { path = "crates/obj", version = "0.17.0" }
-wasmtime-wast = { path = "crates/wast", version = "0.17.0" }
-wasmtime-wasi = { path = "crates/wasi", version = "0.17.0" }
-wasi-common = { path = "crates/wasi-common", version = "0.17.0" }
+wasmtime = { path = "crates/wasmtime", version = "0.18.0", default-features = false }
+wasmtime-debug = { path = "crates/debug", version = "0.18.0" }
+wasmtime-environ = { path = "crates/environ", version = "0.18.0" }
+wasmtime-jit = { path = "crates/jit", version = "0.18.0" }
+wasmtime-obj = { path = "crates/obj", version = "0.18.0" }
+wasmtime-wast = { path = "crates/wast", version = "0.18.0" }
+wasmtime-wasi = { path = "crates/wasi", version = "0.18.0" }
+wasi-common = { path = "crates/wasi-common", version = "0.18.0" }
 structopt = { version = "0.3.5", features = ["color", "suggestions"] }
-object = { version = "0.18", default-features = false, features = ["write"] }
+object = { version = "0.19", default-features = false, features = ["write"] }
 anyhow = "1.0.19"
 target-lexicon = { version = "0.10.0", default-features = false }
 pretty_env_logger = "0.4.0"
diff --git a/RELEASES.md b/RELEASES.md
index 6f3aa9d44..a33a7fbdf 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -2,7 +2,7 @@
 
 --------------------------------------------------------------------------------
 
-## 0.18.0
+## 0.19.0
 
 Unreleased.
 
@@ -14,6 +14,18 @@ Unreleased.
 
 --------------------------------------------------------------------------------
 
+## 0.18.0
+
+Release 2020-06-09.
+
+### Added
+
+The `WasmTy` trait is now implemented for `u32` and `u64`.
+
+  [#1808](https://github.com/bytecodealliance/wasmtime/pull/1808)
+
+--------------------------------------------------------------------------------
+
 ## 0.17.0
 
 Released 2020-06-01.
diff --git a/cranelift/Cargo.toml b/cranelift/Cargo.toml
index dbfabab37..e55d24077 100644
--- a/cranelift/Cargo.toml
+++ b/cranelift/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cranelift-tools"
 authors = ["The Cranelift Project Developers"]
-version = "0.64.0"
+version = "0.65.0"
 description = "Binaries for testing the Cranelift libraries"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://github.com/bytecodealliance/wasmtime/blob/master/cranelift/docs/index.md"
@@ -15,21 +15,21 @@ path = "src/clif-util.rs"
 
 [dependencies]
 cfg-if = "0.1"
-cranelift-codegen = { path = "codegen", version = "0.64.0" }
-cranelift-entity = { path = "entity", version = "0.64.0" }
-cranelift-interpreter = { path = "interpreter", version = "0.64.0" }
-cranelift-reader = { path = "reader", version = "0.64.0" }
-cranelift-frontend = { path = "frontend", version = "0.64.0" }
-cranelift-serde = { path = "serde", version = "0.64.0", optional = true }
-cranelift-wasm = { path = "wasm", version = "0.64.0", optional = true }
-cranelift-native = { path = "native", version = "0.64.0" }
-cranelift-filetests = { path = "filetests", version = "0.64.0" }
-cranelift-module = { path = "module", version = "0.64.0" }
-cranelift-faerie = { path = "faerie", version = "0.64.0" }
-cranelift-object = { path = "object", version = "0.64.0" }
-cranelift-simplejit = { path = "simplejit", version = "0.64.0" }
-cranelift-preopt = { path = "preopt", version = "0.64.0" }
-cranelift = { path = "umbrella", version = "0.64.0" }
+cranelift-codegen = { path = "codegen", version = "0.65.0" }
+cranelift-entity = { path = "entity", version = "0.65.0" }
+cranelift-interpreter = { path = "interpreter", version = "0.65.0" }
+cranelift-reader = { path = "reader", version = "0.65.0" }
+cranelift-frontend = { path = "frontend", version = "0.65.0" }
+cranelift-serde = { path = "serde", version = "0.65.0", optional = true }
+cranelift-wasm = { path = "wasm", version = "0.65.0", optional = true }
+cranelift-native = { path = "native", version = "0.65.0" }
+cranelift-filetests = { path = "filetests", version = "0.65.0" }
+cranelift-module = { path = "module", version = "0.65.0" }
+cranelift-faerie = { path = "faerie", version = "0.65.0" }
+cranelift-object = { path = "object", version = "0.65.0" }
+cranelift-simplejit = { path = "simplejit", version = "0.65.0" }
+cranelift-preopt = { path = "preopt", version = "0.65.0" }
+cranelift = { path = "umbrella", version = "0.65.0" }
 filecheck = "0.5.0"
 clap = "2.32.0"
 log = "0.4.8"
diff --git a/cranelift/bforest/Cargo.toml b/cranelift/bforest/Cargo.toml
index bfba4d8b6..c82cf7d6d 100644
--- a/cranelift/bforest/Cargo.toml
+++ b/cranelift/bforest/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-bforest"
-version = "0.64.0"
+version = "0.65.0"
 description = "A forest of B+-trees"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-bforest"
@@ -12,7 +12,7 @@ keywords = ["btree", "forest", "set", "map"]
 edition = "2018"
 
 [dependencies]
-cranelift-entity = { path = "../entity", version = "0.64.0", default-features = false }
+cranelift-entity = { path = "../entity", version = "0.65.0", default-features = false }
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/codegen/Cargo.toml b/cranelift/codegen/Cargo.toml
index e2cce0f85..578acf0e1 100644
--- a/cranelift/codegen/Cargo.toml
+++ b/cranelift/codegen/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen"
-version = "0.64.0"
+version = "0.65.0"
 description = "Low-level code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-codegen"
@@ -13,9 +13,9 @@ build = "build.rs"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen-shared = { path = "./shared", version = "0.64.0" }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
-cranelift-bforest = { path = "../bforest", version = "0.64.0" }
+cranelift-codegen-shared = { path = "./shared", version = "0.65.0" }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
+cranelift-bforest = { path = "../bforest", version = "0.65.0" }
 hashbrown = { version = "0.7", optional = true }
 target-lexicon = "0.10"
 log = { version = "0.4.6", default-features = false }
@@ -25,7 +25,7 @@ gimli = { version = "0.21.0", default-features = false, features = ["write"], op
 smallvec = { version = "1.0.0" }
 thiserror = "1.0.4"
 byteorder = { version = "1.3.2", default-features = false }
-peepmatic-runtime = { path = "../peepmatic/crates/runtime", optional = true, version = "0.1.0" }
+peepmatic-runtime = { path = "../peepmatic/crates/runtime", optional = true, version = "0.2.0" }
 regalloc = "0.0.26"
 # It is a goal of the cranelift-codegen crate to have minimal external dependencies.
 # Please don't add any unless they are essential to the task of creating binary
@@ -33,8 +33,8 @@ regalloc = "0.0.26"
 # accomodated in `tests`.
 
 [build-dependencies]
-cranelift-codegen-meta = { path = "meta", version = "0.64.0" }
-peepmatic = { path = "../peepmatic", optional = true, version = "0.64.0" }
+cranelift-codegen-meta = { path = "meta", version = "0.65.0" }
+peepmatic = { path = "../peepmatic", optional = true, version = "0.65.0" }
 
 [features]
 default = ["std", "unwind"]
diff --git a/cranelift/codegen/meta/Cargo.toml b/cranelift/codegen/meta/Cargo.toml
index 9dd35dade..82a56334c 100644
--- a/cranelift/codegen/meta/Cargo.toml
+++ b/cranelift/codegen/meta/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cranelift-codegen-meta"
 authors = ["The Cranelift Project Developers"]
-version = "0.64.0"
+version = "0.65.0"
 description = "Metaprogram for cranelift-codegen code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -12,8 +12,8 @@ edition = "2018"
 rustdoc-args = [ "--document-private-items" ]
 
 [dependencies]
-cranelift-codegen-shared = { path = "../shared", version = "0.64.0" }
-cranelift-entity = { path = "../../entity", version = "0.64.0" }
+cranelift-codegen-shared = { path = "../shared", version = "0.65.0" }
+cranelift-entity = { path = "../../entity", version = "0.65.0" }
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/codegen/meta/src/isa/x86/encodings.rs b/cranelift/codegen/meta/src/isa/x86/encodings.rs
index 8afe4e400..d507abc0f 100644
--- a/cranelift/codegen/meta/src/isa/x86/encodings.rs
+++ b/cranelift/codegen/meta/src/isa/x86/encodings.rs
@@ -1639,6 +1639,7 @@ fn define_simd(
     let x86_movlhps = x86.by_name("x86_movlhps");
     let x86_movsd = x86.by_name("x86_movsd");
     let x86_packss = x86.by_name("x86_packss");
+    let x86_pblendw = x86.by_name("x86_pblendw");
     let x86_pextr = x86.by_name("x86_pextr");
     let x86_pinsr = x86.by_name("x86_pinsr");
     let x86_pmaxs = x86.by_name("x86_pmaxs");
@@ -1655,10 +1656,12 @@ fn define_simd(
     let x86_ptest = x86.by_name("x86_ptest");
     let x86_punpckh = x86.by_name("x86_punpckh");
     let x86_punpckl = x86.by_name("x86_punpckl");
+    let x86_vcvtudq2ps = x86.by_name("x86_vcvtudq2ps");
 
     // Shorthands for recipes.
     let rec_blend = r.template("blend");
     let rec_evex_reg_vvvv_rm_128 = r.template("evex_reg_vvvv_rm_128");
+    let rec_evex_reg_rm_128 = r.template("evex_reg_rm_128");
     let rec_f_ib = r.template("f_ib");
     let rec_fa = r.template("fa");
     let rec_fa_ib = r.template("fa_ib");
@@ -1702,6 +1705,7 @@ fn define_simd(
     let use_sse41_simd = settings.predicate_by_name("use_sse41_simd");
     let use_sse42_simd = settings.predicate_by_name("use_sse42_simd");
     let use_avx512dq_simd = settings.predicate_by_name("use_avx512dq_simd");
+    let use_avx512vl_simd = settings.predicate_by_name("use_avx512vl_simd");
 
     // SIMD vector size: eventually multiple vector sizes may be supported but for now only
     // SSE-sized vectors are available.
@@ -1741,6 +1745,13 @@ fn define_simd(
         e.enc_both_inferred_maybe_isap(instruction, template, Some(use_sse41_simd));
     }
 
+    // PBLENDW, select lanes using a u8 immediate.
+    for ty in ValueType::all_lane_types().filter(|t| t.lane_bits() == 16) {
+        let instruction = x86_pblendw.bind(vector(ty, sse_vector_size));
+        let template = rec_fa_ib.opcodes(&PBLENDW);
+        e.enc_both_inferred_maybe_isap(instruction, template, Some(use_sse41_simd));
+    }
+
     // SIMD scalar_to_vector; this uses MOV to copy the scalar value to an XMM register; according
     // to the Intel manual: "When the destination operand is an XMM register, the source operand is
     // written to the low doubleword of the register and the register is zero-extended to 128 bits."
@@ -1885,6 +1896,12 @@ fn define_simd(
             .bind(vector(F32, sse_vector_size))
             .bind(vector(I32, sse_vector_size));
         e.enc_both(fcvt_from_sint_32, rec_furm.opcodes(&CVTDQ2PS));
+
+        e.enc_32_64_maybe_isap(
+            x86_vcvtudq2ps,
+            rec_evex_reg_rm_128.opcodes(&VCVTUDQ2PS),
+            Some(use_avx512vl_simd), // TODO need an OR predicate to join with AVX512F
+        );
     }
 
     // SIMD vconst for special cases (all zeroes, all ones)
diff --git a/cranelift/codegen/meta/src/isa/x86/instructions.rs b/cranelift/codegen/meta/src/isa/x86/instructions.rs
index 53d91ca86..4afbc8874 100644
--- a/cranelift/codegen/meta/src/isa/x86/instructions.rs
+++ b/cranelift/codegen/meta/src/isa/x86/instructions.rs
@@ -145,6 +145,37 @@ pub(crate) fn define(
         .operands_out(vec![a]),
     );
 
+    let f32x4 = &TypeVar::new(
+        "f32x4",
+        "A floating point number",
+        TypeSetBuilder::new()
+            .floats(32..32)
+            .simd_lanes(4..4)
+            .build(),
+    );
+    let i32x4 = &TypeVar::new(
+        "i32x4",
+        "An integer type with the same number of lanes",
+        TypeSetBuilder::new().ints(32..32).simd_lanes(4..4).build(),
+    );
+    let x = &Operand::new("x", i32x4);
+    let a = &Operand::new("a", f32x4);
+
+    ig.push(
+        Inst::new(
+            "x86_vcvtudq2ps",
+            r#"
+        Convert unsigned integer to floating point.
+
+        Convert packed doubleword unsigned integers to packed single-precision floating-point 
+        values. This instruction does not trap.
+        "#,
+            &formats.unary,
+        )
+        .operands_in(vec![x])
+        .operands_out(vec![a]),
+    );
+
     let x = &Operand::new("x", Float);
     let a = &Operand::new("a", Float);
     let y = &Operand::new("y", Float);
@@ -302,6 +333,20 @@ pub(crate) fn define(
         .operands_out(vec![a]),
     );
 
+    let mask = &Operand::new("mask", uimm8).with_doc("mask to select lanes from b");
+    ig.push(
+        Inst::new(
+            "x86_pblendw",
+            r#"
+    Blend packed words using an immediate mask. Each bit of the 8-bit immediate corresponds to a 
+    lane in ``b``: if the bit is set, the lane is copied into ``a``.
+    "#,
+            &formats.ternary_imm8,
+        )
+        .operands_in(vec![a, b, mask])
+        .operands_out(vec![a]),
+    );
+
     let Idx = &Operand::new("Idx", uimm8).with_doc("Lane index");
     let x = &Operand::new("x", TxN);
     let a = &Operand::new("a", &TxN.lane_of());
diff --git a/cranelift/codegen/meta/src/isa/x86/legalize.rs b/cranelift/codegen/meta/src/isa/x86/legalize.rs
index 6e5c791b7..940ffe6d0 100644
--- a/cranelift/codegen/meta/src/isa/x86/legalize.rs
+++ b/cranelift/codegen/meta/src/isa/x86/legalize.rs
@@ -380,6 +380,7 @@ fn define_simd(
     let bxor = insts.by_name("bxor");
     let extractlane = insts.by_name("extractlane");
     let fcmp = insts.by_name("fcmp");
+    let fcvt_from_uint = insts.by_name("fcvt_from_uint");
     let fabs = insts.by_name("fabs");
     let fneg = insts.by_name("fneg");
     let iadd_imm = insts.by_name("iadd_imm");
@@ -788,6 +789,6 @@ fn define_simd(
     narrow.custom_legalize(ushr, "convert_ushr");
     narrow.custom_legalize(ishl, "convert_ishl");
 
-    // This lives in the expand group to avoid conflicting with, e.g., i128 legalizations.
     narrow_avx.custom_legalize(imul, "convert_i64x2_imul");
+    narrow_avx.custom_legalize(fcvt_from_uint, "expand_fcvt_from_uint_vector");
 }
diff --git a/cranelift/codegen/meta/src/isa/x86/mod.rs b/cranelift/codegen/meta/src/isa/x86/mod.rs
index 2e9305e9f..8d2e33be7 100644
--- a/cranelift/codegen/meta/src/isa/x86/mod.rs
+++ b/cranelift/codegen/meta/src/isa/x86/mod.rs
@@ -48,6 +48,7 @@ pub(crate) fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
     x86_32.legalize_type(F32, x86_expand);
     x86_32.legalize_type(F64, x86_expand);
     x86_32.legalize_value_type(VectorType::new(I64.into(), 2), x86_narrow_avx);
+    x86_32.legalize_value_type(VectorType::new(F32.into(), 4), x86_narrow_avx);
 
     x86_64.legalize_monomorphic(expand_flags);
     x86_64.legalize_default(x86_narrow);
@@ -60,6 +61,7 @@ pub(crate) fn define(shared_defs: &mut SharedDefinitions) -> TargetIsa {
     x86_64.legalize_type(F32, x86_expand);
     x86_64.legalize_type(F64, x86_expand);
     x86_64.legalize_value_type(VectorType::new(I64.into(), 2), x86_narrow_avx);
+    x86_64.legalize_value_type(VectorType::new(F32.into(), 4), x86_narrow_avx);
 
     let recipes = recipes::define(shared_defs, &settings, &regs);
 
diff --git a/cranelift/codegen/meta/src/isa/x86/opcodes.rs b/cranelift/codegen/meta/src/isa/x86/opcodes.rs
index c1d4fa0ef..d2391fe2e 100644
--- a/cranelift/codegen/meta/src/isa/x86/opcodes.rs
+++ b/cranelift/codegen/meta/src/isa/x86/opcodes.rs
@@ -347,6 +347,10 @@ pub static PAVGW: [u8; 3] = [0x66, 0x0f, 0xE3];
 /// in XMM0 and store the values into xmm1 (SSE4.1).
 pub static PBLENDVB: [u8; 4] = [0x66, 0x0f, 0x38, 0x10];
 
+/// Select words from xmm1 and xmm2/m128 from mask specified in imm8 and store the values into xmm1
+/// (SSE4.1).
+pub static PBLENDW: [u8; 4] = [0x66, 0x0f, 0x3a, 0x0e];
+
 /// Compare packed data for equal (SSE2).
 pub static PCMPEQB: [u8; 3] = [0x66, 0x0f, 0x74];
 
@@ -665,6 +669,12 @@ pub static UCOMISS: [u8; 2] = [0x0f, 0x2e];
 /// Raise invalid opcode instruction.
 pub static UNDEFINED2: [u8; 2] = [0x0f, 0x0b];
 
+/// Convert four packed unsigned doubleword integers from xmm2/m128/m32bcst to packed
+/// single-precision floating-point values in xmm1 with writemask k1. Rounding behavior
+/// is controlled by MXCSR but can be overriden by EVEX.L'L in static rounding mode
+/// (AVX512VL, AVX512F).
+pub static VCVTUDQ2PS: [u8; 3] = [0xf2, 0x0f, 0x7a];
+
 /// imm{16,32} XOR r/m{16,32,64}, possibly sign-extended.
 pub static XOR_IMM: [u8; 1] = [0x81];
 
diff --git a/cranelift/codegen/meta/src/isa/x86/recipes.rs b/cranelift/codegen/meta/src/isa/x86/recipes.rs
index 0cfd83d37..74645d0b5 100644
--- a/cranelift/codegen/meta/src/isa/x86/recipes.rs
+++ b/cranelift/codegen/meta/src/isa/x86/recipes.rs
@@ -3417,5 +3417,23 @@ pub(crate) fn define<'shared>(
         regs).rex_kind(RecipePrefixKind::Evex)
     );
 
+    recipes.add_template(
+        Template::new(
+            EncodingRecipeBuilder::new("evex_reg_rm_128", &formats.unary, 1)
+                .operands_in(vec![fpr])
+                .operands_out(vec![fpr])
+                .emit(
+                    r#"
+                // instruction encoding operands: reg (op1, w), rm (op2, r)
+                // this maps to:                  out_reg0,     in_reg0
+                let context = EvexContext::Other { length: EvexVectorLength::V128 };
+                let masking = EvexMasking::None;
+                put_evex(bits, out_reg0, 0, in_reg0, context, masking, sink); // params: reg, vvvv, rm
+                modrm_rr(in_reg0, out_reg0, sink); // params: rm, reg
+                "#,
+                ),
+            regs).rex_kind(RecipePrefixKind::Evex)
+    );
+
     recipes
 }
diff --git a/cranelift/codegen/meta/src/isa/x86/settings.rs b/cranelift/codegen/meta/src/isa/x86/settings.rs
index 0ef36b668..0059bf086 100644
--- a/cranelift/codegen/meta/src/isa/x86/settings.rs
+++ b/cranelift/codegen/meta/src/isa/x86/settings.rs
@@ -23,7 +23,12 @@ pub(crate) fn define(shared: &SettingGroup) -> SettingGroup {
     );
     let has_avx512vl = settings.add_bool(
         "has_avx512vl",
-        "AVX512DQ: CPUID.07H:EBX.AVX512VL[bit 31]",
+        "AVX512VL: CPUID.07H:EBX.AVX512VL[bit 31]",
+        false,
+    );
+    let has_avx512f = settings.add_bool(
+        "has_avx512f",
+        "AVX512F: CPUID.07H:EBX.AVX512F[bit 16]",
         false,
     );
     let has_popcnt = settings.add_bool("has_popcnt", "POPCNT: CPUID.01H:ECX.POPCNT[bit 23]", false);
@@ -76,6 +81,10 @@ pub(crate) fn define(shared: &SettingGroup) -> SettingGroup {
         "use_avx512vl_simd",
         predicate!(shared_enable_simd && has_avx512vl),
     );
+    settings.add_predicate(
+        "use_avx512f_simd",
+        predicate!(shared_enable_simd && has_avx512f),
+    );
 
     settings.add_predicate("use_popcnt", predicate!(has_popcnt && has_sse42));
     settings.add_predicate("use_bmi1", predicate!(has_bmi1));
diff --git a/cranelift/codegen/shared/Cargo.toml b/cranelift/codegen/shared/Cargo.toml
index 316e36e33..a4506135b 100644
--- a/cranelift/codegen/shared/Cargo.toml
+++ b/cranelift/codegen/shared/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen-shared"
-version = "0.64.0"
+version = "0.65.0"
 description = "For code shared between cranelift-codegen-meta and cranelift-codegen"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/codegen/src/abi.rs b/cranelift/codegen/src/abi.rs
index 0da415b5c..cf4780e35 100644
--- a/cranelift/codegen/src/abi.rs
+++ b/cranelift/codegen/src/abi.rs
@@ -80,7 +80,10 @@ impl ValueConversion {
 
     /// Is this a conversion to pointer?
     pub fn is_pointer(self) -> bool {
-        matches!(self, Self::Pointer(_))
+        match self {
+            Self::Pointer(_) => true,
+            _ => false,
+        }
     }
 }
 
diff --git a/cranelift/codegen/src/ir/instructions.rs b/cranelift/codegen/src/ir/instructions.rs
index 653926a24..6354b9258 100644
--- a/cranelift/codegen/src/ir/instructions.rs
+++ b/cranelift/codegen/src/ir/instructions.rs
@@ -311,7 +311,7 @@ impl InstructionData {
                 arg: _,
                 imm,
             } => {
-                if matches!(opcode, Opcode::SdivImm | Opcode::SremImm) {
+                if *opcode == Opcode::SdivImm || *opcode == Opcode::SremImm {
                     imm.sign_extend_from_width(bit_width);
                 }
             }
diff --git a/cranelift/codegen/src/isa/aarch64/inst/args.rs b/cranelift/codegen/src/isa/aarch64/inst/args.rs
index dd4191247..2b416145b 100644
--- a/cranelift/codegen/src/isa/aarch64/inst/args.rs
+++ b/cranelift/codegen/src/isa/aarch64/inst/args.rs
@@ -133,6 +133,9 @@ pub enum MemArg {
     /// first.
     RegScaledExtended(Reg, Reg, Type, ExtendOp),
 
+    /// Register plus register offset, with index sign- or zero-extended first.
+    RegExtended(Reg, Reg, ExtendOp),
+
     /// Unscaled signed 9-bit immediate offset from reg.
     Unscaled(Reg, SImm9),
 
@@ -412,6 +415,19 @@ impl ShowWithRRU for MemArg {
                     shift
                 )
             }
+            &MemArg::RegExtended(r1, r2, op) => {
+                let size = match op {
+                    ExtendOp::SXTW | ExtendOp::UXTW => InstSize::Size32,
+                    _ => InstSize::Size64,
+                };
+                let op = op.show_rru(mb_rru);
+                format!(
+                    "[{}, {}, {}]",
+                    r1.show_rru(mb_rru),
+                    show_ireg_sized(r2, mb_rru, size),
+                    op,
+                )
+            }
             &MemArg::Label(ref label) => label.show_rru(mb_rru),
             &MemArg::PreIndexed(r, simm9) => format!(
                 "[{}, {}]!",
diff --git a/cranelift/codegen/src/isa/aarch64/inst/emit.rs b/cranelift/codegen/src/isa/aarch64/inst/emit.rs
index d4bf3055e..263241835 100644
--- a/cranelift/codegen/src/isa/aarch64/inst/emit.rs
+++ b/cranelift/codegen/src/isa/aarch64/inst/emit.rs
@@ -707,6 +707,16 @@ impl MachInstEmit for Inst {
                             op, r1, r2, /* scaled = */ true, extendop, rd,
                         ));
                     }
+                    &MemArg::RegExtended(r1, r2, extendop) => {
+                        sink.put4(enc_ldst_reg(
+                            op,
+                            r1,
+                            r2,
+                            /* scaled = */ false,
+                            Some(extendop),
+                            rd,
+                        ));
+                    }
                     &MemArg::Label(ref label) => {
                         let offset = match label {
                             // cast i32 to u32 (two's-complement)
@@ -833,6 +843,16 @@ impl MachInstEmit for Inst {
                             op, r1, r2, /* scaled = */ true, extendop, rd,
                         ));
                     }
+                    &MemArg::RegExtended(r1, r2, extendop) => {
+                        sink.put4(enc_ldst_reg(
+                            op,
+                            r1,
+                            r2,
+                            /* scaled = */ false,
+                            Some(extendop),
+                            rd,
+                        ));
+                    }
                     &MemArg::Label(..) => {
                         panic!("Store to a MemLabel not implemented!");
                     }
diff --git a/cranelift/codegen/src/isa/aarch64/inst/mod.rs b/cranelift/codegen/src/isa/aarch64/inst/mod.rs
index 831481814..6c5eb4d99 100644
--- a/cranelift/codegen/src/isa/aarch64/inst/mod.rs
+++ b/cranelift/codegen/src/isa/aarch64/inst/mod.rs
@@ -1049,7 +1049,8 @@ fn memarg_regs(memarg: &MemArg, collector: &mut RegUsageCollector) {
         }
         &MemArg::RegReg(r1, r2, ..)
         | &MemArg::RegScaled(r1, r2, ..)
-        | &MemArg::RegScaledExtended(r1, r2, ..) => {
+        | &MemArg::RegScaledExtended(r1, r2, ..)
+        | &MemArg::RegExtended(r1, r2, ..) => {
             collector.add_use(r1);
             collector.add_use(r2);
         }
@@ -1384,15 +1385,10 @@ fn aarch64_map_regs<RUM: RegUsageMapper>(inst: &mut Inst, mapper: &RUM) {
         match mem {
             &mut MemArg::Unscaled(ref mut reg, ..) => map_use(m, reg),
             &mut MemArg::UnsignedOffset(ref mut reg, ..) => map_use(m, reg),
-            &mut MemArg::RegReg(ref mut r1, ref mut r2) => {
-                map_use(m, r1);
-                map_use(m, r2);
-            }
-            &mut MemArg::RegScaled(ref mut r1, ref mut r2, ..) => {
-                map_use(m, r1);
-                map_use(m, r2);
-            }
-            &mut MemArg::RegScaledExtended(ref mut r1, ref mut r2, ..) => {
+            &mut MemArg::RegReg(ref mut r1, ref mut r2)
+            | &mut MemArg::RegScaled(ref mut r1, ref mut r2, ..)
+            | &mut MemArg::RegScaledExtended(ref mut r1, ref mut r2, ..)
+            | &mut MemArg::RegExtended(ref mut r1, ref mut r2, ..) => {
                 map_use(m, r1);
                 map_use(m, r2);
             }
diff --git a/cranelift/codegen/src/isa/aarch64/lower.rs b/cranelift/codegen/src/isa/aarch64/lower.rs
index 5cb4940b6..d1526c2ae 100644
--- a/cranelift/codegen/src/isa/aarch64/lower.rs
+++ b/cranelift/codegen/src/isa/aarch64/lower.rs
@@ -550,7 +550,51 @@ pub(crate) fn lower_address<C: LowerCtx<I = Inst>>(
         return MemArg::RegOffset(reg, offset as i64, elem_ty);
     }
 
-    // Handle two regs and a zero offset, if possible.
+    // Handle two regs and a zero offset with built-in extend, if possible.
+    if addends.len() == 2 && offset == 0 {
+        // r1, r2 (to be extended), r2_bits, is_signed
+        let mut parts: Option<(Reg, Reg, usize, bool)> = None;
+        // Handle extension of either first or second addend.
+        for i in 0..2 {
+            if let Some((op, ext_insn)) =
+                maybe_input_insn_multi(ctx, addends[i], &[Opcode::Uextend, Opcode::Sextend])
+            {
+                // Non-extended addend.
+                let r1 = input_to_reg(ctx, addends[1 - i], NarrowValueMode::ZeroExtend64);
+                // Extended addend.
+                let r2 = input_to_reg(
+                    ctx,
+                    InsnInput {
+                        insn: ext_insn,
+                        input: 0,
+                    },
+                    NarrowValueMode::None,
+                );
+                let r2_bits = ty_bits(ctx.input_ty(ext_insn, 0));
+                parts = Some((
+                    r1,
+                    r2,
+                    r2_bits,
+                    /* is_signed = */ op == Opcode::Sextend,
+                ));
+                break;
+            }
+        }
+
+        if let Some((r1, r2, r2_bits, is_signed)) = parts {
+            match (r2_bits, is_signed) {
+                (32, false) => {
+                    return MemArg::RegExtended(r1, r2, ExtendOp::UXTW);
+                }
+                (32, true) => {
+                    return MemArg::RegExtended(r1, r2, ExtendOp::SXTW);
+                }
+                _ => {}
+            }
+        }
+    }
+
+    // Handle two regs and a zero offset in the general case, if possible.
     if addends.len() == 2 && offset == 0 {
         let ra = input_to_reg(ctx, addends[0], NarrowValueMode::ZeroExtend64);
         let rb = input_to_reg(ctx, addends[1], NarrowValueMode::ZeroExtend64);
@@ -812,6 +856,20 @@ pub(crate) fn maybe_input_insn<C: LowerCtx<I = Inst>>(
     None
 }
 
+/// Checks for an instance of any one of `ops` feeding the given input.
+pub(crate) fn maybe_input_insn_multi<C: LowerCtx<I = Inst>>(
+    c: &mut C,
+    input: InsnInput,
+    ops: &[Opcode],
+) -> Option<(Opcode, IRInst)> {
+    for &op in ops {
+        if let Some(inst) = maybe_input_insn(c, input, op) {
+            return Some((op, inst));
+        }
+    }
+    None
+}
+
 /// Checks for an instance of `op` feeding the given input, possibly via a conversion `conv` (e.g.,
 /// Bint or a bitcast).
 ///
diff --git a/cranelift/codegen/src/isa/aarch64/lower_inst.rs b/cranelift/codegen/src/isa/aarch64/lower_inst.rs
index bce727655..5805ab63c 100644
--- a/cranelift/codegen/src/isa/aarch64/lower_inst.rs
+++ b/cranelift/codegen/src/isa/aarch64/lower_inst.rs
@@ -2046,6 +2046,7 @@ pub(crate) fn lower_insn_to_regs<C: LowerCtx<I = Inst>>(
         | Opcode::X86Pop
         | Opcode::X86Bsr
         | Opcode::X86Bsf
+        | Opcode::X86Pblendw
         | Opcode::X86Pshufd
         | Opcode::X86Pshufb
         | Opcode::X86Pextr
@@ -2066,6 +2067,7 @@ pub(crate) fn lower_insn_to_regs<C: LowerCtx<I = Inst>>(
         | Opcode::X86Packss
         | Opcode::X86Punpckh
         | Opcode::X86Punpckl
+        | Opcode::X86Vcvtudq2ps
         | Opcode::X86ElfTlsGetAddr
         | Opcode::X86MachoTlsGetAddr => {
             panic!("x86-specific opcode in supposedly arch-neutral IR!");
diff --git a/cranelift/codegen/src/isa/x86/enc_tables.rs b/cranelift/codegen/src/isa/x86/enc_tables.rs
index a751ea313..0786d3757 100644
--- a/cranelift/codegen/src/isa/x86/enc_tables.rs
+++ b/cranelift/codegen/src/isa/x86/enc_tables.rs
@@ -598,6 +598,9 @@ fn expand_minmax(
 
 /// x86 has no unsigned-to-float conversions. We handle the easy case of zero-extending i32 to
 /// i64 with a pattern, the rest needs more code.
+///
+/// Note that this is the scalar implementation; for the vector implemenation see
+/// [expand_fcvt_from_uint_vector].
 fn expand_fcvt_from_uint(
     inst: ir::Inst,
     func: &mut ir::Function,
@@ -679,6 +682,56 @@ fn expand_fcvt_from_uint(
     cfg.recompute_block(pos.func, done);
 }
 
+/// To convert packed unsigned integers to their float equivalents, we must legalize to a special
+/// AVX512 instruction (using MCSR rounding) or use a long sequence of instructions. This logic is
+/// separate from [expand_fcvt_from_uint] above (the scalar version), only due to how the transform
+/// groups are set up; TODO if we change the SIMD legalization groups, then this logic could be
+/// merged into [expand_fcvt_from_uint] (see https://github.com/bytecodealliance/wasmtime/issues/1745).
+fn expand_fcvt_from_uint_vector(
+    inst: ir::Inst,
+    func: &mut ir::Function,
+    _cfg: &mut ControlFlowGraph,
+    isa: &dyn TargetIsa,
+) {
+    let mut pos = FuncCursor::new(func).at_inst(inst);
+    pos.use_srcloc(inst);
+
+    if let ir::InstructionData::Unary {
+        opcode: ir::Opcode::FcvtFromUint,
+        arg,
+    } = pos.func.dfg[inst]
+    {
+        let controlling_type = pos.func.dfg.ctrl_typevar(inst);
+        if controlling_type == F32X4 {
+            debug_assert_eq!(pos.func.dfg.value_type(arg), I32X4);
+            let x86_isa = isa
+                .as_any()
+                .downcast_ref::<isa::x86::Isa>()
+                .expect("the target ISA must be x86 at this point");
+            if x86_isa.isa_flags.use_avx512vl_simd() || x86_isa.isa_flags.use_avx512f_simd() {
+                // If we have certain AVX512 features, we can lower this instruction simply.
+                pos.func.dfg.replace(inst).x86_vcvtudq2ps(arg);
+            } else {
+                // Otherwise, we default to a very lengthy SSE4.1-compatible sequence: PXOR,
+                // PBLENDW, PSUB, CVTDQ2PS, PSRLD, CVTDQ2PS, ADDPS, ADDPS
+                let bitcast_arg = pos.ins().raw_bitcast(I16X8, arg);
+                let zero_constant = pos.func.dfg.constants.insert(vec![0; 16].into());
+                let zero = pos.ins().vconst(I16X8, zero_constant);
+                let low = pos.ins().x86_pblendw(zero, bitcast_arg, 0x55);
+                let bitcast_low = pos.ins().raw_bitcast(I32X4, low);
+                let high = pos.ins().isub(arg, bitcast_low);
+                let convert_low = pos.ins().fcvt_from_sint(F32X4, bitcast_low);
+                let shift_high = pos.ins().ushr_imm(high, 1);
+                let convert_high = pos.ins().fcvt_from_sint(F32X4, shift_high);
+                let double_high = pos.ins().fadd(convert_high, convert_high);
+                pos.func.dfg.replace(inst).fadd(double_high, convert_low);
+            }
+        } else {
+            unimplemented!("cannot legalize {}", pos.func.dfg.display_inst(inst, None))
+        }
+    }
+}
+
 fn expand_fcvt_to_sint(
     inst: ir::Inst,
     func: &mut ir::Function,
diff --git a/cranelift/entity/Cargo.toml b/cranelift/entity/Cargo.toml
index 8efe37758..bea988161 100644
--- a/cranelift/entity/Cargo.toml
+++ b/cranelift/entity/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-entity"
-version = "0.64.0"
+version = "0.65.0"
 description = "Data structures using entity references as mapping keys"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-entity"
diff --git a/cranelift/faerie/Cargo.toml b/cranelift/faerie/Cargo.toml
index b6ad39383..131a30bec 100644
--- a/cranelift/faerie/Cargo.toml
+++ b/cranelift/faerie/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-faerie"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Emit Cranelift output to native object files with Faerie"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -10,8 +10,8 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-module = { path = "../module", version = "0.64.0" }
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false, features = ["std"] }
+cranelift-module = { path = "../module", version = "0.65.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false, features = ["std"] }
 faerie = "0.15.0"
 goblin = "0.1.0"
 anyhow = "1.0"
diff --git a/cranelift/frontend/Cargo.toml b/cranelift/frontend/Cargo.toml
index a6d92cf3f..229634a69 100644
--- a/cranelift/frontend/Cargo.toml
+++ b/cranelift/frontend/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-frontend"
-version = "0.64.0"
+version = "0.65.0"
 description = "Cranelift IR builder helper"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-frontend"
@@ -11,7 +11,7 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
 target-lexicon = "0.10"
 log = { version = "0.4.6", default-features = false }
 hashbrown = { version = "0.7", optional = true }
diff --git a/cranelift/interpreter/Cargo.toml b/cranelift/interpreter/Cargo.toml
index 1217f5b45..1daf35bfb 100644
--- a/cranelift/interpreter/Cargo.toml
+++ b/cranelift/interpreter/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-interpreter"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Interpret Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -11,9 +11,9 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
-cranelift-reader = { path = "../reader", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
+cranelift-reader = { path = "../reader", version = "0.65.0" }
 hashbrown = { version = "0.7.1", optional = true }
 log = { version = "0.4.8", default-features = false }
 thiserror = "1.0.15"
@@ -21,7 +21,7 @@ walkdir = "2.3.1"
 pretty_env_logger = "0.4.0"
 
 [dev-dependencies]
-cranelift-frontend = { path = "../frontend", version = "0.64.0" }
+cranelift-frontend = { path = "../frontend", version = "0.65.0" }
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/module/Cargo.toml b/cranelift/module/Cargo.toml
index 9d6537ba4..ebe4ea6a0 100644
--- a/cranelift/module/Cargo.toml
+++ b/cranelift/module/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-module"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for linking functions and data with Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -11,8 +11,8 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
 hashbrown = { version = "0.6", optional = true }
 log = { version = "0.4.6", default-features = false }
 thiserror = "1.0.4"
diff --git a/cranelift/native/Cargo.toml b/cranelift/native/Cargo.toml
index 8306c7354..b9e69c7bf 100644
--- a/cranelift/native/Cargo.toml
+++ b/cranelift/native/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-native"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for targeting the host with Cranelift"
 documentation = "https://docs.rs/cranelift-native"
@@ -11,7 +11,7 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
 target-lexicon = "0.10"
 
 [target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dependencies]
diff --git a/cranelift/native/src/lib.rs b/cranelift/native/src/lib.rs
index b45dab8dd..903fbb352 100644
--- a/cranelift/native/src/lib.rs
+++ b/cranelift/native/src/lib.rs
@@ -91,6 +91,9 @@ fn parse_x86_cpuid(isa_builder: &mut isa::Builder) -> Result<(), &'static str> {
         if info.has_avx512vl() {
             isa_builder.enable("has_avx512vl").unwrap();
         }
+        if info.has_avx512f() {
+            isa_builder.enable("has_avx512f").unwrap();
+        }
     }
     if let Some(info) = cpuid.get_extended_function_info() {
         if info.has_lzcnt() {
diff --git a/cranelift/object/Cargo.toml b/cranelift/object/Cargo.toml
index 8c4c44fc7..ba05301df 100644
--- a/cranelift/object/Cargo.toml
+++ b/cranelift/object/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-object"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Emit Cranelift output to native object files with `object`"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -10,10 +10,11 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-module = { path = "../module", version = "0.64.0" }
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false, features = ["std"] }
-object = { version = "0.18", default-features = false, features = ["write"] }
+cranelift-module = { path = "../module", version = "0.65.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false, features = ["std"] }
+object = { version = "0.19", default-features = false, features = ["write"] }
 target-lexicon = "0.10"
+anyhow = "1.0"
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/object/src/backend.rs b/cranelift/object/src/backend.rs
index 664dd34ab..04ec31909 100644
--- a/cranelift/object/src/backend.rs
+++ b/cranelift/object/src/backend.rs
@@ -1,5 +1,6 @@
 //! Defines `ObjectBackend`.
 
+use anyhow::anyhow;
 use cranelift_codegen::binemit::{
     Addend, CodeOffset, NullStackmapSink, Reloc, RelocSink, TrapSink,
 };
@@ -7,8 +8,8 @@ use cranelift_codegen::entity::SecondaryMap;
 use cranelift_codegen::isa::TargetIsa;
 use cranelift_codegen::{self, binemit, ir};
 use cranelift_module::{
-    Backend, DataContext, DataDescription, DataId, FuncId, Init, Linkage, ModuleNamespace,
-    ModuleResult,
+    Backend, DataContext, DataDescription, DataId, FuncId, Init, Linkage, ModuleError,
+    ModuleNamespace, ModuleResult,
 };
 use object::write::{
     Object, Relocation, SectionId, StandardSection, Symbol, SymbolId, SymbolSection,
@@ -18,11 +19,14 @@ use object::{
 };
 use std::collections::HashMap;
 use std::mem;
-use target_lexicon::{BinaryFormat, PointerWidth};
+use target_lexicon::PointerWidth;
 
 /// A builder for `ObjectBackend`.
 pub struct ObjectBuilder {
     isa: Box<dyn TargetIsa>,
+    binary_format: object::BinaryFormat,
+    architecture: object::Architecture,
+    endian: object::Endianness,
     name: Vec<u8>,
     libcall_names: Box<dyn Fn(ir::LibCall) -> String>,
     function_alignment: u64,
@@ -40,13 +44,47 @@ impl ObjectBuilder {
         isa: Box<dyn TargetIsa>,
         name: V,
         libcall_names: Box<dyn Fn(ir::LibCall) -> String>,
-    ) -> Self {
-        Self {
+    ) -> ModuleResult<Self> {
+        let binary_format = match isa.triple().binary_format {
+            target_lexicon::BinaryFormat::Elf => object::BinaryFormat::Elf,
+            target_lexicon::BinaryFormat::Coff => object::BinaryFormat::Coff,
+            target_lexicon::BinaryFormat::Macho => object::BinaryFormat::MachO,
+            target_lexicon::BinaryFormat::Wasm => {
+                return Err(ModuleError::Backend(anyhow!(
+                    "binary format wasm is unsupported",
+                )))
+            }
+            target_lexicon::BinaryFormat::Unknown => {
+                return Err(ModuleError::Backend(anyhow!("binary format is unknown")))
+            }
+        };
+        let architecture = match isa.triple().architecture {
+            target_lexicon::Architecture::I386
+            | target_lexicon::Architecture::I586
+            | target_lexicon::Architecture::I686 => object::Architecture::I386,
+            target_lexicon::Architecture::X86_64 => object::Architecture::X86_64,
+            target_lexicon::Architecture::Arm(_) => object::Architecture::Arm,
+            target_lexicon::Architecture::Aarch64(_) => object::Architecture::Aarch64,
+            architecture => {
+                return Err(ModuleError::Backend(anyhow!(
+                    "target architecture {:?} is unsupported",
+                    architecture,
+                )))
+            }
+        };
+        let endian = match isa.triple().endianness().unwrap() {
+            target_lexicon::Endianness::Little => object::Endianness::Little,
+            target_lexicon::Endianness::Big => object::Endianness::Big,
+        };
+        Ok(Self {
             isa,
+            binary_format,
+            architecture,
+            endian,
             name: name.into(),
             libcall_names,
             function_alignment: 1,
-        }
+        })
     }
 
     /// Set the alignment used for functions.
@@ -85,8 +123,7 @@ impl Backend for ObjectBackend {
 
     /// Create a new `ObjectBackend` using the given Cranelift target.
     fn new(builder: ObjectBuilder) -> Self {
-        let triple = builder.isa.triple();
-        let mut object = Object::new(triple.binary_format, triple.architecture);
+        let mut object = Object::new(builder.binary_format, builder.architecture, builder.endian);
         object.add_file_symbol(builder.name);
         Self {
             isa: builder.isa,
@@ -383,7 +420,7 @@ impl Backend for ObjectBackend {
         }
 
         // Indicate that this object has a non-executable stack.
-        if self.object.format() == BinaryFormat::Elf {
+        if self.object.format() == object::BinaryFormat::Elf {
             self.object.add_section(
                 vec![],
                 ".note.GNU-stack".as_bytes().to_vec(),
@@ -509,12 +546,12 @@ struct RelocRecord {
 }
 
 struct ObjectRelocSink {
-    format: BinaryFormat,
+    format: object::BinaryFormat,
     relocs: Vec<RelocRecord>,
 }
 
 impl ObjectRelocSink {
-    fn new(format: BinaryFormat) -> Self {
+    fn new(format: object::BinaryFormat) -> Self {
         Self {
             format,
             relocs: vec![],
@@ -552,7 +589,7 @@ impl RelocSink for ObjectRelocSink {
             Reloc::ElfX86_64TlsGd => {
                 assert_eq!(
                     self.format,
-                    BinaryFormat::Elf,
+                    object::BinaryFormat::Elf,
                     "ElfX86_64TlsGd is not supported for this file format"
                 );
                 (
@@ -564,7 +601,7 @@ impl RelocSink for ObjectRelocSink {
             Reloc::MachOX86_64Tlv => {
                 assert_eq!(
                     self.format,
-                    BinaryFormat::Macho,
+                    object::BinaryFormat::MachO,
                     "MachOX86_64Tlv is not supported for this file format"
                 );
                 addend += 4; // X86_64_RELOC_TLV has an implicit addend of -4
diff --git a/cranelift/peepmatic/Cargo.toml b/cranelift/peepmatic/Cargo.toml
index e4d625120..3171153c7 100644
--- a/cranelift/peepmatic/Cargo.toml
+++ b/cranelift/peepmatic/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -10,8 +10,8 @@ description = "DSL and compiler for generating peephole optimizers"
 
 [dependencies]
 anyhow = "1.0.27"
-peepmatic-automata = { version = "0.1.0", path = "crates/automata", features = ["dot"] }
-peepmatic-macro = { version = "0.1.0", path = "crates/macro" }
-peepmatic-runtime = { version = "0.1.0", path = "crates/runtime", features = ["construct"] }
+peepmatic-automata = { version = "0.2.0", path = "crates/automata", features = ["dot"] }
+peepmatic-macro = { version = "0.2.0", path = "crates/macro" }
+peepmatic-runtime = { version = "0.2.0", path = "crates/runtime", features = ["construct"] }
 wast = "15.0.0"
 z3 = { version = "0.5.1", features = ["static-link-z3"] }
diff --git a/cranelift/peepmatic/crates/automata/Cargo.toml b/cranelift/peepmatic/crates/automata/Cargo.toml
index b08c869d7..1e6a3c8d4 100644
--- a/cranelift/peepmatic/crates/automata/Cargo.toml
+++ b/cranelift/peepmatic/crates/automata/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic-automata"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
diff --git a/cranelift/peepmatic/crates/fuzzing/Cargo.toml b/cranelift/peepmatic/crates/fuzzing/Cargo.toml
index a3ccb9179..6c25319ec 100644
--- a/cranelift/peepmatic/crates/fuzzing/Cargo.toml
+++ b/cranelift/peepmatic/crates/fuzzing/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic-fuzzing"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 publish = false
diff --git a/cranelift/peepmatic/crates/macro/Cargo.toml b/cranelift/peepmatic/crates/macro/Cargo.toml
index 2cfaf26ba..868ec6038 100644
--- a/cranelift/peepmatic/crates/macro/Cargo.toml
+++ b/cranelift/peepmatic/crates/macro/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic-macro"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
diff --git a/cranelift/peepmatic/crates/runtime/Cargo.toml b/cranelift/peepmatic/crates/runtime/Cargo.toml
index fd3ed05a7..75b73388d 100644
--- a/cranelift/peepmatic/crates/runtime/Cargo.toml
+++ b/cranelift/peepmatic/crates/runtime/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic-runtime"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -12,8 +12,8 @@ description = "Runtime support for peepmatic peephole optimizers"
 bincode = "1.2.1"
 bumpalo = "3.2.0"
 log = "0.4.8"
-peepmatic-automata = { version = "0.1.0", path = "../automata", features = ["serde"] }
-peepmatic-macro = { version = "0.1.0", path = "../macro" }
+peepmatic-automata = { version = "0.2.0", path = "../automata", features = ["serde"] }
+peepmatic-macro = { version = "0.2.0", path = "../macro" }
 serde = { version = "1.0.105", features = ["derive"] }
 thiserror = "1.0.15"
 wast = { version = "15.0.0", optional = true }
diff --git a/cranelift/preopt/Cargo.toml b/cranelift/preopt/Cargo.toml
index 2e428a02d..37aed2ef3 100644
--- a/cranelift/preopt/Cargo.toml
+++ b/cranelift/preopt/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-preopt"
-version = "0.64.0"
+version = "0.65.0"
 description = "Support for optimizations in Cranelift"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-preopt"
@@ -12,8 +12,8 @@ keywords = ["optimize", "compile", "compiler", "jit"]
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
 # This is commented out because it doesn't build on Rust 1.25.0, which
 # cranelift currently supports.
 # rustc_apfloat = { version = "0.1.2", default-features = false }
diff --git a/cranelift/reader/Cargo.toml b/cranelift/reader/Cargo.toml
index b780b98b7..661503f34 100644
--- a/cranelift/reader/Cargo.toml
+++ b/cranelift/reader/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-reader"
-version = "0.64.0"
+version = "0.65.0"
 description = "Cranelift textual IR reader"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-reader"
@@ -10,7 +10,7 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0" }
 smallvec = "1.0.0"
 target-lexicon = "0.10"
 thiserror = "1.0.15"
diff --git a/cranelift/serde/Cargo.toml b/cranelift/serde/Cargo.toml
index cfae11d16..15927c052 100644
--- a/cranelift/serde/Cargo.toml
+++ b/cranelift/serde/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-serde"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Serializer/Deserializer for Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -18,8 +18,8 @@ clap = "2.32.0"
 serde = "1.0.8"
 serde_derive = "1.0.75"
 serde_json = "1.0.26"
-cranelift-codegen = { path = "../codegen", version = "0.64.0" }
-cranelift-reader = { path = "../reader", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0" }
+cranelift-reader = { path = "../reader", version = "0.65.0" }
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/simplejit/Cargo.toml b/cranelift/simplejit/Cargo.toml
index 042d94677..ab053456d 100644
--- a/cranelift/simplejit/Cargo.toml
+++ b/cranelift/simplejit/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-simplejit"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "A simple JIT library backed by Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -10,9 +10,9 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-module = { path = "../module", version = "0.64.0" }
-cranelift-native = { path = "../native", version = "0.64.0" }
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false, features = ["std"] }
+cranelift-module = { path = "../module", version = "0.65.0" }
+cranelift-native = { path = "../native", version = "0.65.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false, features = ["std"] }
 region = "2.1.0"
 libc = { version = "0.2.42" }
 errno = "0.2.4"
@@ -27,9 +27,9 @@ selinux-fix = ['memmap']
 default = []
 
 [dev-dependencies]
-cranelift = { path = "../umbrella", version = "0.64.0" }
-cranelift-frontend = { path = "../frontend", version = "0.64.0" }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
+cranelift = { path = "../umbrella", version = "0.65.0" }
+cranelift-frontend = { path = "../frontend", version = "0.65.0" }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
 
 [badges]
 maintenance = { status = "experimental" }
diff --git a/cranelift/umbrella/Cargo.toml b/cranelift/umbrella/Cargo.toml
index 20786f91e..56ecfde9b 100644
--- a/cranelift/umbrella/Cargo.toml
+++ b/cranelift/umbrella/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift"
-version = "0.64.0"
+version = "0.65.0"
 description = "Umbrella for commonly-used cranelift crates"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift"
@@ -12,8 +12,8 @@ keywords = ["compile", "compiler", "jit"]
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
-cranelift-frontend = { path = "../frontend", version = "0.64.0", default-features = false }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
+cranelift-frontend = { path = "../frontend", version = "0.65.0", default-features = false }
 
 [features]
 default = ["std"]
diff --git a/cranelift/wasm/Cargo.toml b/cranelift/wasm/Cargo.toml
index 728e25e29..2149d6f8b 100644
--- a/cranelift/wasm/Cargo.toml
+++ b/cranelift/wasm/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-wasm"
-version = "0.64.0"
+version = "0.65.0"
 authors = ["The Cranelift Project Developers"]
 description = "Translator from WebAssembly to Cranelift IR"
 documentation = "https://docs.rs/cranelift-wasm"
@@ -13,9 +13,9 @@ edition = "2018"
 
 [dependencies]
 wasmparser = { version = "0.57.0", default-features = false }
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false }
-cranelift-entity = { path = "../entity", version = "0.64.0" }
-cranelift-frontend = { path = "../frontend", version = "0.64.0", default-features = false }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false }
+cranelift-entity = { path = "../entity", version = "0.65.0" }
+cranelift-frontend = { path = "../frontend", version = "0.65.0", default-features = false }
 hashbrown = { version = "0.7", optional = true }
 log = { version = "0.4.6", default-features = false }
 serde = { version = "1.0.94", features = ["derive"], optional = true }
@@ -25,7 +25,7 @@ thiserror = "1.0.4"
 wat = "1.0.18"
 target-lexicon = "0.10"
 # Enable the riscv feature for cranelift-codegen, as some tests require it
-cranelift-codegen = { path = "../codegen", version = "0.64.0", default-features = false, features = ["riscv"] }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", default-features = false, features = ["riscv"] }
 
 [features]
 default = ["std"]
diff --git a/cranelift/wasm/src/code_translator.rs b/cranelift/wasm/src/code_translator.rs
index df6eda176..20c6e3af8 100644
--- a/cranelift/wasm/src/code_translator.rs
+++ b/cranelift/wasm/src/code_translator.rs
@@ -1544,9 +1544,12 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
             let a = pop1_with_bitcast(state, I32X4, builder);
             state.push1(builder.ins().fcvt_from_sint(F32X4, a))
         }
+        Operator::F32x4ConvertI32x4U => {
+            let a = pop1_with_bitcast(state, I32X4, builder);
+            state.push1(builder.ins().fcvt_from_uint(F32X4, a))
+        }
         Operator::I32x4TruncSatF32x4S
         | Operator::I32x4TruncSatF32x4U
-        | Operator::F32x4ConvertI32x4U
         | Operator::I8x16Abs
         | Operator::I16x8Abs
         | Operator::I32x4Abs
diff --git a/crates/c-api/Cargo.toml b/crates/c-api/Cargo.toml
index 3e9901959..9bc524223 100644
--- a/crates/c-api/Cargo.toml
+++ b/crates/c-api/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-c-api"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "C API to expose the Wasmtime runtime"
 license = "Apache-2.0 WITH LLVM-exception"
diff --git a/crates/c-api/macros/Cargo.toml b/crates/c-api/macros/Cargo.toml
index 30d2c73b8..5ae98e1da 100644
--- a/crates/c-api/macros/Cargo.toml
+++ b/crates/c-api/macros/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-c-api-macros"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 edition = "2018"
 publish = false
diff --git a/crates/debug/Cargo.toml b/crates/debug/Cargo.toml
index 601d714ee..e004256b2 100644
--- a/crates/debug/Cargo.toml
+++ b/crates/debug/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-debug"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Debug utils for WebAsssembly code in Cranelift"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -14,8 +14,8 @@ edition = "2018"
 [dependencies]
 gimli = "0.21.0"
 wasmparser = "0.57.0"
-object = { version = "0.18", default-features = false, features = ["write"] }
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
+object = { version = "0.19", default-features = false, features = ["write"] }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
 target-lexicon = { version = "0.10.0", default-features = false }
 anyhow = "1.0"
 thiserror = "1.0.4"
diff --git a/crates/debug/src/lib.rs b/crates/debug/src/lib.rs
index c72228c83..9651e0ab6 100644
--- a/crates/debug/src/lib.rs
+++ b/crates/debug/src/lib.rs
@@ -2,12 +2,13 @@
 
 #![allow(clippy::cast_ptr_alignment)]
 
-use anyhow::Error;
+use anyhow::{bail, Error};
 use more_asserts::assert_gt;
 use object::write::{Object, Relocation, StandardSegment};
-use object::{RelocationEncoding, RelocationKind, SectionKind};
+use object::{
+    Architecture, BinaryFormat, Endianness, RelocationEncoding, RelocationKind, SectionKind,
+};
 use std::collections::HashMap;
-use target_lexicon::BinaryFormat;
 use wasmtime_environ::isa::TargetIsa;
 
 pub use crate::read_debuginfo::{read_debuginfo, DebugInfoData, WasmFileInfo};
@@ -91,7 +92,14 @@ pub fn write_debugsections_image(
     code_region: (*const u8, usize),
     funcs: &[*const u8],
 ) -> Result<Vec<u8>, Error> {
-    let mut obj = Object::new(BinaryFormat::Elf, isa.triple().architecture);
+    if isa.triple().architecture != target_lexicon::Architecture::X86_64 {
+        bail!(
+            "Unsupported architecture for DWARF image: {}",
+            isa.triple().architecture
+        );
+    }
+
+    let mut obj = Object::new(BinaryFormat::Elf, Architecture::X86_64, Endianness::Little);
 
     assert!(!code_region.0.is_null() && code_region.1 > 0);
     assert_gt!(funcs.len(), 0);
diff --git a/crates/environ/Cargo.toml b/crates/environ/Cargo.toml
index 35e44429f..d3cdc72a5 100644
--- a/crates/environ/Cargo.toml
+++ b/crates/environ/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-environ"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Standalone environment support for WebAsssembly code in Cranelift"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -13,11 +13,11 @@ edition = "2018"
 
 [dependencies]
 anyhow = "1.0"
-cranelift-codegen = { path = "../../cranelift/codegen", version = "0.64.0", features = ["enable-serde"] }
-cranelift-entity = { path = "../../cranelift/entity", version = "0.64.0", features = ["enable-serde"] }
-cranelift-wasm = { path = "../../cranelift/wasm", version = "0.64.0", features = ["enable-serde"] }
+cranelift-codegen = { path = "../../cranelift/codegen", version = "0.65.0", features = ["enable-serde"] }
+cranelift-entity = { path = "../../cranelift/entity", version = "0.65.0", features = ["enable-serde"] }
+cranelift-wasm = { path = "../../cranelift/wasm", version = "0.65.0", features = ["enable-serde"] }
 wasmparser = "0.57.0"
-lightbeam = { path = "../lightbeam", optional = true, version = "0.17.0" }
+lightbeam = { path = "../lightbeam", optional = true, version = "0.18.0" }
 indexmap = "1.0.2"
 rayon = "1.2.1"
 thiserror = "1.0.4"
diff --git a/crates/fuzzing/Cargo.toml b/crates/fuzzing/Cargo.toml
index 026aee735..01a505793 100644
--- a/crates/fuzzing/Cargo.toml
+++ b/crates/fuzzing/Cargo.toml
@@ -4,7 +4,7 @@ description = "Fuzzing infrastructure for Wasmtime"
 edition = "2018"
 name = "wasmtime-fuzzing"
 publish = false
-version = "0.17.0"
+version = "0.18.0"
 
 [dependencies]
 anyhow = "1.0.22"
diff --git a/crates/jit/Cargo.toml b/crates/jit/Cargo.toml
index c7c38facd..696b2e8e7 100644
--- a/crates/jit/Cargo.toml
+++ b/crates/jit/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-jit"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "JIT-style execution for WebAsssembly code in Cranelift"
 documentation = "https://docs.rs/wasmtime-jit"
@@ -12,15 +12,15 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../../cranelift/codegen", version = "0.64.0", features = ["enable-serde"] }
-cranelift-entity = { path = "../../cranelift/entity", version = "0.64.0", features = ["enable-serde"] }
-cranelift-wasm = { path = "../../cranelift/wasm", version = "0.64.0", features = ["enable-serde"] }
-cranelift-native = { path = "../../cranelift/native", version = "0.64.0" }
-cranelift-frontend = { path = "../../cranelift/frontend", version = "0.64.0" }
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
-wasmtime-runtime = { path = "../runtime", version = "0.17.0" }
-wasmtime-debug = { path = "../debug", version = "0.17.0" }
-wasmtime-profiling = { path = "../profiling", version = "0.17.0" }
+cranelift-codegen = { path = "../../cranelift/codegen", version = "0.65.0", features = ["enable-serde"] }
+cranelift-entity = { path = "../../cranelift/entity", version = "0.65.0", features = ["enable-serde"] }
+cranelift-wasm = { path = "../../cranelift/wasm", version = "0.65.0", features = ["enable-serde"] }
+cranelift-native = { path = "../../cranelift/native", version = "0.65.0" }
+cranelift-frontend = { path = "../../cranelift/frontend", version = "0.65.0" }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
+wasmtime-runtime = { path = "../runtime", version = "0.18.0" }
+wasmtime-debug = { path = "../debug", version = "0.18.0" }
+wasmtime-profiling = { path = "../profiling", version = "0.18.0" }
 region = "2.0.0"
 thiserror = "1.0.4"
 target-lexicon = { version = "0.10.0", default-features = false }
diff --git a/crates/lightbeam/Cargo.toml b/crates/lightbeam/Cargo.toml
index 3c5254a78..0a6d2b371 100644
--- a/crates/lightbeam/Cargo.toml
+++ b/crates/lightbeam/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "lightbeam"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Lightbeam Project Developers"]
 description = "An optimising one-pass streaming compiler for WebAssembly"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -12,7 +12,7 @@ edition = "2018"
 
 [dependencies]
 capstone = "0.6.0"
-cranelift-codegen = { path = "../../cranelift/codegen", version = "0.64.0" }
+cranelift-codegen = { path = "../../cranelift/codegen", version = "0.65.0" }
 derive_more = "0.99"
 dynasm = "0.5.2"
 dynasmrt = "0.5.2"
diff --git a/crates/misc/run-examples/Cargo.toml b/crates/misc/run-examples/Cargo.toml
index 2ec5866e1..6dc0ead7e 100644
--- a/crates/misc/run-examples/Cargo.toml
+++ b/crates/misc/run-examples/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "run-examples"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 edition = "2018"
 publish = false
diff --git a/crates/misc/rust/Cargo.toml b/crates/misc/rust/Cargo.toml
index 681b4bcbd..070d9b3f6 100644
--- a/crates/misc/rust/Cargo.toml
+++ b/crates/misc/rust/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-rust"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Rust extension for Wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -15,9 +15,9 @@ test = false
 doctest = false
 
 [dependencies]
-wasmtime-rust-macro = { path = "./macro", version = "0.17.0" }
-wasmtime-wasi = { path = "../../wasi", version = "0.17.0" }
-wasmtime = { path = "../../wasmtime", version = "0.17.0" }
+wasmtime-rust-macro = { path = "./macro", version = "0.18.0" }
+wasmtime-wasi = { path = "../../wasi", version = "0.18.0" }
+wasmtime = { path = "../../wasmtime", version = "0.18.0" }
 anyhow = "1.0.19"
 
 [badges]
diff --git a/crates/misc/rust/macro/Cargo.toml b/crates/misc/rust/macro/Cargo.toml
index 485b31877..24368a285 100644
--- a/crates/misc/rust/macro/Cargo.toml
+++ b/crates/misc/rust/macro/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-rust-macro"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Alex Crichton <alex@alexcrichton.com>"]
 description = "Macro support crate for wasmtime-rust"
 license = "Apache-2.0 WITH LLVM-exception"
diff --git a/crates/obj/Cargo.toml b/crates/obj/Cargo.toml
index b64ad4607..fea7e2f28 100644
--- a/crates/obj/Cargo.toml
+++ b/crates/obj/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-obj"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Native object file output for WebAsssembly code in Wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -12,8 +12,8 @@ edition = "2018"
 
 [dependencies]
 anyhow = "1.0"
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
-object = { version = "0.18", default-features = false, features = ["write"] }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
+object = { version = "0.19", default-features = false, features = ["write"] }
 more-asserts = "0.2.1"
 
 [badges]
diff --git a/crates/profiling/Cargo.toml b/crates/profiling/Cargo.toml
index d476eb12e..00d9827ca 100644
--- a/crates/profiling/Cargo.toml
+++ b/crates/profiling/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-profiling"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Runtime library support for Wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -19,12 +19,12 @@ libc = { version = "0.2.60", default-features = false }
 scroll = { version = "0.10.1", features = ["derive"], optional = true }
 serde = { version = "1.0.99", features = ["derive"] }
 target-lexicon = "0.10.0"
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
-wasmtime-runtime = { path = "../runtime", version = "0.17.0" }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
+wasmtime-runtime = { path = "../runtime", version = "0.18.0" }
 ittapi-rs = { version = "0.1.5", optional = true }
 
 [dependencies.object]
-version = "0.18.0"
+version = "0.19.0"
 optional = true
 default-features = false
 features = ['read_core', 'elf', 'std']
diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml
index 578cb9c0f..b862d2589 100644
--- a/crates/runtime/Cargo.toml
+++ b/crates/runtime/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-runtime"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Runtime library support for Wasmtime"
 documentation = "https://docs.rs/wasmtime-runtime"
@@ -12,7 +12,7 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
 region = "2.0.0"
 libc = { version = "0.2.70", default-features = false }
 memoffset = "0.5.3"
diff --git a/crates/wasi-common/Cargo.toml b/crates/wasi-common/Cargo.toml
index 9a8f46db3..00b92bae6 100644
--- a/crates/wasi-common/Cargo.toml
+++ b/crates/wasi-common/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasi-common"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "WASI implementation in Rust"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -12,9 +12,9 @@ edition = "2018"
 include = ["src/**/*", "LICENSE", "WASI/phases", "build.rs"]
 
 # This doesn't actually link to a native library, but it allows us to set env
-# vars like `DEP_WASI_COMMON_17_*` for crates that have build scripts and depend
+# vars like `DEP_WASI_COMMON_18_*` for crates that have build scripts and depend
 # on this crate, allowing other crates to use the same witx files.
-links = "wasi-common-17"
+links = "wasi-common-18"
 
 [dependencies]
 anyhow = "1.0"
@@ -25,14 +25,14 @@ cfg-if = "0.1.9"
 log = "0.4"
 filetime = "0.2.7"
 lazy_static = "1.4.0"
-wig = { path = "wig", version = "0.17.0" }
-wiggle = { path = "../wiggle", default-features = false, version = "0.17.0" }
+wig = { path = "wig", version = "0.18.0" }
+wiggle = { path = "../wiggle", default-features = false, version = "0.18.0" }
 
 [target.'cfg(unix)'.dependencies]
-yanix = { path = "yanix", version = "0.17.0" }
+yanix = { path = "yanix", version = "0.18.0" }
 
 [target.'cfg(windows)'.dependencies]
-winx = { path = "winx", version = "0.17.0" }
+winx = { path = "winx", version = "0.18.0" }
 winapi = "0.3"
 cpu-time = "1.0"
 
diff --git a/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs b/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs
index 49ae8270e..a6d3d97d4 100644
--- a/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs
+++ b/crates/wasi-common/src/snapshots/wasi_snapshot_preview1.rs
@@ -223,7 +223,6 @@ impl<'a> WasiSnapshotPreview1 for WasiCtx {
                 .preadv(&mut buf, offset)?
                 .try_into()?
         };
-        drop(guest_slices);
         Ok(host_nread)
     }
 
diff --git a/crates/wasi-common/wig/Cargo.toml b/crates/wasi-common/wig/Cargo.toml
index 596978eb8..f29ba87d4 100644
--- a/crates/wasi-common/wig/Cargo.toml
+++ b/crates/wasi-common/wig/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wig"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Dan Gohman <sunfish@mozilla.com>"]
 description = "WebAssembly Interface Generator"
 license = "Apache-2.0 WITH LLVM-exception"
diff --git a/crates/wasi-common/winx/Cargo.toml b/crates/wasi-common/winx/Cargo.toml
index bdecd2fe6..c24c8bf7f 100644
--- a/crates/wasi-common/winx/Cargo.toml
+++ b/crates/wasi-common/winx/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "winx"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Jakub Konka <kubkon@jakubkonka.com>"]
 description = "Windows API helper library"
 documentation = "https://docs.rs/winx"
diff --git a/crates/wasi-common/yanix/Cargo.toml b/crates/wasi-common/yanix/Cargo.toml
index 3abf5eae0..d86ef4d67 100644
--- a/crates/wasi-common/yanix/Cargo.toml
+++ b/crates/wasi-common/yanix/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "yanix"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "Yet Another Nix crate: a Unix API helper library"
 documentation = "https://docs.rs/yanix"
diff --git a/crates/wasi/Cargo.toml b/crates/wasi/Cargo.toml
index 82bb043a8..6616a6ef1 100644
--- a/crates/wasi/Cargo.toml
+++ b/crates/wasi/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-wasi"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Cranelift Project Developers"]
 description = "WASI API support for Wasmtime"
 documentation = "https://docs.rs/wasmtime-wasi"
@@ -14,11 +14,11 @@ edition = "2018"
 [dependencies]
 anyhow = "1.0"
 log = { version = "0.4.8", default-features = false }
-wasi-common = { path = "../wasi-common", version = "0.17.0" }
-wasmtime = { path = "../wasmtime", version = "0.17.0", default-features = false }
-wasmtime-runtime = { path = "../runtime", version = "0.17.0" }
-wig = { path = "../wasi-common/wig", version = "0.17.0" }
-wiggle = { path = "../wiggle", version = "0.17.0" }
+wasi-common = { path = "../wasi-common", version = "0.18.0" }
+wasmtime = { path = "../wasmtime", version = "0.18.0", default-features = false }
+wasmtime-runtime = { path = "../runtime", version = "0.18.0" }
+wig = { path = "../wasi-common/wig", version = "0.18.0" }
+wiggle = { path = "../wiggle", version = "0.18.0" }
 
 [badges]
 maintenance = { status = "actively-developed" }
diff --git a/crates/wasi/build.rs b/crates/wasi/build.rs
index fee332ea4..5c085829f 100644
--- a/crates/wasi/build.rs
+++ b/crates/wasi/build.rs
@@ -1,4 +1,4 @@
 fn main() {
-    let wasi_root = std::env::var("DEP_WASI_COMMON_17_WASI").unwrap();
+    let wasi_root = std::env::var("DEP_WASI_COMMON_18_WASI").unwrap();
     println!("cargo:rustc-env=WASI_ROOT={}", wasi_root);
 }
diff --git a/crates/wasmtime/Cargo.toml b/crates/wasmtime/Cargo.toml
index 52afa66e7..f59c2b079 100644
--- a/crates/wasmtime/Cargo.toml
+++ b/crates/wasmtime/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "High-level API to expose the Wasmtime runtime"
 documentation = "https://docs.rs/wasmtime"
@@ -10,10 +10,10 @@ readme = "README.md"
 edition = "2018"
 
 [dependencies]
-wasmtime-runtime = { path = "../runtime", version = "0.17.0" }
-wasmtime-environ = { path = "../environ", version = "0.17.0" }
-wasmtime-jit = { path = "../jit", version = "0.17.0" }
-wasmtime-profiling = { path = "../profiling", version = "0.17.0" }
+wasmtime-runtime = { path = "../runtime", version = "0.18.0" }
+wasmtime-environ = { path = "../environ", version = "0.18.0" }
+wasmtime-jit = { path = "../jit", version = "0.18.0" }
+wasmtime-profiling = { path = "../profiling", version = "0.18.0" }
 wasmparser = "0.57.0"
 target-lexicon = { version = "0.10.0", default-features = false }
 anyhow = "1.0.19"
diff --git a/crates/wast/Cargo.toml b/crates/wast/Cargo.toml
index cefd4cb46..b55c1b931 100644
--- a/crates/wast/Cargo.toml
+++ b/crates/wast/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasmtime-wast"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 description = "wast testing support for wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -12,7 +12,7 @@ edition = "2018"
 
 [dependencies]
 anyhow = "1.0.19"
-wasmtime = { path = "../wasmtime", version = "0.17.0", default-features = false }
+wasmtime = { path = "../wasmtime", version = "0.18.0", default-features = false }
 wast = "17.0.0"
 
 [badges]
diff --git a/crates/wiggle/Cargo.toml b/crates/wiggle/Cargo.toml
index 55a4ceabb..4326424da 100644
--- a/crates/wiggle/Cargo.toml
+++ b/crates/wiggle/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wiggle"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkonk@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -13,7 +13,7 @@ include = ["src/**/*", "LICENSE"]
 [dependencies]
 thiserror = "1"
 witx = { path = "../wasi-common/WASI/tools/witx", version = "0.8.5", optional = true }
-wiggle-macro = { path = "macro", version = "0.17.0" }
+wiggle-macro = { path = "macro", version = "0.18.0" }
 tracing = "0.1.15"
 
 [badges]
diff --git a/crates/wiggle/generate/Cargo.toml b/crates/wiggle/generate/Cargo.toml
index 6d1ec6d4a..944b98aa0 100644
--- a/crates/wiggle/generate/Cargo.toml
+++ b/crates/wiggle/generate/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wiggle-generate"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 license = "Apache-2.0 WITH LLVM-exception"
 edition = "2018"
diff --git a/crates/wiggle/macro/Cargo.toml b/crates/wiggle/macro/Cargo.toml
index 7722ac27c..f8d0e91fd 100644
--- a/crates/wiggle/macro/Cargo.toml
+++ b/crates/wiggle/macro/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wiggle-macro"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 edition = "2018"
 license = "Apache-2.0 WITH LLVM-exception"
@@ -15,7 +15,7 @@ proc-macro = true
 test = false
 
 [dependencies]
-wiggle-generate = { path = "../generate", version = "0.17.0" }
+wiggle-generate = { path = "../generate", version = "0.18.0" }
 witx = { path = "../../wasi-common/WASI/tools/witx", version = "0.8.5" }
 quote = "1.0"
 syn = { version = "1.0", features = ["full"] }
diff --git a/docs/lang-rust.md b/docs/lang-rust.md
index aeca23ae4..aa97e9775 100644
--- a/docs/lang-rust.md
+++ b/docs/lang-rust.md
@@ -43,7 +43,7 @@ dependency in `Cargo.toml`:
 
 ```toml
 [dependencies]
-wasmtime = "0.16.0"
+wasmtime = "0.18.0"
 ```
 
 Next up let's write the code that we need to execute this wasm file. The
diff --git a/scripts/bump-cranelift-version.sh b/scripts/bump-cranelift-version.sh
index da6e2634c..b692c10ba 100755
--- a/scripts/bump-cranelift-version.sh
+++ b/scripts/bump-cranelift-version.sh
@@ -9,7 +9,7 @@ topdir=$(dirname "$0")/..
 cd "$topdir"
 
 # All the cranelift-* crates have the same version number
-version="0.64.0"
+version="0.65.0"
 
 # Update all of the Cargo.toml files.
 echo "Updating crate versions to $version"
@@ -24,6 +24,7 @@ find -name Cargo.toml \
     -not -path ./crates/wasi-common/WASI/tools/witx/Cargo.toml \
     -exec sed -i.bk \
         -e "/^cranelift/s/version = \"[^\"]*\"/version = \"$version\"/" \
+        -e "/^peepmatic /s/version = \"[^\"]*\"/version = \"$version\"/" \
         {} \;
 
 # Update the Cargo.lock file for the new versions.
diff --git a/scripts/bump-wasmtime-version.sh b/scripts/bump-wasmtime-version.sh
index b1c2524bd..c8d017937 100755
--- a/scripts/bump-wasmtime-version.sh
+++ b/scripts/bump-wasmtime-version.sh
@@ -9,7 +9,7 @@ topdir=$(dirname "$0")/..
 cd "$topdir"
 
 # All the wasmtime-* crates have the same version number
-short_version="17"
+short_version="18"
 version="0.$short_version.0"
 
 # Update the version numbers of the crates to $version. Skip crates with
diff --git a/src/obj.rs b/src/obj.rs
index 844193a83..72cb46189 100644
--- a/src/obj.rs
+++ b/src/obj.rs
@@ -13,6 +13,42 @@ use wasmtime_environ::{
 use wasmtime_jit::native;
 use wasmtime_obj::emit_module;
 
+fn to_obj_format(
+    triple: &Triple,
+) -> Result<(
+    object::BinaryFormat,
+    object::Architecture,
+    object::Endianness,
+)> {
+    let binary_format = match triple.binary_format {
+        target_lexicon::BinaryFormat::Elf => object::BinaryFormat::Elf,
+        target_lexicon::BinaryFormat::Coff => object::BinaryFormat::Coff,
+        target_lexicon::BinaryFormat::Macho => object::BinaryFormat::MachO,
+        target_lexicon::BinaryFormat::Wasm => {
+            bail!("binary format wasm is unsupported");
+        }
+        target_lexicon::BinaryFormat::Unknown => {
+            bail!("binary format is unknown");
+        }
+    };
+    let architecture = match triple.architecture {
+        target_lexicon::Architecture::I386
+        | target_lexicon::Architecture::I586
+        | target_lexicon::Architecture::I686 => object::Architecture::I386,
+        target_lexicon::Architecture::X86_64 => object::Architecture::X86_64,
+        target_lexicon::Architecture::Arm(_) => object::Architecture::Arm,
+        target_lexicon::Architecture::Aarch64(_) => object::Architecture::Aarch64,
+        architecture => {
+            bail!("target architecture {:?} is unsupported", architecture,);
+        }
+    };
+    let endian = match triple.endianness().unwrap() {
+        target_lexicon::Endianness::Little => object::Endianness::Little,
+        target_lexicon::Endianness::Big => object::Endianness::Big,
+    };
+    Ok((binary_format, architecture, endian))
+}
+
 /// Creates object file from binary wasm data.
 pub fn compile_to_obj(
     wasm: &[u8],
@@ -50,7 +86,8 @@ pub fn compile_to_obj(
 
     let isa = isa_builder.finish(settings::Flags::new(flag_builder));
 
-    let mut obj = Object::new(isa.triple().binary_format, isa.triple().architecture);
+    let (obj_format, obj_arch, obj_endian) = to_obj_format(isa.triple())?;
+    let mut obj = Object::new(obj_format, obj_arch, obj_endian);
 
     // TODO: Expose the tunables as command-line flags.
     let mut tunables = Tunables::default();


Test patch:
diff --git a/cranelift/codegen/src/isa/aarch64/inst/emit_tests.rs b/cranelift/codegen/src/isa/aarch64/inst/emit_tests.rs
index 0cb54cece..7b2c09503 100644
--- a/cranelift/codegen/src/isa/aarch64/inst/emit_tests.rs
+++ b/cranelift/codegen/src/isa/aarch64/inst/emit_tests.rs
@@ -1281,6 +1281,15 @@ fn test_aarch64_binemit() {
         "41D863F8",
         "ldr x1, [x2, w3, SXTW #3]",
     ));
+    insns.push((
+        Inst::ULoad64 {
+            rd: writable_xreg(1),
+            mem: MemArg::RegExtended(xreg(2), xreg(3), ExtendOp::SXTW),
+            srcloc: None,
+        },
+        "41C863F8",
+        "ldr x1, [x2, w3, SXTW]",
+    ));
     insns.push((
         Inst::ULoad64 {
             rd: writable_xreg(1),
@@ -1474,6 +1483,15 @@ fn test_aarch64_binemit() {
         "415823F8",
         "str x1, [x2, w3, UXTW #3]",
     ));
+    insns.push((
+        Inst::Store64 {
+            rd: xreg(1),
+            mem: MemArg::RegExtended(xreg(2), xreg(3), ExtendOp::UXTW),
+            srcloc: None,
+        },
+        "414823F8",
+        "str x1, [x2, w3, UXTW]",
+    ));
     insns.push((
         Inst::Store64 {
             rd: xreg(1),
diff --git a/cranelift/filetests/Cargo.toml b/cranelift/filetests/Cargo.toml
index 974c8fbee..e7fd2c3bc 100644
--- a/cranelift/filetests/Cargo.toml
+++ b/cranelift/filetests/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cranelift-filetests"
 authors = ["The Cranelift Project Developers"]
-version = "0.64.0"
+version = "0.65.0"
 description = "Test driver and implementations of the filetest commands"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-filetests"
@@ -10,12 +10,12 @@ publish = false
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../codegen", version = "0.64.0", features = ["testing_hooks"] }
-cranelift-frontend = { path = "../frontend", version = "0.64.0" }
-cranelift-interpreter = { path = "../interpreter", version = "0.64.0" }
-cranelift-native = { path = "../native", version = "0.64.0" }
-cranelift-reader = { path = "../reader", version = "0.64.0" }
-cranelift-preopt = { path = "../preopt", version = "0.64.0" }
+cranelift-codegen = { path = "../codegen", version = "0.65.0", features = ["testing_hooks"] }
+cranelift-frontend = { path = "../frontend", version = "0.65.0" }
+cranelift-interpreter = { path = "../interpreter", version = "0.65.0" }
+cranelift-native = { path = "../native", version = "0.65.0" }
+cranelift-reader = { path = "../reader", version = "0.65.0" }
+cranelift-preopt = { path = "../preopt", version = "0.65.0" }
 byteorder = { version = "1.3.2", default-features = false }
 file-per-thread-logger = "0.1.2"
 filecheck = "0.5.0"
diff --git a/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-binemit.clif b/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-binemit.clif
new file mode 100644
index 000000000..37abef0e6
--- /dev/null
+++ b/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-binemit.clif
@@ -0,0 +1,9 @@
+test binemit
+set enable_simd
+target x86_64 has_avx512vl=true
+
+function %fcvt_from_uint(i32x4) {
+block0(v0: i32x4 [%xmm2]):
+[-, %xmm6]  v1 = x86_vcvtudq2ps v0 ; bin: 62 f1 7f 08 7a f2
+    return
+}
diff --git a/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-legalize.clif b/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-legalize.clif
new file mode 100644
index 000000000..78dc1cf22
--- /dev/null
+++ b/cranelift/filetests/filetests/isa/x86/simd-avx512-conversion-legalize.clif
@@ -0,0 +1,10 @@
+test legalizer
+set enable_simd
+target x86_64 skylake has_avx512f=true
+
+function %fcvt_from_uint(i32x4) -> f32x4 {
+block0(v0:i32x4):
+    v1 = fcvt_from_uint.f32x4 v0
+    ; check: v1 = x86_vcvtudq2ps v0
+    return v1
+}
diff --git a/cranelift/filetests/filetests/isa/x86/simd-conversion-legalize.clif b/cranelift/filetests/filetests/isa/x86/simd-conversion-legalize.clif
new file mode 100644
index 000000000..7db52967e
--- /dev/null
+++ b/cranelift/filetests/filetests/isa/x86/simd-conversion-legalize.clif
@@ -0,0 +1,19 @@
+test legalizer
+set enable_simd
+target x86_64 skylake
+
+function %fcvt_from_uint(i32x4) -> f32x4 {
+block0(v0:i32x4):
+    v1 = fcvt_from_uint.f32x4 v0
+    ; check: v2 = raw_bitcast.i16x8 v0
+    ; nextln: v3 = vconst.i16x8 const0
+    ; nextln: v4 = x86_pblendw v3, v2, 85
+    ; nextln: v5 = raw_bitcast.i32x4 v4
+    ; nextln: v6 = isub v0, v5
+    ; nextln: v7 = fcvt_from_sint.f32x4 v5
+    ; nextln: v8 = ushr_imm v6, 1
+    ; nextln: v9 = fcvt_from_sint.f32x4 v8
+    ; nextln: v10 = fadd v9, v9
+    ; nextln: v1 = fadd v10, v7
+    return v1
+}
diff --git a/cranelift/filetests/filetests/isa/x86/simd-conversion-run.clif b/cranelift/filetests/filetests/isa/x86/simd-conversion-run.clif
index 3484818aa..2a97474ad 100644
--- a/cranelift/filetests/filetests/isa/x86/simd-conversion-run.clif
+++ b/cranelift/filetests/filetests/isa/x86/simd-conversion-run.clif
@@ -13,3 +13,10 @@ block0:
     return v4
 }
 ; run
+
+function %fcvt_from_uint(i32x4) -> f32x4 {
+block0(v0:i32x4):
+    v1 = fcvt_from_uint.f32x4 v0
+    return v1
+}
+; run: %fcvt_from_uint([0 0 0 0]) == [0x0.0 0x0.0 0x0.0 0x0.0]
diff --git a/cranelift/filetests/filetests/isa/x86/simd-lane-access-binemit.clif b/cranelift/filetests/filetests/isa/x86/simd-lane-access-binemit.clif
index e5eea1f63..24bc8cfa2 100644
--- a/cranelift/filetests/filetests/isa/x86/simd-lane-access-binemit.clif
+++ b/cranelift/filetests/filetests/isa/x86/simd-lane-access-binemit.clif
@@ -96,6 +96,14 @@ block0:
             return
 }
 
+;; blend
+
+function %pblendw(b16x8, b16x8) {
+block0(v0: b16x8 [%xmm10], v1: b16x8 [%xmm2]):
+[-, %xmm10] v2 = x86_pblendw v0, v1, 0x55   ; bin: 66 44 0f 3a 0e d2 55
+            return
+}
+
 ;; pack/unpack
 
 function %unpack_high_i8x16(i8x16, i8x16) {
diff --git a/cranelift/filetests/filetests/vcode/aarch64/amodes.clif b/cranelift/filetests/filetests/vcode/aarch64/amodes.clif
new file mode 100644
index 000000000..96855d00b
--- /dev/null
+++ b/cranelift/filetests/filetests/vcode/aarch64/amodes.clif
@@ -0,0 +1,58 @@
+test compile
+target aarch64
+
+function %f0(i64, i32) -> i32 {
+block0(v0: i64, v1: i32):
+  v2 = uextend.i64 v1
+  v3 = load_complex.i32 v0+v2
+  return v3
+}
+
+; check: stp fp, lr, [sp, #-16]!
+; nextln: mov fp, sp
+; nextln: ldr w0, [x0, w1, UXTW]
+; nextln: mov sp, fp
+; nextln: ldp fp, lr, [sp], #16
+; nextln: ret
+
+function %f1(i64, i32) -> i32 {
+block0(v0: i64, v1: i32):
+  v2 = uextend.i64 v1
+  v3 = load_complex.i32 v2+v0
+  return v3
+}
+
+; check: stp fp, lr, [sp, #-16]!
+; nextln: mov fp, sp
+; nextln: ldr w0, [x0, w1, UXTW]
+; nextln: mov sp, fp
+; nextln: ldp fp, lr, [sp], #16
+; nextln: ret
+
+function %f1(i64, i32) -> i32 {
+block0(v0: i64, v1: i32):
+  v2 = sextend.i64 v1
+  v3 = load_complex.i32 v0+v2
+  return v3
+}
+
+; check: stp fp, lr, [sp, #-16]!
+; nextln: mov fp, sp
+; nextln: ldr w0, [x0, w1, SXTW]
+; nextln: mov sp, fp
+; nextln: ldp fp, lr, [sp], #16
+; nextln: ret
+
+function %f1(i64, i32) -> i32 {
+block0(v0: i64, v1: i32):
+  v2 = sextend.i64 v1
+  v3 = load_complex.i32 v2+v0
+  return v3
+}
+
+; check: stp fp, lr, [sp, #-16]!
+; nextln: mov fp, sp
+; nextln: ldr w0, [x0, w1, SXTW]
+; nextln: mov sp, fp
+; nextln: ldp fp, lr, [sp], #16
+; nextln: ret
diff --git a/cranelift/peepmatic/crates/test/Cargo.toml b/cranelift/peepmatic/crates/test/Cargo.toml
index bca85f8bf..08d357ef9 100644
--- a/cranelift/peepmatic/crates/test/Cargo.toml
+++ b/cranelift/peepmatic/crates/test/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "peepmatic-test"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
 edition = "2018"
 publish = false
diff --git a/crates/test-programs/Cargo.toml b/crates/test-programs/Cargo.toml
index bcb4bfe7d..088cbf0c2 100644
--- a/crates/test-programs/Cargo.toml
+++ b/crates/test-programs/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "test-programs"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 readme = "README.md"
 edition = "2018"
@@ -10,9 +10,9 @@ publish = false
 cfg-if = "0.1.9"
 
 [dev-dependencies]
-wasi-common = { path = "../wasi-common", version = "0.17.0" }
-wasmtime-wasi = { path = "../wasi", version = "0.17.0" }
-wasmtime = { path = "../wasmtime", version = "0.17.0" }
+wasi-common = { path = "../wasi-common", version = "0.18.0" }
+wasmtime-wasi = { path = "../wasi", version = "0.18.0" }
+wasmtime = { path = "../wasmtime", version = "0.18.0" }
 target-lexicon = "0.10.0"
 pretty_env_logger = "0.4.0"
 tempfile = "3.1.0"
diff --git a/crates/test-programs/wasi-tests/Cargo.lock b/crates/test-programs/wasi-tests/Cargo.lock
index bc68d3b48..d37dfc8ce 100644
--- a/crates/test-programs/wasi-tests/Cargo.lock
+++ b/crates/test-programs/wasi-tests/Cargo.lock
@@ -17,7 +17,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "wasi-tests"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "libc 0.2.71 (registry+https://github.com/rust-lang/crates.io-index)",
  "more-asserts 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
diff --git a/crates/test-programs/wasi-tests/Cargo.toml b/crates/test-programs/wasi-tests/Cargo.toml
index 3a7f838bc..5397575e3 100644
--- a/crates/test-programs/wasi-tests/Cargo.toml
+++ b/crates/test-programs/wasi-tests/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wasi-tests"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["The Wasmtime Project Developers"]
 readme = "README.md"
 edition = "2018"
diff --git a/crates/wiggle/test-helpers/Cargo.toml b/crates/wiggle/test-helpers/Cargo.toml
index 0df67f862..09535eac6 100644
--- a/crates/wiggle/test-helpers/Cargo.toml
+++ b/crates/wiggle/test-helpers/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "wiggle-test"
-version = "0.17.0"
+version = "0.18.0"
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 license = "Apache-2.0 WITH LLVM-exception"
 edition = "2018"