Bug 1610535 - Update Cranelift to 98633eeb0d249efae23ee69ec03dc35b7d9bec17. r=bbouvier
authorRyan Hunt <rhunt@eqrion.net>
Thu, 23 Jan 2020 18:41:11 +0000
changeset 511536 8039242b4bf2614d38f34488f8e59d96971e44f0
parent 511535 02d7f5d2d0b392bacde5cbf53d66078958091497
child 511537 0c62c12c5dae874244a987de7354344dc9d6f376
push id37049
push userrmaries@mozilla.com
push dateFri, 24 Jan 2020 03:50:24 +0000
treeherdermozilla-central@e05793f68994 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbbouvier
bugs1610535
milestone74.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1610535 - Update Cranelift to 98633eeb0d249efae23ee69ec03dc35b7d9bec17. r=bbouvier Depends on D60873 Differential Revision: https://phabricator.services.mozilla.com/D60874
.cargo/config.in
Cargo.lock
Cargo.toml
js/src/wasm/cranelift/Cargo.toml
third_party/rust/cranelift-bforest/.cargo-checksum.json
third_party/rust/cranelift-bforest/Cargo.toml
third_party/rust/cranelift-codegen-meta/.cargo-checksum.json
third_party/rust/cranelift-codegen-meta/Cargo.toml
third_party/rust/cranelift-codegen-meta/src/cdsl/instructions.rs
third_party/rust/cranelift-codegen-meta/src/cdsl/types.rs
third_party/rust/cranelift-codegen-meta/src/cdsl/typevar.rs
third_party/rust/cranelift-codegen-meta/src/isa/x86/encodings.rs
third_party/rust/cranelift-codegen-shared/.cargo-checksum.json
third_party/rust/cranelift-codegen-shared/Cargo.toml
third_party/rust/cranelift-codegen/.cargo-checksum.json
third_party/rust/cranelift-codegen/Cargo.toml
third_party/rust/cranelift-codegen/src/ir/entities.rs
third_party/rust/cranelift-codegen/src/ir/extfunc.rs
third_party/rust/cranelift-codegen/src/ir/layout.rs
third_party/rust/cranelift-codegen/src/isa/x86/enc_tables.rs
third_party/rust/cranelift-codegen/src/isa/x86/fde.rs
third_party/rust/cranelift-codegen/src/legalizer/mod.rs
third_party/rust/cranelift-codegen/src/legalizer/split.rs
third_party/rust/cranelift-codegen/src/simple_gvn.rs
third_party/rust/cranelift-entity/.cargo-checksum.json
third_party/rust/cranelift-entity/Cargo.toml
third_party/rust/cranelift-frontend/.cargo-checksum.json
third_party/rust/cranelift-frontend/Cargo.toml
third_party/rust/cranelift-frontend/src/lib.rs
third_party/rust/cranelift-frontend/src/switch.rs
third_party/rust/cranelift-wasm/.cargo-checksum.json
third_party/rust/cranelift-wasm/Cargo.toml
third_party/rust/cranelift-wasm/src/code_translator.rs
third_party/rust/cranelift-wasm/src/environ/spec.rs
third_party/rust/cranelift-wasm/src/func_translator.rs
--- a/.cargo/config.in
+++ b/.cargo/config.in
@@ -40,17 +40,17 @@ replace-with = "vendored-sources"
 [source."https://github.com/djg/cubeb-pulse-rs"]
 git = "https://github.com/djg/cubeb-pulse-rs"
 replace-with = "vendored-sources"
 rev = "8069f8f4189982e0b38fa6dc8993dd4fab41f728"
 
 [source."https://github.com/bytecodealliance/cranelift"]
 git = "https://github.com/bytecodealliance/cranelift"
 replace-with = "vendored-sources"
-rev = "b01bee7c5269f72196b42e8bdd874425166bf429"
+rev = "98633eeb0d249efae23ee69ec03dc35b7d9bec17"
 
 [source."https://github.com/badboy/failure"]
 git = "https://github.com/badboy/failure"
 replace-with = "vendored-sources"
 rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5"
 
 [source."https://github.com/alexcrichton/mio-named-pipes"]
 branch = "master"
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -173,18 +173,18 @@ name = "autocfg"
 version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "baldrdash"
 version = "0.1.0"
 dependencies = [
  "bindgen 0.51.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-codegen 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-wasm 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+ "cranelift-codegen 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-wasm 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
  "env_logger 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "base64"
 version = "0.10.1"
@@ -629,81 +629,81 @@ name = "cose-c"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cose 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
-dependencies = [
- "cranelift-entity 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
+dependencies = [
+ "cranelift-entity 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
 dependencies = [
  "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "cranelift-bforest 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-codegen-meta 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-codegen-shared 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-entity 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+ "cranelift-bforest 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-codegen-meta 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-codegen-shared 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-entity 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "target-lexicon 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "thiserror 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
-dependencies = [
- "cranelift-codegen-shared 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-entity 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
+dependencies = [
+ "cranelift-codegen-shared 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-entity 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
 ]
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
 
 [[package]]
 name = "cranelift-entity"
 version = "0.41.0"
 source = "git+https://github.com/PLSysSec/lucet_sandbox_compiler?rev=58498599272e23ef797bb4304d0f181d7455ca57#58498599272e23ef797bb4304d0f181d7455ca57"
 
 [[package]]
 name = "cranelift-entity"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
-dependencies = [
- "cranelift-codegen 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
+dependencies = [
+ "cranelift-codegen 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "target-lexicon 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.55.0"
-source = "git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429#b01bee7c5269f72196b42e8bdd874425166bf429"
-dependencies = [
- "cranelift-codegen 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-entity 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
- "cranelift-frontend 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)",
+version = "0.56.0"
+source = "git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17#98633eeb0d249efae23ee69ec03dc35b7d9bec17"
+dependencies = [
+ "cranelift-codegen 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-entity 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
+ "cranelift-frontend 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)",
  "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "thiserror 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "wasmparser 0.47.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "crc32fast"
 version = "1.2.0"
@@ -4642,24 +4642,24 @@ dependencies = [
 "checksum core-foundation 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e2640d6d0bf22e82bed1b73c6aef8d5dd31e5abe6666c57e6d45e2649f4f887"
 "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
 "checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9"
 "checksum core-text 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f3f46450d6f2397261af420b4ccce23807add2e45fa206410a03d66fb7f050ae"
 "checksum coreaudio-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e8f5954c1c7ccb55340443e8b29fca24013545a5e7d72c1ca7db4fc02b982ce"
 "checksum coreaudio-sys-utils 0.1.0 (git+https://github.com/ChunMinChang/cubeb-coreaudio-rs?rev=acb90e9bf36e6e035ac6bbe51efa0a8825b5b6be)" = "<none>"
 "checksum cose 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "72fa26cb151d3ae4b70f63d67d0fed57ce04220feafafbae7f503bef7aae590d"
 "checksum cose-c 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "49726015ab0ca765144fcca61e4a7a543a16b795a777fa53f554da2fffff9a94"
-"checksum cranelift-bforest 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
-"checksum cranelift-codegen 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
-"checksum cranelift-codegen-meta 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
-"checksum cranelift-codegen-shared 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
+"checksum cranelift-bforest 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
+"checksum cranelift-codegen 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
+"checksum cranelift-codegen-meta 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
+"checksum cranelift-codegen-shared 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
 "checksum cranelift-entity 0.41.0 (git+https://github.com/PLSysSec/lucet_sandbox_compiler?rev=58498599272e23ef797bb4304d0f181d7455ca57)" = "<none>"
-"checksum cranelift-entity 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
-"checksum cranelift-frontend 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
-"checksum cranelift-wasm 0.55.0 (git+https://github.com/bytecodealliance/cranelift?rev=b01bee7c5269f72196b42e8bdd874425166bf429)" = "<none>"
+"checksum cranelift-entity 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
+"checksum cranelift-frontend 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
+"checksum cranelift-wasm 0.56.0 (git+https://github.com/bytecodealliance/cranelift?rev=98633eeb0d249efae23ee69ec03dc35b7d9bec17)" = "<none>"
 "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
 "checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
 "checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
 "checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
 "checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c"
 "checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
 "checksum cssparser 0.27.2 (registry+https://github.com/rust-lang/crates.io-index)" = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
 "checksum cssparser-macros 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -66,13 +66,13 @@ rlbox_lucet_sandbox = { git = "https://g
 nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
 spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu" }
 # failure's backtrace feature might break our builds, see bug 1608157.
 failure = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
 failure_derive = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
 
 [patch.crates-io.cranelift-codegen]
 git = "https://github.com/bytecodealliance/cranelift"
-rev = "b01bee7c5269f72196b42e8bdd874425166bf429"
+rev = "98633eeb0d249efae23ee69ec03dc35b7d9bec17"
 
 [patch.crates-io.cranelift-wasm]
 git = "https://github.com/bytecodealliance/cranelift"
-rev = "b01bee7c5269f72196b42e8bdd874425166bf429"
+rev = "98633eeb0d249efae23ee69ec03dc35b7d9bec17"
--- a/js/src/wasm/cranelift/Cargo.toml
+++ b/js/src/wasm/cranelift/Cargo.toml
@@ -8,18 +8,18 @@ edition = "2018"
 crate-type = ["rlib"]
 name = "baldrdash"
 
 [dependencies]
 # The build system redirects the versions of cranelift-codegen and
 # cranelift-wasm to pinned commits. If you want to update Cranelift in Gecko,
 # you should update the following $TOP_LEVEL/Cargo.toml file: look for the
 # revision (rev) hashes of both cranelift dependencies (codegen and wasm).
-cranelift-codegen = { version = "0.55", default-features = false }
-cranelift-wasm = "0.55"
+cranelift-codegen = { version = "0.56", default-features = false }
+cranelift-wasm = "0.56"
 log = { version = "0.4.6", default-features = false, features = ["release_max_level_info"] }
 env_logger = "0.6"
 smallvec = "1.0"
 
 [build-dependencies]
 bindgen = {version = "0.51.1", default-features = false} # disable `logging` to reduce code size
 
 [features]
--- a/third_party/rust/cranelift-bforest/.cargo-checksum.json
+++ b/third_party/rust/cranelift-bforest/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"d47e794d642207dbd9f09c345a5d35382cd0a426c510fded00422bde9f1c5fb7","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"af367c67340fa7f6fb9a35b0aa637dcf303957f7ae7427a5f4f6356801c8bb04","src/lib.rs":"59933214e5213d003d98c6fa5f22c3c863557640189588d989ff0335b006af9a","src/map.rs":"a3b7f64cae7ec9c2a8038def315bcf90e8751552b1bc1c20b62fbb8c763866c4","src/node.rs":"28f7edd979f7b9712bc4ab30b0d2a1b8ad5485a4b1e8c09f3dcaf501b9b5ccd1","src/path.rs":"a86ee1c882c173e8af96fd53a416a0fb485dd3f045ac590ef313a9d9ecf90f56","src/pool.rs":"f6337b5417f7772e6878a160c1a40629199ff09997bdff18eb2a0ba770158600","src/set.rs":"281eb8b5ead1ffd395946464d881f9bb0e7fb61092aed701d72d2314b5f80994"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"6ff5db6c1ea4645414a7bee929c1acc913382bbcb29b4dd33477185e64a83bf4","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"af367c67340fa7f6fb9a35b0aa637dcf303957f7ae7427a5f4f6356801c8bb04","src/lib.rs":"59933214e5213d003d98c6fa5f22c3c863557640189588d989ff0335b006af9a","src/map.rs":"a3b7f64cae7ec9c2a8038def315bcf90e8751552b1bc1c20b62fbb8c763866c4","src/node.rs":"28f7edd979f7b9712bc4ab30b0d2a1b8ad5485a4b1e8c09f3dcaf501b9b5ccd1","src/path.rs":"a86ee1c882c173e8af96fd53a416a0fb485dd3f045ac590ef313a9d9ecf90f56","src/pool.rs":"f6337b5417f7772e6878a160c1a40629199ff09997bdff18eb2a0ba770158600","src/set.rs":"281eb8b5ead1ffd395946464d881f9bb0e7fb61092aed701d72d2314b5f80994"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-bforest/Cargo.toml
+++ b/third_party/rust/cranelift-bforest/Cargo.toml
@@ -1,19 +1,19 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-bforest"
-version = "0.55.0"
+version = "0.56.0"
 description = "A forest of B+-trees"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://cranelift.readthedocs.io/"
 repository = "https://github.com/bytecodealliance/cranelift"
 categories = ["no-std"]
 readme = "README.md"
 keywords = ["btree", "forest", "set", "map"]
 edition = "2018"
 
 [dependencies]
-cranelift-entity = { path = "../cranelift-entity", version = "0.55.0", default-features = false }
+cranelift-entity = { path = "../cranelift-entity", version = "0.56.0", default-features = false }
 
 [badges]
 maintenance = { status = "experimental" }
 travis-ci = { repository = "bytecodealliance/cranelift" }
--- a/third_party/rust/cranelift-codegen-meta/.cargo-checksum.json
+++ b/third_party/rust/cranelift-codegen-meta/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"eecaf15fdc0f1a78dce08dae1fc6c529da7638f1bb2ea7c007741df27973b6d7","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"b123f056d0d458396679c5f7f2a16d2762af0258fcda4ac14b6655a95e5a0022","src/cdsl/ast.rs":"8fdd17d9d8c4bd0cf535599a40d7da0e5bf27fdcef817cd55ab7c580c8eb6a6c","src/cdsl/cpu_modes.rs":"7ceb99df347faf5e69b34a7e0d691e9c148d15587df09e99d46a7d37238d8d06","src/cdsl/encodings.rs":"d884a564815a03c23369bcf31d13b122ae5ba84d0c80eda9312f0c0a829bf794","src/cdsl/formats.rs":"63e638305aa3ca6dd409ddf0e5e9605eeac1cc2631103e42fc6cbc87703d9b63","src/cdsl/instructions.rs":"6ad4c75e2bf634475b6a57feb1582f39dd8e670680f68f66218274ad96b6b3f4","src/cdsl/isa.rs":"ccabd6848b69eb069c10db61c7e7f86080777495714bb53d03e663c40541be94","src/cdsl/mod.rs":"0aa827923bf4c45e5ee2359573bd863e00f474acd532739f49dcd74a27553882","src/cdsl/operands.rs":"1c3411504de9c83112ff48e0ff1cfbb2e4ba5a9a15c1716f411ef31a4df59899","src/cdsl/recipes.rs":"80b7cd87332229b569e38086ceee8d557e679b9a32ad2e50bdb15c33337c3418","src/cdsl/regs.rs":"05f93ab8504ee82d7cc9811a5b40e5cd004c327577b4c0b3dd957fc422f3c013","src/cdsl/settings.rs":"e6fd9a31925743b93b11f09c9c8271bab6aa2430aa053a2601957b4487df7d77","src/cdsl/type_inference.rs":"1efca8a095ffc899b7527bda6b9d9378c73d7283f8dceaa4819e8af599f8be21","src/cdsl/types.rs":"763cb82b1d8ceb6be682ed6c71c8c98cab686151d177aad6d8f8ef92a37c5639","src/cdsl/typevar.rs":"52f7242a35805a82baf2c788c3eb392e2fba0fcbf47f047f32eba81f34487c7e","src/cdsl/xform.rs":"55da0c3f2403147b535ab6ae5d69c623fbe839edecf2a3af1de84420cd58402d","src/default_map.rs":"101bb0282a124f9c921f6bd095f529e8753621450d783c3273b0b0394c2c5c03","src/error.rs":"e9b11b2feb2d867b94c8810fdc5a6c4e0d9131604a0bfa5340ff2639a55100b4","src/gen_binemit.rs":"515e243420b30d1e01f8ea630282d9b6d78a715e1951f3f20392e19a48164442","src/gen_encodings.rs":"f00cded6b68a9b48c9e3cd39a8b6f0ba136f4062c8f8666109158a72c62c3ed1","src/gen_inst.rs":"fac99641622591c0529c0ef789dd83290a624fc674c91a959f426696f82044de","src/gen_legalizer.rs":"7a68c2b9fd77b6420ecb10539d9af0520374e4f2e30d5a345d98dafde157e6bd","src/gen_registers.rs":"3628949229c1cb5179ec5f655b9a1ddd0504ba74ffb9fb23741c85c9154b696f","src/gen_settings.rs":"f3cc3d31f6cc898f30606caf084f0de220db2d3b1b5e5e4145fa7c9a9a1597e2","src/gen_types.rs":"f6c090e1646a43bf2fe81ae0a7029cc6f7dc6d43285368f56d86c35a21c469a6","src/isa/arm32/mod.rs":"8e09ec1b3caf2d22dce8517b37c356047bfce9a6dea712467d867ed05c4bedaf","src/isa/arm64/mod.rs":"b01f030925d3f2af37d7df1b4a800eb7f0d24f74a46e9154fd8b6752643eb2d5","src/isa/mod.rs":"136141f99f217ba42b9e3f7f47238ab19cc974bb3bef2e2df7f7b5a683989d46","src/isa/riscv/encodings.rs":"8abb1968d917588bc5fc5f5be6dd66bdec23ac456ba65f8138237c8e891e843c","src/isa/riscv/mod.rs":"a7b461a30bbfbc1e3b33645422ff40d5b1761c30cb5d4a8aa12e9a3b7f7aee51","src/isa/riscv/recipes.rs":"c9424cffed54cc4d328879a4613b9f6a2c2b7cde7e6e17b4fccd5f661aaf92f2","src/isa/x86/encodings.rs":"ddb3b4c6f9b742ac5fb67136acd60062e16cdffb4dbdd2a309c2155feb63e23d","src/isa/x86/instructions.rs":"e4a92f2b707e0a9af0317041eb9a8bc58a8bedcdbbe35f54dcfaf05699a50675","src/isa/x86/legalize.rs":"fca4a2729fbefded71effb7517c63a3da3648f8ab68968ef014cfc5d5f631cc7","src/isa/x86/mod.rs":"49f0bc05898d1d8565e692ec2550855de15fd6cffa3b5b6e0f8d502cd813e306","src/isa/x86/opcodes.rs":"643bae64cd4050814adfb856046cf650979bec5d251a9d9a6e11bafb5a603c43","src/isa/x86/recipes.rs":"02cff98d27e852410bea7fb035510f78b15e77d133f745d4f052dbbc54a32e44","src/isa/x86/registers.rs":"e24c9487f4c257b1089dac6bca0106cc673db77292cd000ca8e0c7e0d0103f63","src/isa/x86/settings.rs":"9087cd57da2852b689bddc296639f9b9e1caa30e8185798891079da8d9340b53","src/lib.rs":"2491b0e74078914cb89d1778fa8174daf723fe76aaf7fed18741237d68f6df32","src/shared/entities.rs":"911b396da11188bd510de004956596f150e27540edd351c74028f99f5f3c79c5","src/shared/formats.rs":"d8cf211c392ec3c54d0101ef31b700c3222bc8e80b69a04b244953e449770336","src/shared/immediates.rs":"e4a57657f6af9853794804eb41c01204a2c13a632f44f55d90e156a4b98c5f65","src/shared/instructions.rs":"3eaa255634ae32a653fa16be82573d6a5912c766ce92589f13b81867b774a74e","src/shared/legalize.rs":"73e1b42743c324104f5a34120e1598146ce4ee7393137ecb5391b768c61f2605","src/shared/mod.rs":"bc497c14d083c29eefe4935cff9cd1bd138c071bc50f787248727a3858dc69f3","src/shared/settings.rs":"cda96c9599d49b82e5cd43c7d0fd53a197fa8dadcc56dc33566ac47fdd6da607","src/shared/types.rs":"4702df132f4b5d70cc9411ec5221ba0b1bd4479252274e0223ae57b6d0331247","src/srcgen.rs":"dcfc159c8599270f17e6a978c4be255abca51556b5ef0da497faec4a4a1e62ce","src/unique_table.rs":"31aa54330ca4786af772d32e8cb6158b6504b88fa93fe177bf0c6cbe545a8d35"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"938700819ee5e8988ff462d6a3fb4abe94fcd9f9111033dad9610f444c68f6eb","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"b123f056d0d458396679c5f7f2a16d2762af0258fcda4ac14b6655a95e5a0022","src/cdsl/ast.rs":"8fdd17d9d8c4bd0cf535599a40d7da0e5bf27fdcef817cd55ab7c580c8eb6a6c","src/cdsl/cpu_modes.rs":"7ceb99df347faf5e69b34a7e0d691e9c148d15587df09e99d46a7d37238d8d06","src/cdsl/encodings.rs":"d884a564815a03c23369bcf31d13b122ae5ba84d0c80eda9312f0c0a829bf794","src/cdsl/formats.rs":"63e638305aa3ca6dd409ddf0e5e9605eeac1cc2631103e42fc6cbc87703d9b63","src/cdsl/instructions.rs":"bc8b65a2bc689ee2837ea0d9771a37791b747ec1b71cb46eae414830f55be581","src/cdsl/isa.rs":"ccabd6848b69eb069c10db61c7e7f86080777495714bb53d03e663c40541be94","src/cdsl/mod.rs":"0aa827923bf4c45e5ee2359573bd863e00f474acd532739f49dcd74a27553882","src/cdsl/operands.rs":"1c3411504de9c83112ff48e0ff1cfbb2e4ba5a9a15c1716f411ef31a4df59899","src/cdsl/recipes.rs":"80b7cd87332229b569e38086ceee8d557e679b9a32ad2e50bdb15c33337c3418","src/cdsl/regs.rs":"05f93ab8504ee82d7cc9811a5b40e5cd004c327577b4c0b3dd957fc422f3c013","src/cdsl/settings.rs":"e6fd9a31925743b93b11f09c9c8271bab6aa2430aa053a2601957b4487df7d77","src/cdsl/type_inference.rs":"1efca8a095ffc899b7527bda6b9d9378c73d7283f8dceaa4819e8af599f8be21","src/cdsl/types.rs":"ff764c9e9c29a05677bff6164e7bc25a0c32655052d77ae580536abba8b1713b","src/cdsl/typevar.rs":"c7e80a3c52755f2d91fb5c3d18413b7c97777bd54d1aece8a17d1bbd9944c46a","src/cdsl/xform.rs":"55da0c3f2403147b535ab6ae5d69c623fbe839edecf2a3af1de84420cd58402d","src/default_map.rs":"101bb0282a124f9c921f6bd095f529e8753621450d783c3273b0b0394c2c5c03","src/error.rs":"e9b11b2feb2d867b94c8810fdc5a6c4e0d9131604a0bfa5340ff2639a55100b4","src/gen_binemit.rs":"515e243420b30d1e01f8ea630282d9b6d78a715e1951f3f20392e19a48164442","src/gen_encodings.rs":"f00cded6b68a9b48c9e3cd39a8b6f0ba136f4062c8f8666109158a72c62c3ed1","src/gen_inst.rs":"fac99641622591c0529c0ef789dd83290a624fc674c91a959f426696f82044de","src/gen_legalizer.rs":"7a68c2b9fd77b6420ecb10539d9af0520374e4f2e30d5a345d98dafde157e6bd","src/gen_registers.rs":"3628949229c1cb5179ec5f655b9a1ddd0504ba74ffb9fb23741c85c9154b696f","src/gen_settings.rs":"f3cc3d31f6cc898f30606caf084f0de220db2d3b1b5e5e4145fa7c9a9a1597e2","src/gen_types.rs":"f6c090e1646a43bf2fe81ae0a7029cc6f7dc6d43285368f56d86c35a21c469a6","src/isa/arm32/mod.rs":"8e09ec1b3caf2d22dce8517b37c356047bfce9a6dea712467d867ed05c4bedaf","src/isa/arm64/mod.rs":"b01f030925d3f2af37d7df1b4a800eb7f0d24f74a46e9154fd8b6752643eb2d5","src/isa/mod.rs":"136141f99f217ba42b9e3f7f47238ab19cc974bb3bef2e2df7f7b5a683989d46","src/isa/riscv/encodings.rs":"8abb1968d917588bc5fc5f5be6dd66bdec23ac456ba65f8138237c8e891e843c","src/isa/riscv/mod.rs":"a7b461a30bbfbc1e3b33645422ff40d5b1761c30cb5d4a8aa12e9a3b7f7aee51","src/isa/riscv/recipes.rs":"c9424cffed54cc4d328879a4613b9f6a2c2b7cde7e6e17b4fccd5f661aaf92f2","src/isa/x86/encodings.rs":"79dcfb10819016da068b34705acd989b79f102577fec36db10e01fad4837b3b3","src/isa/x86/instructions.rs":"e4a92f2b707e0a9af0317041eb9a8bc58a8bedcdbbe35f54dcfaf05699a50675","src/isa/x86/legalize.rs":"fca4a2729fbefded71effb7517c63a3da3648f8ab68968ef014cfc5d5f631cc7","src/isa/x86/mod.rs":"49f0bc05898d1d8565e692ec2550855de15fd6cffa3b5b6e0f8d502cd813e306","src/isa/x86/opcodes.rs":"643bae64cd4050814adfb856046cf650979bec5d251a9d9a6e11bafb5a603c43","src/isa/x86/recipes.rs":"02cff98d27e852410bea7fb035510f78b15e77d133f745d4f052dbbc54a32e44","src/isa/x86/registers.rs":"e24c9487f4c257b1089dac6bca0106cc673db77292cd000ca8e0c7e0d0103f63","src/isa/x86/settings.rs":"9087cd57da2852b689bddc296639f9b9e1caa30e8185798891079da8d9340b53","src/lib.rs":"2491b0e74078914cb89d1778fa8174daf723fe76aaf7fed18741237d68f6df32","src/shared/entities.rs":"911b396da11188bd510de004956596f150e27540edd351c74028f99f5f3c79c5","src/shared/formats.rs":"d8cf211c392ec3c54d0101ef31b700c3222bc8e80b69a04b244953e449770336","src/shared/immediates.rs":"e4a57657f6af9853794804eb41c01204a2c13a632f44f55d90e156a4b98c5f65","src/shared/instructions.rs":"3eaa255634ae32a653fa16be82573d6a5912c766ce92589f13b81867b774a74e","src/shared/legalize.rs":"73e1b42743c324104f5a34120e1598146ce4ee7393137ecb5391b768c61f2605","src/shared/mod.rs":"bc497c14d083c29eefe4935cff9cd1bd138c071bc50f787248727a3858dc69f3","src/shared/settings.rs":"cda96c9599d49b82e5cd43c7d0fd53a197fa8dadcc56dc33566ac47fdd6da607","src/shared/types.rs":"4702df132f4b5d70cc9411ec5221ba0b1bd4479252274e0223ae57b6d0331247","src/srcgen.rs":"dcfc159c8599270f17e6a978c4be255abca51556b5ef0da497faec4a4a1e62ce","src/unique_table.rs":"31aa54330ca4786af772d32e8cb6158b6504b88fa93fe177bf0c6cbe545a8d35"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-codegen-meta/Cargo.toml
+++ b/third_party/rust/cranelift-codegen-meta/Cargo.toml
@@ -1,20 +1,20 @@
 [package]
 name = "cranelift-codegen-meta"
 authors = ["The Cranelift Project Developers"]
-version = "0.55.0"
+version = "0.56.0"
 description = "Metaprogram for cranelift-codegen code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/cranelift"
 readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen-shared = { path = "../shared", version = "0.55.0" }
-cranelift-entity = { path = "../../cranelift-entity", version = "0.55.0" }
+cranelift-codegen-shared = { path = "../shared", version = "0.56.0" }
+cranelift-entity = { path = "../../cranelift-entity", version = "0.56.0" }
 
 [badges]
 maintenance = { status = "experimental" }
 travis-ci = { repository = "bytecodealliance/cranelift" }
 
 [package.metadata.docs.rs]
 rustdoc-args = [ "--document-private-items" ]
--- a/third_party/rust/cranelift-codegen-meta/src/cdsl/instructions.rs
+++ b/third_party/rust/cranelift-codegen-meta/src/cdsl/instructions.rs
@@ -1341,42 +1341,41 @@ mod test {
             .build(OpcodeNumber(42))
     }
 
     #[test]
     fn ensure_bound_instructions_can_bind_lane_types() {
         let type1 = TypeSetBuilder::new().ints(8..64).build();
         let in1 = OperandKindFields::TypeVar(TypeVar::new("a", "...", type1));
         let inst = build_fake_instruction(vec![in1], vec![]);
-        inst.bind(LaneType::IntType(I32));
+        inst.bind(LaneType::Int(I32));
     }
 
     #[test]
     fn ensure_bound_instructions_can_bind_immediates() {
         let inst = build_fake_instruction(vec![OperandKindFields::ImmValue], vec![]);
         let bound_inst = inst.bind(Immediate::IntCC(IntCC::Equal));
         assert!(bound_inst.verify_bindings().is_ok());
     }
 
     #[test]
     #[should_panic]
     fn ensure_instructions_fail_to_bind() {
         let inst = build_fake_instruction(vec![], vec![]);
-        inst.bind(BindParameter::Lane(LaneType::IntType(I32)));
+        inst.bind(BindParameter::Lane(LaneType::Int(I32)));
         // Trying to bind to an instruction with no inputs should fail.
     }
 
     #[test]
     #[should_panic]
     fn ensure_bound_instructions_fail_to_bind_too_many_types() {
         let type1 = TypeSetBuilder::new().ints(8..64).build();
         let in1 = OperandKindFields::TypeVar(TypeVar::new("a", "...", type1));
         let inst = build_fake_instruction(vec![in1], vec![]);
-        inst.bind(LaneType::IntType(I32))
-            .bind(LaneType::IntType(I64));
+        inst.bind(LaneType::Int(I32)).bind(LaneType::Int(I64));
     }
 
     #[test]
     #[should_panic]
     fn ensure_instructions_fail_to_bind_too_many_immediates() {
         let inst = build_fake_instruction(vec![OperandKindFields::ImmValue], vec![]);
         inst.bind(BindParameter::Immediate(Immediate::IntCC(IntCC::Equal)))
             .bind(BindParameter::Immediate(Immediate::IntCC(IntCC::Equal)));
--- a/third_party/rust/cranelift-codegen-meta/src/cdsl/types.rs
+++ b/third_party/rust/cranelift-codegen-meta/src/cdsl/types.rs
@@ -135,172 +135,172 @@ impl From<VectorType> for ValueType {
     fn from(vector: VectorType) -> Self {
         ValueType::Vector(vector)
     }
 }
 
 /// A concrete scalar type that can appear as a vector lane too.
 #[derive(Clone, Copy, PartialEq, Eq, Hash)]
 pub(crate) enum LaneType {
-    BoolType(shared_types::Bool),
-    FloatType(shared_types::Float),
-    IntType(shared_types::Int),
+    Bool(shared_types::Bool),
+    Float(shared_types::Float),
+    Int(shared_types::Int),
 }
 
 impl LaneType {
     /// Return a string containing the documentation comment for this lane type.
     pub fn doc(self) -> String {
         match self {
-            LaneType::BoolType(_) => format!("A boolean type with {} bits.", self.lane_bits()),
-            LaneType::FloatType(shared_types::Float::F32) => String::from(
+            LaneType::Bool(_) => format!("A boolean type with {} bits.", self.lane_bits()),
+            LaneType::Float(shared_types::Float::F32) => String::from(
                 "A 32-bit floating point type represented in the IEEE 754-2008
                 *binary32* interchange format. This corresponds to the :c:type:`float`
                 type in most C implementations.",
             ),
-            LaneType::FloatType(shared_types::Float::F64) => String::from(
+            LaneType::Float(shared_types::Float::F64) => String::from(
                 "A 64-bit floating point type represented in the IEEE 754-2008
                 *binary64* interchange format. This corresponds to the :c:type:`double`
                 type in most C implementations.",
             ),
-            LaneType::IntType(_) if self.lane_bits() < 32 => format!(
+            LaneType::Int(_) if self.lane_bits() < 32 => format!(
                 "An integer type with {} bits.
                 WARNING: arithmetic on {}bit integers is incomplete",
                 self.lane_bits(),
                 self.lane_bits()
             ),
-            LaneType::IntType(_) => format!("An integer type with {} bits.", self.lane_bits()),
+            LaneType::Int(_) => format!("An integer type with {} bits.", self.lane_bits()),
         }
     }
 
     /// Return the number of bits in a lane.
     pub fn lane_bits(self) -> u64 {
         match self {
-            LaneType::BoolType(ref b) => *b as u64,
-            LaneType::FloatType(ref f) => *f as u64,
-            LaneType::IntType(ref i) => *i as u64,
+            LaneType::Bool(ref b) => *b as u64,
+            LaneType::Float(ref f) => *f as u64,
+            LaneType::Int(ref i) => *i as u64,
         }
     }
 
     /// Find the unique number associated with this lane type.
     pub fn number(self) -> u8 {
         constants::LANE_BASE
             + match self {
-                LaneType::BoolType(shared_types::Bool::B1) => 0,
-                LaneType::BoolType(shared_types::Bool::B8) => 1,
-                LaneType::BoolType(shared_types::Bool::B16) => 2,
-                LaneType::BoolType(shared_types::Bool::B32) => 3,
-                LaneType::BoolType(shared_types::Bool::B64) => 4,
-                LaneType::BoolType(shared_types::Bool::B128) => 5,
-                LaneType::IntType(shared_types::Int::I8) => 6,
-                LaneType::IntType(shared_types::Int::I16) => 7,
-                LaneType::IntType(shared_types::Int::I32) => 8,
-                LaneType::IntType(shared_types::Int::I64) => 9,
-                LaneType::IntType(shared_types::Int::I128) => 10,
-                LaneType::FloatType(shared_types::Float::F32) => 11,
-                LaneType::FloatType(shared_types::Float::F64) => 12,
+                LaneType::Bool(shared_types::Bool::B1) => 0,
+                LaneType::Bool(shared_types::Bool::B8) => 1,
+                LaneType::Bool(shared_types::Bool::B16) => 2,
+                LaneType::Bool(shared_types::Bool::B32) => 3,
+                LaneType::Bool(shared_types::Bool::B64) => 4,
+                LaneType::Bool(shared_types::Bool::B128) => 5,
+                LaneType::Int(shared_types::Int::I8) => 6,
+                LaneType::Int(shared_types::Int::I16) => 7,
+                LaneType::Int(shared_types::Int::I32) => 8,
+                LaneType::Int(shared_types::Int::I64) => 9,
+                LaneType::Int(shared_types::Int::I128) => 10,
+                LaneType::Float(shared_types::Float::F32) => 11,
+                LaneType::Float(shared_types::Float::F64) => 12,
             }
     }
 
     pub fn bool_from_bits(num_bits: u16) -> LaneType {
-        LaneType::BoolType(match num_bits {
+        LaneType::Bool(match num_bits {
             1 => shared_types::Bool::B1,
             8 => shared_types::Bool::B8,
             16 => shared_types::Bool::B16,
             32 => shared_types::Bool::B32,
             64 => shared_types::Bool::B64,
             128 => shared_types::Bool::B128,
             _ => unreachable!("unxpected num bits for bool"),
         })
     }
 
     pub fn int_from_bits(num_bits: u16) -> LaneType {
-        LaneType::IntType(match num_bits {
+        LaneType::Int(match num_bits {
             8 => shared_types::Int::I8,
             16 => shared_types::Int::I16,
             32 => shared_types::Int::I32,
             64 => shared_types::Int::I64,
             128 => shared_types::Int::I128,
             _ => unreachable!("unxpected num bits for int"),
         })
     }
 
     pub fn float_from_bits(num_bits: u16) -> LaneType {
-        LaneType::FloatType(match num_bits {
+        LaneType::Float(match num_bits {
             32 => shared_types::Float::F32,
             64 => shared_types::Float::F64,
             _ => unreachable!("unxpected num bits for float"),
         })
     }
 
     pub fn by(self, lanes: u16) -> ValueType {
         if lanes == 1 {
             self.into()
         } else {
             ValueType::Vector(VectorType::new(self, lanes.into()))
         }
     }
 
     pub fn is_float(self) -> bool {
         match self {
-            LaneType::FloatType(_) => true,
+            LaneType::Float(_) => true,
             _ => false,
         }
     }
 
     pub fn is_int(self) -> bool {
         match self {
-            LaneType::IntType(_) => true,
+            LaneType::Int(_) => true,
             _ => false,
         }
     }
 }
 
 impl fmt::Display for LaneType {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         match *self {
-            LaneType::BoolType(_) => write!(f, "b{}", self.lane_bits()),
-            LaneType::FloatType(_) => write!(f, "f{}", self.lane_bits()),
-            LaneType::IntType(_) => write!(f, "i{}", self.lane_bits()),
+            LaneType::Bool(_) => write!(f, "b{}", self.lane_bits()),
+            LaneType::Float(_) => write!(f, "f{}", self.lane_bits()),
+            LaneType::Int(_) => write!(f, "i{}", self.lane_bits()),
         }
     }
 }
 
 impl fmt::Debug for LaneType {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let inner_msg = format!("bits={}", self.lane_bits());
         write!(
             f,
             "{}",
             match *self {
-                LaneType::BoolType(_) => format!("BoolType({})", inner_msg),
-                LaneType::FloatType(_) => format!("FloatType({})", inner_msg),
-                LaneType::IntType(_) => format!("IntType({})", inner_msg),
+                LaneType::Bool(_) => format!("BoolType({})", inner_msg),
+                LaneType::Float(_) => format!("FloatType({})", inner_msg),
+                LaneType::Int(_) => format!("IntType({})", inner_msg),
             }
         )
     }
 }
 
 /// Create a LaneType from a given bool variant.
 impl From<shared_types::Bool> for LaneType {
     fn from(b: shared_types::Bool) -> Self {
-        LaneType::BoolType(b)
+        LaneType::Bool(b)
     }
 }
 
 /// Create a LaneType from a given float variant.
 impl From<shared_types::Float> for LaneType {
     fn from(f: shared_types::Float) -> Self {
-        LaneType::FloatType(f)
+        LaneType::Float(f)
     }
 }
 
 /// Create a LaneType from a given int variant.
 impl From<shared_types::Int> for LaneType {
     fn from(i: shared_types::Int) -> Self {
-        LaneType::IntType(i)
+        LaneType::Int(i)
     }
 }
 
 /// An iterator for different lane types.
 pub(crate) struct LaneTypeIterator {
     bool_iter: shared_types::BoolIterator,
     int_iter: shared_types::IntIterator,
     float_iter: shared_types::FloatIterator,
--- a/third_party/rust/cranelift-codegen-meta/src/cdsl/typevar.rs
+++ b/third_party/rust/cranelift-codegen-meta/src/cdsl/typevar.rs
@@ -68,25 +68,25 @@ impl TypeVar {
             ValueType::Vector(vec_type) => {
                 (vec_type.lane_type(), vec_type.lane_count() as RangeBound)
             }
         };
 
         builder = builder.simd_lanes(num_lanes..num_lanes);
 
         let builder = match scalar_type {
-            LaneType::IntType(int_type) => {
+            LaneType::Int(int_type) => {
                 let bits = int_type as RangeBound;
                 builder.ints(bits..bits)
             }
-            LaneType::FloatType(float_type) => {
+            LaneType::Float(float_type) => {
                 let bits = float_type as RangeBound;
                 builder.floats(bits..bits)
             }
-            LaneType::BoolType(bool_type) => {
+            LaneType::Bool(bool_type) => {
                 let bits = bool_type as RangeBound;
                 builder.bools(bits..bits)
             }
         };
         TypeVar::new(name, doc, builder.build())
     }
 
     /// Get a fresh copy of self, named after `name`. Can only be called on non-derived typevars.
@@ -1195,28 +1195,27 @@ fn test_typevar_functions() {
 }
 
 #[test]
 fn test_typevar_singleton() {
     use crate::cdsl::types::VectorType;
     use crate::shared::types as shared_types;
 
     // Test i32.
-    let typevar =
-        TypeVar::new_singleton(ValueType::Lane(LaneType::IntType(shared_types::Int::I32)));
+    let typevar = TypeVar::new_singleton(ValueType::Lane(LaneType::Int(shared_types::Int::I32)));
     assert_eq!(typevar.name, "i32");
     assert_eq!(typevar.type_set.ints, num_set![32]);
     assert!(typevar.type_set.floats.is_empty());
     assert!(typevar.type_set.bools.is_empty());
     assert!(typevar.type_set.specials.is_empty());
     assert_eq!(typevar.type_set.lanes, num_set![1]);
 
     // Test f32x4.
     let typevar = TypeVar::new_singleton(ValueType::Vector(VectorType::new(
-        LaneType::FloatType(shared_types::Float::F32),
+        LaneType::Float(shared_types::Float::F32),
         4,
     )));
     assert_eq!(typevar.name, "f32x4");
     assert!(typevar.type_set.ints.is_empty());
     assert_eq!(typevar.type_set.floats, num_set![32]);
     assert_eq!(typevar.type_set.lanes, num_set![4]);
     assert!(typevar.type_set.bools.is_empty());
     assert!(typevar.type_set.specials.is_empty());
--- a/third_party/rust/cranelift-codegen-meta/src/isa/x86/encodings.rs
+++ b/third_party/rust/cranelift-codegen-meta/src/isa/x86/encodings.rs
@@ -1525,16 +1525,17 @@ fn define_alu(
     e.enc_both(trueif, rec_seti_abcd.opcodes(&SET_BYTE_IF_OVERFLOW));
     e.enc_both(trueff, rec_setf_abcd.opcodes(&SET_BYTE_IF_OVERFLOW));
 
     // Conditional move (a.k.a integer select).
     e.enc_i32_i64(selectif, rec_cmov.opcodes(&CMOV_OVERFLOW));
 }
 
 #[inline(never)]
+#[allow(clippy::cognitive_complexity)]
 fn define_simd(
     e: &mut PerCpuModeEncodings,
     shared_defs: &SharedDefinitions,
     settings: &SettingGroup,
     x86: &InstructionGroup,
     r: &RecipeGroup,
 ) {
     let shared = &shared_defs.instructions;
--- a/third_party/rust/cranelift-codegen-shared/.cargo-checksum.json
+++ b/third_party/rust/cranelift-codegen-shared/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"4bd4ee47249d76fa655edfefd456fee8153b4f11f3fa10120540fefd1005d3f5","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"a410bc2f5dcbde499c0cd299c2620bc8111e3c5b3fccdd9e2d85caf3c24fdab3","src/condcodes.rs":"b8d433b2217b86e172d25b6c65a3ce0cc8ca221062cad1b28b0c78d2159fbda9","src/constant_hash.rs":"ffc619f45aad62c6fdcb83553a05879691a72e9a0103375b2d6cc12d52cf72d0","src/constants.rs":"fed03a10a6316e06aa174091db6e7d1fbb5f73c82c31193012ec5ab52f1c603a","src/isa/mod.rs":"428a950eca14acbe783899ccb1aecf15027f8cbe205578308ebde203d10535f3","src/isa/x86/encoding_bits.rs":"7e013fb804b13f9f83a0d517c6f5105856938d08ad378cc44a6fe6a59adef270","src/isa/x86/mod.rs":"01ef4e4d7437f938badbe2137892183c1ac684da0f68a5bec7e06aad34f43b9b","src/lib.rs":"91f26f998f11fb9cb74d2ec171424e29badd417beef023674850ace57149c656"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"df839290e460380f9b3007d081c8180510d957c65ebeb2d30b898dfe6865bbec","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"a410bc2f5dcbde499c0cd299c2620bc8111e3c5b3fccdd9e2d85caf3c24fdab3","src/condcodes.rs":"b8d433b2217b86e172d25b6c65a3ce0cc8ca221062cad1b28b0c78d2159fbda9","src/constant_hash.rs":"ffc619f45aad62c6fdcb83553a05879691a72e9a0103375b2d6cc12d52cf72d0","src/constants.rs":"fed03a10a6316e06aa174091db6e7d1fbb5f73c82c31193012ec5ab52f1c603a","src/isa/mod.rs":"428a950eca14acbe783899ccb1aecf15027f8cbe205578308ebde203d10535f3","src/isa/x86/encoding_bits.rs":"7e013fb804b13f9f83a0d517c6f5105856938d08ad378cc44a6fe6a59adef270","src/isa/x86/mod.rs":"01ef4e4d7437f938badbe2137892183c1ac684da0f68a5bec7e06aad34f43b9b","src/lib.rs":"91f26f998f11fb9cb74d2ec171424e29badd417beef023674850ace57149c656"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-codegen-shared/Cargo.toml
+++ b/third_party/rust/cranelift-codegen-shared/Cargo.toml
@@ -1,11 +1,11 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen-shared"
-version = "0.55.0"
+version = "0.56.0"
 description = "For code shared between cranelift-codegen-meta and cranelift-codegen"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/cranelift"
 readme = "README.md"
 edition = "2018"
 
 # Since this is a shared dependency of several packages, please strive to keep this dependency-free.
--- a/third_party/rust/cranelift-codegen/.cargo-checksum.json
+++ b/third_party/rust/cranelift-codegen/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"0c548ac01c02098785ce48bca21a7c591ed22d6dafccf4cdc4802b174849c5c7","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"e5127227a7db4a8aa92fa6613ed71801025790e696bb41b0323fb7f3c6f7495a","build.rs":"9fffedcfb42f2147f1a3f2b8d39af91e291768fe6f4e75ce19de1debfca7bfd8","src/abi.rs":"eec2c37e39e29665d971da1ebf4e42e9dc28e5c8e3ba030dd4d2c4090f99579a","src/binemit/memorysink.rs":"bd630a490b98049ef1ea5dbb203bacf6ae6e76551b3328ea9e5b9b3744b5035d","src/binemit/mod.rs":"111362efd540307136badea21003393e7da193b4c11758e7d7c846ab4904ecde","src/binemit/relaxation.rs":"35a5f7afe552c1ab6dfdd125e75880b217944adcffc5db027a4ac0b8ad9620a0","src/binemit/shrink.rs":"5755efc978f5056a33c0ecb1bd5e08310397f54a67434ecead184fc6ee047133","src/binemit/stackmap.rs":"ada980e8a6c090ff1230277e4600a28da56bf892b73da34cce6c7469ad27f69c","src/bitset.rs":"c4fa43fff52a8f2d343e3edbeeb26d851c64ed811e3d3aa9e2af80358d43be14","src/cfg_printer.rs":"d2909587cfd65b9a66c87e749248b055b32eeea428597572a3f0c6c542bee8c9","src/constant_hash.rs":"8f53afb38891fbdab8553c7a89e61f0ce30947a22fb24ae84523c9a1ab025c3f","src/context.rs":"d47182f15327dbd775d9bbeae87439a108f8e12ac20515ee59934d059aaf5fb2","src/cursor.rs":"9ff74f47f0e0ecbb7ae67ed001c794e386d65f6eb99892f77109b0b8f1f90634","src/dbg.rs":"1898d94cff0975815eb348651702e95c8f2f63886501d3b7043ee75668480472","src/dce.rs":"d8ab7c0cac0416f9d75afdacc60ba02e532361ec927c3f8bd171b1a53ec8b31a","src/divconst_magic_numbers.rs":"e7f8f46f3a25ed7155890e9d76c10f5dde9dc5bbcebb623c8166fa415abdd959","src/dominator_tree.rs":"184a501aa1838902ad3cf6145a58ff3ddd2ed0cb00ca4ed4a39b56ea5d8b0a55","src/flowgraph.rs":"2709526095875da1e93cb831599360e05b92e2566447e525e7870a29b0a2acf5","src/fx.rs":"8a5d07487906d8316a179e826fcd817a92a4860686256a6fd9d78ba47c63f330","src/ir/builder.rs":"6f111f2a65dfe27633dcec918f74b767277131a72cd94b7bec2e1ef5c4308d5b","src/ir/constant.rs":"6e9e9c82f2ded45d574d0a6029ce6cd3513b9de6329ed194ca5bab21ed1d1b9a","src/ir/dfg.rs":"6385e629822418a60d70c96074defc4a30aa9b87550640d43a459a6cef0c3080","src/ir/entities.rs":"4c4ccda20dd046974e1428be95701c6b3251eeb0e9aaed7d8d3df28947973715","src/ir/extfunc.rs":"7efce4988018f2a9ae97fd532749e1b5d4e73139e93cb14abae2c51c190a4e6c","src/ir/extname.rs":"8f539363e24b37abd7d1a34ad66ae6eca59207f611e02c3dface76da477346f7","src/ir/framelayout.rs":"c3393bcaec95df01f732164525c65843db157ed8816e0cc4b82fd9f868c31550","src/ir/function.rs":"229366e48141f020b870cfeacf8fe9b04fd5e495ece948373f85b73a52c774a0","src/ir/globalvalue.rs":"5a33af46e0c4b9537ef9fc422ab4fa2dc70b919b7cd6316f27b76a715361f060","src/ir/heap.rs":"a59d3e5901412b53c0b53a8cdf10765ff5921de9c410ae9acea226c89827df3c","src/ir/immediates.rs":"323ff93cb36bb682374ad323f145e61ba554f01d7ffebebe058531cbc556b91a","src/ir/instructions.rs":"2b71d040ae6240348ab74bf764c84e01e699708342349a090337a010400577a2","src/ir/jumptable.rs":"6375275599dc6f07027f81d823fa1d7371359a7b961f9627377164710a87bb71","src/ir/layout.rs":"eeb729d2c2027324dee7b72f2db91db03784a51c6d7fecd8284c77ddb8f11258","src/ir/libcall.rs":"510cd6301940ab92e54711d9e52cb34f29dca7e6d6203f1d7cff3daa085bc1ac","src/ir/memflags.rs":"dbcf3798ab66dc764b73fb7f139a621c54cc6bcc683f1f70a33ed7e8c3486bfd","src/ir/mod.rs":"25dec7d955ea35db45d596bada42cd6869d8fdd7c60f66acafe348139a4cccf6","src/ir/progpoint.rs":"96609331ba8b23dc3ab3c485464ab7ab3e7d0c0e8843a5d72e39ea334d4b3070","src/ir/sourceloc.rs":"67c66adace734645ddf311ecb22e975f20756e07c91e10f698a830cfc2cd08aa","src/ir/stackslot.rs":"9d4e71894aad32d97c98367195146237c0e8b547032374878c2da5374f9c3520","src/ir/table.rs":"dcc3b663a989b2b084402b08dc9a0e928dbd052e194a46a1886cc6f0cf1a5f2c","src/ir/trapcode.rs":"413090e632116d405ba69f3b0e6f4460e0a67c5dfb934e11c8eebde04d8e1af5","src/ir/types.rs":"ec261b6c3677f4113a2f7125da0df3fd66a1a666aebb19abd5cb49fcef372bc6","src/ir/valueloc.rs":"fc31e06b2b0f37333829c4658b7f6fa8a717e93e18a5c67a63947e5882bbe1a2","src/isa/arm32/abi.rs":"59abc42d75445f7f3335b035655083772e98e413ee58a72fc4e224620327b5ea","src/isa/arm32/binemit.rs":"eecd7296c27d2520db8e86dd462833ecf06afd33548b03ae676c02454cdd13c2","src/isa/arm32/enc_tables.rs":"e94b12af802de59484cab1124d2ac8a88d08433f6e1a476724ed0403f4b5967f","src/isa/arm32/mod.rs":"9ccd3a24afc921f35bb89f508d86fe5eb63e86e9c85d34132a01a131e19e2f61","src/isa/arm32/registers.rs":"100033c78e2a891ad90a2765137bd678f1d11ae4ba61974d1083106fa1324037","src/isa/arm32/settings.rs":"2314460f885c24f9571d640f9737a8e0b7d20ca02bcda1127f878fd3891c0529","src/isa/arm64/abi.rs":"c946f65b7731095734074e9c06964672cdf4c8352a54fe23f7411d874b27ec28","src/isa/arm64/binemit.rs":"3afbb78f6d9ae5614d908023f84b774c0493c8757ad86fd8301baf0928bb0104","src/isa/arm64/enc_tables.rs":"73fedf7da610a982e37c76e5211dbce880f77841b71c678b0dab2b9e7217cb7c","src/isa/arm64/mod.rs":"e89bbc1d0dcbce21378fd83ef5b73071cb51b2f5561092ae960aa229accc6f53","src/isa/arm64/registers.rs":"e8bc77f218c83cedec50e2b5b28b88e3301443bd02f7a80151748f2be4b31ea0","src/isa/arm64/settings.rs":"5405ce3560b7ba0705ef525c706eb9f1593e901e1767b837c012084397639042","src/isa/call_conv.rs":"da8064a29cd3577928e3ebd3d3f869bf3dc707a4ac0f2e04d01e81770ff1aebf","src/isa/constraints.rs":"bddb5c68e56b122a53d8be215e41d22ccf8c4563630b1486e6eb31c0d3337565","src/isa/enc_tables.rs":"382e714f9500afc292c563cb66d4c963d6787e58f197b1db242db7a099c22b9a","src/isa/encoding.rs":"22e21fdb8e15859c69e4f836bb61e1a82cd6838d093ce5fe641a90f16fb65c9e","src/isa/mod.rs":"ab7319fdc633228610329a87e22e06308e310e60cd6e59e279b3076259632ab6","src/isa/registers.rs":"f09ca662be1e0beb776d050a46a8ecf7927f2bf75e36c4bda4010b442c4df815","src/isa/riscv/abi.rs":"aa60b701efcef417ee1262a95398343578dc1a30decc8e11044b74d41654ec51","src/isa/riscv/binemit.rs":"264d223da311d4482ebf2f55438b665c67b163058251bc78173c76ba983a31ef","src/isa/riscv/enc_tables.rs":"8491f2082b24c7dedeb7c36cfd913bf9aeaa0a4c8fc754166e9285f4ae002f40","src/isa/riscv/mod.rs":"829c19511b713646e5fb78edae7341ef6da57804b3782e184d1ad31c613a4fec","src/isa/riscv/registers.rs":"6275ec3ef19195d16556c1856cb23095f25a80c31d6b429eaa749d549515a6d3","src/isa/riscv/settings.rs":"e3c063add822ca366e845f5a19d25b56635e828b157a37d29aca5355650e6a66","src/isa/stack.rs":"5d30e2e19662ff3b3a641888bbb29640094ccd51b9a73368a056352afee46320","src/isa/x86/abi.rs":"f93fdd8c6a196fc1a56ff2c9b4885f0ca5034d2affbf1166f23bc42cdca0471b","src/isa/x86/binemit.rs":"87c1052aa245995af0fd9d0295e457d034c06ac6987dd12f8af47652406a5430","src/isa/x86/enc_tables.rs":"9f0dd54ad82812b7d33ec39f4bcc8310587e02fedec7fee9248302d8e5271e7c","src/isa/x86/fde.rs":"a3e33ff9da54a416eebe700af845683dae7361872cb602edea83ff75089c5118","src/isa/x86/mod.rs":"855e4f35af9ea0c86b0b035ff939fdce40bca51f7b7eba32299e7db8fc64f8a1","src/isa/x86/registers.rs":"a0dff4534c6029444867251980ae9a79027f6a50d10ba5fcc974cd3fb3cf3a45","src/isa/x86/settings.rs":"d3e403db3507830f79bcc976c17340b57052cf1b50877fcf1a79549f2a054458","src/isa/x86/unwind.rs":"73261f403b44b11485778b7a099055223b75320ff79e332d3670791bd7ee95d0","src/iterators.rs":"d399a80bc65b97f7d650978e19086dcc1d280ac96d60628eac3d17eb363b0d71","src/legalizer/boundary.rs":"5e91e9cfdadaf3d010bc43c0374e076f0d30727cd65dd8746fe861938a4cb248","src/legalizer/call.rs":"be6074c64c1a00e5e81159dd94c8401fef62205b22c15e07e0c56cf922554d00","src/legalizer/globalvalue.rs":"59ab09a0faf593c7f228500b3fd3bacfc0412bdcb2864ec3621aa65adc4a5693","src/legalizer/heap.rs":"6f722a5ba720acdf19c58ba7c9820ea3a5b5017af3bda70adeeeb8b3c1408eb1","src/legalizer/libcall.rs":"524357d5e63b0a3fcff7e2d3c6b24be33bb50c6aae1d9771349da3fd78138204","src/legalizer/mod.rs":"dadc0a75c8ae269c95284694b76c1b757c3c87b419f33ef94e0c24c581ffc17a","src/legalizer/split.rs":"b99d41a0ccd439bda780d87ee615d4894851ebf6af59aecf1d2f24eab49f19ed","src/legalizer/table.rs":"c36d03525312e3191aba8ee00c26a87c1ea200f9a9a0370f0cc84eeacff71786","src/lib.rs":"c306a7aedcc183fda2c72c87129fe73829d49b80a0ed909c22732f0fd7bf1546","src/licm.rs":"2b3bf07bcfe5a54af8fb0827c1b326c7079c6eba634cc0e3569ffac81f1d27c7","src/loop_analysis.rs":"74d32e8125126adb5e06f2b9a3c6bd914b09f71be5c5bf1c344d4b3a09f7e538","src/nan_canonicalization.rs":"9619bb5554791bd1be75ecd98564d6c9f5b65132bc07c5c4d8c210cd79b66f82","src/partition_slice.rs":"861e778f887ea5d0841d730963565690fd8c298edddf08848d0d215ae5125eba","src/postopt.rs":"d4c487f0299fb905bb5a5822e38dea6f70afa4d4577288988b5bec8660bc1ba0","src/predicates.rs":"d4fa993d8b3036ac9e19d1c1d8880ab5b33030fff0a38d65e2a24b9f9d3956c9","src/print_errors.rs":"9a5f28b5d4278e3364767716ae8c3d9bbbfb2a67edbf0ae1d75fd16226797f6d","src/redundant_reload_remover.rs":"ef78df5bcf70a0958e50c924f92c091f818f38cd71aa56ad9019dfcbb913c0fa","src/regalloc/affinity.rs":"ec5d688c24043a8aa72efcfbfddc14497cd9bab288c9d339e5c0150cdade2b1d","src/regalloc/branch_splitting.rs":"b4adb8f5b67c9380c2f0a61b83528e0e4cdf44512640c65d16d7f4b3fa2bad56","src/regalloc/coalescing.rs":"b05d401e1557d5ccc1df7c98df4bf1ed9992c78ec8ba2ab001f5b3f8139da224","src/regalloc/coloring.rs":"5ecaa16a9bf3b0967d2574cbed70eb4584c21185f7c4e8383f0849962f225857","src/regalloc/context.rs":"0b3d5009c23b58cc9ccca2ece9d85dbdea52f843f52452e7813dd7a3229547d3","src/regalloc/diversion.rs":"77474469869061ed0c6eaed64ace63d1b0f648ee12d017a768f3bff1bf15f849","src/regalloc/live_value_tracker.rs":"69b8a58a5d92e13c9d33a9be0676ac6076fb2d8aa285f1d83673236ee3cbdd5a","src/regalloc/liveness.rs":"f2798904079acaa0f28f9d492d8500963939f8038974178a5b600174a769f367","src/regalloc/liverange.rs":"16a52110ba81b90cbc60620460f584b3ed2059a719eb5ab921892afbb622eb8b","src/regalloc/mod.rs":"50399d6569687a87bf1481304aca42506d946e34465e38ca8093e06485ab5fb6","src/regalloc/pressure.rs":"8408213afe07d4532da699f6604aff111c7061d71b585a84c5ec8db31582314c","src/regalloc/register_set.rs":"c740d10a061c4b8527ce319842b519d743e93e64db53851360f9ca2c099fd652","src/regalloc/reload.rs":"faff9b597e020b578e26cbbba4fd6afd6ccb6b075aa9517b3bd44b5c328e0e6f","src/regalloc/safepoint.rs":"fd69eafcc600136190b14d4d7b9fc241bcd209e1f2ff6c948dbfbf62ced68cbf","src/regalloc/solver.rs":"046c1126cdd027500449202c56383cab3fa3bdcef62f8b0167345ebbf5556802","src/regalloc/spilling.rs":"0d38722c7fe78e4429dd8f60ab591c3c4b15cd697251ba48d434e3c0f1d3ec08","src/regalloc/virtregs.rs":"a287cef413c4251856e0cc262334d5736fbfad008bb3dd7132828a961403edce","src/result.rs":"15e2aac59775ebf63adf29eb6f7d4925b0fe5868bec17cea46eccdfd4441c232","src/scoped_hash_map.rs":"c8d0071ce7e19438e9995b5fca1ea0fca81234811943b06b344331f9742c3718","src/settings.rs":"3ded159cf8bc31dda5546d45e3fadb4a841435434b758041773c25fe26f78511","src/simple_gvn.rs":"9438518e1dfc8cb53779fc03d2ae89e3d0e806adf12e0be5ac7fd29662ca593a","src/simple_preopt.rs":"402003f85f1bae5a3196226a9675fe810c860114e390da58765c4452a5ea2e49","src/stack_layout.rs":"67161c1fd8d15453b2b82ec933116075433576fe67312331e3b784c665c1d02f","src/timing.rs":"231683891065f71a54c9c7616f7f9c5e2a7798b6d21b930cf9dbe703ad4784ed","src/topo_order.rs":"e3a9bf363c0322add1c700095bad0ea1fe97badb3349449bfdb9bf54a2b03e8b","src/unreachable_code.rs":"40cc71a02887ee4065c76ce96dda0a363a8cc134ec784fe5ed1f276db76596ce","src/value_label.rs":"f32c1ce283cfc5a6f29021428d054da0f47af9c725b6ea5f24012847760b3e2d","src/verifier/cssa.rs":"38355eaab2b998ee7a38fea12ac848060ba6d6a63ddae44b4174eb0fee1e752b","src/verifier/flags.rs":"b836c1fb636252b8b95a7958943f87ec774fae7a0ab91c61faf37096fe679707","src/verifier/liveness.rs":"a84da0cf0361b5c04110b5aa1c5afa4f184502d4cf9ba11bcfde2e65114c3d9a","src/verifier/locations.rs":"9f2adddcca2866fad86a7498ec730cdb93267b3802a16d4754e67dd0c53ab4b4","src/verifier/mod.rs":"c890ffdde05a16509ae7c78336ccfc2911834a46f5b34700bf1e7ed0ee6741f3","src/write.rs":"efb68efb20d63bd2969096838eae5ec3d6ebf5e3d85e7d503f7729216b0e91c5"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"edaf70577db03f1b3de39a42eeaf062334255ed501afdbe3085722523a52429f","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"e5127227a7db4a8aa92fa6613ed71801025790e696bb41b0323fb7f3c6f7495a","build.rs":"9fffedcfb42f2147f1a3f2b8d39af91e291768fe6f4e75ce19de1debfca7bfd8","src/abi.rs":"eec2c37e39e29665d971da1ebf4e42e9dc28e5c8e3ba030dd4d2c4090f99579a","src/binemit/memorysink.rs":"bd630a490b98049ef1ea5dbb203bacf6ae6e76551b3328ea9e5b9b3744b5035d","src/binemit/mod.rs":"111362efd540307136badea21003393e7da193b4c11758e7d7c846ab4904ecde","src/binemit/relaxation.rs":"35a5f7afe552c1ab6dfdd125e75880b217944adcffc5db027a4ac0b8ad9620a0","src/binemit/shrink.rs":"5755efc978f5056a33c0ecb1bd5e08310397f54a67434ecead184fc6ee047133","src/binemit/stackmap.rs":"ada980e8a6c090ff1230277e4600a28da56bf892b73da34cce6c7469ad27f69c","src/bitset.rs":"c4fa43fff52a8f2d343e3edbeeb26d851c64ed811e3d3aa9e2af80358d43be14","src/cfg_printer.rs":"d2909587cfd65b9a66c87e749248b055b32eeea428597572a3f0c6c542bee8c9","src/constant_hash.rs":"8f53afb38891fbdab8553c7a89e61f0ce30947a22fb24ae84523c9a1ab025c3f","src/context.rs":"d47182f15327dbd775d9bbeae87439a108f8e12ac20515ee59934d059aaf5fb2","src/cursor.rs":"9ff74f47f0e0ecbb7ae67ed001c794e386d65f6eb99892f77109b0b8f1f90634","src/dbg.rs":"1898d94cff0975815eb348651702e95c8f2f63886501d3b7043ee75668480472","src/dce.rs":"d8ab7c0cac0416f9d75afdacc60ba02e532361ec927c3f8bd171b1a53ec8b31a","src/divconst_magic_numbers.rs":"e7f8f46f3a25ed7155890e9d76c10f5dde9dc5bbcebb623c8166fa415abdd959","src/dominator_tree.rs":"184a501aa1838902ad3cf6145a58ff3ddd2ed0cb00ca4ed4a39b56ea5d8b0a55","src/flowgraph.rs":"2709526095875da1e93cb831599360e05b92e2566447e525e7870a29b0a2acf5","src/fx.rs":"8a5d07487906d8316a179e826fcd817a92a4860686256a6fd9d78ba47c63f330","src/ir/builder.rs":"6f111f2a65dfe27633dcec918f74b767277131a72cd94b7bec2e1ef5c4308d5b","src/ir/constant.rs":"6e9e9c82f2ded45d574d0a6029ce6cd3513b9de6329ed194ca5bab21ed1d1b9a","src/ir/dfg.rs":"6385e629822418a60d70c96074defc4a30aa9b87550640d43a459a6cef0c3080","src/ir/entities.rs":"a166cf74be2e51d9e8dc22dfb27e0d1f03f3d16d59deee37e980e1b0e62a68ea","src/ir/extfunc.rs":"57ef6509acb504cdd292fc5a637486a1de15c78f8c9b2205ac820874592e54c4","src/ir/extname.rs":"8f539363e24b37abd7d1a34ad66ae6eca59207f611e02c3dface76da477346f7","src/ir/framelayout.rs":"c3393bcaec95df01f732164525c65843db157ed8816e0cc4b82fd9f868c31550","src/ir/function.rs":"229366e48141f020b870cfeacf8fe9b04fd5e495ece948373f85b73a52c774a0","src/ir/globalvalue.rs":"5a33af46e0c4b9537ef9fc422ab4fa2dc70b919b7cd6316f27b76a715361f060","src/ir/heap.rs":"a59d3e5901412b53c0b53a8cdf10765ff5921de9c410ae9acea226c89827df3c","src/ir/immediates.rs":"323ff93cb36bb682374ad323f145e61ba554f01d7ffebebe058531cbc556b91a","src/ir/instructions.rs":"2b71d040ae6240348ab74bf764c84e01e699708342349a090337a010400577a2","src/ir/jumptable.rs":"6375275599dc6f07027f81d823fa1d7371359a7b961f9627377164710a87bb71","src/ir/layout.rs":"d0e358885f1b03412d651b8d6e57cc362cc3c02bcda4ab5ea259d06dedfadf77","src/ir/libcall.rs":"510cd6301940ab92e54711d9e52cb34f29dca7e6d6203f1d7cff3daa085bc1ac","src/ir/memflags.rs":"dbcf3798ab66dc764b73fb7f139a621c54cc6bcc683f1f70a33ed7e8c3486bfd","src/ir/mod.rs":"25dec7d955ea35db45d596bada42cd6869d8fdd7c60f66acafe348139a4cccf6","src/ir/progpoint.rs":"96609331ba8b23dc3ab3c485464ab7ab3e7d0c0e8843a5d72e39ea334d4b3070","src/ir/sourceloc.rs":"67c66adace734645ddf311ecb22e975f20756e07c91e10f698a830cfc2cd08aa","src/ir/stackslot.rs":"9d4e71894aad32d97c98367195146237c0e8b547032374878c2da5374f9c3520","src/ir/table.rs":"dcc3b663a989b2b084402b08dc9a0e928dbd052e194a46a1886cc6f0cf1a5f2c","src/ir/trapcode.rs":"413090e632116d405ba69f3b0e6f4460e0a67c5dfb934e11c8eebde04d8e1af5","src/ir/types.rs":"ec261b6c3677f4113a2f7125da0df3fd66a1a666aebb19abd5cb49fcef372bc6","src/ir/valueloc.rs":"fc31e06b2b0f37333829c4658b7f6fa8a717e93e18a5c67a63947e5882bbe1a2","src/isa/arm32/abi.rs":"59abc42d75445f7f3335b035655083772e98e413ee58a72fc4e224620327b5ea","src/isa/arm32/binemit.rs":"eecd7296c27d2520db8e86dd462833ecf06afd33548b03ae676c02454cdd13c2","src/isa/arm32/enc_tables.rs":"e94b12af802de59484cab1124d2ac8a88d08433f6e1a476724ed0403f4b5967f","src/isa/arm32/mod.rs":"9ccd3a24afc921f35bb89f508d86fe5eb63e86e9c85d34132a01a131e19e2f61","src/isa/arm32/registers.rs":"100033c78e2a891ad90a2765137bd678f1d11ae4ba61974d1083106fa1324037","src/isa/arm32/settings.rs":"2314460f885c24f9571d640f9737a8e0b7d20ca02bcda1127f878fd3891c0529","src/isa/arm64/abi.rs":"c946f65b7731095734074e9c06964672cdf4c8352a54fe23f7411d874b27ec28","src/isa/arm64/binemit.rs":"3afbb78f6d9ae5614d908023f84b774c0493c8757ad86fd8301baf0928bb0104","src/isa/arm64/enc_tables.rs":"73fedf7da610a982e37c76e5211dbce880f77841b71c678b0dab2b9e7217cb7c","src/isa/arm64/mod.rs":"e89bbc1d0dcbce21378fd83ef5b73071cb51b2f5561092ae960aa229accc6f53","src/isa/arm64/registers.rs":"e8bc77f218c83cedec50e2b5b28b88e3301443bd02f7a80151748f2be4b31ea0","src/isa/arm64/settings.rs":"5405ce3560b7ba0705ef525c706eb9f1593e901e1767b837c012084397639042","src/isa/call_conv.rs":"da8064a29cd3577928e3ebd3d3f869bf3dc707a4ac0f2e04d01e81770ff1aebf","src/isa/constraints.rs":"bddb5c68e56b122a53d8be215e41d22ccf8c4563630b1486e6eb31c0d3337565","src/isa/enc_tables.rs":"382e714f9500afc292c563cb66d4c963d6787e58f197b1db242db7a099c22b9a","src/isa/encoding.rs":"22e21fdb8e15859c69e4f836bb61e1a82cd6838d093ce5fe641a90f16fb65c9e","src/isa/mod.rs":"ab7319fdc633228610329a87e22e06308e310e60cd6e59e279b3076259632ab6","src/isa/registers.rs":"f09ca662be1e0beb776d050a46a8ecf7927f2bf75e36c4bda4010b442c4df815","src/isa/riscv/abi.rs":"aa60b701efcef417ee1262a95398343578dc1a30decc8e11044b74d41654ec51","src/isa/riscv/binemit.rs":"264d223da311d4482ebf2f55438b665c67b163058251bc78173c76ba983a31ef","src/isa/riscv/enc_tables.rs":"8491f2082b24c7dedeb7c36cfd913bf9aeaa0a4c8fc754166e9285f4ae002f40","src/isa/riscv/mod.rs":"829c19511b713646e5fb78edae7341ef6da57804b3782e184d1ad31c613a4fec","src/isa/riscv/registers.rs":"6275ec3ef19195d16556c1856cb23095f25a80c31d6b429eaa749d549515a6d3","src/isa/riscv/settings.rs":"e3c063add822ca366e845f5a19d25b56635e828b157a37d29aca5355650e6a66","src/isa/stack.rs":"5d30e2e19662ff3b3a641888bbb29640094ccd51b9a73368a056352afee46320","src/isa/x86/abi.rs":"f93fdd8c6a196fc1a56ff2c9b4885f0ca5034d2affbf1166f23bc42cdca0471b","src/isa/x86/binemit.rs":"87c1052aa245995af0fd9d0295e457d034c06ac6987dd12f8af47652406a5430","src/isa/x86/enc_tables.rs":"37190fc2ddcab2af9f252c8a9aa519c4875f042aea68fcff993956369bd51865","src/isa/x86/fde.rs":"e4e251c75e3aff6e72ce5e826500bb8670b1d188b891cfbc47913e3c6c1830d9","src/isa/x86/mod.rs":"855e4f35af9ea0c86b0b035ff939fdce40bca51f7b7eba32299e7db8fc64f8a1","src/isa/x86/registers.rs":"a0dff4534c6029444867251980ae9a79027f6a50d10ba5fcc974cd3fb3cf3a45","src/isa/x86/settings.rs":"d3e403db3507830f79bcc976c17340b57052cf1b50877fcf1a79549f2a054458","src/isa/x86/unwind.rs":"73261f403b44b11485778b7a099055223b75320ff79e332d3670791bd7ee95d0","src/iterators.rs":"d399a80bc65b97f7d650978e19086dcc1d280ac96d60628eac3d17eb363b0d71","src/legalizer/boundary.rs":"5e91e9cfdadaf3d010bc43c0374e076f0d30727cd65dd8746fe861938a4cb248","src/legalizer/call.rs":"be6074c64c1a00e5e81159dd94c8401fef62205b22c15e07e0c56cf922554d00","src/legalizer/globalvalue.rs":"59ab09a0faf593c7f228500b3fd3bacfc0412bdcb2864ec3621aa65adc4a5693","src/legalizer/heap.rs":"6f722a5ba720acdf19c58ba7c9820ea3a5b5017af3bda70adeeeb8b3c1408eb1","src/legalizer/libcall.rs":"524357d5e63b0a3fcff7e2d3c6b24be33bb50c6aae1d9771349da3fd78138204","src/legalizer/mod.rs":"6101def6213c872e46d1fb5585bfb71328f45d9b4b35b7643e188800f1da16f9","src/legalizer/split.rs":"88ef378317e5e9b4de556eed3e9e517e1e6c8d9f787ccf78d92c4fb40852f542","src/legalizer/table.rs":"c36d03525312e3191aba8ee00c26a87c1ea200f9a9a0370f0cc84eeacff71786","src/lib.rs":"c306a7aedcc183fda2c72c87129fe73829d49b80a0ed909c22732f0fd7bf1546","src/licm.rs":"2b3bf07bcfe5a54af8fb0827c1b326c7079c6eba634cc0e3569ffac81f1d27c7","src/loop_analysis.rs":"74d32e8125126adb5e06f2b9a3c6bd914b09f71be5c5bf1c344d4b3a09f7e538","src/nan_canonicalization.rs":"9619bb5554791bd1be75ecd98564d6c9f5b65132bc07c5c4d8c210cd79b66f82","src/partition_slice.rs":"861e778f887ea5d0841d730963565690fd8c298edddf08848d0d215ae5125eba","src/postopt.rs":"d4c487f0299fb905bb5a5822e38dea6f70afa4d4577288988b5bec8660bc1ba0","src/predicates.rs":"d4fa993d8b3036ac9e19d1c1d8880ab5b33030fff0a38d65e2a24b9f9d3956c9","src/print_errors.rs":"9a5f28b5d4278e3364767716ae8c3d9bbbfb2a67edbf0ae1d75fd16226797f6d","src/redundant_reload_remover.rs":"ef78df5bcf70a0958e50c924f92c091f818f38cd71aa56ad9019dfcbb913c0fa","src/regalloc/affinity.rs":"ec5d688c24043a8aa72efcfbfddc14497cd9bab288c9d339e5c0150cdade2b1d","src/regalloc/branch_splitting.rs":"b4adb8f5b67c9380c2f0a61b83528e0e4cdf44512640c65d16d7f4b3fa2bad56","src/regalloc/coalescing.rs":"b05d401e1557d5ccc1df7c98df4bf1ed9992c78ec8ba2ab001f5b3f8139da224","src/regalloc/coloring.rs":"5ecaa16a9bf3b0967d2574cbed70eb4584c21185f7c4e8383f0849962f225857","src/regalloc/context.rs":"0b3d5009c23b58cc9ccca2ece9d85dbdea52f843f52452e7813dd7a3229547d3","src/regalloc/diversion.rs":"77474469869061ed0c6eaed64ace63d1b0f648ee12d017a768f3bff1bf15f849","src/regalloc/live_value_tracker.rs":"69b8a58a5d92e13c9d33a9be0676ac6076fb2d8aa285f1d83673236ee3cbdd5a","src/regalloc/liveness.rs":"f2798904079acaa0f28f9d492d8500963939f8038974178a5b600174a769f367","src/regalloc/liverange.rs":"16a52110ba81b90cbc60620460f584b3ed2059a719eb5ab921892afbb622eb8b","src/regalloc/mod.rs":"50399d6569687a87bf1481304aca42506d946e34465e38ca8093e06485ab5fb6","src/regalloc/pressure.rs":"8408213afe07d4532da699f6604aff111c7061d71b585a84c5ec8db31582314c","src/regalloc/register_set.rs":"c740d10a061c4b8527ce319842b519d743e93e64db53851360f9ca2c099fd652","src/regalloc/reload.rs":"faff9b597e020b578e26cbbba4fd6afd6ccb6b075aa9517b3bd44b5c328e0e6f","src/regalloc/safepoint.rs":"fd69eafcc600136190b14d4d7b9fc241bcd209e1f2ff6c948dbfbf62ced68cbf","src/regalloc/solver.rs":"046c1126cdd027500449202c56383cab3fa3bdcef62f8b0167345ebbf5556802","src/regalloc/spilling.rs":"0d38722c7fe78e4429dd8f60ab591c3c4b15cd697251ba48d434e3c0f1d3ec08","src/regalloc/virtregs.rs":"a287cef413c4251856e0cc262334d5736fbfad008bb3dd7132828a961403edce","src/result.rs":"15e2aac59775ebf63adf29eb6f7d4925b0fe5868bec17cea46eccdfd4441c232","src/scoped_hash_map.rs":"c8d0071ce7e19438e9995b5fca1ea0fca81234811943b06b344331f9742c3718","src/settings.rs":"3ded159cf8bc31dda5546d45e3fadb4a841435434b758041773c25fe26f78511","src/simple_gvn.rs":"171dbcddc62f38c9fdd2b7a372b16fa231f4bc55b1971dca57d4359b078fbe6a","src/simple_preopt.rs":"402003f85f1bae5a3196226a9675fe810c860114e390da58765c4452a5ea2e49","src/stack_layout.rs":"67161c1fd8d15453b2b82ec933116075433576fe67312331e3b784c665c1d02f","src/timing.rs":"231683891065f71a54c9c7616f7f9c5e2a7798b6d21b930cf9dbe703ad4784ed","src/topo_order.rs":"e3a9bf363c0322add1c700095bad0ea1fe97badb3349449bfdb9bf54a2b03e8b","src/unreachable_code.rs":"40cc71a02887ee4065c76ce96dda0a363a8cc134ec784fe5ed1f276db76596ce","src/value_label.rs":"f32c1ce283cfc5a6f29021428d054da0f47af9c725b6ea5f24012847760b3e2d","src/verifier/cssa.rs":"38355eaab2b998ee7a38fea12ac848060ba6d6a63ddae44b4174eb0fee1e752b","src/verifier/flags.rs":"b836c1fb636252b8b95a7958943f87ec774fae7a0ab91c61faf37096fe679707","src/verifier/liveness.rs":"a84da0cf0361b5c04110b5aa1c5afa4f184502d4cf9ba11bcfde2e65114c3d9a","src/verifier/locations.rs":"9f2adddcca2866fad86a7498ec730cdb93267b3802a16d4754e67dd0c53ab4b4","src/verifier/mod.rs":"c890ffdde05a16509ae7c78336ccfc2911834a46f5b34700bf1e7ed0ee6741f3","src/write.rs":"efb68efb20d63bd2969096838eae5ec3d6ebf5e3d85e7d503f7729216b0e91c5"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-codegen/Cargo.toml
+++ b/third_party/rust/cranelift-codegen/Cargo.toml
@@ -1,41 +1,41 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen"
-version = "0.55.0"
+version = "0.56.0"
 description = "Low-level code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://cranelift.readthedocs.io/"
 repository = "https://github.com/bytecodealliance/cranelift"
 categories = ["no-std"]
 readme = "README.md"
 keywords = ["compile", "compiler", "jit"]
 build = "build.rs"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen-shared = { path = "./shared", version = "0.55.0" }
-cranelift-entity = { path = "../cranelift-entity", version = "0.55.0" }
-cranelift-bforest = { path = "../cranelift-bforest", version = "0.55.0" }
+cranelift-codegen-shared = { path = "./shared", version = "0.56.0" }
+cranelift-entity = { path = "../cranelift-entity", version = "0.56.0" }
+cranelift-bforest = { path = "../cranelift-bforest", version = "0.56.0" }
 hashbrown = { version = "0.6", optional = true }
 target-lexicon = "0.10"
 log = { version = "0.4.6", default-features = false }
 serde = { version = "1.0.94", features = ["derive"], optional = true }
-gimli = { version = "0.19.0", default-features = false, features = ["write"], optional = true }
+gimli = { version = "0.20.0", default-features = false, features = ["write"], optional = true }
 smallvec = { version = "1.0.0" }
 thiserror = "1.0.4"
 byteorder = { version = "1.3.2", default-features = false }
 # 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
 # machine code. Integration tests that need external dependencies can be
 # accomodated in `tests`.
 
 [build-dependencies]
-cranelift-codegen-meta = { path = "meta", version = "0.55.0" }
+cranelift-codegen-meta = { path = "meta", version = "0.56.0" }
 
 [features]
 default = ["std", "basic-blocks", "unwind"]
 
 # The "std" feature enables use of libstd. The "core" feature enables use
 # of some minimal std-like replacement libraries. At least one of these two
 # features need to be enabled.
 std = []
--- a/third_party/rust/cranelift-codegen/src/ir/entities.rs
+++ b/third_party/rust/cranelift-codegen/src/ir/entities.rs
@@ -26,16 +26,18 @@ use core::u32;
 use serde::{Deserialize, Serialize};
 
 /// An opaque reference to an [extended basic
 /// block](https://en.wikipedia.org/wiki/Extended_basic_block) in a
 /// [`Function`](super::function::Function).
 ///
 /// You can get an `Ebb` using
 /// [`FunctionBuilder::create_ebb`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_ebb)
+///
+/// While the order is stable, it is arbitrary and does not necessarily resemble the layout order.
 #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Ebb(u32);
 entity_impl!(Ebb, "ebb");
 
 impl Ebb {
     /// Create a new EBB reference from its number. This corresponds to the `ebbNN` representation.
     ///
     /// This method is for use by the parser.
@@ -56,16 +58,18 @@ impl Ebb {
 /// - [`iconst`](super::InstBuilder::iconst) for integer constants
 /// - [`f32const`](super::InstBuilder::f32const) for 32-bit float constants
 /// - [`f64const`](super::InstBuilder::f64const) for 64-bit float constants
 /// - [`bconst`](super::InstBuilder::bconst) for boolean constants
 /// - [`vconst`](super::InstBuilder::vconst) for vector constants
 /// - [`null`](super::InstBuilder::null) for null reference constants
 ///
 /// Any `InstBuilder` instruction that has an output will also return a `Value`.
+///
+/// While the order is stable, it is arbitrary.
 #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Value(u32);
 entity_impl!(Value, "v");
 
 impl Value {
     /// Create a value from its number representation.
     /// This is the number in the `vNN` notation.
     ///
@@ -86,33 +90,37 @@ impl Value {
 /// [`Value`], such as control flow and trap instructions.
 ///
 /// If you look around the API, you can find many inventive uses for `Inst`,
 /// such as [annotating specific instructions with a comment][inst_comment]
 /// or [performing reflection at compile time](super::DataFlowGraph::analyze_branch)
 /// on the type of instruction.
 ///
 /// [inst_comment]: https://github.com/bjorn3/rustc_codegen_cranelift/blob/0f8814fd6da3d436a90549d4bb19b94034f2b19c/src/pretty_clif.rs
+///
+/// While the order is stable, it is arbitrary and does not necessarily resemble the layout order.
 #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Inst(u32);
 entity_impl!(Inst, "inst");
 
 /// An opaque reference to a stack slot.
 ///
 /// Stack slots represent an address on the
 /// [call stack](https://en.wikipedia.org/wiki/Call_stack).
 ///
 /// `StackSlot`s can be created with
 /// [`FunctionBuilder::create_stackslot`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_stack_slot).
 ///
 /// `StackSlot`s are most often used with
 /// [`stack_addr`](super::InstBuilder::stack_addr),
 /// [`stack_load`](super::InstBuilder::stack_load), and
 /// [`stack_store`](super::InstBuilder::stack_store).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary and does not necessarily resemble the stack order.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
 pub struct StackSlot(u32);
 entity_impl!(StackSlot, "ss");
 
 impl StackSlot {
     /// Create a new stack slot reference from its number.
     ///
     /// This method is for use by the parser.
@@ -137,17 +145,19 @@ impl StackSlot {
 /// [`FuncEnvironment::make_global`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_global).
 /// - When compiling to native code, you can use it for objects in static memory with
 /// [`Module::declare_data_in_func`](https://docs.rs/cranelift-module/*/cranelift_module/struct.Module.html#method.declare_data_in_func).
 /// - For any compilation target, it can be registered with
 /// [`FunctionBuilder::create_global_value`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_global_value).
 ///
 /// `GlobalValue`s can be retrieved with
 /// [`InstBuilder:global_value`](super::InstBuilder::global_value).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct GlobalValue(u32);
 entity_impl!(GlobalValue, "gv");
 
 impl GlobalValue {
     /// Create a new global value reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -159,16 +169,19 @@ impl GlobalValue {
     }
 }
 
 /// An opaque reference to a constant.
 ///
 /// You can store [`ConstantData`](super::ConstantData) in a
 /// [`ConstantPool`](super::ConstantPool) for efficient storage and retrieval.
 /// See [`ConstantPool::insert`](super::ConstantPool::insert).
+///
+/// While the order is stable, it is arbitrary and does not necessarily resemble the order in which
+/// the constants are written in the constant pool.
 #[derive(Copy, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)]
 pub struct Constant(u32);
 entity_impl!(Constant, "const");
 
 impl Constant {
     /// Create a const reference from its number.
     ///
     /// This method is for use by the parser.
@@ -182,17 +195,19 @@ impl Constant {
 }
 
 /// An opaque reference to an immediate.
 ///
 /// Some immediates (e.g. SIMD shuffle masks) are too large to store in the
 /// [`InstructionData`](super::instructions::InstructionData) struct and therefore must be
 /// tracked separately in [`DataFlowGraph::immediates`](super::dfg::DataFlowGraph). `Immediate`
 /// provides a way to reference values stored there.
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Immediate(u32);
 entity_impl!(Immediate, "imm");
 
 impl Immediate {
     /// Create an immediate reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -209,17 +224,19 @@ impl Immediate {
 /// `JumpTable`s are used for indirect branching and are specialized for dense,
 /// 0-based jump offsets. If you want a jump table which doesn't start at 0,
 /// or is not contiguous, consider using a [`Switch`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.Switch.html) instead.
 ///
 /// `JumpTable` are used with [`br_table`](super::InstBuilder::br_table).
 ///
 /// `JumpTable`s can be created with
 /// [`create_jump_table`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_jump_table).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
 pub struct JumpTable(u32);
 entity_impl!(JumpTable, "jt");
 
 impl JumpTable {
     /// Create a new jump table reference from its number.
     ///
     /// This method is for use by the parser.
@@ -243,17 +260,19 @@ impl JumpTable {
 /// - [`FunctionBuilder::import_function`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.import_function)
 /// for external functions
 /// - [`Module::declare_func_in_func`](https://docs.rs/cranelift-module/*/cranelift_module/struct.Module.html#method.declare_func_in_func)
 /// for functions declared elsewhere in the same native
 /// [`Module`](https://docs.rs/cranelift-module/*/cranelift_module/struct.Module.html)
 /// - [`FuncEnvironment::make_direct_func`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func)
 /// for functions declared in the same WebAssembly
 /// [`FuncEnvironment`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func)
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct FuncRef(u32);
 entity_impl!(FuncRef, "fn");
 
 impl FuncRef {
     /// Create a new external function reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -272,17 +291,19 @@ impl FuncRef {
 /// as well as to make an [indirect function call](super::InstBuilder::call_indirect).
 ///
 /// `SigRef`s can be created with
 /// [`FunctionBuilder::import_signature`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.import_signature).
 ///
 /// You can retrieve the [`Signature`](super::Signature) that was used to create a `SigRef` with
 /// [`FunctionBuilder::signature`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.signature) or
 /// [`func.dfg.signatures`](super::dfg::DataFlowGraph::signatures).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct SigRef(u32);
 entity_impl!(SigRef, "sig");
 
 impl SigRef {
     /// Create a new function signature reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -295,17 +316,19 @@ impl SigRef {
 }
 
 /// An opaque reference to a [heap](https://en.wikipedia.org/wiki/Memory_management#DYNAMIC).
 ///
 /// Heaps are used to access dynamically allocated memory through
 /// [`heap_addr`](super::InstBuilder::heap_addr).
 ///
 /// To create a heap, use [`FunctionBuilder::create_heap`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.create_heap).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Heap(u32);
 entity_impl!(Heap, "heap");
 
 impl Heap {
     /// Create a new heap reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -319,17 +342,19 @@ impl Heap {
 
 /// An opaque reference to a [WebAssembly
 /// table](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format#WebAssembly_tables).
 ///
 /// `Table`s are used to store a list of function references.
 /// They can be created with [`FuncEnvironment::make_table`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_table).
 /// They can be used with
 /// [`FuncEnvironment::translate_call_indirect`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.translate_call_indirect).
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+///
+/// While the order is stable, it is arbitrary.
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct Table(u32);
 entity_impl!(Table, "table");
 
 impl Table {
     /// Create a new table reference from its number.
     ///
     /// This method is for use by the parser.
     pub fn with_number(n: u32) -> Option<Self> {
@@ -337,17 +362,17 @@ impl Table {
             Some(Self(n))
         } else {
             None
         }
     }
 }
 
 /// An opaque reference to any of the entities defined in this module that can appear in CLIF IR.
-#[derive(Copy, Clone, PartialEq, Eq, Hash)]
+#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum AnyEntity {
     /// The whole function.
     Function,
     /// An extended basic block.
     Ebb(Ebb),
     /// An instruction.
     Inst(Inst),
     /// An SSA value.
--- a/third_party/rust/cranelift-codegen/src/ir/extfunc.rs
+++ b/third_party/rust/cranelift-codegen/src/ir/extfunc.rs
@@ -97,34 +97,16 @@ impl Signature {
     /// legalization)
     pub fn is_multi_return(&self) -> bool {
         self.returns
             .iter()
             .filter(|r| r.purpose == ArgumentPurpose::Normal)
             .count()
             > 1
     }
-
-    /// Collect the normal parameter types of the signature; see `[ArgumentPurpose::Normal]`.
-    pub fn param_types(&self) -> Vec<Type> {
-        self.params
-            .iter()
-            .filter(|ap| ap.purpose == ArgumentPurpose::Normal)
-            .map(|ap| ap.value_type)
-            .collect()
-    }
-
-    /// Collect the normal return types of the signature; see `[ArgumentPurpose::Normal]`.
-    pub fn return_types(&self) -> Vec<Type> {
-        self.returns
-            .iter()
-            .filter(|ap| ap.purpose == ArgumentPurpose::Normal)
-            .map(|ap| ap.value_type)
-            .collect()
-    }
 }
 
 /// Wrapper type capable of displaying a `Signature` with correct register names.
 pub struct DisplaySignature<'a>(&'a Signature, Option<&'a RegInfo>);
 
 fn write_list(f: &mut fmt::Formatter, args: &[AbiParam], regs: Option<&RegInfo>) -> fmt::Result {
     match args.split_first() {
         None => {}
--- a/third_party/rust/cranelift-codegen/src/ir/layout.rs
+++ b/third_party/rust/cranelift-codegen/src/ir/layout.rs
@@ -1,14 +1,15 @@
 //! Function layout.
 //!
 //! The order of extended basic blocks in a function and the order of instructions in an EBB is
 //! determined by the `Layout` data structure defined in this module.
 
 use crate::entity::SecondaryMap;
+use crate::ir::dfg::DataFlowGraph;
 use crate::ir::progpoint::{ExpandedProgramPoint, ProgramOrder};
 use crate::ir::{Ebb, Inst};
 use crate::packed_option::PackedOption;
 use crate::timing;
 use core::cmp;
 use core::iter::{IntoIterator, Iterator};
 use log::debug;
 
@@ -568,16 +569,29 @@ impl Layout {
         self.insts[inst].next.expand()
     }
 
     /// Fetch the instruction preceding `inst`.
     pub fn prev_inst(&self, inst: Inst) -> Option<Inst> {
         self.insts[inst].prev.expand()
     }
 
+    /// Fetch the first instruction in an ebb's terminal branch group.
+    pub fn canonical_branch_inst(&self, dfg: &DataFlowGraph, ebb: Ebb) -> Option<Inst> {
+        // Basic blocks permit at most two terminal branch instructions.
+        // If two, the former is conditional and the latter is unconditional.
+        let last = self.last_inst(ebb)?;
+        if let Some(prev) = self.prev_inst(last) {
+            if dfg[prev].opcode().is_branch() {
+                return Some(prev);
+            }
+        }
+        Some(last)
+    }
+
     /// Insert `inst` before the instruction `before` in the same EBB.
     pub fn insert_inst(&mut self, inst: Inst, before: Inst) {
         debug_assert_eq!(self.inst_ebb(inst), None);
         let ebb = self
             .inst_ebb(before)
             .expect("Instruction before insertion point not in the layout");
         let after = self.insts[before].prev;
         {
--- a/third_party/rust/cranelift-codegen/src/isa/x86/enc_tables.rs
+++ b/third_party/rust/cranelift-codegen/src/isa/x86/enc_tables.rs
@@ -1168,17 +1168,17 @@ fn convert_insertlane(
         lane,
     } = pos.func.dfg[inst]
     {
         let value_type = pos.func.dfg.value_type(vector);
         if value_type.lane_type().is_float() {
             // Floats are already in XMM registers and can stay there.
             match value_type {
                 F32X4 => {
-                    assert!(lane > 0 && lane <= 3);
+                    assert!(lane <= 3);
                     let immediate = 0b00_00_00_00 | lane << 4;
                     // Insert 32-bits from replacement (at index 00, bits 7:8) to vector (lane
                     // shifted into bits 5:6).
                     pos.func
                         .dfg
                         .replace(inst)
                         .x86_insertps(vector, immediate, replacement)
                 }
--- a/third_party/rust/cranelift-codegen/src/isa/x86/fde.rs
+++ b/third_party/rust/cranelift-codegen/src/isa/x86/fde.rs
@@ -5,17 +5,16 @@ use crate::ir::{FrameLayoutChange, Funct
 use crate::isa::{CallConv, RegUnit, TargetIsa};
 use alloc::vec::Vec;
 use core::convert::TryInto;
 use gimli::write::{
     Address, CallFrameInstruction, CommonInformationEntry, EhFrame, EndianVec,
     FrameDescriptionEntry, FrameTable, Result, Writer,
 };
 use gimli::{Encoding, Format, LittleEndian, Register, X86_64};
-use std::ptr;
 
 pub type FDERelocEntry = (FrameUnwindOffset, Reloc);
 
 const FUNCTION_ENTRY_ADDRESS: Address = Address::Symbol {
     symbol: 0,
     addend: 0,
 };
 
@@ -191,17 +190,17 @@ pub fn emit_fde(func: &Function, isa: &d
     let mut last_offset = 0;
     let mut changes = Vec::new();
     for ebb in ebbs {
         for (offset, inst, size) in func.inst_offsets(ebb, &encinfo) {
             let address_offset = (offset + size) as usize;
             assert!(last_offset <= address_offset);
             if let Some(cmds) = frame_layout.instructions.get(&inst) {
                 for cmd in cmds.iter() {
-                    changes.push((address_offset, cmd.clone()));
+                    changes.push((address_offset, *cmd));
                 }
             }
             last_offset = address_offset;
         }
     }
 
     let len = last_offset as u32;
 
@@ -247,17 +246,19 @@ pub fn emit_fde(func: &Function, isa: &d
     let (bytes, relocs) = eh_frame.clone().into_vec_and_relocs();
 
     let unwind_start = sink.len();
     sink.bytes(&bytes);
 
     for (off, r) in relocs {
         sink.reloc(r, off + unwind_start);
     }
-    let fde_offset = unsafe { ptr::read::<u32>(bytes.as_ptr() as *const u32) } as usize + 4;
+
+    let cie_len = u32::from_le_bytes(bytes.as_slice()[..4].try_into().unwrap());
+    let fde_offset = cie_len as usize + 4;
     sink.set_entry_offset(unwind_start + fde_offset);
 
     // Need 0 marker for GCC unwind to end FDE "list".
     sink.bytes(&[0, 0, 0, 0]);
 }
 
 #[cfg(test)]
 mod tests {
--- a/third_party/rust/cranelift-codegen/src/legalizer/mod.rs
+++ b/third_party/rust/cranelift-codegen/src/legalizer/mod.rs
@@ -697,17 +697,17 @@ fn narrow_icmp_imm(
     let mut pos = FuncCursor::new(func).at_inst(inst);
     pos.use_srcloc(inst);
 
     let ty = pos.func.dfg.ctrl_typevar(inst);
     let ty_half = ty.half_width().unwrap();
 
     let imm_low = pos
         .ins()
-        .iconst(ty_half, imm & (1u128 << (ty_half.bits() - 1)) as i64);
+        .iconst(ty_half, imm & ((1u128 << ty_half.bits()) - 1) as i64);
     let imm_high = pos
         .ins()
         .iconst(ty_half, imm.wrapping_shr(ty_half.bits().into()));
     let (arg_low, arg_high) = pos.ins().isplit(arg);
 
     match cond {
         IntCC::Equal => {
             let res_low = pos.ins().icmp(cond, arg_low, imm_low);
--- a/third_party/rust/cranelift-codegen/src/legalizer/split.rs
+++ b/third_party/rust/cranelift-codegen/src/legalizer/split.rs
@@ -184,16 +184,29 @@ fn perform_repairs(pos: &mut FuncCursor,
             // It's possible that the CFG's predecessor list has duplicates. Detect them here.
             if pos.func.dfg.value_type(old_arg) == repair.split_type {
                 pos.func.dfg[inst].put_value_list(args);
                 continue;
             }
 
             // Split the old argument, possibly causing more repairs to be scheduled.
             pos.goto_inst(inst);
+            #[cfg(feature = "basic-blocks")]
+            {
+                let inst_ebb = pos.func.layout.inst_ebb(inst).expect("inst in ebb");
+
+                // Insert split values prior to the terminal branch group.
+                let canonical = pos
+                    .func
+                    .layout
+                    .canonical_branch_inst(&pos.func.dfg, inst_ebb);
+                if let Some(first_branch) = canonical {
+                    pos.goto_inst(first_branch);
+                }
+            }
             let (lo, hi) = split_value(pos, old_arg, repair.concat, &mut repairs);
 
             // The `lo` part replaces the original argument.
             *args
                 .get_mut(num_fixed_args + repair.num, &mut pos.func.dfg.value_lists)
                 .unwrap() = lo;
 
             // The `hi` part goes at the end. Since multiple repairs may have been scheduled to the
@@ -243,18 +256,18 @@ fn split_value(
             if let InstructionData::Binary { opcode, args, .. } = pos.func.dfg[inst] {
                 debug_assert_eq!(num, 0);
                 if opcode == concat {
                     reuse = Some((args[0], args[1]));
                 }
             }
         }
         ValueDef::Param(ebb, num) => {
-            // This is an EBB parameter. We can split the parameter value unless this is the entry
-            // block.
+            // This is an EBB parameter.
+            // We can split the parameter value unless this is the entry block.
             if pos.func.layout.entry_block() != Some(ebb) {
                 reuse = Some(split_ebb_param(pos, ebb, num, value, concat, repairs));
             }
         }
     }
 
     // Did the code above succeed in finding values we can reuse?
     if let Some(pair) = reuse {
--- a/third_party/rust/cranelift-codegen/src/simple_gvn.rs
+++ b/third_party/rust/cranelift-codegen/src/simple_gvn.rs
@@ -119,18 +119,23 @@ pub fn do_simple_gvn(func: &mut Function
             let key = HashKey {
                 inst: func.dfg[inst].clone(),
                 ty: ctrl_typevar,
                 pos: &pos,
             };
             use crate::scoped_hash_map::Entry::*;
             match visible_values.entry(key) {
                 Occupied(entry) => {
-                    let layout = &func.layout;
-                    debug_assert!(domtree.dominates(*entry.get(), inst, layout));
+                    #[allow(clippy::debug_assert_with_mut_call)]
+                    {
+                        // Clippy incorrectly believes `&func.layout` should not be used here:
+                        // https://github.com/rust-lang/rust-clippy/issues/4737
+                        debug_assert!(domtree.dominates(*entry.get(), inst, &func.layout));
+                    }
+
                     // If the redundant instruction is representing the current
                     // scope, pick a new representative.
                     let old = scope_stack.last_mut().unwrap();
                     if *old == inst {
                         *old = func.layout.next_inst(inst).unwrap();
                     }
                     // Replace the redundant instruction and remove it.
                     drop(func);
--- a/third_party/rust/cranelift-entity/.cargo-checksum.json
+++ b/third_party/rust/cranelift-entity/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"f996c9d9c38289ce69f727a9331594184be6b18b68f69343bf7ddf92a2241573","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"96ceffbfd88fb06e3b41aa4d3087cffbbf8441d04eba7ab09662a72ab600a321","src/boxed_slice.rs":"69d539b72460c0aba1d30e0b72efb0c29d61558574d751c784794e14abf41352","src/iter.rs":"4a4d3309fe9aad14fd7702f02459f4277b4ddb50dba700e58dcc75665ffebfb3","src/keys.rs":"b8c2fba26dee15bf3d1880bb2b41e8d66fe1428d242ee6d9fd30ee94bbd0407d","src/lib.rs":"0cd9145c1528f95ee7770765faa2f9a1051791144e2936789248b25fdfe06fc1","src/list.rs":"4bf609eb7cc7c000c18da746596d5fcc67eece3f919ee2d76e19f6ac371640d1","src/map.rs":"546b36be4cbbd2423bacbed69cbe114c63538c3f635e15284ab8e4223e717705","src/packed_option.rs":"dccb3dd6fc87eba0101de56417f21cab67a4394831df9fa41e3bbddb70cdf694","src/primary.rs":"30d5e2ab8427fd2b2c29da395812766049e3c40845cc887af3ee233dba91a063","src/set.rs":"dd04a4954863cc106e168a7d9a89bcebd1c4e045e7ef9ec1f0dadc0a8eaf919d","src/sparse.rs":"536e31fdcf64450526f5e5b85e97406c26b998bc7e0d8161b6b449c24265449f"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"edb3bd7b95881179d32f966b8ff4de40eb223a089d02f71cd59d66871636251d","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"96ceffbfd88fb06e3b41aa4d3087cffbbf8441d04eba7ab09662a72ab600a321","src/boxed_slice.rs":"69d539b72460c0aba1d30e0b72efb0c29d61558574d751c784794e14abf41352","src/iter.rs":"4a4d3309fe9aad14fd7702f02459f4277b4ddb50dba700e58dcc75665ffebfb3","src/keys.rs":"b8c2fba26dee15bf3d1880bb2b41e8d66fe1428d242ee6d9fd30ee94bbd0407d","src/lib.rs":"0cd9145c1528f95ee7770765faa2f9a1051791144e2936789248b25fdfe06fc1","src/list.rs":"4bf609eb7cc7c000c18da746596d5fcc67eece3f919ee2d76e19f6ac371640d1","src/map.rs":"546b36be4cbbd2423bacbed69cbe114c63538c3f635e15284ab8e4223e717705","src/packed_option.rs":"dccb3dd6fc87eba0101de56417f21cab67a4394831df9fa41e3bbddb70cdf694","src/primary.rs":"30d5e2ab8427fd2b2c29da395812766049e3c40845cc887af3ee233dba91a063","src/set.rs":"dd04a4954863cc106e168a7d9a89bcebd1c4e045e7ef9ec1f0dadc0a8eaf919d","src/sparse.rs":"536e31fdcf64450526f5e5b85e97406c26b998bc7e0d8161b6b449c24265449f"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-entity/Cargo.toml
+++ b/third_party/rust/cranelift-entity/Cargo.toml
@@ -1,12 +1,12 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-entity"
-version = "0.55.0"
+version = "0.56.0"
 description = "Data structures using entity references as mapping keys"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://cranelift.readthedocs.io/"
 repository = "https://github.com/bytecodealliance/cranelift"
 categories = ["no-std"]
 readme = "README.md"
 keywords = ["entity", "set", "map"]
 edition = "2018"
--- a/third_party/rust/cranelift-frontend/.cargo-checksum.json
+++ b/third_party/rust/cranelift-frontend/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"fe6a59f44df0fa8aa9ad1de62e1c8559379b9e8ceb3545fb448fe48ff52360f5","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"dea43e8044284df50f8b8772e9b48ba8b109b45c74111ff73619775d57ad8d67","src/frontend.rs":"c8ba698562fe845282e3118cd2a66656161c2babe61096c62fbc373ec5380753","src/lib.rs":"2a8efc913364bdb700268fb66a6132d2d48f3fe10fe80443fcf17d9480a0f167","src/ssa.rs":"3e4dd91c59e3e5acde2ec758fc1bc4c5783940bce8637b7b67b180cfab0007c3","src/switch.rs":"6a31c37ed9e93ee943b7e98e28646804497d64a5a6a55aa1924c5feb27b52dfa","src/variable.rs":"399437bd7d2ac11a7a748bad7dd1f6dac58824d374ec318f36367a9d077cc225"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"a2cbf66cc051bf81b7e44fdd2f8576d6a9b50bbcfeebbff8e2f581f2dabc8d53","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"dea43e8044284df50f8b8772e9b48ba8b109b45c74111ff73619775d57ad8d67","src/frontend.rs":"c8ba698562fe845282e3118cd2a66656161c2babe61096c62fbc373ec5380753","src/lib.rs":"fb186570a7df38611a41245a7f7c8ebc411a471f06a2144f9344b73ff3e5e546","src/ssa.rs":"3e4dd91c59e3e5acde2ec758fc1bc4c5783940bce8637b7b67b180cfab0007c3","src/switch.rs":"eefb215ca574e73676b8f37f0bca12fb1d0359f9ca31f424e61a439523f7371a","src/variable.rs":"399437bd7d2ac11a7a748bad7dd1f6dac58824d374ec318f36367a9d077cc225"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-frontend/Cargo.toml
+++ b/third_party/rust/cranelift-frontend/Cargo.toml
@@ -1,22 +1,22 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-frontend"
-version = "0.55.0"
+version = "0.56.0"
 description = "Cranelift IR builder helper"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://cranelift.readthedocs.io/"
 categories = ["no-std"]
 repository = "https://github.com/bytecodealliance/cranelift"
 readme = "README.md"
 edition = "2018"
 
 [dependencies]
-cranelift-codegen = { path = "../cranelift-codegen", version = "0.55.0", default-features = false }
+cranelift-codegen = { path = "../cranelift-codegen", version = "0.56.0", default-features = false }
 target-lexicon = "0.10"
 log = { version = "0.4.6", default-features = false }
 hashbrown = { version = "0.6", optional = true }
 smallvec = { version = "1.0.0" }
 
 [features]
 default = ["std", "basic-blocks"]
 std = ["cranelift-codegen/std"]
--- a/third_party/rust/cranelift-frontend/src/lib.rs
+++ b/third_party/rust/cranelift-frontend/src/lib.rs
@@ -70,102 +70,100 @@
 //! use cranelift_codegen::entity::EntityRef;
 //! use cranelift_codegen::ir::types::*;
 //! use cranelift_codegen::ir::{AbiParam, ExternalName, Function, InstBuilder, Signature};
 //! use cranelift_codegen::isa::CallConv;
 //! use cranelift_codegen::settings;
 //! use cranelift_codegen::verifier::verify_function;
 //! use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext, Variable};
 //!
-//! fn main() {
-//!     let mut sig = Signature::new(CallConv::SystemV);
-//!     sig.returns.push(AbiParam::new(I32));
-//!     sig.params.push(AbiParam::new(I32));
-//!     let mut fn_builder_ctx = FunctionBuilderContext::new();
-//!     let mut func = Function::with_name_signature(ExternalName::user(0, 0), sig);
-//!     {
-//!         let mut builder = FunctionBuilder::new(&mut func, &mut fn_builder_ctx);
+//! let mut sig = Signature::new(CallConv::SystemV);
+//! sig.returns.push(AbiParam::new(I32));
+//! sig.params.push(AbiParam::new(I32));
+//! let mut fn_builder_ctx = FunctionBuilderContext::new();
+//! let mut func = Function::with_name_signature(ExternalName::user(0, 0), sig);
+//! {
+//!     let mut builder = FunctionBuilder::new(&mut func, &mut fn_builder_ctx);
 //!
-//!         let block0 = builder.create_ebb();
-//!         let block1 = builder.create_ebb();
-//!         let block2 = builder.create_ebb();
-//!         let block3 = builder.create_ebb();
-//!         let x = Variable::new(0);
-//!         let y = Variable::new(1);
-//!         let z = Variable::new(2);
-//!         builder.declare_var(x, I32);
-//!         builder.declare_var(y, I32);
-//!         builder.declare_var(z, I32);
-//!         builder.append_ebb_params_for_function_params(block0);
-//!
-//!         builder.switch_to_block(block0);
-//!         builder.seal_block(block0);
-//!         {
-//!             let tmp = builder.ebb_params(block0)[0]; // the first function parameter
-//!             builder.def_var(x, tmp);
-//!         }
-//!         {
-//!             let tmp = builder.ins().iconst(I32, 2);
-//!             builder.def_var(y, tmp);
-//!         }
-//!         {
-//!             let arg1 = builder.use_var(x);
-//!             let arg2 = builder.use_var(y);
-//!             let tmp = builder.ins().iadd(arg1, arg2);
-//!             builder.def_var(z, tmp);
-//!         }
-//!         builder.ins().jump(block1, &[]);
+//!     let block0 = builder.create_ebb();
+//!     let block1 = builder.create_ebb();
+//!     let block2 = builder.create_ebb();
+//!     let block3 = builder.create_ebb();
+//!     let x = Variable::new(0);
+//!     let y = Variable::new(1);
+//!     let z = Variable::new(2);
+//!     builder.declare_var(x, I32);
+//!     builder.declare_var(y, I32);
+//!     builder.declare_var(z, I32);
+//!     builder.append_ebb_params_for_function_params(block0);
 //!
-//!         builder.switch_to_block(block1);
-//!         {
-//!             let arg1 = builder.use_var(y);
-//!             let arg2 = builder.use_var(z);
-//!             let tmp = builder.ins().iadd(arg1, arg2);
-//!             builder.def_var(z, tmp);
-//!         }
-//!         {
-//!             let arg = builder.use_var(y);
-//!             builder.ins().brnz(arg, block3, &[]);
-//!         }
-//!         builder.ins().jump(block2, &[]);
+//!     builder.switch_to_block(block0);
+//!     builder.seal_block(block0);
+//!     {
+//!         let tmp = builder.ebb_params(block0)[0]; // the first function parameter
+//!         builder.def_var(x, tmp);
+//!     }
+//!     {
+//!         let tmp = builder.ins().iconst(I32, 2);
+//!         builder.def_var(y, tmp);
+//!     }
+//!     {
+//!         let arg1 = builder.use_var(x);
+//!         let arg2 = builder.use_var(y);
+//!         let tmp = builder.ins().iadd(arg1, arg2);
+//!         builder.def_var(z, tmp);
+//!     }
+//!     builder.ins().jump(block1, &[]);
 //!
-//!         builder.switch_to_block(block2);
-//!         builder.seal_block(block2);
-//!         {
-//!             let arg1 = builder.use_var(z);
-//!             let arg2 = builder.use_var(x);
-//!             let tmp = builder.ins().isub(arg1, arg2);
-//!             builder.def_var(z, tmp);
-//!         }
-//!         {
-//!             let arg = builder.use_var(y);
-//!             builder.ins().return_(&[arg]);
-//!         }
+//!     builder.switch_to_block(block1);
+//!     {
+//!         let arg1 = builder.use_var(y);
+//!         let arg2 = builder.use_var(z);
+//!         let tmp = builder.ins().iadd(arg1, arg2);
+//!         builder.def_var(z, tmp);
+//!     }
+//!     {
+//!         let arg = builder.use_var(y);
+//!         builder.ins().brnz(arg, block3, &[]);
+//!     }
+//!     builder.ins().jump(block2, &[]);
 //!
-//!         builder.switch_to_block(block3);
-//!         builder.seal_block(block3);
-//!
-//!         {
-//!             let arg1 = builder.use_var(y);
-//!             let arg2 = builder.use_var(x);
-//!             let tmp = builder.ins().isub(arg1, arg2);
-//!             builder.def_var(y, tmp);
-//!         }
-//!         builder.ins().jump(block1, &[]);
-//!         builder.seal_block(block1);
-//!
-//!         builder.finalize();
+//!     builder.switch_to_block(block2);
+//!     builder.seal_block(block2);
+//!     {
+//!         let arg1 = builder.use_var(z);
+//!         let arg2 = builder.use_var(x);
+//!         let tmp = builder.ins().isub(arg1, arg2);
+//!         builder.def_var(z, tmp);
+//!     }
+//!     {
+//!         let arg = builder.use_var(y);
+//!         builder.ins().return_(&[arg]);
 //!     }
 //!
-//!     let flags = settings::Flags::new(settings::builder());
-//!     let res = verify_function(&func, &flags);
-//!     println!("{}", func.display(None));
-//!     if let Err(errors) = res {
-//!         panic!("{}", errors);
+//!     builder.switch_to_block(block3);
+//!     builder.seal_block(block3);
+//!
+//!     {
+//!         let arg1 = builder.use_var(y);
+//!         let arg2 = builder.use_var(x);
+//!         let tmp = builder.ins().isub(arg1, arg2);
+//!         builder.def_var(y, tmp);
 //!     }
+//!     builder.ins().jump(block1, &[]);
+//!     builder.seal_block(block1);
+//!
+//!     builder.finalize();
+//! }
+//!
+//! let flags = settings::Flags::new(settings::builder());
+//! let res = verify_function(&func, &flags);
+//! println!("{}", func.display(None));
+//! if let Err(errors) = res {
+//!     panic!("{}", errors);
 //! }
 //! ```
 
 #![deny(missing_docs, trivial_numeric_casts, unused_extern_crates)]
 #![warn(unused_import_braces)]
 #![cfg_attr(feature = "std", deny(unstable_features))]
 #![cfg_attr(feature = "cargo-clippy", allow(clippy::new_without_default))]
 #![cfg_attr(
--- a/third_party/rust/cranelift-frontend/src/switch.rs
+++ b/third_party/rust/cranelift-frontend/src/switch.rs
@@ -57,16 +57,21 @@ impl Switch {
         let prev = self.cases.insert(index, ebb);
         assert!(
             prev.is_none(),
             "Tried to set the same entry {} twice",
             index
         );
     }
 
+    /// Get a reference to all existing entries
+    pub fn entries(&self) -> &HashMap<EntryIndex, Ebb> {
+        &self.cases
+    }
+
     /// Turn the `cases` `HashMap` into a list of `ContiguousCaseRange`s.
     ///
     /// # Postconditions
     ///
     /// * Every entry will be represented.
     /// * The `ContiguousCaseRange`s will not overlap.
     /// * Between two `ContiguousCaseRange`s there will be at least one entry index.
     /// * No `ContiguousCaseRange`s will be empty.
--- a/third_party/rust/cranelift-wasm/.cargo-checksum.json
+++ b/third_party/rust/cranelift-wasm/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"758e4396c31b66d601fb6fb684da102e50d0dbaa4405086f6c0c86b0c27fe03d","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"f46f9c5df1b10bad0e87d9c2ad9f5e65bbb6749ac8843cd80ec357daa3b22c3e","src/code_translator.rs":"c6beac3cc13b5ed695d49a5a3dbd44569c2a4fd69e67abd613505d800fbbbfe5","src/environ/dummy.rs":"b918e7c7afd3be41d7b2b8587a1cb0119640508f475fc086f949a96d01b783d6","src/environ/mod.rs":"b6f33f619090ff497b4e22150d77a290f259716374ac2e377b73c47cd1dafe85","src/environ/spec.rs":"0c265a16f24c49c51cfd1d78754d90b7c7a5fa5512cfe555d5e10612ead6a9be","src/func_translator.rs":"cb5618e2ec62d28bdd7561cac0c58b591d904f7503f828c9a6887a70ab264e3d","src/lib.rs":"0dbbb3d5088799c3aaa94b083ca0c2f09906bd8fb36e9c0dd200b8122c50a8b6","src/module_translator.rs":"5e1bf9471d6f4f317bb2fb9b8697b5b08f7950520017c2869e69133e7f17a2b7","src/sections_translator.rs":"158631c43ee07a43790545201e2e597e4d71793e6f4a644851f9e5db4c0a2ef2","src/state/func_state.rs":"cc935f96a703769d075498ec2aa8fe191b8b9e3e5729e25eb409ffb82696d82e","src/state/mod.rs":"20014cb93615467b4d20321b52f67f66040417efcaa739a4804093bb559eed19","src/state/module_state.rs":"2f299b043deb806b48583fe54bbb46708f7d8a1454b7be0eb285568064e5a7f9","src/translation_utils.rs":"e3b56d34ab989e9e81a8b30b52fab11c886bfcb783b9c091d1a72ad35fdbe0d0","tests/wasm_testsuite.rs":"730304f139371e5ef3fd913ec271fc4db181869b447c6ed26c54313b5c31495c"},"package":null}
\ No newline at end of file
+{"files":{"Cargo.toml":"35b63ffdf4ba90faeebe0927f66ff047de2ead02d64f1a9212fe90c6b97a5c39","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","README.md":"f46f9c5df1b10bad0e87d9c2ad9f5e65bbb6749ac8843cd80ec357daa3b22c3e","src/code_translator.rs":"fb15f6c92be1d9580aa1d0a0f020fce260f9e3dd5827d363dba78fb6464fdbd1","src/environ/dummy.rs":"b918e7c7afd3be41d7b2b8587a1cb0119640508f475fc086f949a96d01b783d6","src/environ/mod.rs":"b6f33f619090ff497b4e22150d77a290f259716374ac2e377b73c47cd1dafe85","src/environ/spec.rs":"477d925eece0465104941c253f263c1568c917f6979965eeb30030436cc865c3","src/func_translator.rs":"c051fd561b69a305097d8c35c60bae71a7af86e1f0f48399899ac502766f7772","src/lib.rs":"0dbbb3d5088799c3aaa94b083ca0c2f09906bd8fb36e9c0dd200b8122c50a8b6","src/module_translator.rs":"5e1bf9471d6f4f317bb2fb9b8697b5b08f7950520017c2869e69133e7f17a2b7","src/sections_translator.rs":"158631c43ee07a43790545201e2e597e4d71793e6f4a644851f9e5db4c0a2ef2","src/state/func_state.rs":"cc935f96a703769d075498ec2aa8fe191b8b9e3e5729e25eb409ffb82696d82e","src/state/mod.rs":"20014cb93615467b4d20321b52f67f66040417efcaa739a4804093bb559eed19","src/state/module_state.rs":"2f299b043deb806b48583fe54bbb46708f7d8a1454b7be0eb285568064e5a7f9","src/translation_utils.rs":"e3b56d34ab989e9e81a8b30b52fab11c886bfcb783b9c091d1a72ad35fdbe0d0","tests/wasm_testsuite.rs":"730304f139371e5ef3fd913ec271fc4db181869b447c6ed26c54313b5c31495c"},"package":null}
\ No newline at end of file
--- a/third_party/rust/cranelift-wasm/Cargo.toml
+++ b/third_party/rust/cranelift-wasm/Cargo.toml
@@ -1,25 +1,25 @@
 [package]
 name = "cranelift-wasm"
-version = "0.55.0"
+version = "0.56.0"
 authors = ["The Cranelift Project Developers"]
 description = "Translator from WebAssembly to Cranelift IR"
 repository = "https://github.com/bytecodealliance/cranelift"
 license = "Apache-2.0 WITH LLVM-exception"
 categories = ["no-std", "wasm"]
 readme = "README.md"
 keywords = ["webassembly", "wasm"]
 edition = "2018"
 
 [dependencies]
 wasmparser = { version = "0.47.0", default-features = false }
-cranelift-codegen = { path = "../cranelift-codegen", version = "0.55.0", default-features = false }
-cranelift-entity = { path = "../cranelift-entity", version = "0.55.0" }
-cranelift-frontend = { path = "../cranelift-frontend", version = "0.55.0", default-features = false }
+cranelift-codegen = { path = "../cranelift-codegen", version = "0.56.0", default-features = false }
+cranelift-entity = { path = "../cranelift-entity", version = "0.56.0" }
+cranelift-frontend = { path = "../cranelift-frontend", version = "0.56.0", default-features = false }
 hashbrown = { version = "0.6", optional = true }
 log = { version = "0.4.6", default-features = false }
 serde = { version = "1.0.94", features = ["derive"], optional = true }
 thiserror = "1.0.4"
 
 [dev-dependencies]
 wat = "1.0.7"
 target-lexicon = "0.10"
--- a/third_party/rust/cranelift-wasm/src/code_translator.rs
+++ b/third_party/rust/cranelift-wasm/src/code_translator.rs
@@ -33,16 +33,17 @@ use crate::wasm_unsupported;
 use core::{i32, u32};
 use cranelift_codegen::ir::condcodes::{FloatCC, IntCC};
 use cranelift_codegen::ir::types::*;
 use cranelift_codegen::ir::{
     self, ConstantData, InstBuilder, JumpTableData, MemFlags, Value, ValueLabel,
 };
 use cranelift_codegen::packed_option::ReservedValue;
 use cranelift_frontend::{FunctionBuilder, Variable};
+use std::vec::Vec;
 use wasmparser::{MemoryImmediate, Operator};
 
 // Clippy warns about "flags: _" but its important to document that the flags field is ignored
 #[cfg_attr(
     feature = "cargo-clippy",
     allow(clippy::unneeded_field_pattern, clippy::cognitive_complexity)
 )]
 /// Translates wasm operators into Cranelift IR instructions. Returns `true` if it inserted
@@ -434,17 +435,19 @@ pub fn translate_operator<FE: FuncEnviro
             let (return_count, br_destination) = {
                 let frame = &mut state.control_stack[0];
                 frame.set_branched_to_exit();
                 let return_count = frame.num_return_values();
                 (return_count, frame.br_destination())
             };
             {
                 let return_args = state.peekn_mut(return_count);
-                let return_types = &builder.func.signature.return_types();
+                let return_types = wasm_param_types(&builder.func.signature.returns, |i| {
+                    environ.is_wasm_return(&builder.func.signature, i)
+                });
                 bitcast_arguments(return_args, &return_types, builder);
                 match environ.return_mode() {
                     ReturnMode::NormalReturns => builder.ins().return_(return_args),
                     ReturnMode::FallthroughReturn => {
                         builder.ins().jump(br_destination, return_args)
                     }
                 };
             }
@@ -458,17 +461,20 @@ pub fn translate_operator<FE: FuncEnviro
          ************************************************************************************/
         Operator::Call { function_index } => {
             let (fref, num_args) = state.get_direct_func(builder.func, *function_index, environ)?;
 
             // Bitcast any vector arguments to their default type, I8X16, before calling.
             let callee_signature =
                 &builder.func.dfg.signatures[builder.func.dfg.ext_funcs[fref].signature];
             let args = state.peekn_mut(num_args);
-            bitcast_arguments(args, &callee_signature.param_types(), builder);
+            let types = wasm_param_types(&callee_signature.params, |i| {
+                environ.is_wasm_parameter(&callee_signature, i)
+            });
+            bitcast_arguments(args, &types, builder);
 
             let call = environ.translate_call(
                 builder.cursor(),
                 FuncIndex::from_u32(*function_index),
                 fref,
                 args,
             )?;
             let inst_results = builder.inst_results(call);
@@ -487,17 +493,20 @@ pub fn translate_operator<FE: FuncEnviro
             // the table to search the function in.
             let (sigref, num_args) = state.get_indirect_sig(builder.func, *index, environ)?;
             let table = state.get_table(builder.func, *table_index, environ)?;
             let callee = state.pop1();
 
             // Bitcast any vector arguments to their default type, I8X16, before calling.
             let callee_signature = &builder.func.dfg.signatures[sigref];
             let args = state.peekn_mut(num_args);
-            bitcast_arguments(args, &callee_signature.param_types(), builder);
+            let types = wasm_param_types(&callee_signature.params, |i| {
+                environ.is_wasm_parameter(&callee_signature, i)
+            });
+            bitcast_arguments(args, &types, builder);
 
             let call = environ.translate_call_indirect(
                 builder.cursor(),
                 TableIndex::from_u32(*table_index),
                 table,
                 SignatureIndex::from_u32(*index),
                 sigref,
                 callee,
@@ -1144,16 +1153,42 @@ pub fn translate_operator<FE: FuncEnviro
         }
         Operator::I32x4Splat
         | Operator::I64x2Splat
         | Operator::F32x4Splat
         | Operator::F64x2Splat => {
             let splatted = builder.ins().splat(type_of(op), state.pop1());
             state.push1(splatted)
         }
+        Operator::V8x16LoadSplat {
+            memarg: MemoryImmediate { flags: _, offset },
+        }
+        | Operator::V16x8LoadSplat {
+            memarg: MemoryImmediate { flags: _, offset },
+        }
+        | Operator::V32x4LoadSplat {
+            memarg: MemoryImmediate { flags: _, offset },
+        }
+        | Operator::V64x2LoadSplat {
+            memarg: MemoryImmediate { flags: _, offset },
+        } => {
+            // TODO: For spec compliance, this is initially implemented as a combination of `load +
+            // splat` but could be implemented eventually as a single instruction (`load_splat`).
+            // See https://github.com/bytecodealliance/cranelift/issues/1348.
+            translate_load(
+                *offset,
+                ir::Opcode::Load,
+                type_of(op).lane_type(),
+                builder,
+                state,
+                environ,
+            )?;
+            let splatted = builder.ins().splat(type_of(op), state.pop1());
+            state.push1(splatted)
+        }
         Operator::I8x16ExtractLaneS { lane } | Operator::I16x8ExtractLaneS { lane } => {
             let vector = pop1_with_bitcast(state, type_of(op), builder);
             let extracted = builder.ins().extractlane(vector, lane.clone());
             state.push1(builder.ins().sextend(I32, extracted))
         }
         Operator::I8x16ExtractLaneU { lane } | Operator::I16x8ExtractLaneU { lane } => {
             let vector = pop1_with_bitcast(state, type_of(op), builder);
             state.push1(builder.ins().extractlane(vector, lane.clone()));
@@ -1396,20 +1431,16 @@ pub fn translate_operator<FE: FuncEnviro
         | Operator::I16x8WidenHighI8x16S { .. }
         | Operator::I16x8WidenLowI8x16U { .. }
         | Operator::I16x8WidenHighI8x16U { .. }
         | Operator::I32x4WidenLowI16x8S { .. }
         | Operator::I32x4WidenHighI16x8S { .. }
         | Operator::I32x4WidenLowI16x8U { .. }
         | Operator::I32x4WidenHighI16x8U { .. }
         | Operator::V8x16Swizzle
-        | Operator::V8x16LoadSplat { .. }
-        | Operator::V16x8LoadSplat { .. }
-        | Operator::V32x4LoadSplat { .. }
-        | Operator::V64x2LoadSplat { .. }
         | Operator::I16x8Load8x8S { .. }
         | Operator::I16x8Load8x8U { .. }
         | Operator::I32x4Load16x4S { .. }
         | Operator::I32x4Load16x4U { .. }
         | Operator::I64x2Load32x2S { .. }
         | Operator::I64x2Load32x2U { .. }
         | Operator::I8x16RoundingAverageU { .. }
         | Operator::I16x8RoundingAverageU { .. } => {
@@ -1720,16 +1751,17 @@ fn type_of(operator: &Operator) -> Type 
         | Operator::V128And
         | Operator::V128AndNot
         | Operator::V128Or
         | Operator::V128Xor
         | Operator::V128Bitselect => I8X16, // default type representing V128
 
         Operator::V8x16Shuffle { .. }
         | Operator::I8x16Splat
+        | Operator::V8x16LoadSplat { .. }
         | Operator::I8x16ExtractLaneS { .. }
         | Operator::I8x16ExtractLaneU { .. }
         | Operator::I8x16ReplaceLane { .. }
         | Operator::I8x16Eq
         | Operator::I8x16Ne
         | Operator::I8x16LtS
         | Operator::I8x16LtU
         | Operator::I8x16GtS
@@ -1748,16 +1780,17 @@ fn type_of(operator: &Operator) -> Type 
         | Operator::I8x16AddSaturateS
         | Operator::I8x16AddSaturateU
         | Operator::I8x16Sub
         | Operator::I8x16SubSaturateS
         | Operator::I8x16SubSaturateU
         | Operator::I8x16Mul => I8X16,
 
         Operator::I16x8Splat
+        | Operator::V16x8LoadSplat { .. }
         | Operator::I16x8ExtractLaneS { .. }
         | Operator::I16x8ExtractLaneU { .. }
         | Operator::I16x8ReplaceLane { .. }
         | Operator::I16x8Eq
         | Operator::I16x8Ne
         | Operator::I16x8LtS
         | Operator::I16x8LtU
         | Operator::I16x8GtS
@@ -1776,16 +1809,17 @@ fn type_of(operator: &Operator) -> Type 
         | Operator::I16x8AddSaturateS
         | Operator::I16x8AddSaturateU
         | Operator::I16x8Sub
         | Operator::I16x8SubSaturateS
         | Operator::I16x8SubSaturateU
         | Operator::I16x8Mul => I16X8,
 
         Operator::I32x4Splat
+        | Operator::V32x4LoadSplat { .. }
         | Operator::I32x4ExtractLane { .. }
         | Operator::I32x4ReplaceLane { .. }
         | Operator::I32x4Eq
         | Operator::I32x4Ne
         | Operator::I32x4LtS
         | Operator::I32x4LtU
         | Operator::I32x4GtS
         | Operator::I32x4GtU
@@ -1801,16 +1835,17 @@ fn type_of(operator: &Operator) -> Type 
         | Operator::I32x4ShrU
         | Operator::I32x4Add
         | Operator::I32x4Sub
         | Operator::I32x4Mul
         | Operator::F32x4ConvertI32x4S
         | Operator::F32x4ConvertI32x4U => I32X4,
 
         Operator::I64x2Splat
+        | Operator::V64x2LoadSplat { .. }
         | Operator::I64x2ExtractLane { .. }
         | Operator::I64x2ReplaceLane { .. }
         | Operator::I64x2Neg
         | Operator::I64x2AnyTrue
         | Operator::I64x2AllTrue
         | Operator::I64x2Shl
         | Operator::I64x2ShrS
         | Operator::I64x2ShrU
@@ -1927,8 +1962,21 @@ pub fn bitcast_arguments(
                 t,
                 arguments[i],
                 builder.func.dfg.value_type(arguments[i])
             );
             arguments[i] = optionally_bitcast_vector(arguments[i], *t, builder)
         }
     }
 }
+
+/// A helper to extract all the `Type` listings of each variable in `params`
+/// for only parameters the return true for `is_wasm`, typically paired with
+/// `is_wasm_return` or `is_wasm_parameter`.
+pub fn wasm_param_types(params: &[ir::AbiParam], is_wasm: impl Fn(usize) -> bool) -> Vec<Type> {
+    let mut ret = Vec::with_capacity(params.len());
+    for (i, param) in params.iter().enumerate() {
+        if is_wasm(i) {
+            ret.push(param.value_type);
+        }
+    }
+    return ret;
+}
--- a/third_party/rust/cranelift-wasm/src/environ/spec.rs
+++ b/third_party/rust/cranelift-wasm/src/environ/spec.rs
@@ -139,16 +139,22 @@ pub trait TargetEnvironment {
 /// runtime environment.
 pub trait FuncEnvironment: TargetEnvironment {
     /// Is the given parameter of the given function a wasm-level parameter, as opposed to a hidden
     /// parameter added for use by the implementation?
     fn is_wasm_parameter(&self, signature: &ir::Signature, index: usize) -> bool {
         signature.params[index].purpose == ir::ArgumentPurpose::Normal
     }
 
+    /// Is the given return of the given function a wasm-level parameter, as
+    /// opposed to a hidden parameter added for use by the implementation?
+    fn is_wasm_return(&self, signature: &ir::Signature, index: usize) -> bool {
+        signature.returns[index].purpose == ir::ArgumentPurpose::Normal
+    }
+
     /// Should the code be structured to use a single `fallthrough_return` instruction at the end
     /// of the function body, rather than `return` instructions as needed? This is used by VMs
     /// to append custom epilogues.
     fn return_mode(&self) -> ReturnMode {
         ReturnMode::NormalReturns
     }
 
     /// Set up the necessary preamble definitions in `func` to access the global variable
--- a/third_party/rust/cranelift-wasm/src/func_translator.rs
+++ b/third_party/rust/cranelift-wasm/src/func_translator.rs
@@ -1,15 +1,15 @@
 //! Stand-alone WebAssembly to Cranelift IR translator.
 //!
 //! This module defines the `FuncTranslator` type which can translate a single WebAssembly
 //! function to Cranelift IR guided by a `FuncEnvironment` which provides information about the
 //! WebAssembly module and the runtime environment.
 
-use crate::code_translator::{bitcast_arguments, translate_operator};
+use crate::code_translator::{bitcast_arguments, translate_operator, wasm_param_types};
 use crate::environ::{FuncEnvironment, ReturnMode, WasmResult};
 use crate::state::{FuncTranslationState, ModuleTranslationState};
 use crate::translation_utils::get_vmctx_value_label;
 use crate::wasm_unsupported;
 use cranelift_codegen::entity::EntityRef;
 use cranelift_codegen::ir::{self, Ebb, InstBuilder, ValueLabel};
 use cranelift_codegen::timing;
 use cranelift_frontend::{FunctionBuilder, FunctionBuilderContext, Variable};
@@ -240,17 +240,19 @@ fn parse_function_body<FE: FuncEnvironme
     //
     // If the exit block is unreachable, it may not have the correct arguments, so we would
     // generate a return instruction that doesn't match the signature.
     if state.reachable {
         debug_assert!(builder.is_pristine());
         if !builder.is_unreachable() {
             match environ.return_mode() {
                 ReturnMode::NormalReturns => {
-                    let return_types = &builder.func.signature.return_types();
+                    let return_types = wasm_param_types(&builder.func.signature.returns, |i| {
+                        environ.is_wasm_return(&builder.func.signature, i)
+                    });
                     bitcast_arguments(&mut state.stack, &return_types, builder);
                     builder.ins().return_(&state.stack)
                 }
                 ReturnMode::FallthroughReturn => builder.ins().fallthrough_return(&state.stack),
             };
         }
     }