Repository: bytecodealliance/wasmtime
Pull request #9105 (2024-08-11 14:32:03)

Fix more `clippy::doc_lazy_continuation` lints
This fixes all remaining instances of `clippy::doc_lazy_continuation` except for in some generated code.

github-actions[bot]: #### Subscribe to Label Action

cc @cfallin, @fitzgen, @saulecabrera

<details>
This issue or pull request has been labeled: "cranelift", "cranelift:meta", "isle", "wasi", "wasmtime:api", "winch"

Thus the following users have been cc'd because of the following labels:

* cfallin: isle
* fitzgen: isle
* saulecabrera: winch

To subscribe or unsubscribe from this label, edit the <code>.github/subscribe-to-label.json</code> configuration file.

[Learn more.](https://github.com/bytecodealliance/subscribe-to-label-action)
</details>

Patch:
diff --git a/.github/actions/binary-compatible-builds/main.js b/.github/actions/binary-compatible-builds/main.js
index 6b72ebe2b..1101d78e4 100755
--- a/.github/actions/binary-compatible-builds/main.js
+++ b/.github/actions/binary-compatible-builds/main.js
@@ -32,7 +32,26 @@ if (process.env.INPUT_NAME && process.env.INPUT_NAME.indexOf("android") >= 0) {
 // commands in there with the `$CENTOS` env var.
 
 if (process.env.CENTOS !== undefined) {
-  const args = ['exec', '-w', process.cwd(), '-i', 'build-container'];
+  const args = ['exec', '--workdir', process.cwd(), '--interactive'];
+  // Forward any rust-looking env vars from the environment into the container
+  // itself.
+  for (let key in process.env) {
+    if (key.startsWith('CARGO') || key.startsWith('RUST')) {
+      args.push('--env');
+      args.push(key);
+    }
+  }
+  args.push('build-container')
+
+  // Start the container by appending to `$PATH` with the `/rust/bin` path that
+  // is mounted below.
+  args.push('bash');
+  args.push('-c');
+  args.push('export PATH=$PATH:/rust/bin; export RUSTFLAGS="$RUSTFLAGS $EXTRA_RUSTFLAGS"; exec "$@"');
+  args.push('bash');
+
+  // Add in whatever we're running which will get executed in the sub-shell with
+  // an augmented PATH.
   for (const arg of process.argv.slice(2)) {
     args.push(arg);
   }
diff --git a/.github/actions/install-rust/action.yml b/.github/actions/install-rust/action.yml
index 2a350f248..c5f40462a 100644
--- a/.github/actions/install-rust/action.yml
+++ b/.github/actions/install-rust/action.yml
@@ -23,7 +23,7 @@ runs:
         elif [ "${{ inputs.toolchain }}" = "msrv" ]; then
           echo "version=1.$msrv.0" >> "$GITHUB_OUTPUT"
         elif [ "${{ inputs.toolchain }}" = "wasmtime-ci-pinned-nightly" ]; then
-          echo "version=nightly-2024-07-25" >> "$GITHUB_OUTPUT"
+          echo "version=nightly-2024-08-12" >> "$GITHUB_OUTPUT"
         else
           echo "version=${{ inputs.toolchain }}" >> "$GITHUB_OUTPUT"
         fi
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 6cb1cb03b..7fef12f50 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -147,6 +147,11 @@ jobs:
       run: cargo vet --locked
       continue-on-error: ${{ github.event_name == 'pull_request' }}
 
+    # Double-check that if versions are bumped that `cargo vet` still works.
+    # This is intended to weed out mistakes such as #9115 from happening again.
+    - run: rustc scripts/publish.rs && ./publish bump-patch && cargo vet
+      name: Ensure `cargo vet` works if versions are bumped
+
     # common logic to cancel the entire run if this job fails
     - run: gh run cancel ${{ github.run_id }}
       if: failure() && github.event_name != 'pull_request'
diff --git a/Cargo.lock b/Cargo.lock
index 80b532a2a..ec7291531 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4350,9 +4350,9 @@ dependencies = [
 
 [[package]]
 name = "wit-bindgen"
-version = "0.29.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6878f363ff82b1fce56d448380b56458a85d282aa08c2be80afe4f4cd9051070"
+checksum = "7b4bac478334a647374ff24a74b66737a4cb586dc8288bc3080a93252cd1105c"
 dependencies = [
  "wit-bindgen-rt",
  "wit-bindgen-rust-macro",
@@ -4360,9 +4360,9 @@ dependencies = [
 
 [[package]]
 name = "wit-bindgen-core"
-version = "0.29.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66f98ab0edef3218244a87b125f4f7047f0af104f2e4718255226c0367688d1c"
+checksum = "bb7e3df01cd43cfa1cb52602e4fc05cb2b62217655f6705639b6953eb0a3fed2"
 dependencies = [
  "anyhow",
  "heck 0.5.0",
@@ -4371,18 +4371,18 @@ dependencies = [
 
 [[package]]
 name = "wit-bindgen-rt"
-version = "0.29.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b18e27825442721d23ed98591a80f55220cfe0bf883d92b1ead6c9be237bb34"
+checksum = "b2de7a3b06b9725d129b5cbd1beca968feed919c433305a23da46843185ecdd6"
 dependencies = [
  "bitflags 2.4.1",
 ]
 
 [[package]]
 name = "wit-bindgen-rust"
-version = "0.29.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a44f91ca4e1f0d6d2522a7cbbbea6410992d92eb48e686623eb94e2278839b95"
+checksum = "61a767d1a8eb4e908bfc53febc48b87ada545703b16fe0148ee7736a29a01417"
 dependencies = [
  "anyhow",
  "heck 0.5.0",
@@ -4396,9 +4396,9 @@ dependencies = [
 
 [[package]]
 name = "wit-bindgen-rust-macro"
-version = "0.29.0"
+version = "0.30.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "826e65d7f2eb5e52795c125a2d40f1acdc3bee7a8cb15bfdc6d1078f02ac4f49"
+checksum = "9b185c342d0d27bd83d4080f5a66cf3b4f247fa49d679bceb66e11cc7eb58b99"
 dependencies = [
  "anyhow",
  "prettyplease",
diff --git a/Cargo.toml b/Cargo.toml
index a804dc431..593805d15 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -260,8 +260,8 @@ io-lifetimes = { version = "2.0.3", default-features = false }
 io-extras = "0.18.1"
 rustix = "0.38.31"
 # wit-bindgen:
-wit-bindgen = { version = "0.29.0", default-features = false }
-wit-bindgen-rust-macro = { version = "0.29.0", default-features = false }
+wit-bindgen = { version = "0.30.0", default-features = false }
+wit-bindgen-rust-macro = { version = "0.30.0", default-features = false }
 
 # wasm-tools family:
 wasmparser = { version = "0.215.0", default-features = false }
diff --git a/ci/docker/aarch64-linux/Dockerfile b/ci/docker/aarch64-linux/Dockerfile
index 152d268ba..b6dfc53cb 100644
--- a/ci/docker/aarch64-linux/Dockerfile
+++ b/ci/docker/aarch64-linux/Dockerfile
@@ -7,6 +7,4 @@ RUN apt-get update -y && apt-get install -y gcc gcc-aarch64-linux-gnu ca-certifi
 RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.29.3/cmake-3.29.3-linux-x86_64.tar.gz | tar xzf -
 ENV PATH=$PATH:/cmake-3.29.3-linux-x86_64/bin
 
-ENV PATH=$PATH:/rust/bin
-ENV CARGO_BUILD_TARGET=aarch64-unknown-linux-gnu
 ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
diff --git a/ci/docker/riscv64gc-linux/Dockerfile b/ci/docker/riscv64gc-linux/Dockerfile
index 38a25f07a..6d9a53bff 100644
--- a/ci/docker/riscv64gc-linux/Dockerfile
+++ b/ci/docker/riscv64gc-linux/Dockerfile
@@ -2,6 +2,4 @@ FROM ubuntu:22.04
 
 RUN apt-get update -y && apt-get install -y gcc gcc-riscv64-linux-gnu ca-certificates cmake
 
-ENV PATH=$PATH:/rust/bin
-ENV CARGO_BUILD_TARGET=riscv64gc-unknown-linux-gnu
 ENV CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc
diff --git a/ci/docker/s390x-linux/Dockerfile b/ci/docker/s390x-linux/Dockerfile
index 13f6a83e0..a6d5a8677 100644
--- a/ci/docker/s390x-linux/Dockerfile
+++ b/ci/docker/s390x-linux/Dockerfile
@@ -7,6 +7,4 @@ RUN apt-get update -y && apt-get install -y gcc gcc-s390x-linux-gnu ca-certifica
 RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.29.3/cmake-3.29.3-linux-x86_64.tar.gz | tar xzf -
 ENV PATH=$PATH:/cmake-3.29.3-linux-x86_64/bin
 
-ENV PATH=$PATH:/rust/bin
-ENV CARGO_BUILD_TARGET=s390x-unknown-linux-gnu
 ENV CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_LINKER=s390x-linux-gnu-gcc
diff --git a/ci/docker/x86_64-linux/Dockerfile b/ci/docker/x86_64-linux/Dockerfile
index a1bcdd23d..3271dba5a 100644
--- a/ci/docker/x86_64-linux/Dockerfile
+++ b/ci/docker/x86_64-linux/Dockerfile
@@ -1,5 +1,3 @@
 FROM almalinux:8
 
 RUN dnf install -y git gcc make cmake
-
-ENV PATH=$PATH:/rust/bin
diff --git a/ci/docker/x86_64-musl/Dockerfile b/ci/docker/x86_64-musl/Dockerfile
index c34c19bb8..ab2499d4d 100644
--- a/ci/docker/x86_64-musl/Dockerfile
+++ b/ci/docker/x86_64-musl/Dockerfile
@@ -9,9 +9,7 @@ FROM ubuntu:24.04
 RUN apt-get update -y && apt-get install -y cmake musl-tools
 COPY --from=libgcc_s_src /usr/lib/libgcc_s.so.1 /usr/lib/x86_64-linux-musl
 
-ENV PATH=$PATH:/rust/bin
-
 # Note that `-crt-feature` is passed here to specifically disable static linking
 # with musl. We want a `*.so` to pop out so static linking isn't what we want.
-ENV RUSTFLAGS=-Ctarget-feature=-crt-static
+ENV EXTRA_RUSTFLAGS=-Ctarget-feature=-crt-static
 ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc
diff --git a/cranelift/Cargo.toml b/cranelift/Cargo.toml
index 0d2b8fefa..74cff6db2 100644
--- a/cranelift/Cargo.toml
+++ b/cranelift/Cargo.toml
@@ -8,6 +8,7 @@ documentation = "https://github.com/bytecodealliance/wasmtime/blob/main/cranelif
 repository = "https://github.com/bytecodealliance/wasmtime"
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/bforest/Cargo.toml b/cranelift/bforest/Cargo.toml
index 516c8adff..41192317b 100644
--- a/cranelift/bforest/Cargo.toml
+++ b/cranelift/bforest/Cargo.toml
@@ -10,6 +10,7 @@ categories = ["no-std"]
 readme = "README.md"
 keywords = ["btree", "forest", "set", "map"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/bitset/Cargo.toml b/cranelift/bitset/Cargo.toml
index 959bfbaf9..841ac8f62 100644
--- a/cranelift/bitset/Cargo.toml
+++ b/cranelift/bitset/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-bitset"
 repository = "https://github.com/bytecodealliance/wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/codegen/Cargo.toml b/cranelift/codegen/Cargo.toml
index 47ba37904..5dd35f6b7 100644
--- a/cranelift/codegen/Cargo.toml
+++ b/cranelift/codegen/Cargo.toml
@@ -11,6 +11,7 @@ readme = "README.md"
 keywords = ["compile", "compiler", "jit"]
 build = "build.rs"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/codegen/meta/Cargo.toml b/cranelift/codegen/meta/Cargo.toml
index f3ba03931..f6f039c08 100644
--- a/cranelift/codegen/meta/Cargo.toml
+++ b/cranelift/codegen/meta/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/codegen/meta/src/isa/x86.rs b/cranelift/codegen/meta/src/isa/x86.rs
index f0d5ce648..18f80b067 100644
--- a/cranelift/codegen/meta/src/isa/x86.rs
+++ b/cranelift/codegen/meta/src/isa/x86.rs
@@ -284,7 +284,7 @@ pub(crate) fn define() -> TargetIsa {
     );
     let sapphire_rapids = settings.add_preset(
         "sapphirerapids",
-        "Saphire Rapids microarchitecture.",
+        "Sapphire Rapids microarchitecture.",
         preset!(icelake_server),
     );
     settings.add_preset(
diff --git a/cranelift/codegen/meta/src/shared/mod.rs b/cranelift/codegen/meta/src/shared/mod.rs
index 749e086e2..77b248ec5 100644
--- a/cranelift/codegen/meta/src/shared/mod.rs
+++ b/cranelift/codegen/meta/src/shared/mod.rs
@@ -43,9 +43,9 @@ pub(crate) fn define() -> Definitions {
 /// Verifies certain properties of formats.
 ///
 /// - Formats must be uniquely named: if two formats have the same name, they must refer to the
-/// same data. Otherwise, two format variants in the codegen crate would have the same name.
+///   same data. Otherwise, two format variants in the codegen crate would have the same name.
 /// - Formats must be structurally different from each other. Otherwise, this would lead to
-/// code duplicate in the codegen crate.
+///   code duplicate in the codegen crate.
 ///
 /// Returns a list of all the instruction formats effectively used.
 fn verify_instruction_formats(all_instructions: &AllInstructions) -> Vec<Rc<InstructionFormat>> {
diff --git a/cranelift/codegen/shared/Cargo.toml b/cranelift/codegen/shared/Cargo.toml
index cd59e3480..7628ba46a 100644
--- a/cranelift/codegen/shared/Cargo.toml
+++ b/cranelift/codegen/shared/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [dependencies]
 # Since this is a shared dependency of several packages, please strive to keep this dependency-free
diff --git a/cranelift/codegen/src/incremental_cache.rs b/cranelift/codegen/src/incremental_cache.rs
index bf5f6215e..89e42cf24 100644
--- a/cranelift/codegen/src/incremental_cache.rs
+++ b/cranelift/codegen/src/incremental_cache.rs
@@ -10,11 +10,11 @@
 //!
 //! The three main primitives are the following:
 //! - `compute_cache_key` is used to compute the cache key associated to a `Function`. This is
-//! basically the content of the function, modulo a few things the caching system is resilient to.
+//!   basically the content of the function, modulo a few things the caching system is resilient to.
 //! - `serialize_compiled` is used to serialize the result of a compilation, so it can be reused
-//! later on by...
+//!   later on by...
 //! - `try_finish_recompile`, which reads binary blobs serialized with `serialize_compiled`,
-//! re-creating the compilation artifact from those.
+//!   re-creating the compilation artifact from those.
 //!
 //! The `CacheStore` trait and `Context::compile_with_cache` method are provided as
 //! high-level, easy-to-use facilities to make use of that cache, and show an example of how to use
diff --git a/cranelift/codegen/src/ir/entities.rs b/cranelift/codegen/src/ir/entities.rs
index a658e3228..e4ed6d55a 100644
--- a/cranelift/codegen/src/ir/entities.rs
+++ b/cranelift/codegen/src/ir/entities.rs
@@ -182,12 +182,12 @@ impl DynamicType {
 /// You can create a `GlobalValue` in the following ways:
 ///
 /// - When compiling to WASM, you can use it to load values from a
-/// [`VmContext`](super::GlobalValueData::VMContext) using
-/// [`FuncEnvironment::make_global`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_global).
+///   [`VmContext`](super::GlobalValueData::VMContext) using
+///   [`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/trait.Module.html#method.declare_data_in_func).
+///   [`Module::declare_data_in_func`](https://docs.rs/cranelift-module/*/cranelift_module/trait.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).
+///   [`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).
@@ -325,13 +325,13 @@ impl JumpTable {
 /// `FuncRef`s can be created with
 ///
 /// - [`FunctionBuilder::import_function`](https://docs.rs/cranelift-frontend/*/cranelift_frontend/struct.FunctionBuilder.html#method.import_function)
-/// for external functions
+///   for external functions
 /// - [`Module::declare_func_in_func`](https://docs.rs/cranelift-module/*/cranelift_module/trait.Module.html#method.declare_func_in_func)
-/// for functions declared elsewhere in the same native
-/// [`Module`](https://docs.rs/cranelift-module/*/cranelift_module/trait.Module.html)
+///   for functions declared elsewhere in the same native
+///   [`Module`](https://docs.rs/cranelift-module/*/cranelift_module/trait.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)
+///   for functions declared in the same WebAssembly
+///   [`FuncEnvironment`](https://docs.rs/cranelift-wasm/*/cranelift_wasm/trait.FuncEnvironment.html#tymethod.make_direct_func)
 ///
 /// While the order is stable, it is arbitrary.
 #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
diff --git a/cranelift/codegen/src/isa/riscv64/inst/emit.rs b/cranelift/codegen/src/isa/riscv64/inst/emit.rs
index 2bf01c550..31af22658 100644
--- a/cranelift/codegen/src/isa/riscv64/inst/emit.rs
+++ b/cranelift/codegen/src/isa/riscv64/inst/emit.rs
@@ -149,7 +149,7 @@ impl Inst {
         }
     }
 
-    /// Returns Some(VState) if this insturction is expecting a specific vector state
+    /// Returns Some(VState) if this instruction is expecting a specific vector state
     /// before emission.
     fn expected_vstate(&self) -> Option<&VState> {
         match self {
@@ -363,13 +363,13 @@ impl Inst {
                     _ => return None,
                 };
                 // The canonical expansion for these instruction has `rd == rs1`, but
-                // these are all comutative operations, so we can swap the operands.
+                // these are all commutative operations, so we can swap the operands.
                 let src = if rd.to_reg() == rs1 { rs2 } else { rs1 };
 
                 sink.put2(encode_ca_type(op, rd, src));
             }
 
-            // The sub instructions are non comutative, so we can't swap the operands.
+            // The sub instructions are non commutative, so we can't swap the operands.
             Inst::AluRRR {
                 alu_op: alu_op @ (AluOPRRR::Sub | AluOPRRR::Subw),
                 rd,
@@ -386,7 +386,7 @@ impl Inst {
 
             // c.j
             //
-            // We don't have a separate JAL as that is only availabile in RV32C
+            // We don't have a separate JAL as that is only available in RV32C
             Inst::Jal { label } => {
                 sink.use_label_at_offset(*start_off, label, LabelUse::RVCJump);
                 sink.add_uncond_branch(*start_off, *start_off + 2, label);
@@ -870,7 +870,7 @@ impl Inst {
             &Inst::RawData { ref data } => {
                 // Right now we only put a u32 or u64 in this instruction.
                 // It is not very long, no need to check if need `emit_island`.
-                // If data is very long , this is a bug because RawData is typecial
+                // If data is very long , this is a bug because RawData is typically
                 // use to load some data and rely on some position in the code stream.
                 // and we may exceed `Inst::worst_case_size`.
                 // for more information see https://github.com/bytecodealliance/wasmtime/pull/5612.
@@ -1570,7 +1570,7 @@ impl Inst {
                     (xregs, yregs, condition)
                 };
 
-                // Unconditonally move one of the values to the destination register.
+                // Unconditionally move one of the values to the destination register.
                 //
                 // These moves may not end up being emitted if the source and
                 // destination registers are the same. That logic is built into
diff --git a/cranelift/codegen/src/isa/riscv64/inst/vector.rs b/cranelift/codegen/src/isa/riscv64/inst/vector.rs
index 282bd7490..d1ed3703c 100644
--- a/cranelift/codegen/src/isa/riscv64/inst/vector.rs
+++ b/cranelift/codegen/src/isa/riscv64/inst/vector.rs
@@ -1118,12 +1118,12 @@ pub trait VecInstOverlapInfo {
     ///  * The destination EEW equals the source EEW.
     ///
     ///  * The destination EEW is smaller than the source EEW and the overlap is
-    ///  in the lowest-numbered part of the source register group (e.g., when LMUL=1,
-    ///  vnsrl.wi v0, v0, 3 is legal, but a destination of v1 is not).
+    ///    in the lowest-numbered part of the source register group (e.g., when LMUL=1,
+    ///    vnsrl.wi v0, v0, 3 is legal, but a destination of v1 is not).
     ///
     ///  * The destination EEW is greater than the source EEW, the source EMUL is at
-    ///  least 1, and the overlap is in the highest-numbered part of the destination register
-    ///  group (e.g., when LMUL=8, vzext.vf4 v0, v6 is legal, but a source of v0, v2, or v4 is not).
+    ///    least 1, and the overlap is in the highest-numbered part of the destination register
+    ///    group (e.g., when LMUL=8, vzext.vf4 v0, v6 is legal, but a source of v0, v2, or v4 is not).
     ///
     /// For the purpose of determining register group overlap constraints, mask elements have EEW=1.
     fn forbids_src_dst_overlaps(&self) -> bool;
diff --git a/cranelift/codegen/src/isa/riscv64/inst_vector.isle b/cranelift/codegen/src/isa/riscv64/inst_vector.isle
index eccbc372f..4b6361830 100644
--- a/cranelift/codegen/src/isa/riscv64/inst_vector.isle
+++ b/cranelift/codegen/src/isa/riscv64/inst_vector.isle
@@ -1745,7 +1745,7 @@
   (rv_vmfeq_vf y x (unmasked) ty))
 
 ;; FloatCC.NotEqual
-;; Note: This is UnorderedNotEqual. It is the only unoredered comparison that is not named as such.
+;; Note: This is UnorderedNotEqual. It is the only unordered comparison that is not named as such.
 
 (rule 0 (gen_fcmp_mask (ty_vec_fits_in_register ty) (FloatCC.NotEqual) x y)
   (rv_vmfne_vv x y (unmasked) ty))
diff --git a/cranelift/codegen/src/isa/s390x/inst.isle b/cranelift/codegen/src/isa/s390x/inst.isle
index d8040f501..9745c2784 100644
--- a/cranelift/codegen/src/isa/s390x/inst.isle
+++ b/cranelift/codegen/src/isa/s390x/inst.isle
@@ -2898,13 +2898,14 @@
 ;; lane order than the current function, we need to swap lanes.
 ;; The first operand is the lane order used by the callee.
 (decl abi_vec_elt_rev (LaneOrder Type Reg) Reg)
-(rule 4 (abi_vec_elt_rev _ (gpr32_ty ty) reg) reg)
-(rule 3 (abi_vec_elt_rev _ (gpr64_ty ty) reg) reg)
+(rule 5 (abi_vec_elt_rev _ (gpr32_ty ty) reg) reg)
+(rule 4 (abi_vec_elt_rev _ (gpr64_ty ty) reg) reg)
+(rule 3 (abi_vec_elt_rev _ $I128 reg) reg)
 (rule 2 (abi_vec_elt_rev _ (ty_scalar_float ty) reg) reg)
 (rule 0 (abi_vec_elt_rev callee_lane_order _ reg)
       (if-let $true (lane_order_equal callee_lane_order (lane_order)))
       reg)
-(rule 1 (abi_vec_elt_rev callee_lane_order (vr128_ty ty) reg)
+(rule 1 (abi_vec_elt_rev callee_lane_order (ty_vec128 ty) reg)
       (if-let $false (lane_order_equal callee_lane_order (lane_order)))
       (vec_elt_rev ty reg))
 
diff --git a/cranelift/codegen/src/isa/s390x/lower.isle b/cranelift/codegen/src/isa/s390x/lower.isle
index 513ea459a..bc69221ac 100644
--- a/cranelift/codegen/src/isa/s390x/lower.isle
+++ b/cranelift/codegen/src/isa/s390x/lower.isle
@@ -611,7 +611,7 @@
 ;; would indeed happen, we have no way of signalling two different trap
 ;; conditions from the same instruction.  By explicitly checking for the
 ;; integer-overflow case ahead of time, any hardware trap in the divide
-;; instruction is guaranteed to indicate divison-by-zero.
+;; instruction is guaranteed to indicate division-by-zero.
 ;;
 ;; In addition, for types smaller than 64 bits we would have to perform
 ;; the check explicitly anyway, since the instruction provides a 64-bit
diff --git a/cranelift/codegen/src/isa/x64/lower.isle b/cranelift/codegen/src/isa/x64/lower.isle
index 7410a9dd7..6fcbc1b51 100644
--- a/cranelift/codegen/src/isa/x64/lower.isle
+++ b/cranelift/codegen/src/isa/x64/lower.isle
@@ -3727,7 +3727,7 @@
             (tmp1 Xmm (x64_subps tmp1 tmp2))
 
             ;; Create mask for all positive lanes to saturate (i.e. greater than
-            ;; or equal to the maxmimum allowable unsigned int).
+            ;; or equal to the maximum allowable unsigned int).
             (tmp2 Xmm (x64_cmpps tmp2 tmp1 (FcmpImm.LessThanOrEqual)))
 
             ;; Convert those set of lanes that have the max_signed_int factored out.
diff --git a/cranelift/control/Cargo.toml b/cranelift/control/Cargo.toml
index 949e799b7..ebbc9447d 100644
--- a/cranelift/control/Cargo.toml
+++ b/cranelift/control/Cargo.toml
@@ -8,6 +8,7 @@ repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 keywords = ["fuzz", "test"]
 edition.workspace = true
+rust-version.workspace = true
 
 [dependencies]
 arbitrary = { workspace = true, optional = true }
diff --git a/cranelift/entity/Cargo.toml b/cranelift/entity/Cargo.toml
index 300d1f9f5..1c0c1bf0e 100644
--- a/cranelift/entity/Cargo.toml
+++ b/cranelift/entity/Cargo.toml
@@ -10,6 +10,7 @@ categories = ["no-std"]
 readme = "README.md"
 keywords = ["entity", "set", "map"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/entity/src/sparse.rs b/cranelift/entity/src/sparse.rs
index d7cdc3d88..bcdce7288 100644
--- a/cranelift/entity/src/sparse.rs
+++ b/cranelift/entity/src/sparse.rs
@@ -5,7 +5,7 @@
 //! the paper:
 //!
 //! > Briggs, Torczon, *An efficient representation for sparse sets*,
-//!   ACM Letters on Programming Languages and Systems, Volume 2, Issue 1-4, March-Dec. 1993.
+//! > ACM Letters on Programming Languages and Systems, Volume 2, Issue 1-4, March-Dec. 1993.
 
 use crate::map::SecondaryMap;
 use crate::EntityRef;
diff --git a/cranelift/frontend/Cargo.toml b/cranelift/frontend/Cargo.toml
index fc8f23af9..4352525dc 100644
--- a/cranelift/frontend/Cargo.toml
+++ b/cranelift/frontend/Cargo.toml
@@ -9,6 +9,7 @@ categories = ["no-std"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/fuzzgen/Cargo.toml b/cranelift/fuzzgen/Cargo.toml
index ac236f427..856828b2b 100644
--- a/cranelift/fuzzgen/Cargo.toml
+++ b/cranelift/fuzzgen/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lints]
diff --git a/cranelift/interpreter/Cargo.toml b/cranelift/interpreter/Cargo.toml
index af80eb0c7..c91482397 100644
--- a/cranelift/interpreter/Cargo.toml
+++ b/cranelift/interpreter/Cargo.toml
@@ -9,6 +9,7 @@ categories = ["no-std"]
 license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/interpreter/src/state.rs b/cranelift/interpreter/src/state.rs
index 5ec7f9fc3..7b9c6b5ba 100644
--- a/cranelift/interpreter/src/state.rs
+++ b/cranelift/interpreter/src/state.rs
@@ -16,10 +16,10 @@ use thiserror::Error;
 /// all of the ways a Cranelift interpreter can interact with its virtual state. This makes it
 /// possible to use the [Interpreter](crate::interpreter::Interpreter) in a range of situations:
 /// - when interpretation needs to happen in a way isolated from the host a state which keeps a
-/// stack and bound checks memory accesses can be used, like
-/// [InterpreterState](crate::interpreter::InterpreterState).
+///   stack and bound checks memory accesses can be used, like
+///   [InterpreterState](crate::interpreter::InterpreterState).
 /// - when interpretation needs to have access to the host a state which allows direct access to the
-/// host memory and native functions can be used.
+///   host memory and native functions can be used.
 pub trait State<'a> {
     /// Retrieve a reference to a [Function].
     fn get_function(&self, func_ref: FuncRef) -> Option<&'a Function>;
diff --git a/cranelift/isle/fuzz/Cargo.toml b/cranelift/isle/fuzz/Cargo.toml
index 086257bff..9a2b073d7 100644
--- a/cranelift/isle/fuzz/Cargo.toml
+++ b/cranelift/isle/fuzz/Cargo.toml
@@ -4,6 +4,7 @@ version = "0.0.0"
 authors = ["Automatically generated"]
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 
 [package.metadata]
 cargo-fuzz = true
diff --git a/cranelift/isle/isle/Cargo.toml b/cranelift/isle/isle/Cargo.toml
index aa4a5bf84..f96e9325a 100644
--- a/cranelift/isle/isle/Cargo.toml
+++ b/cranelift/isle/isle/Cargo.toml
@@ -2,6 +2,7 @@
 authors = ["The Cranelift Project Developers"]
 description = "ISLE: Instruction Selection and Lowering Expressions. A domain-specific language for instruction selection in Cranelift."
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 name = "cranelift-isle"
 readme = "../README.md"
diff --git a/cranelift/isle/isle/src/trie_again.rs b/cranelift/isle/isle/src/trie_again.rs
index a6bb8255e..ef814ba05 100644
--- a/cranelift/isle/isle/src/trie_again.rs
+++ b/cranelift/isle/isle/src/trie_again.rs
@@ -425,6 +425,7 @@ impl RuleSetBuilder {
     /// copy the constraint and push the equality inside it. For example:
     /// - `(term x @ 2 x)` is rewritten to `(term 2 2)`
     /// - `(term x @ (T.A _ _) x)` is rewritten to `(term (T.A y z) (T.A y z))`
+    ///
     /// In the latter case, note that every field of `T.A` has been replaced with a fresh variable
     /// and each of the copies are set equal.
     ///
diff --git a/cranelift/isle/islec/Cargo.toml b/cranelift/isle/islec/Cargo.toml
index 340c2aafd..51451634f 100644
--- a/cranelift/isle/islec/Cargo.toml
+++ b/cranelift/isle/islec/Cargo.toml
@@ -3,6 +3,7 @@ name = "islec"
 version = "0.0.0"
 authors = ["The Cranelift Project Developers"]
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 publish = false
 
diff --git a/cranelift/jit/Cargo.toml b/cranelift/jit/Cargo.toml
index 591c06cb0..28ea98299 100644
--- a/cranelift/jit/Cargo.toml
+++ b/cranelift/jit/Cargo.toml
@@ -8,6 +8,7 @@ documentation = "https://docs.rs/cranelift-jit"
 license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/module/Cargo.toml b/cranelift/module/Cargo.toml
index 0268b28bf..7cd0a4bf7 100644
--- a/cranelift/module/Cargo.toml
+++ b/cranelift/module/Cargo.toml
@@ -9,6 +9,7 @@ categories = ["no-std"]
 license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/native/Cargo.toml b/cranelift/native/Cargo.toml
index 54f76365c..599536d27 100644
--- a/cranelift/native/Cargo.toml
+++ b/cranelift/native/Cargo.toml
@@ -9,6 +9,7 @@ categories = ["no-std"]
 license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [dependencies]
 cranelift-codegen = { workspace = true }
diff --git a/cranelift/object/Cargo.toml b/cranelift/object/Cargo.toml
index 732210ae2..bbacba0d3 100644
--- a/cranelift/object/Cargo.toml
+++ b/cranelift/object/Cargo.toml
@@ -8,6 +8,7 @@ documentation = "https://docs.rs/cranelift-object"
 license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/reader/Cargo.toml b/cranelift/reader/Cargo.toml
index 623f8c7c7..29579bc8a 100644
--- a/cranelift/reader/Cargo.toml
+++ b/cranelift/reader/Cargo.toml
@@ -8,6 +8,7 @@ documentation = "https://docs.rs/cranelift-reader"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/serde/Cargo.toml b/cranelift/serde/Cargo.toml
index a70aa604d..f37986220 100644
--- a/cranelift/serde/Cargo.toml
+++ b/cranelift/serde/Cargo.toml
@@ -8,6 +8,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 readme = "README.md"
 keywords = ["webassembly", "serde"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/umbrella/Cargo.toml b/cranelift/umbrella/Cargo.toml
index 7ec9fcd8f..8da764de7 100644
--- a/cranelift/umbrella/Cargo.toml
+++ b/cranelift/umbrella/Cargo.toml
@@ -10,6 +10,7 @@ categories = ["no-std"]
 readme = "README.md"
 keywords = ["compile", "compiler", "jit"]
 edition.workspace = true
+rust-version.workspace = true
 
 [dependencies]
 cranelift-codegen = { workspace = true }
diff --git a/cranelift/wasm/Cargo.toml b/cranelift/wasm/Cargo.toml
index b62d1018d..79d84ee4a 100644
--- a/cranelift/wasm/Cargo.toml
+++ b/cranelift/wasm/Cargo.toml
@@ -10,6 +10,7 @@ categories = ["no-std", "wasm"]
 readme = "README.md"
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/asm-macros/Cargo.toml b/crates/asm-macros/Cargo.toml
index 8b9d96cc9..f04d759e0 100644
--- a/crates/asm-macros/Cargo.toml
+++ b/crates/asm-macros/Cargo.toml
@@ -2,6 +2,7 @@
 authors = ["The Wasmtime Project Developers"]
 description = "Macros for defining asm functions in Wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 name = "wasmtime-asm-macros"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/crates/bench-api/Cargo.toml b/crates/bench-api/Cargo.toml
index 3cee803f7..b8d36dd54 100644
--- a/crates/bench-api/Cargo.toml
+++ b/crates/bench-api/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lints]
diff --git a/crates/c-api-macros/Cargo.toml b/crates/c-api-macros/Cargo.toml
index 10f492e63..99945a8eb 100644
--- a/crates/c-api-macros/Cargo.toml
+++ b/crates/c-api-macros/Cargo.toml
@@ -4,6 +4,7 @@ version.workspace = true
 authors = ["The Wasmtime Project Developers"]
 license = "Apache-2.0 WITH LLVM-exception"
 edition.workspace = true
+rust-version.workspace = true
 description = "Support macros for `wasmtime-c-api`"
 repository = "https://github.com/bytecodealliance/wasmtime"
 
diff --git a/crates/c-api/Cargo.toml b/crates/c-api/Cargo.toml
index ccf78db10..9b1abe546 100644
--- a/crates/c-api/Cargo.toml
+++ b/crates/c-api/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 links = "wasmtime-c-api"
 include = ["include", "src", "build.rs", "CMakeLists.txt", "cmake", "doxygen.conf.in"]
 
diff --git a/crates/c-api/artifact/Cargo.toml b/crates/c-api/artifact/Cargo.toml
index 789789b43..d3f5e816e 100644
--- a/crates/c-api/artifact/Cargo.toml
+++ b/crates/c-api/artifact/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lib]
diff --git a/crates/c-api/src/async.rs b/crates/c-api/src/async.rs
index 2e29b8839..ef577d87c 100644
--- a/crates/c-api/src/async.rs
+++ b/crates/c-api/src/async.rs
@@ -126,7 +126,7 @@ async fn invoke_c_async_callback<'a>(
     let (params, out_results) = hostcall_val_storage.split_at_mut(params.len());
 
     // Invoke the C function pointer.
-    // The result will be a continutation which we will wrap in a Future.
+    // The result will be a continuation which we will wrap in a Future.
     let mut caller = wasmtime_caller_t { caller };
     let mut trap = None;
     extern "C" fn panic_callback(_: *mut c_void) -> bool {
diff --git a/crates/cache/Cargo.toml b/crates/cache/Cargo.toml
index bd6b57194..a1510d9ec 100644
--- a/crates/cache/Cargo.toml
+++ b/crates/cache/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 documentation = "https://docs.rs/wasmtime-cache/"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/cache/src/config.rs b/crates/cache/src/config.rs
index 2ebf9cb70..62fc6e936 100644
--- a/crates/cache/src/config.rs
+++ b/crates/cache/src/config.rs
@@ -157,7 +157,7 @@ const ZSTD_COMPRESSION_LEVELS: std::ops::RangeInclusive<i32> = 0..=21;
 // so we have at most one module per wasmtime instance
 // if changed, update cli-cache.md
 const DEFAULT_WORKER_EVENT_QUEUE_SIZE: u64 = 0x10;
-const WORKER_EVENT_QUEUE_SIZE_WARNING_TRESHOLD: u64 = 3;
+const WORKER_EVENT_QUEUE_SIZE_WARNING_THRESHOLD: u64 = 3;
 // should be quick and provide good enough compression
 // if changed, update cli-cache.md
 const DEFAULT_BASELINE_COMPRESSION_LEVEL: i32 = zstd::DEFAULT_COMPRESSION_LEVEL;
@@ -460,7 +460,7 @@ impl CacheConfig {
             self.worker_event_queue_size = Some(DEFAULT_WORKER_EVENT_QUEUE_SIZE);
         }
 
-        if self.worker_event_queue_size.unwrap() < WORKER_EVENT_QUEUE_SIZE_WARNING_TRESHOLD {
+        if self.worker_event_queue_size.unwrap() < WORKER_EVENT_QUEUE_SIZE_WARNING_THRESHOLD {
             warn!("Detected small worker event queue size. Some messages might be lost.");
         }
     }
diff --git a/crates/cli-flags/Cargo.toml b/crates/cli-flags/Cargo.toml
index 705e0012a..832b86214 100644
--- a/crates/cli-flags/Cargo.toml
+++ b/crates/cli-flags/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 documentation = "https://docs.rs/wasmtime-cache/"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/component-macro/Cargo.toml b/crates/component-macro/Cargo.toml
index 818d2aad8..79dbc6a27 100644
--- a/crates/component-macro/Cargo.toml
+++ b/crates/component-macro/Cargo.toml
@@ -9,6 +9,7 @@ documentation = "https://docs.rs/wasmtime-component-macro/"
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/component-macro/src/component.rs b/crates/component-macro/src/component.rs
index 89a5314ad..a4c44e784 100644
--- a/crates/component-macro/src/component.rs
+++ b/crates/component-macro/src/component.rs
@@ -16,26 +16,22 @@ mod kw {
 }
 
 #[derive(Debug, Copy, Clone)]
-pub enum VariantStyle {
-    Variant,
+enum Style {
+    Record,
     Enum,
+    Variant,
 }
 
-impl fmt::Display for VariantStyle {
+impl fmt::Display for Style {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.write_str(match self {
-            Self::Variant => "variant",
-            Self::Enum => "enum",
-        })
+        match self {
+            Style::Record => f.write_str("record"),
+            Style::Enum => f.write_str("enum"),
+            Style::Variant => f.write_str("variant"),
+        }
     }
 }
 
-#[derive(Debug, Copy, Clone)]
-enum Style {
-    Record,
-    Variant(VariantStyle),
-}
-
 #[derive(Debug, Clone)]
 enum ComponentAttr {
     Style(Style),
@@ -50,10 +46,10 @@ impl Parse for ComponentAttr {
             Ok(ComponentAttr::Style(Style::Record))
         } else if lookahead.peek(kw::variant) {
             input.parse::<kw::variant>()?;
-            Ok(ComponentAttr::Style(Style::Variant(VariantStyle::Variant)))
+            Ok(ComponentAttr::Style(Style::Variant))
         } else if lookahead.peek(Token![enum]) {
             input.parse::<Token![enum]>()?;
-            Ok(ComponentAttr::Style(Style::Variant(VariantStyle::Enum)))
+            Ok(ComponentAttr::Style(Style::Enum))
         } else if lookahead.peek(kw::wasmtime_crate) {
             input.parse::<kw::wasmtime_crate>()?;
             input.parse::<Token![=]>()?;
@@ -126,7 +122,14 @@ pub trait Expander {
         generics: &syn::Generics,
         discriminant_size: DiscriminantSize,
         cases: &[VariantCase],
-        style: VariantStyle,
+        wasmtime_crate: &syn::Path,
+    ) -> Result<TokenStream>;
+
+    fn expand_enum(
+        &self,
+        name: &syn::Ident,
+        discriminant_size: DiscriminantSize,
+        cases: &[VariantCase],
         wasmtime_crate: &syn::Path,
     ) -> Result<TokenStream>;
 }
@@ -157,7 +160,7 @@ pub fn expand(expander: &dyn Expander, input: &DeriveInput) -> Result<TokenStrea
     let wasmtime_crate = wasmtime_crate.unwrap_or_else(default_wasmtime_crate);
     match style {
         Style::Record => expand_record(expander, input, &wasmtime_crate),
-        Style::Variant(style) => expand_variant(expander, input, style, &wasmtime_crate),
+        Style::Enum | Style::Variant => expand_variant(expander, input, style, &wasmtime_crate),
     }
 }
 
@@ -199,7 +202,7 @@ fn expand_record(
 fn expand_variant(
     expander: &dyn Expander,
     input: &DeriveInput,
-    style: VariantStyle,
+    style: Style,
     wasmtime_crate: &syn::Path,
 ) -> Result<TokenStream> {
     let name = &input.ident;
@@ -253,8 +256,9 @@ fn expand_variant(
                                      containing variants with {}",
                                     style,
                                     match style {
-                                        VariantStyle::Variant => "at most one unnamed field each",
-                                        VariantStyle::Enum => "no fields",
+                                        Style::Variant => "at most one unnamed field each",
+                                        Style::Enum => "no fields",
+                                        Style::Record => unreachable!(),
                                     }
                                 ),
                             ))
@@ -265,14 +269,77 @@ fn expand_variant(
         )
         .collect::<Result<Vec<_>>>()?;
 
-    expander.expand_variant(
-        &input.ident,
-        &input.generics,
-        discriminant_size,
-        &cases,
-        style,
-        wasmtime_crate,
-    )
+    match style {
+        Style::Variant => expander.expand_variant(
+            &input.ident,
+            &input.generics,
+            discriminant_size,
+            &cases,
+            wasmtime_crate,
+        ),
+        Style::Enum => {
+            validate_enum(input, &body, discriminant_size)?;
+            expander.expand_enum(&input.ident, discriminant_size, &cases, wasmtime_crate)
+        }
+        Style::Record => unreachable!(),
+    }
+}
+
+/// Validates component model `enum` definitions are accompanied with
+/// appropriate `#[repr]` tags. Additionally requires that no discriminants are
+/// listed to ensure that unsafe transmutes in lift are valid.
+fn validate_enum(input: &DeriveInput, body: &syn::DataEnum, size: DiscriminantSize) -> Result<()> {
+    if !input.generics.params.is_empty() {
+        return Err(Error::new_spanned(
+            &input.generics.params,
+            "cannot have generics on an `enum`",
+        ));
+    }
+    if let Some(clause) = &input.generics.where_clause {
+        return Err(Error::new_spanned(
+            clause,
+            "cannot have a where clause on an `enum`",
+        ));
+    }
+    let expected_discr = match size {
+        DiscriminantSize::Size1 => "u8",
+        DiscriminantSize::Size2 => "u16",
+        DiscriminantSize::Size4 => "u32",
+    };
+    let mut found_repr = false;
+    for attr in input.attrs.iter() {
+        if !attr.meta.path().is_ident("repr") {
+            continue;
+        }
+        let list = attr.meta.require_list()?;
+        found_repr = true;
+        if list.tokens.to_string() != expected_discr {
+            return Err(Error::new_spanned(
+                &list.tokens,
+                format!(
+                    "expected `repr({expected_discr})`, found `repr({})`",
+                    list.tokens
+                ),
+            ));
+        }
+    }
+    if !found_repr {
+        return Err(Error::new_spanned(
+            &body.enum_token,
+            format!("missing required `#[repr({expected_discr})]`"),
+        ));
+    }
+
+    for case in body.variants.iter() {
+        if let Some((_, expr)) = &case.discriminant {
+            return Err(Error::new_spanned(
+                expr,
+                "cannot have an explicit discriminant",
+            ));
+        }
+    }
+
+    Ok(())
 }
 
 fn expand_record_for_component_type(
@@ -452,7 +519,6 @@ impl Expander for LiftExpander {
         generics: &syn::Generics,
         discriminant_size: DiscriminantSize,
         cases: &[VariantCase],
-        style: VariantStyle,
         wt: &syn::Path,
     ) -> Result<TokenStream> {
         let internal = quote!(#wt::component::__internal);
@@ -460,23 +526,13 @@ impl Expander for LiftExpander {
         let mut lifts = TokenStream::new();
         let mut loads = TokenStream::new();
 
-        let interface_type_variant = match style {
-            VariantStyle::Variant => quote!(Variant),
-            VariantStyle::Enum => quote!(Enum),
-        };
-
         for (index, VariantCase { ident, ty, .. }) in cases.iter().enumerate() {
             let index_u32 = u32::try_from(index).unwrap();
 
             let index_quoted = quote(discriminant_size, index);
 
             if let Some(ty) = ty {
-                let payload_ty = match style {
-                    VariantStyle::Variant => {
-                        quote!(ty.cases[#index].unwrap_or_else(#internal::bad_type_info))
-                    }
-                    VariantStyle::Enum => unreachable!(),
-                };
+                let payload_ty = quote!(ty.cases[#index].unwrap_or_else(#internal::bad_type_info));
                 lifts.extend(
                     quote!(#index_u32 => Self::#ident(<#ty as #wt::component::Lift>::lift(
                         cx, #payload_ty, unsafe { &src.payload.#ident }
@@ -506,7 +562,7 @@ impl Expander for LiftExpander {
 
         let extract_ty = quote! {
             let ty = match ty {
-                #internal::InterfaceType::#interface_type_variant(i) => &cx.types[i],
+                #internal::InterfaceType::Variant(i) => &cx.types[i],
                 _ => #internal::bad_type_info(),
             };
         };
@@ -548,6 +604,75 @@ impl Expander for LiftExpander {
 
         Ok(expanded)
     }
+
+    fn expand_enum(
+        &self,
+        name: &syn::Ident,
+        discriminant_size: DiscriminantSize,
+        cases: &[VariantCase],
+        wt: &syn::Path,
+    ) -> Result<TokenStream> {
+        let internal = quote!(#wt::component::__internal);
+
+        let (from_bytes, discrim_ty) = match discriminant_size {
+            DiscriminantSize::Size1 => (quote!(bytes[0]), quote!(u8)),
+            DiscriminantSize::Size2 => (
+                quote!(u16::from_le_bytes(bytes[0..2].try_into()?)),
+                quote!(u16),
+            ),
+            DiscriminantSize::Size4 => (
+                quote!(u32::from_le_bytes(bytes[0..4].try_into()?)),
+                quote!(u32),
+            ),
+        };
+        let discrim_limit = proc_macro2::Literal::usize_unsuffixed(cases.len());
+
+        let extract_ty = quote! {
+            let ty = match ty {
+                #internal::InterfaceType::Enum(i) => &cx.types[i],
+                _ => #internal::bad_type_info(),
+            };
+        };
+
+        let expanded = quote! {
+            unsafe impl #wt::component::Lift for #name {
+                #[inline]
+                fn lift(
+                    cx: &mut #internal::LiftContext<'_>,
+                    ty: #internal::InterfaceType,
+                    src: &Self::Lower,
+                ) -> #internal::anyhow::Result<Self> {
+                    #extract_ty
+                    let discrim = src.tag.get_u32();
+                    if discrim >= #discrim_limit {
+                        #internal::anyhow::bail!("unexpected discriminant: {discrim}");
+                    }
+                    Ok(unsafe {
+                        #internal::transmute::<#discrim_ty, #name>(discrim as #discrim_ty)
+                    })
+                }
+
+                #[inline]
+                fn load(
+                    cx: &mut #internal::LiftContext<'_>,
+                    ty: #internal::InterfaceType,
+                    bytes: &[u8],
+                ) -> #internal::anyhow::Result<Self> {
+                    let align = <Self as #wt::component::ComponentType>::ALIGN32;
+                    debug_assert!((bytes.as_ptr() as usize) % (align as usize) == 0);
+                    let discrim = #from_bytes;
+                    if discrim >= #discrim_limit {
+                        #internal::anyhow::bail!("unexpected discriminant: {discrim}");
+                    }
+                    Ok(unsafe {
+                        #internal::transmute::<#discrim_ty, #name>(discrim)
+                    })
+                }
+            }
+        };
+
+        Ok(expanded)
+    }
 }
 
 pub struct LowerExpander;
@@ -627,7 +752,6 @@ impl Expander for LowerExpander {
         generics: &syn::Generics,
         discriminant_size: DiscriminantSize,
         cases: &[VariantCase],
-        style: VariantStyle,
         wt: &syn::Path,
     ) -> Result<TokenStream> {
         let internal = quote!(#wt::component::__internal);
@@ -635,11 +759,6 @@ impl Expander for LowerExpander {
         let mut lowers = TokenStream::new();
         let mut stores = TokenStream::new();
 
-        let interface_type_variant = match style {
-            VariantStyle::Variant => quote!(Variant),
-            VariantStyle::Enum => quote!(Enum),
-        };
-
         for (index, VariantCase { ident, ty, .. }) in cases.iter().enumerate() {
             let index_u32 = u32::try_from(index).unwrap();
 
@@ -652,12 +771,7 @@ impl Expander for LowerExpander {
             let store;
 
             if ty.is_some() {
-                let ty = match style {
-                    VariantStyle::Variant => {
-                        quote!(ty.cases[#index].unwrap_or_else(#internal::bad_type_info))
-                    }
-                    VariantStyle::Enum => unreachable!(),
-                };
+                let ty = quote!(ty.cases[#index].unwrap_or_else(#internal::bad_type_info));
                 pattern = quote!(Self::#ident(value));
                 lower = quote!(value.lower(cx, #ty, dst));
                 store = quote!(value.store(
@@ -693,7 +807,7 @@ impl Expander for LowerExpander {
 
         let extract_ty = quote! {
             let ty = match ty {
-                #internal::InterfaceType::#interface_type_variant(i) => &cx.types[i],
+                #internal::InterfaceType::Variant(i) => &cx.types[i],
                 _ => #internal::bad_type_info(),
             };
         };
@@ -731,6 +845,63 @@ impl Expander for LowerExpander {
 
         Ok(expanded)
     }
+
+    fn expand_enum(
+        &self,
+        name: &syn::Ident,
+        discriminant_size: DiscriminantSize,
+        _cases: &[VariantCase],
+        wt: &syn::Path,
+    ) -> Result<TokenStream> {
+        let internal = quote!(#wt::component::__internal);
+
+        let extract_ty = quote! {
+            let ty = match ty {
+                #internal::InterfaceType::Enum(i) => &cx.types[i],
+                _ => #internal::bad_type_info(),
+            };
+        };
+
+        let (size, ty) = match discriminant_size {
+            DiscriminantSize::Size1 => (1, quote!(u8)),
+            DiscriminantSize::Size2 => (2, quote!(u16)),
+            DiscriminantSize::Size4 => (4, quote!(u32)),
+        };
+        let size = proc_macro2::Literal::usize_unsuffixed(size);
+
+        let expanded = quote! {
+            unsafe impl #wt::component::Lower for #name {
+                #[inline]
+                fn lower<T>(
+                    &self,
+                    cx: &mut #internal::LowerContext<'_, T>,
+                    ty: #internal::InterfaceType,
+                    dst: &mut core::mem::MaybeUninit<Self::Lower>,
+                ) -> #internal::anyhow::Result<()> {
+                    #extract_ty
+                    #internal::map_maybe_uninit!(dst.tag)
+                        .write(#wt::ValRaw::u32(*self as u32));
+                    Ok(())
+                }
+
+                #[inline]
+                fn store<T>(
+                    &self,
+                    cx: &mut #internal::LowerContext<'_, T>,
+                    ty: #internal::InterfaceType,
+                    mut offset: usize
+                ) -> #internal::anyhow::Result<()> {
+                    #extract_ty
+                    debug_assert!(offset % (<Self as #wt::component::ComponentType>::ALIGN32 as usize) == 0);
+                    let discrim = *self as #ty;
+                    *cx.get::<#size>(offset) = discrim.to_le_bytes();
+                    Ok(())
+                }
+            }
+        };
+
+        Ok(expanded)
+    }
 }
 
 pub struct ComponentTypeExpander;
@@ -773,7 +944,6 @@ impl Expander for ComponentTypeExpander {
         generics: &syn::Generics,
         _discriminant_size: DiscriminantSize,
         cases: &[VariantCase],
-        style: VariantStyle,
         wt: &syn::Path,
     ) -> Result<TokenStream> {
         let internal = quote!(#wt::component::__internal);
@@ -794,17 +964,9 @@ impl Expander for ComponentTypeExpander {
             if let Some(ty) = ty {
                 abi_list.extend(quote!(Some(<#ty as #wt::component::ComponentType>::ABI),));
 
-                case_names_and_checks.extend(match style {
-                    VariantStyle::Variant => {
-                        quote!((#name, Some(<#ty as #wt::component::ComponentType>::typecheck)),)
-                    }
-                    VariantStyle::Enum => {
-                        return Err(Error::new(
-                            ident.span(),
-                            "payloads are not permitted for `enum` cases",
-                        ))
-                    }
-                });
+                case_names_and_checks.extend(
+                    quote!((#name, Some(<#ty as #wt::component::ComponentType>::typecheck)),),
+                );
 
                 let generic = format_ident!("T{}", index);
 
@@ -816,21 +978,11 @@ impl Expander for ComponentTypeExpander {
                 unique_types.insert(ty);
             } else {
                 abi_list.extend(quote!(None,));
-                case_names_and_checks.extend(match style {
-                    VariantStyle::Variant => {
-                        quote!((#name, None),)
-                    }
-                    VariantStyle::Enum => quote!(#name,),
-                });
+                case_names_and_checks.extend(quote!((#name, None),));
                 lower_payload_case_declarations.extend(quote!(#ident: [#wt::ValRaw; 0],));
             }
         }
 
-        let typecheck = match style {
-            VariantStyle::Variant => quote!(typecheck_variant),
-            VariantStyle::Enum => quote!(typecheck_enum),
-        };
-
         let generics = add_trait_bounds(generics, parse_quote!(#wt::component::ComponentType));
         let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
         let lower = format_ident!("Lower{}", name);
@@ -869,7 +1021,7 @@ impl Expander for ComponentTypeExpander {
                     ty: &#internal::InterfaceType,
                     types: &#internal::InstanceType<'_>,
                 ) -> #internal::anyhow::Result<()> {
-                    #internal::#typecheck(ty, types, &[#case_names_and_checks])
+                    #internal::typecheck_variant(ty, types, &[#case_names_and_checks])
                 }
 
                 const ABI: #internal::CanonicalAbiInfo =
@@ -883,6 +1035,67 @@ impl Expander for ComponentTypeExpander {
 
         Ok(quote!(const _: () = { #expanded };))
     }
+
+    fn expand_enum(
+        &self,
+        name: &syn::Ident,
+        _discriminant_size: DiscriminantSize,
+        cases: &[VariantCase],
+        wt: &syn::Path,
+    ) -> Result<TokenStream> {
+        let internal = quote!(#wt::component::__internal);
+
+        let mut case_names = TokenStream::new();
+        let mut abi_list = TokenStream::new();
+
+        for VariantCase { attrs, ident, ty } in cases.iter() {
+            let rename = find_rename(attrs)?;
+
+            let name = rename.unwrap_or_else(|| syn::LitStr::new(&ident.to_string(), ident.span()));
+
+            if ty.is_some() {
+                return Err(Error::new(
+                    ident.span(),
+                    "payloads are not permitted for `enum` cases",
+                ));
+            }
+            abi_list.extend(quote!(None,));
+            case_names.extend(quote!(#name,));
+        }
+
+        let lower = format_ident!("Lower{}", name);
+
+        let cases_len = cases.len();
+        let expanded = quote! {
+            #[doc(hidden)]
+            #[derive(Clone, Copy)]
+            #[repr(C)]
+            pub struct #lower {
+                tag: #wt::ValRaw,
+            }
+
+            unsafe impl #wt::component::ComponentType for #name {
+                type Lower = #lower;
+
+                #[inline]
+                fn typecheck(
+                    ty: &#internal::InterfaceType,
+                    types: &#internal::InstanceType<'_>,
+                ) -> #internal::anyhow::Result<()> {
+                    #internal::typecheck_enum(ty, types, &[#case_names])
+                }
+
+                const ABI: #internal::CanonicalAbiInfo =
+                    #internal::CanonicalAbiInfo::enum_(#cases_len);
+            }
+
+            unsafe impl #internal::ComponentVariant for #name {
+                const CASES: &'static [Option<#internal::CanonicalAbiInfo>] = &[#abi_list];
+            }
+        };
+
+        Ok(quote!(const _: () = { #expanded };))
+    }
 }
 
 #[derive(Debug)]
diff --git a/crates/component-util/Cargo.toml b/crates/component-util/Cargo.toml
index f51f76130..d1661b0f9 100644
--- a/crates/component-util/Cargo.toml
+++ b/crates/component-util/Cargo.toml
@@ -9,3 +9,4 @@ documentation = "https://docs.rs/wasmtime-component-util/"
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
diff --git a/crates/cranelift/Cargo.toml b/crates/cranelift/Cargo.toml
index 9d1266655..51cf98393 100644
--- a/crates/cranelift/Cargo.toml
+++ b/crates/cranelift/Cargo.toml
@@ -9,6 +9,7 @@ documentation = "https://docs.rs/wasmtime-cranelift/"
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/cranelift/src/debug/transform/simulate.rs b/crates/cranelift/src/debug/transform/simulate.rs
index 84a629332..2e0875a97 100644
--- a/crates/cranelift/src/debug/transform/simulate.rs
+++ b/crates/cranelift/src/debug/transform/simulate.rs
@@ -37,7 +37,7 @@ fn generate_line_info(
     comp_dir_id: write::StringId,
     name_id: write::StringId,
     name: &str,
-) -> Result<write::LineProgram, Error> {
+) -> Result<(write::LineProgram, write::FileId), Error> {
     let out_comp_dir = write::LineString::StringRef(comp_dir_id);
     let out_comp_name = write::LineString::StringRef(name_id);
 
@@ -90,7 +90,7 @@ fn generate_line_info(
         out_program.end_sequence(end_addr);
     }
 
-    Ok(out_program)
+    Ok((out_program, file_index))
 }
 
 fn check_invalid_chars_in_name(s: &str) -> Option<&str> {
@@ -108,8 +108,8 @@ fn autogenerate_dwarf_wasm_path(di: &DebugInfoData) -> PathBuf {
         .module_name
         .and_then(check_invalid_chars_in_name)
         .map(|s| s.to_string())
-        .unwrap_or_else(|| format!("<gen-{}>", NEXT_ID.fetch_add(1, SeqCst)));
-    let path = format!("/<wasm-module>/{module_name}.wasm");
+        .unwrap_or_else(|| format!("<gen-{}>.wasm", NEXT_ID.fetch_add(1, SeqCst)));
+    let path = format!("/<wasm-module>/{module_name}");
     PathBuf::from(path)
 }
 
@@ -302,7 +302,7 @@ pub fn generate_simulated_dwarf(
         (&di.wasm_file, path)
     };
 
-    let (unit, root_id, name_id) = {
+    let (unit, root_id, file_id) = {
         let comp_dir_id = out_strings.add(assert_dwarf_str!(path
             .parent()
             .context("path dir")?
@@ -315,7 +315,7 @@ pub fn generate_simulated_dwarf(
             .context("path name encoding")?;
         let name_id = out_strings.add(assert_dwarf_str!(name));
 
-        let out_program = generate_line_info(
+        let (out_program, file_id) = generate_line_info(
             addr_tr,
             translated,
             out_encoding,
@@ -342,7 +342,7 @@ pub fn generate_simulated_dwarf(
             gimli::DW_AT_comp_dir,
             write::AttributeValue::StringRef(comp_dir_id),
         );
-        (unit, root_id, name_id)
+        (unit, root_id, file_id)
     };
 
     let mut module_wasm_types = PrimaryMap::new();
@@ -393,13 +393,13 @@ pub fn generate_simulated_dwarf(
 
         die.set(
             gimli::DW_AT_decl_file,
-            write::AttributeValue::StringRef(name_id),
+            write::AttributeValue::FileIndex(Some(file_id)),
         );
 
         let f_start = map.addresses[0].wasm;
         let wasm_offset = di.wasm_file.code_section_offset + f_start;
         die.set(
-            gimli::DW_AT_decl_file,
+            gimli::DW_AT_decl_line,
             write::AttributeValue::Udata(wasm_offset),
         );
 
diff --git a/crates/environ/Cargo.toml b/crates/environ/Cargo.toml
index c42690f8d..2ae748a0b 100644
--- a/crates/environ/Cargo.toml
+++ b/crates/environ/Cargo.toml
@@ -9,6 +9,7 @@ documentation = "https://docs.rs/wasmtime-environ/"
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/environ/fuzz/Cargo.toml b/crates/environ/fuzz/Cargo.toml
index 97ff78986..d6a1774bf 100644
--- a/crates/environ/fuzz/Cargo.toml
+++ b/crates/environ/fuzz/Cargo.toml
@@ -4,6 +4,7 @@ version = "0.0.0"
 authors = ["Automatically generated"]
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 
 [package.metadata]
 cargo-fuzz = true
diff --git a/crates/environ/src/compile/mod.rs b/crates/environ/src/compile/mod.rs
index b764e5f04..0af013a9f 100644
--- a/crates/environ/src/compile/mod.rs
+++ b/crates/environ/src/compile/mod.rs
@@ -263,7 +263,7 @@ pub trait Compiler: Send + Sync {
     /// 1. First, the index within `funcs` that is being resolved,
     ///
     /// 2. and next the `RelocationTarget` which is the relocation target to
-    /// resolve.
+    ///    resolve.
     ///
     /// The return value is an index within `funcs` that the relocation points
     /// to.
diff --git a/crates/environ/src/component/types.rs b/crates/environ/src/component/types.rs
index 998075840..5e70bd6be 100644
--- a/crates/environ/src/component/types.rs
+++ b/crates/environ/src/component/types.rs
@@ -735,6 +735,24 @@ impl CanonicalAbiInfo {
         }
     }
 
+    /// Calculates ABI information for an enum with `cases` cases.
+    pub const fn enum_(cases: usize) -> CanonicalAbiInfo {
+        // NB: this is basically a duplicate definition of
+        // `CanonicalAbiInfo::variant`, these should be kept in sync.
+
+        let discrim_size = match DiscriminantSize::from_count(cases) {
+            Some(size) => size.byte_size(),
+            None => unreachable!(),
+        };
+        CanonicalAbiInfo {
+            size32: discrim_size,
+            align32: discrim_size,
+            size64: discrim_size,
+            align64: discrim_size,
+            flat_count: Some(1),
+        }
+    }
+
     /// Returns the flat count of this ABI information so long as the count
     /// doesn't exceed the `max` specified.
     pub fn flat_count(&self, max: usize) -> Option<usize> {
diff --git a/crates/explorer/Cargo.toml b/crates/explorer/Cargo.toml
index ba315ddd5..acbd32970 100644
--- a/crates/explorer/Cargo.toml
+++ b/crates/explorer/Cargo.toml
@@ -4,6 +4,7 @@ authors.workspace = true
 description = "Compiler explorer for Wasmtime and Cranelift"
 documentation = "https://docs.rs/wasmtime-explorer/"
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 version.workspace = true
diff --git a/crates/fiber/Cargo.toml b/crates/fiber/Cargo.toml
index 7ba3878ef..8d83fd035 100644
--- a/crates/fiber/Cargo.toml
+++ b/crates/fiber/Cargo.toml
@@ -6,6 +6,7 @@ description = "Fiber support for Wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/fuzzing/Cargo.toml b/crates/fuzzing/Cargo.toml
index d4757a7db..d93898205 100644
--- a/crates/fuzzing/Cargo.toml
+++ b/crates/fuzzing/Cargo.toml
@@ -2,6 +2,7 @@
 authors.workspace = true
 description = "Fuzzing infrastructure for Wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 name = "wasmtime-fuzzing"
 publish = false
 version = "0.0.0"
diff --git a/crates/fuzzing/wasm-spec-interpreter/Cargo.toml b/crates/fuzzing/wasm-spec-interpreter/Cargo.toml
index b18dc066c..d33bc619d 100644
--- a/crates/fuzzing/wasm-spec-interpreter/Cargo.toml
+++ b/crates/fuzzing/wasm-spec-interpreter/Cargo.toml
@@ -5,6 +5,7 @@ name = "wasm-spec-interpreter"
 version = "0.0.0"
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 
 [lints]
diff --git a/crates/jit-debug/Cargo.toml b/crates/jit-debug/Cargo.toml
index 11045bd81..c073df708 100644
--- a/crates/jit-debug/Cargo.toml
+++ b/crates/jit-debug/Cargo.toml
@@ -9,6 +9,7 @@ keywords = ["gdb", "jit"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/jit-icache-coherence/Cargo.toml b/crates/jit-icache-coherence/Cargo.toml
index 2f7461f1c..5612c2af5 100644
--- a/crates/jit-icache-coherence/Cargo.toml
+++ b/crates/jit-icache-coherence/Cargo.toml
@@ -7,6 +7,7 @@ documentation = "https://docs.rs/jit-icache-coherence"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/misc/component-fuzz-util/Cargo.toml b/crates/misc/component-fuzz-util/Cargo.toml
index 9a23fa2cf..9f6f4a8e9 100644
--- a/crates/misc/component-fuzz-util/Cargo.toml
+++ b/crates/misc/component-fuzz-util/Cargo.toml
@@ -4,6 +4,7 @@ authors = ["The Wasmtime Project Developers"]
 license = "Apache-2.0 WITH LLVM-exception"
 version = "0.0.0"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lints]
diff --git a/crates/misc/component-fuzz-util/src/lib.rs b/crates/misc/component-fuzz-util/src/lib.rs
index f92d4ea9e..8165195a2 100644
--- a/crates/misc/component-fuzz-util/src/lib.rs
+++ b/crates/misc/component-fuzz-util/src/lib.rs
@@ -569,10 +569,16 @@ pub fn rust_type(ty: &Type, name_counter: &mut u32, declarations: &mut TokenStre
                 .collect::<TokenStream>();
 
             let name = make_rust_name(name_counter);
+            let repr = match count.ilog2() {
+                0..=7 => quote!(u8),
+                8..=15 => quote!(u16),
+                _ => quote!(u32),
+            };
 
             declarations.extend(quote! {
                 #[derive(ComponentType, Lift, Lower, PartialEq, Debug, Copy, Clone, Arbitrary)]
                 #[component(enum)]
+                #[repr(#repr)]
                 enum #name {
                     #cases
                 }
diff --git a/crates/slab/Cargo.toml b/crates/slab/Cargo.toml
index d9f265ffb..b1b6c5e73 100644
--- a/crates/slab/Cargo.toml
+++ b/crates/slab/Cargo.toml
@@ -2,6 +2,7 @@
 authors = ["The Wasmtime Project Developers"]
 description = "Uni-typed slab with a free list for use in Wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 name = "wasmtime-slab"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml
index bd5c88331..1fbbb8fde 100644
--- a/crates/types/Cargo.toml
+++ b/crates/types/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 documentation = "https://docs.rs/wasmtime-types"
 edition.workspace = true
+rust-version.workspace = true
 
 [dependencies]
 anyhow = { workspace = true }
diff --git a/crates/versioned-export-macros/Cargo.toml b/crates/versioned-export-macros/Cargo.toml
index d9f2d9e47..59109a047 100644
--- a/crates/versioned-export-macros/Cargo.toml
+++ b/crates/versioned-export-macros/Cargo.toml
@@ -2,6 +2,7 @@
 authors = ["The Wasmtime Project Developers"]
 description = "Macros for defining versioned exports in Wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 name = "wasmtime-versioned-export-macros"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/crates/wasi-common/Cargo.toml b/crates/wasi-common/Cargo.toml
index 579d92f9f..e1d47d1cf 100644
--- a/crates/wasi-common/Cargo.toml
+++ b/crates/wasi-common/Cargo.toml
@@ -9,6 +9,7 @@ keywords = ["webassembly", "wasm"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 include = ["src/**/*", "tests/**/*", "witx", "README.md", "LICENSE", "build.rs"]
 
 [lints]
diff --git a/crates/wasi-common/src/lib.rs b/crates/wasi-common/src/lib.rs
index e660b5b79..9d4d4d82d 100644
--- a/crates/wasi-common/src/lib.rs
+++ b/crates/wasi-common/src/lib.rs
@@ -55,12 +55,12 @@
 //! get with WasiFile/WasiDir:
 //!
 //! * Timekeeping: `WasiSystemClock` and `WasiMonotonicClock` provide the two
-//! interfaces for a clock. `WasiSystemClock` represents time as a
-//! `cap_std::time::SystemTime`, and `WasiMonotonicClock` represents time as
-//! `cap_std::time::Instant`.  * Randomness: we re-use the `cap_rand::RngCore`
-//! trait to represent a randomness source. A trivial `Deterministic` impl is
-//! provided.  * Scheduling: The `WasiSched` trait abstracts over the
-//! `sched_yield` and `poll_oneoff` functions.
+//!   interfaces for a clock. `WasiSystemClock` represents time as a
+//!   `cap_std::time::SystemTime`, and `WasiMonotonicClock` represents time as
+//!   `cap_std::time::Instant`.  * Randomness: we re-use the `cap_rand::RngCore`
+//!   trait to represent a randomness source. A trivial `Deterministic` impl is
+//!   provided.  * Scheduling: The `WasiSched` trait abstracts over the
+//!   `sched_yield` and `poll_oneoff` functions.
 //!
 //! Users can provide implementations of each of these interfaces to the
 //! `WasiCtx::builder(...)` function. The
diff --git a/crates/wasi-common/src/snapshots/mod.rs b/crates/wasi-common/src/snapshots/mod.rs
index f25c8a3b0..a8d50a611 100644
--- a/crates/wasi-common/src/snapshots/mod.rs
+++ b/crates/wasi-common/src/snapshots/mod.rs
@@ -9,19 +9,16 @@
 //! The architectural rules for snapshots are:
 //!
 //! * Snapshots are arranged into modules under `crate::snapshots::`.
-//!
 //! * Each snapshot should invoke `wiggle::from_witx!` with `ctx:
-//! crate::WasiCtx` in its module, and impl all of the required traits.
-//!
-//!* Snapshots can be implemented in terms of other snapshots. For example,
-//! snapshot 0 is mostly implemented by calling the snapshot 1 implementation,
-//! and converting its own types back and forth with the snapshot 1 types. In a
-//! few cases, that is not feasible, so snapshot 0 carries its own
-//! implementations in terms of the `WasiFile` and `WasiSched` traits.
-//!
+//!   crate::WasiCtx` in its module, and impl all of the required traits.
+//! * Snapshots can be implemented in terms of other snapshots. For example,
+//!   snapshot 0 is mostly implemented by calling the snapshot 1 implementation,
+//!   and converting its own types back and forth with the snapshot 1 types. In a
+//!   few cases, that is not feasible, so snapshot 0 carries its own
+//!   implementations in terms of the `WasiFile` and `WasiSched` traits.
 //! * Snapshots can be implemented in terms of the `Wasi*` traits given by
-//! `WasiCtx`. No further downcasting via the `as_any` escape hatch is
-//! permitted.
+//!   `WasiCtx`. No further downcasting via the `as_any` escape hatch is
+//!   permitted.
 
 pub mod preview_0;
 pub mod preview_1;
diff --git a/crates/wasi-http/Cargo.toml b/crates/wasi-http/Cargo.toml
index 9c9400ab9..3339fc1b5 100644
--- a/crates/wasi-http/Cargo.toml
+++ b/crates/wasi-http/Cargo.toml
@@ -3,6 +3,7 @@ name = "wasmtime-wasi-http"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 repository = "https://github.com/bytecodealliance/wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
 description = "Experimental HTTP library for WebAssembly in Wasmtime"
diff --git a/crates/wasi-keyvalue/Cargo.toml b/crates/wasi-keyvalue/Cargo.toml
index 561f33bb1..860e37a79 100644
--- a/crates/wasi-keyvalue/Cargo.toml
+++ b/crates/wasi-keyvalue/Cargo.toml
@@ -3,6 +3,7 @@ name = "wasmtime-wasi-keyvalue"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 repository = "https://github.com/bytecodealliance/wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
 description = "Wasmtime implementation of the wasi-keyvalue API"
diff --git a/crates/wasi-nn/Cargo.toml b/crates/wasi-nn/Cargo.toml
index 4d8470824..48ac66e44 100644
--- a/crates/wasi-nn/Cargo.toml
+++ b/crates/wasi-nn/Cargo.toml
@@ -10,6 +10,7 @@ keywords = ["webassembly", "wasm", "neural-network"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/wasi-preview1-component-adapter/Cargo.toml b/crates/wasi-preview1-component-adapter/Cargo.toml
index 583a87989..0eac34f1e 100644
--- a/crates/wasi-preview1-component-adapter/Cargo.toml
+++ b/crates/wasi-preview1-component-adapter/Cargo.toml
@@ -3,6 +3,7 @@ name = "wasi-preview1-component-adapter"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lints]
diff --git a/crates/wasi-preview1-component-adapter/byte-array-literals/Cargo.toml b/crates/wasi-preview1-component-adapter/byte-array-literals/Cargo.toml
index 5be0dd938..10b21a963 100644
--- a/crates/wasi-preview1-component-adapter/byte-array-literals/Cargo.toml
+++ b/crates/wasi-preview1-component-adapter/byte-array-literals/Cargo.toml
@@ -3,6 +3,7 @@ name = "byte-array-literals"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lib]
diff --git a/crates/wasi-preview1-component-adapter/provider/Cargo.toml.in b/crates/wasi-preview1-component-adapter/provider/Cargo.toml.in
index 9f0ea47c7..a47099f95 100644
--- a/crates/wasi-preview1-component-adapter/provider/Cargo.toml.in
+++ b/crates/wasi-preview1-component-adapter/provider/Cargo.toml.in
@@ -9,6 +9,7 @@ documentation = "https://docs.rs/wasi-preview1-component-adapter-provider/"
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/wasi-preview1-component-adapter/src/lib.rs b/crates/wasi-preview1-component-adapter/src/lib.rs
index 0cb4957f4..b7464ff1f 100644
--- a/crates/wasi-preview1-component-adapter/src/lib.rs
+++ b/crates/wasi-preview1-component-adapter/src/lib.rs
@@ -63,6 +63,7 @@ pub mod bindings {
         // terms of raw pointers.
         skip: ["run", "get-environment", "poll"],
         generate_all,
+        disable_custom_section_link_helpers: true,
     });
 
     #[cfg(feature = "reactor")]
@@ -80,6 +81,7 @@ pub mod bindings {
         // terms of raw pointers.
         skip: ["get-environment", "poll"],
         generate_all,
+        disable_custom_section_link_helpers: true,
     });
 
     #[cfg(feature = "proxy")]
@@ -103,6 +105,7 @@ pub mod bindings {
         runtime_path: "crate::bindings::wit_bindgen_rt_shim",
         skip: ["poll"],
         generate_all,
+        disable_custom_section_link_helpers: true,
     });
 
     pub mod wit_bindgen_rt_shim {
diff --git a/crates/wasi-preview1-component-adapter/verify/Cargo.toml b/crates/wasi-preview1-component-adapter/verify/Cargo.toml
index d351b2bc2..52d75e055 100644
--- a/crates/wasi-preview1-component-adapter/verify/Cargo.toml
+++ b/crates/wasi-preview1-component-adapter/verify/Cargo.toml
@@ -2,6 +2,7 @@
 name = "verify-component-adapter"
 version.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 authors.workspace = true
 publish = false
 
diff --git a/crates/wasi-runtime-config/Cargo.toml b/crates/wasi-runtime-config/Cargo.toml
index c5939b1e1..03df5d5bb 100644
--- a/crates/wasi-runtime-config/Cargo.toml
+++ b/crates/wasi-runtime-config/Cargo.toml
@@ -3,6 +3,7 @@ name = "wasmtime-wasi-runtime-config"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 repository = "https://github.com/bytecodealliance/wasmtime"
 license = "Apache-2.0 WITH LLVM-exception"
 description = "Wasmtime implementation of the wasi-runtime-config API"
diff --git a/crates/wasi-threads/Cargo.toml b/crates/wasi-threads/Cargo.toml
index 467ce1e6f..0a5a681d7 100644
--- a/crates/wasi-threads/Cargo.toml
+++ b/crates/wasi-threads/Cargo.toml
@@ -10,6 +10,7 @@ keywords = ["webassembly", "wasm", "neural-network"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/wasi/Cargo.toml b/crates/wasi/Cargo.toml
index 2816f16c9..1f2610616 100644
--- a/crates/wasi/Cargo.toml
+++ b/crates/wasi/Cargo.toml
@@ -9,6 +9,7 @@ keywords = ["webassembly", "wasm"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 readme = "README.md"
 edition.workspace = true
+rust-version.workspace = true
 include = ["src/**/*", "README.md", "LICENSE", "witx/*", "wit/**/*", "tests/*"]
 
 [lints]
diff --git a/crates/wasmtime/build.rs b/crates/wasmtime/build.rs
index f56ce2b2c..e2572c9cc 100644
--- a/crates/wasmtime/build.rs
+++ b/crates/wasmtime/build.rs
@@ -35,8 +35,4 @@ fn build_c_helpers() {
     println!("cargo:rerun-if-changed=src/runtime/vm/helpers.c");
     build.file("src/runtime/vm/helpers.c");
     build.compile("wasmtime-helpers");
-
-    if os == "linux" {
-        println!("cargo:rustc-link-lib=m");
-    }
 }
diff --git a/crates/wasmtime/src/runtime/component/mod.rs b/crates/wasmtime/src/runtime/component/mod.rs
index fa8bb2fd5..93f859320 100644
--- a/crates/wasmtime/src/runtime/component/mod.rs
+++ b/crates/wasmtime/src/runtime/component/mod.rs
@@ -143,6 +143,7 @@ pub mod __internal {
     pub use anyhow;
     #[cfg(feature = "async")]
     pub use async_trait::async_trait;
+    pub use core::mem::transmute;
     pub use wasmtime_environ;
     pub use wasmtime_environ::component::{CanonicalAbiInfo, ComponentTypes, InterfaceType};
 }
@@ -512,6 +513,7 @@ pub use wasmtime_component_macro::bindgen;
 ///
 /// #[derive(ComponentType)]
 /// #[component(enum)]
+/// #[repr(u8)]
 /// enum Setting {
 ///     #[component(name = "yes")]
 ///     Yes,
diff --git a/crates/wasmtime/src/runtime/store.rs b/crates/wasmtime/src/runtime/store.rs
index e3e9f0f72..e3dbe894c 100644
--- a/crates/wasmtime/src/runtime/store.rs
+++ b/crates/wasmtime/src/runtime/store.rs
@@ -1178,13 +1178,14 @@ impl<T> StoreInner<T> {
 
         // Temporarily take the configured behavior to avoid mutably borrowing
         // multiple times.
+        #[cfg_attr(not(feature = "call-hook"), allow(unreachable_patterns))]
         if let Some(mut call_hook) = self.call_hook.take() {
             let result = self.invoke_call_hook(&mut call_hook, s);
             self.call_hook = Some(call_hook);
-            result
-        } else {
-            Ok(())
+            return result;
         }
+
+        Ok(())
     }
 
     fn invoke_call_hook(&mut self, call_hook: &mut CallHookInner<T>, s: CallHook) -> Result<()> {
diff --git a/crates/wasmtime/src/runtime/values.rs b/crates/wasmtime/src/runtime/values.rs
index 44244d268..9d1c3bd3e 100644
--- a/crates/wasmtime/src/runtime/values.rs
+++ b/crates/wasmtime/src/runtime/values.rs
@@ -854,9 +854,10 @@ impl Ref {
             (Ref::Any(_), HeapType::Any) => true,
             (Ref::Any(Some(a)), HeapType::I31) => a._is_i31(store)?,
             (Ref::Any(Some(a)), HeapType::Struct) => a._is_struct(store)?,
-            (Ref::Any(Some(a)), HeapType::ConcreteStruct(ty)) => match a._as_struct(store)? {
+            (Ref::Any(Some(a)), HeapType::ConcreteStruct(_ty)) => match a._as_struct(store)? {
                 None => false,
-                Some(s) => s._matches_ty(store, ty)?,
+                #[cfg_attr(not(feature = "gc"), allow(unreachable_patterns))]
+                Some(s) => s._matches_ty(store, _ty)?,
             },
             (Ref::Any(Some(_)), HeapType::Eq) => todo!("eqref"),
             (Ref::Any(Some(_)), HeapType::Array) => todo!("wasm GC arrays"),
diff --git a/crates/wasmtime/src/runtime/vm/cow.rs b/crates/wasmtime/src/runtime/vm/cow.rs
index 5a458d7fc..ded449f8e 100644
--- a/crates/wasmtime/src/runtime/vm/cow.rs
+++ b/crates/wasmtime/src/runtime/vm/cow.rs
@@ -1,6 +1,10 @@
 //! Copy-on-write initialization support: creation of backing images for
 //! modules, and logic to support mapping these backing images into memory.
 
+// `MemoryImageSource` is an empty enum on some platforms which triggers some
+// warnings
+#![cfg_attr(any(not(unix), miri), allow(unreachable_patterns))]
+
 use crate::prelude::*;
 use crate::runtime::vm::sys::vm::{self, MemoryImageSource};
 use crate::runtime::vm::{MmapVec, SendSyncPtr};
diff --git a/crates/wasmtime/src/runtime/vm/gc.rs b/crates/wasmtime/src/runtime/vm/gc.rs
index eee0509de..e3d85f646 100644
--- a/crates/wasmtime/src/runtime/vm/gc.rs
+++ b/crates/wasmtime/src/runtime/vm/gc.rs
@@ -149,6 +149,7 @@ impl GcStore {
     ) -> Result<Result<VMExternRef, Box<dyn Any + Send + Sync>>> {
         let host_data_id = self.host_data_table.alloc(value);
         match self.gc_heap.alloc_externref(host_data_id)? {
+            #[cfg_attr(not(feature = "gc"), allow(unreachable_patterns))]
             Some(x) => Ok(Ok(x)),
             None => Ok(Err(self.host_data_table.dealloc(host_data_id))),
         }
diff --git a/crates/wasmtime/src/runtime/vm/threads/parking_spot.rs b/crates/wasmtime/src/runtime/vm/threads/parking_spot.rs
index fc38d71ec..0de3260fc 100644
--- a/crates/wasmtime/src/runtime/vm/threads/parking_spot.rs
+++ b/crates/wasmtime/src/runtime/vm/threads/parking_spot.rs
@@ -5,9 +5,9 @@
 //! There are two main operations that can be performed:
 //!
 //! - *Parking* refers to suspending the thread while simultaneously enqueuing it
-//! on a queue keyed by some address.
+//!   on a queue keyed by some address.
 //! - *Unparking* refers to dequeuing a thread from a queue keyed by some address
-//! and resuming it.
+//!   and resuming it.
 
 #![deny(missing_docs)]
 
diff --git a/crates/wast/Cargo.toml b/crates/wast/Cargo.toml
index a752481c0..599cfae1c 100644
--- a/crates/wast/Cargo.toml
+++ b/crates/wast/Cargo.toml
@@ -8,6 +8,7 @@ categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
 repository = "https://github.com/bytecodealliance/wasmtime"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/wiggle/Cargo.toml b/crates/wiggle/Cargo.toml
index 0961f1be4..ae526252f 100644
--- a/crates/wiggle/Cargo.toml
+++ b/crates/wiggle/Cargo.toml
@@ -3,6 +3,7 @@ name = "wiggle"
 version.workspace = true
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkonk@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 description = "Runtime components of wiggle code generator"
 categories = ["wasm"]
diff --git a/crates/wiggle/generate/Cargo.toml b/crates/wiggle/generate/Cargo.toml
index 071255c93..83444c410 100644
--- a/crates/wiggle/generate/Cargo.toml
+++ b/crates/wiggle/generate/Cargo.toml
@@ -4,6 +4,7 @@ version.workspace = true
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 license = "Apache-2.0 WITH LLVM-exception"
 edition.workspace = true
+rust-version.workspace = true
 description = "Library crate for wiggle code generator."
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
diff --git a/crates/wiggle/macro/Cargo.toml b/crates/wiggle/macro/Cargo.toml
index ab3f39f3f..6d10be2ef 100644
--- a/crates/wiggle/macro/Cargo.toml
+++ b/crates/wiggle/macro/Cargo.toml
@@ -3,6 +3,7 @@ name = "wiggle-macro"
 version.workspace = true
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 description = "Wiggle code generator"
 categories = ["wasm"]
diff --git a/crates/winch/Cargo.toml b/crates/winch/Cargo.toml
index 7d2d67abf..506abf459 100644
--- a/crates/winch/Cargo.toml
+++ b/crates/winch/Cargo.toml
@@ -4,6 +4,7 @@ description = "Integration between Wasmtime and Winch"
 version.workspace = true
 authors.workspace = true
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 
diff --git a/crates/wit-bindgen/Cargo.toml b/crates/wit-bindgen/Cargo.toml
index 9c8c26c97..90e8ea3e9 100644
--- a/crates/wit-bindgen/Cargo.toml
+++ b/crates/wit-bindgen/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 documentation = "https://docs.rs/wasmtime-wit-bindgen/"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/crates/wit-bindgen/src/lib.rs b/crates/wit-bindgen/src/lib.rs
index 887817a6b..16051c68c 100644
--- a/crates/wit-bindgen/src/lib.rs
+++ b/crates/wit-bindgen/src/lib.rs
@@ -1930,6 +1930,13 @@ impl<'a> InterfaceGenerator<'a> {
         self.push_str(&derives.into_iter().collect::<Vec<_>>().join(", "));
         self.push_str(")]\n");
 
+        let repr = match enum_.cases.len().ilog2() {
+            0..=7 => "u8",
+            8..=15 => "u16",
+            _ => "u32",
+        };
+        uwriteln!(self.src, "#[repr({repr})]");
+
         self.push_str(&format!("pub enum {name} {{\n"));
         for case in enum_.cases.iter() {
             self.rustdoc(&case.docs);
diff --git a/crates/wmemcheck/Cargo.toml b/crates/wmemcheck/Cargo.toml
index 5d21c510b..ee4ff45a3 100644
--- a/crates/wmemcheck/Cargo.toml
+++ b/crates/wmemcheck/Cargo.toml
@@ -7,6 +7,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 documentation = "https://docs.rs/wasmtime-cranelift/"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/examples/async.cpp b/examples/async.cpp
index 962b6673d..523f327f9 100644
--- a/examples/async.cpp
+++ b/examples/async.cpp
@@ -204,13 +204,13 @@ int main() {
       host_func_name.data(), host_func_name.size(), functype.get(),
       [](void *, wasmtime_caller_t *, const wasmtime_val_t *args, size_t,
          wasmtime_val_t *, size_t, wasm_trap_t **trap_ret,
-         wasmtime_async_continuation_t *continutation_ret) {
+         wasmtime_async_continuation_t *continuation_ret) {
         std::cout << "invoking async host function" << std::endl;
         printer_state.set_value_to_print(args[0].of.i32);
 
-        continutation_ret->callback = &poll_print_finished_state;
-        continutation_ret->env = new async_call_env{trap_ret};
-        continutation_ret->finalizer = [](void *env) {
+        continuation_ret->callback = &poll_print_finished_state;
+        continuation_ret->env = new async_call_env{trap_ret};
+        continuation_ret->finalizer = [](void *env) {
           std::cout << "deleting async_call_env" << std::endl;
           delete static_cast<async_call_env *>(env);
         };
diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml
index 58d21c1b1..7525a359d 100644
--- a/fuzz/Cargo.toml
+++ b/fuzz/Cargo.toml
@@ -2,6 +2,7 @@
 name = "wasmtime-fuzz"
 version = "0.0.0"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lints]
diff --git a/pulley/Cargo.toml b/pulley/Cargo.toml
index fc9401c17..89ffa0861 100644
--- a/pulley/Cargo.toml
+++ b/pulley/Cargo.toml
@@ -2,6 +2,7 @@
 authors = ["The Pulley Project Developers"]
 description = "The Pulley interpreter, its bytecode definition, encoder, decoder, and etc..."
 edition.workspace = true
+rust-version.workspace = true
 license = "Apache-2.0 WITH LLVM-exception"
 name = "pulley-interpreter"
 readme = "./README.md"
diff --git a/pulley/README.md b/pulley/README.md
index c55377299..df31228f6 100644
--- a/pulley/README.md
+++ b/pulley/README.md
@@ -97,7 +97,7 @@ interpreter:
   perform the work of multiple operations in a single instruction. The more work
   we do in each turn of the interpreter loop the less we are impacted by its
   overhead. Additionally, Cranelift, as the primary Pulley bytecode producer,
-  can leverage ISLE lowering patterns to easily identify opportunites for
+  can leverage ISLE lowering patterns to easily identify opportunities for
   emitting super-instructions.
 
 * We do not, in general, define sub-opcodes. There should be only one branch, on
diff --git a/pulley/fuzz/Cargo.toml b/pulley/fuzz/Cargo.toml
index 095943bbd..fc9737559 100644
--- a/pulley/fuzz/Cargo.toml
+++ b/pulley/fuzz/Cargo.toml
@@ -3,6 +3,7 @@ name = "pulley-interpreter-fuzz"
 version = "0.0.0"
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/src/commands/compile.rs b/src/commands/compile.rs
index e31610094..556850977 100644
--- a/src/commands/compile.rs
+++ b/src/commands/compile.rs
@@ -109,7 +109,9 @@ impl CompileCommand {
                 bail!("component model support was disabled at compile time")
             }
         } else {
-            engine.precompile_module(&input)?
+            wasmtime::CodeBuilder::new(&engine)
+                .wasm(&input, Some(&self.module))?
+                .compile_module_serialized()?
         };
         fs::write(&output, output_bytes)
             .with_context(|| format!("failed to write output: {}", output.display()))?;
diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock
index e52bfb8be..449085802 100644
--- a/supply-chain/imports.lock
+++ b/supply-chain/imports.lock
@@ -1488,6 +1488,12 @@ when = "2024-08-02"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-bindgen]]
+version = "0.30.0"
+when = "2024-08-12"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-bindgen-core]]
 version = "0.28.0"
 when = "2024-07-16"
@@ -1500,6 +1506,12 @@ when = "2024-08-02"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-bindgen-core]]
+version = "0.30.0"
+when = "2024-08-12"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-bindgen-rt]]
 version = "0.28.0"
 when = "2024-07-16"
@@ -1512,6 +1524,12 @@ when = "2024-08-02"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-bindgen-rt]]
+version = "0.30.0"
+when = "2024-08-12"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-bindgen-rust]]
 version = "0.28.0"
 when = "2024-07-16"
@@ -1524,6 +1542,12 @@ when = "2024-08-02"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-bindgen-rust]]
+version = "0.30.0"
+when = "2024-08-12"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-bindgen-rust-macro]]
 version = "0.28.0"
 when = "2024-07-16"
@@ -1536,6 +1560,12 @@ when = "2024-08-02"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wit-bindgen-rust-macro]]
+version = "0.30.0"
+when = "2024-08-12"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wit-component]]
 version = "0.214.0"
 when = "2024-07-16"
diff --git a/winch/codegen/Cargo.toml b/winch/codegen/Cargo.toml
index 38c89b6d2..b5f0f2709 100644
--- a/winch/codegen/Cargo.toml
+++ b/winch/codegen/Cargo.toml
@@ -6,6 +6,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
 version = "0.23.0"
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/winch/codegen/src/abi/local.rs b/winch/codegen/src/abi/local.rs
index 829fe009a..dcca52d69 100644
--- a/winch/codegen/src/abi/local.rs
+++ b/winch/codegen/src/abi/local.rs
@@ -21,6 +21,7 @@ enum Base {
 ///   function defined locals and the param locals.
 /// * Local slots that represent arguments in the stack, are referenced through the
 ///   base pointer register.
+///
 /// A [crate::masm::StackSlot] is a generalized form of a [LocalSlot]: they
 /// represent dynamic chunks of memory that get created throughout the function
 /// compilation lifetime when spilling values (register and locals) into the
diff --git a/winch/codegen/src/abi/mod.rs b/winch/codegen/src/abi/mod.rs
index c9bcf1a08..e615a4738 100644
--- a/winch/codegen/src/abi/mod.rs
+++ b/winch/codegen/src/abi/mod.rs
@@ -487,7 +487,7 @@ impl ABIParams {
             return Self::with_bytes(initial_bytes);
         }
 
-        let regiser_capacity = params.len().min(6);
+        let register_capacity = params.len().min(6);
         let (mut operands, mut regs, mut stack_bytes): (
             SmallVec<[ABIOperand; 6]>,
             HashSet<Reg>,
@@ -495,7 +495,7 @@ impl ABIParams {
         ) = params.iter().fold(
             (
                 SmallVec::new(),
-                HashSet::with_capacity(regiser_capacity),
+                HashSet::with_capacity(register_capacity),
                 initial_bytes,
             ),
             |(mut operands, mut regs, stack_bytes), arg| {
diff --git a/winch/codegen/src/codegen/bounds.rs b/winch/codegen/src/codegen/bounds.rs
index 0411a031e..5d5bf1ac1 100644
--- a/winch/codegen/src/codegen/bounds.rs
+++ b/winch/codegen/src/codegen/bounds.rs
@@ -115,11 +115,11 @@ where
 
 /// This function ensures the following:
 /// * The immediate offset and memory access size fit in a single u64. Given:
-/// that the memory access size is a `u8`, we must guarantee that the immediate
-/// offset will fit in a `u32`, making the result of their addition fit in a u64
-/// and overflow safe.
+///   that the memory access size is a `u8`, we must guarantee that the immediate
+///   offset will fit in a `u32`, making the result of their addition fit in a u64
+///   and overflow safe.
 /// * Adjust the base index to account for the immediate offset via an unsigned
-/// addition and check for overflow in case the previous condition is not met.
+///   addition and check for overflow in case the previous condition is not met.
 #[inline]
 pub(crate) fn ensure_index_and_offset<M: MacroAssembler>(
     masm: &mut M,
diff --git a/winch/codegen/src/isa/aarch64/asm.rs b/winch/codegen/src/isa/aarch64/asm.rs
index 42539f23b..e2a281958 100644
--- a/winch/codegen/src/isa/aarch64/asm.rs
+++ b/winch/codegen/src/isa/aarch64/asm.rs
@@ -147,43 +147,115 @@ impl Assembler {
         let flags = MemFlags::trusted();
 
         use OperandSize::*;
-        let inst = match size {
-            S64 => Inst::Store64 {
+        let inst = match (reg.is_int(), size) {
+            (_, S8) => Inst::Store8 {
                 rd: reg.into(),
                 mem,
                 flags,
             },
-            S32 => Inst::Store32 {
+            (_, S16) => Inst::Store16 {
+                rd: reg.into(),
+                mem,
+                flags,
+            },
+            (true, S32) => Inst::Store32 {
+                rd: reg.into(),
+                mem,
+                flags,
+            },
+            (false, S32) => Inst::FpuStore32 {
+                rd: reg.into(),
+                mem,
+                flags,
+            },
+            (true, S64) => Inst::Store64 {
+                rd: reg.into(),
+                mem,
+                flags,
+            },
+            (false, S64) => Inst::FpuStore64 {
+                rd: reg.into(),
+                mem,
+                flags,
+            },
+            (_, S128) => Inst::FpuStore128 {
                 rd: reg.into(),
                 mem,
                 flags,
             },
-
-            _ => unreachable!(),
         };
 
         self.emit(inst);
     }
 
+    /// Load a signed register.
+    pub fn sload(&mut self, addr: Address, rd: Reg, size: OperandSize) {
+        self.ldr(addr, rd, size, true);
+    }
+
+    /// Load an unsigned register.
+    pub fn uload(&mut self, addr: Address, rd: Reg, size: OperandSize) {
+        self.ldr(addr, rd, size, false);
+    }
+
     /// Load a register.
-    pub fn ldr(&mut self, addr: Address, rd: Reg, size: OperandSize) {
+    fn ldr(&mut self, addr: Address, rd: Reg, size: OperandSize, signed: bool) {
         use OperandSize::*;
         let writable_reg = Writable::from_reg(rd.into());
         let mem: AMode = addr.try_into().unwrap();
         let flags = MemFlags::trusted();
 
-        let inst = match size {
-            S64 => Inst::ULoad64 {
+        let inst = match (rd.is_int(), signed, size) {
+            (_, false, S8) => Inst::ULoad8 {
                 rd: writable_reg,
                 mem,
                 flags,
             },
-            S32 => Inst::ULoad32 {
+            (_, true, S8) => Inst::SLoad8 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (_, false, S16) => Inst::ULoad16 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (_, true, S16) => Inst::SLoad16 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (true, false, S32) => Inst::ULoad32 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (false, _, S32) => Inst::FpuLoad32 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (true, true, S32) => Inst::SLoad32 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (true, _, S64) => Inst::ULoad64 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (false, _, S64) => Inst::FpuLoad64 {
+                rd: writable_reg,
+                mem,
+                flags,
+            },
+            (_, _, S128) => Inst::FpuLoad128 {
                 rd: writable_reg,
                 mem,
                 flags,
             },
-            _ => unreachable!(),
         };
 
         self.emit(inst);
diff --git a/winch/codegen/src/isa/aarch64/masm.rs b/winch/codegen/src/isa/aarch64/masm.rs
index 2014c5543..a59649f8e 100644
--- a/winch/codegen/src/isa/aarch64/masm.rs
+++ b/winch/codegen/src/isa/aarch64/masm.rs
@@ -146,8 +146,8 @@ impl Masm for MacroAssembler {
         self.asm.str(src, dst, size);
     }
 
-    fn wasm_store(&mut self, _src: Reg, _dst: Self::Address, _size: OperandSize) {
-        todo!()
+    fn wasm_store(&mut self, src: Reg, dst: Self::Address, size: OperandSize) {
+        self.asm.str(src, dst, size);
     }
 
     fn call(
@@ -159,21 +159,27 @@ impl Masm for MacroAssembler {
     }
 
     fn load(&mut self, src: Address, dst: Reg, size: OperandSize) {
-        self.asm.ldr(src, dst, size);
+        self.asm.uload(src, dst, size);
     }
 
-    fn load_ptr(&mut self, _src: Self::Address, _dst: Reg) {
-        todo!()
+    fn load_ptr(&mut self, src: Self::Address, dst: Reg) {
+        self.load(src, dst, self.ptr_size);
     }
 
     fn wasm_load(
         &mut self,
-        _src: Self::Address,
-        _dst: Reg,
-        _size: OperandSize,
-        _kind: Option<ExtendKind>,
+        src: Self::Address,
+        dst: Reg,
+        size: OperandSize,
+        kind: Option<ExtendKind>,
     ) {
-        todo!()
+        // kind is some if the value is signed
+        // unlike x64, unused bits are set to zero so we don't need to extend
+        if kind.is_some() {
+            self.asm.sload(src, dst, size);
+        } else {
+            self.asm.uload(src, dst, size);
+        }
     }
 
     fn load_addr(&mut self, _src: Self::Address, _dst: Reg, _size: OperandSize) {
diff --git a/winch/codegen/src/visitor.rs b/winch/codegen/src/visitor.rs
index b018c0732..c36f9324f 100644
--- a/winch/codegen/src/visitor.rs
+++ b/winch/codegen/src/visitor.rs
@@ -26,7 +26,7 @@ use wasmtime_environ::{
 /// This macro calls itself recursively;
 /// 1. It no-ops when matching a supported operator.
 /// 2. Defines the visitor function and panics when
-/// matching an unsupported operator.
+///    matching an unsupported operator.
 macro_rules! def_unsupported {
     ($( @$proposal:ident $op:ident $({ $($arg:ident: $argty:ty),* })? => $visit:ident)*) => {
         $(


Test patch:
diff --git a/cranelift/filetests/Cargo.toml b/cranelift/filetests/Cargo.toml
index 502b5ec78..74fd10e7b 100644
--- a/cranelift/filetests/Cargo.toml
+++ b/cranelift/filetests/Cargo.toml
@@ -8,6 +8,7 @@ documentation = "https://docs.rs/cranelift-filetests"
 repository = "https://github.com/bytecodealliance/wasmtime"
 publish = false
 edition.workspace = true
+rust-version.workspace = true
 
 [lints]
 workspace = true
diff --git a/cranelift/filetests/filetests/isa/s390x/vec-abi-128.clif b/cranelift/filetests/filetests/isa/s390x/vec-abi-128.clif
new file mode 100644
index 000000000..978a582e7
--- /dev/null
+++ b/cranelift/filetests/filetests/isa/s390x/vec-abi-128.clif
@@ -0,0 +1,267 @@
+test compile precise-output
+target s390x
+
+function %caller_be_to_be(i128) -> i128 {
+    fn0 = %callee_be(i128) -> i128
+
+block0(v0: i128):
+    v1 = call fn0(v0)
+    return v1
+}
+
+; VCode:
+;   stmg %r6, %r15, 48(%r15)
+;   aghi %r15, -192
+; block0:
+;   lgr %r6, %r2
+;   vl %v1, 0(%r3)
+;   vst %v1, 160(%r15)
+;   la %r3, 160(%r15)
+;   la %r2, 176(%r15)
+;   bras %r1, 12 ; data %callee_be + 0 ; lg %r4, 0(%r1)
+;   basr %r14, %r4
+;   vl %v20, 176(%r15)
+;   lgr %r2, %r6
+;   vst %v20, 0(%r2)
+;   lmg %r6, %r15, 240(%r15)
+;   br %r14
+;
+; Disassembled:
+; block0: ; offset 0x0
+;   stmg %r6, %r15, 0x30(%r15)
+;   aghi %r15, -0xc0
+; block1: ; offset 0xa
+;   lgr %r6, %r2
+;   vl %v1, 0(%r3)
+;   vst %v1, 0xa0(%r15)
+;   la %r3, 0xa0(%r15)
+;   la %r2, 0xb0(%r15)
+;   bras %r1, 0x2e
+;   .byte 0x00, 0x00 ; reloc_external Abs8 %callee_be 0
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   lg %r4, 0(%r1)
+;   basr %r14, %r4
+;   vl %v20, 0xb0(%r15)
+;   lgr %r2, %r6
+;   vst %v20, 0(%r2)
+;   lmg %r6, %r15, 0xf0(%r15)
+;   br %r14
+
+function %caller_be_to_le(i128) -> i128 {
+    fn0 = %callee_le(i128) -> i128 tail
+
+block0(v0: i128):
+    v1 = call fn0(v0)
+    return v1
+}
+
+; VCode:
+;   stmg %r6, %r15, 48(%r15)
+;   aghi %r15, -240
+;   std %f8, 176(%r15)
+;   std %f9, 184(%r15)
+;   std %f10, 192(%r15)
+;   std %f11, 200(%r15)
+;   std %f12, 208(%r15)
+;   std %f13, 216(%r15)
+;   std %f14, 224(%r15)
+;   std %f15, 232(%r15)
+; block0:
+;   lgr %r8, %r2
+;   vl %v1, 0(%r3)
+;   aghi %r15, -176
+;   vst %v1, 160(%r15)
+;   la %r3, 160(%r15)
+;   la %r2, 336(%r15)
+;   bras %r1, 12 ; data %callee_le + 0 ; lg %r4, 0(%r1)
+;   basr %r14, %r4 ; callee_pop_size 176
+;   vl %v21, 160(%r15)
+;   lgr %r2, %r8
+;   vst %v21, 0(%r2)
+;   ld %f8, 176(%r15)
+;   ld %f9, 184(%r15)
+;   ld %f10, 192(%r15)
+;   ld %f11, 200(%r15)
+;   ld %f12, 208(%r15)
+;   ld %f13, 216(%r15)
+;   ld %f14, 224(%r15)
+;   ld %f15, 232(%r15)
+;   lmg %r6, %r15, 288(%r15)
+;   br %r14
+;
+; Disassembled:
+; block0: ; offset 0x0
+;   stmg %r6, %r15, 0x30(%r15)
+;   aghi %r15, -0xf0
+;   std %f8, 0xb0(%r15)
+;   std %f9, 0xb8(%r15)
+;   std %f10, 0xc0(%r15)
+;   std %f11, 0xc8(%r15)
+;   std %f12, 0xd0(%r15)
+;   std %f13, 0xd8(%r15)
+;   std %f14, 0xe0(%r15)
+;   std %f15, 0xe8(%r15)
+; block1: ; offset 0x2a
+;   lgr %r8, %r2
+;   vl %v1, 0(%r3)
+;   aghi %r15, -0xb0
+;   vst %v1, 0xa0(%r15)
+;   la %r3, 0xa0(%r15)
+;   la %r2, 0x150(%r15)
+;   bras %r1, 0x52
+;   .byte 0x00, 0x00 ; reloc_external Abs8 %callee_le 0
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   lg %r4, 0(%r1)
+;   basr %r14, %r4
+;   vl %v21, 0xa0(%r15)
+;   lgr %r2, %r8
+;   vst %v21, 0(%r2)
+;   ld %f8, 0xb0(%r15)
+;   ld %f9, 0xb8(%r15)
+;   ld %f10, 0xc0(%r15)
+;   ld %f11, 0xc8(%r15)
+;   ld %f12, 0xd0(%r15)
+;   ld %f13, 0xd8(%r15)
+;   ld %f14, 0xe0(%r15)
+;   ld %f15, 0xe8(%r15)
+;   lmg %r6, %r15, 0x120(%r15)
+;   br %r14
+
+function %caller_le_to_be(i128) -> i128 tail {
+    fn0 = %callee_be(i128) -> i128
+
+block0(v0: i128):
+    v1 = call fn0(v0)
+    return v1
+}
+
+; VCode:
+;   stmg %r14, %r15, 288(%r15)
+;   aghi %r15, -256
+;   std %f8, 192(%r15)
+;   std %f9, 200(%r15)
+;   std %f10, 208(%r15)
+;   std %f11, 216(%r15)
+;   std %f12, 224(%r15)
+;   std %f13, 232(%r15)
+;   std %f14, 240(%r15)
+;   std %f15, 248(%r15)
+; block0:
+;   lgr %r6, %r2
+;   vl %v1, 0(%r3)
+;   vst %v1, 160(%r15)
+;   la %r3, 160(%r15)
+;   la %r2, 176(%r15)
+;   bras %r1, 12 ; data %callee_be + 0 ; lg %r5, 0(%r1)
+;   basr %r14, %r5
+;   vl %v20, 176(%r15)
+;   lgr %r2, %r6
+;   vst %v20, 0(%r2)
+;   ld %f8, 192(%r15)
+;   ld %f9, 200(%r15)
+;   ld %f10, 208(%r15)
+;   ld %f11, 216(%r15)
+;   ld %f12, 224(%r15)
+;   ld %f13, 232(%r15)
+;   ld %f14, 240(%r15)
+;   ld %f15, 248(%r15)
+;   aghi %r15, 432
+;   lmg %r14, %r14, 112(%r15)
+;   br %r14
+;
+; Disassembled:
+; block0: ; offset 0x0
+;   stmg %r14, %r15, 0x120(%r15)
+;   aghi %r15, -0x100
+;   std %f8, 0xc0(%r15)
+;   std %f9, 0xc8(%r15)
+;   std %f10, 0xd0(%r15)
+;   std %f11, 0xd8(%r15)
+;   std %f12, 0xe0(%r15)
+;   std %f13, 0xe8(%r15)
+;   std %f14, 0xf0(%r15)
+;   std %f15, 0xf8(%r15)
+; block1: ; offset 0x2a
+;   lgr %r6, %r2
+;   vl %v1, 0(%r3)
+;   vst %v1, 0xa0(%r15)
+;   la %r3, 0xa0(%r15)
+;   la %r2, 0xb0(%r15)
+;   bras %r1, 0x4e
+;   .byte 0x00, 0x00 ; reloc_external Abs8 %callee_be 0
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   lg %r5, 0(%r1)
+;   basr %r14, %r5
+;   vl %v20, 0xb0(%r15)
+;   lgr %r2, %r6
+;   vst %v20, 0(%r2)
+;   ld %f8, 0xc0(%r15)
+;   ld %f9, 0xc8(%r15)
+;   ld %f10, 0xd0(%r15)
+;   ld %f11, 0xd8(%r15)
+;   ld %f12, 0xe0(%r15)
+;   ld %f13, 0xe8(%r15)
+;   ld %f14, 0xf0(%r15)
+;   ld %f15, 0xf8(%r15)
+;   aghi %r15, 0x1b0
+;   lmg %r14, %r14, 0x70(%r15)
+;   br %r14
+
+function %caller_le_to_le(i128) -> i128 tail {
+    fn0 = %callee_le(i128) -> i128 tail
+
+block0(v0: i128):
+    v1 = call fn0(v0)
+    return v1
+}
+
+; VCode:
+;   stmg %r9, %r15, 248(%r15)
+;   aghi %r15, -176
+; block0:
+;   lgr %r9, %r2
+;   vl %v1, 0(%r3)
+;   aghi %r15, -176
+;   vst %v1, 160(%r15)
+;   la %r3, 160(%r15)
+;   la %r2, 336(%r15)
+;   bras %r1, 12 ; data %callee_le + 0 ; lg %r6, 0(%r1)
+;   basr %r14, %r6 ; callee_pop_size 176
+;   vl %v21, 160(%r15)
+;   lgr %r2, %r9
+;   vst %v21, 0(%r2)
+;   aghi %r15, 352
+;   lmg %r9, %r14, 72(%r15)
+;   br %r14
+;
+; Disassembled:
+; block0: ; offset 0x0
+;   stmg %r9, %r15, 0xf8(%r15)
+;   aghi %r15, -0xb0
+; block1: ; offset 0xa
+;   lgr %r9, %r2
+;   vl %v1, 0(%r3)
+;   aghi %r15, -0xb0
+;   vst %v1, 0xa0(%r15)
+;   la %r3, 0xa0(%r15)
+;   la %r2, 0x150(%r15)
+;   bras %r1, 0x32
+;   .byte 0x00, 0x00 ; reloc_external Abs8 %callee_le 0
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   .byte 0x00, 0x00
+;   lg %r6, 0(%r1)
+;   basr %r14, %r6
+;   vl %v21, 0xa0(%r15)
+;   lgr %r2, %r9
+;   vst %v21, 0(%r2)
+;   aghi %r15, 0x160
+;   lmg %r9, %r14, 0x48(%r15)
+;   br %r14
+
diff --git a/crates/component-macro/test-helpers/Cargo.toml b/crates/component-macro/test-helpers/Cargo.toml
index da543c919..03d2b1372 100644
--- a/crates/component-macro/test-helpers/Cargo.toml
+++ b/crates/component-macro/test-helpers/Cargo.toml
@@ -2,6 +2,7 @@
 name = "component-macro-test-helpers"
 version = "0.0.0"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 license = "Apache-2.0 WITH LLVM-exception"
 
diff --git a/crates/component-macro/tests/expanded/simple-wasi.rs b/crates/component-macro/tests/expanded/simple-wasi.rs
index b35cd47d4..247346794 100644
--- a/crates/component-macro/tests/expanded/simple-wasi.rs
+++ b/crates/component-macro/tests/expanded/simple-wasi.rs
@@ -114,6 +114,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum Errno {
                 #[component(name = "e")]
                 E,
diff --git a/crates/component-macro/tests/expanded/simple-wasi_async.rs b/crates/component-macro/tests/expanded/simple-wasi_async.rs
index 0d8706e7f..21887ae6b 100644
--- a/crates/component-macro/tests/expanded/simple-wasi_async.rs
+++ b/crates/component-macro/tests/expanded/simple-wasi_async.rs
@@ -121,6 +121,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum Errno {
                 #[component(name = "e")]
                 E,
diff --git a/crates/component-macro/tests/expanded/small-anonymous.rs b/crates/component-macro/tests/expanded/small-anonymous.rs
index 309b6b999..be5d84153 100644
--- a/crates/component-macro/tests/expanded/small-anonymous.rs
+++ b/crates/component-macro/tests/expanded/small-anonymous.rs
@@ -105,6 +105,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum Error {
                 #[component(name = "success")]
                 Success,
@@ -207,6 +208,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum Error {
                     #[component(name = "success")]
                     Success,
diff --git a/crates/component-macro/tests/expanded/small-anonymous_async.rs b/crates/component-macro/tests/expanded/small-anonymous_async.rs
index 2e4d950ed..a53f57452 100644
--- a/crates/component-macro/tests/expanded/small-anonymous_async.rs
+++ b/crates/component-macro/tests/expanded/small-anonymous_async.rs
@@ -112,6 +112,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum Error {
                 #[component(name = "success")]
                 Success,
@@ -220,6 +221,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum Error {
                     #[component(name = "success")]
                     Success,
diff --git a/crates/component-macro/tests/expanded/variants.rs b/crates/component-macro/tests/expanded/variants.rs
index 6ef1217a7..0b5a684ae 100644
--- a/crates/component-macro/tests/expanded/variants.rs
+++ b/crates/component-macro/tests/expanded/variants.rs
@@ -105,6 +105,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum E1 {
                 #[component(name = "a")]
                 A,
@@ -313,6 +314,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum MyErrno {
                 #[component(name = "bad1")]
                 Bad1,
@@ -846,6 +848,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum E1 {
                     #[component(name = "a")]
                     A,
@@ -1109,6 +1112,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum MyErrno {
                     #[component(name = "bad1")]
                     Bad1,
diff --git a/crates/component-macro/tests/expanded/variants_async.rs b/crates/component-macro/tests/expanded/variants_async.rs
index a5b16f188..eada61a58 100644
--- a/crates/component-macro/tests/expanded/variants_async.rs
+++ b/crates/component-macro/tests/expanded/variants_async.rs
@@ -112,6 +112,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum E1 {
                 #[component(name = "a")]
                 A,
@@ -320,6 +321,7 @@ pub mod foo {
             #[derive(wasmtime::component::Lower)]
             #[component(enum)]
             #[derive(Clone, Copy, Eq, PartialEq)]
+            #[repr(u8)]
             pub enum MyErrno {
                 #[component(name = "bad1")]
                 Bad1,
@@ -862,6 +864,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum E1 {
                     #[component(name = "a")]
                     A,
@@ -1125,6 +1128,7 @@ pub mod exports {
                 #[derive(wasmtime::component::Lower)]
                 #[component(enum)]
                 #[derive(Clone, Copy, Eq, PartialEq)]
+                #[repr(u8)]
                 pub enum MyErrno {
                     #[component(name = "bad1")]
                     Bad1,
diff --git a/crates/misc/component-macro-test/Cargo.toml b/crates/misc/component-macro-test/Cargo.toml
index 35e29dd51..5bc71a5fd 100644
--- a/crates/misc/component-macro-test/Cargo.toml
+++ b/crates/misc/component-macro-test/Cargo.toml
@@ -4,6 +4,7 @@ authors = ["The Wasmtime Project Developers"]
 license = "Apache-2.0 WITH LLVM-exception"
 version = "0.0.0"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [lib]
diff --git a/crates/misc/component-test-util/Cargo.toml b/crates/misc/component-test-util/Cargo.toml
index 840a23234..181a2f4e3 100644
--- a/crates/misc/component-test-util/Cargo.toml
+++ b/crates/misc/component-test-util/Cargo.toml
@@ -4,6 +4,7 @@ authors = ["The Wasmtime Project Developers"]
 license = "Apache-2.0 WITH LLVM-exception"
 version = "0.0.0"
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 
 [dependencies]
diff --git a/crates/test-programs/Cargo.toml b/crates/test-programs/Cargo.toml
index eae086c8a..baff3bba8 100644
--- a/crates/test-programs/Cargo.toml
+++ b/crates/test-programs/Cargo.toml
@@ -3,6 +3,7 @@ name = "test-programs"
 version = "0.0.0"
 authors = ["The Wasmtime Project Developers"]
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 license = "Apache-2.0 WITH LLVM-exception"
 
diff --git a/crates/test-programs/artifacts/Cargo.toml b/crates/test-programs/artifacts/Cargo.toml
index 614f6a7ab..40cc3a7bd 100644
--- a/crates/test-programs/artifacts/Cargo.toml
+++ b/crates/test-programs/artifacts/Cargo.toml
@@ -3,6 +3,7 @@ name = "test-programs-artifacts"
 version = "0.0.0"
 authors = ["The Wasmtime Project Developers"]
 edition.workspace = true
+rust-version.workspace = true
 publish = false
 license = "Apache-2.0 WITH LLVM-exception"
 
diff --git a/crates/test-programs/src/lib.rs b/crates/test-programs/src/lib.rs
index 9b5d8f8d9..f7931273d 100644
--- a/crates/test-programs/src/lib.rs
+++ b/crates/test-programs/src/lib.rs
@@ -9,10 +9,9 @@ wit_bindgen::generate!({
 
         world test {
             include wasi:cli/imports@0.2.1;
+            include wasi:http/imports@0.2.1;
             include wasi:config/imports@0.2.0-draft;
             include wasi:keyvalue/imports@0.2.0-draft;
-            import wasi:http/types@0.2.1;
-            import wasi:http/outgoing-handler@0.2.1;
         }
     ",
     path: [
diff --git a/crates/wiggle/test-helpers/Cargo.toml b/crates/wiggle/test-helpers/Cargo.toml
index 5f81b6022..df2212e5f 100644
--- a/crates/wiggle/test-helpers/Cargo.toml
+++ b/crates/wiggle/test-helpers/Cargo.toml
@@ -4,6 +4,7 @@ version = "0.0.0"
 authors = ["Pat Hickey <phickey@fastly.com>", "Jakub Konka <kubkon@jakubkonka.com>", "Alex Crichton <alex@alexcrichton.com>"]
 license = "Apache-2.0 WITH LLVM-exception"
 edition.workspace = true
+rust-version.workspace = true
 description = "Reusable testing components for wiggle code generator. Only intended to be used by tests in `wiggle` crate."
 categories = ["wasm"]
 keywords = ["webassembly", "wasm"]
diff --git a/crates/wiggle/tests/lists.rs b/crates/wiggle/tests/lists.rs
index a21c703cb..44e4958a6 100644
--- a/crates/wiggle/tests/lists.rs
+++ b/crates/wiggle/tests/lists.rs
@@ -44,14 +44,14 @@ impl<'a> lists::Lists for WasiCtx<'a> {
 }
 
 #[derive(Debug)]
-struct ReduceExcusesExcercise {
+struct ReduceExcusesExercise {
     excuse_values: Vec<types::Excuse>,
     excuse_ptr_locs: Vec<MemArea>,
     array_ptr_loc: MemArea,
     return_ptr_loc: MemArea,
 }
 
-impl ReduceExcusesExcercise {
+impl ReduceExcusesExercise {
     pub fn strat() -> BoxedStrategy<Self> {
         (1..256u32)
             .prop_flat_map(|len| {
@@ -126,7 +126,7 @@ impl ReduceExcusesExcercise {
 }
 proptest! {
     #[test]
-    fn reduce_excuses(e in ReduceExcusesExcercise::strat()) {
+    fn reduce_excuses(e in ReduceExcusesExercise::strat()) {
         e.test()
     }
 }
@@ -141,12 +141,12 @@ fn excuse_strat() -> impl Strategy<Value = types::Excuse> {
 }
 
 #[derive(Debug)]
-struct PopulateExcusesExcercise {
+struct PopulateExcusesExercise {
     array_ptr_loc: MemArea,
     elements: Vec<MemArea>,
 }
 
-impl PopulateExcusesExcercise {
+impl PopulateExcusesExercise {
     pub fn strat() -> BoxedStrategy<Self> {
         (1..256u32)
             .prop_flat_map(|len| {
@@ -214,7 +214,7 @@ impl PopulateExcusesExcercise {
 }
 proptest! {
     #[test]
-    fn populate_excuses(e in PopulateExcusesExcercise::strat()) {
+    fn populate_excuses(e in PopulateExcusesExercise::strat()) {
         e.test()
     }
 }
diff --git a/tests/all/component_model/macros.rs b/tests/all/component_model/macros.rs
index a7b9726ca..9e7dc5038 100644
--- a/tests/all/component_model/macros.rs
+++ b/tests/all/component_model/macros.rs
@@ -236,6 +236,7 @@ fn variant_derive() -> Result<()> {
 fn enum_derive() -> Result<()> {
     #[derive(ComponentType, Lift, Lower, PartialEq, Eq, Debug, Copy, Clone)]
     #[component(enum)]
+    #[repr(u8)]
     enum Foo {
         #[component(name = "foo-bar-baz")]
         A,
@@ -299,6 +300,7 @@ fn enum_derive() -> Result<()> {
     #[add_variants(257)]
     #[derive(ComponentType, Lift, Lower, PartialEq, Eq, Debug, Copy, Clone)]
     #[component(enum)]
+    #[repr(u16)]
     enum Many {}
 
     let component = Component::new(
@@ -330,6 +332,7 @@ fn enum_derive() -> Result<()> {
     // #[add_variants(65537)]
     // #[derive(ComponentType, Lift, Lower, PartialEq, Eq, Debug, Copy, Clone)]
     // #[component(enum)]
+    // #[repr(u32)]
     // enum ManyMore {}
 
     Ok(())
diff --git a/tests/all/debug/obj.rs b/tests/all/debug/obj.rs
index d83edad19..e44677c83 100644
--- a/tests/all/debug/obj.rs
+++ b/tests/all/debug/obj.rs
@@ -3,10 +3,11 @@ use std::fs::File;
 use std::io::Write;
 use std::path::Path;
 use target_lexicon::Triple;
-use wasmtime::{Config, Engine, Module};
+use wasmtime::{CodeBuilder, Config, Engine};
 
 pub fn compile_cranelift(
     wasm: &[u8],
+    path: Option<&Path>,
     target: Option<Triple>,
     output: impl AsRef<Path>,
 ) -> Result<()> {
@@ -16,7 +17,9 @@ pub fn compile_cranelift(
         config.target(&target.to_string())?;
     }
     let engine = Engine::new(&config)?;
-    let module = Module::new(&engine, wasm)?;
+    let module = CodeBuilder::new(&engine)
+        .wasm(wasm, path)?
+        .compile_module()?;
     let bytes = module.serialize()?;
 
     let mut file = File::create(output).context("failed to create object file")?;
diff --git a/tests/all/debug/simulate.rs b/tests/all/debug/simulate.rs
index 4ed9f9847..10571e35f 100644
--- a/tests/all/debug/simulate.rs
+++ b/tests/all/debug/simulate.rs
@@ -10,7 +10,7 @@ fn check_wat(wat: &str) -> Result<()> {
     let wasm = parse_str(wat)?;
     let obj_file = NamedTempFile::new()?;
     let obj_path = obj_file.path().to_str().unwrap();
-    compile_cranelift(&wasm, None, obj_path)?;
+    compile_cranelift(&wasm, None, None, obj_path)?;
     let dump = get_dwarfdump(obj_path, DwarfDumpSection::DebugInfo)?;
     let mut builder = CheckerBuilder::new();
     builder
diff --git a/tests/all/debug/translate.rs b/tests/all/debug/translate.rs
index 4e72dcd39..321c871a8 100644
--- a/tests/all/debug/translate.rs
+++ b/tests/all/debug/translate.rs
@@ -10,7 +10,7 @@ fn check_wasm(wasm_path: &str, directives: &str) -> Result<()> {
     let wasm = read(wasm_path)?;
     let obj_file = NamedTempFile::new()?;
     let obj_path = obj_file.path().to_str().unwrap();
-    compile_cranelift(&wasm, None, obj_path)?;
+    compile_cranelift(&wasm, Some(wasm_path.as_ref()), None, obj_path)?;
     let dump = get_dwarfdump(obj_path, DwarfDumpSection::DebugInfo)?;
     let mut builder = CheckerBuilder::new();
     builder
@@ -29,7 +29,7 @@ fn check_line_program(wasm_path: &str, directives: &str) -> Result<()> {
     let wasm = read(wasm_path)?;
     let obj_file = NamedTempFile::new()?;
     let obj_path = obj_file.path().to_str().unwrap();
-    compile_cranelift(&wasm, None, obj_path)?;
+    compile_cranelift(&wasm, Some(wasm_path.as_ref()), None, obj_path)?;
     let dump = get_dwarfdump(obj_path, DwarfDumpSection::DebugLine)?;
     let mut builder = CheckerBuilder::new();
     builder
@@ -132,3 +132,44 @@ check:        DW_AT_decl_line	(10)
     "##,
     )
 }
+
+#[test]
+#[ignore]
+#[cfg(all(
+    any(target_os = "linux", target_os = "macos"),
+    target_pointer_width = "64"
+))]
+fn test_debug_dwarf_translate_generated() -> Result<()> {
+    check_wasm(
+        "tests/all/debug/testsuite/fraction-norm.wasm",
+        r##"
+check: DW_TAG_compile_unit
+check: DW_TAG_compile_unit
+check:   DW_AT_producer	("wasmtime")
+check:   DW_AT_name	("<gen-$(=\d+)>.wasm")
+check:   DW_AT_comp_dir	("/<wasm-module>")
+check:   DW_TAG_subprogram
+check:     DW_AT_name	("__wasm_call_ctors")
+check:     DW_AT_decl_file	("/<wasm-module>/<gen-$(=\d+)>.wasm")
+check:     DW_AT_decl_line	(124)
+    "##,
+    )
+}
+
+#[test]
+#[ignore]
+#[cfg(all(
+    any(target_os = "linux", target_os = "macos"),
+    target_pointer_width = "64"
+))]
+fn test_debug_dwarf_translate_fission() -> Result<()> {
+    check_wasm(
+        "tests/all/debug/testsuite/dwarf_fission.wasm",
+        r##"
+check: DW_TAG_compile_unit
+check:   DW_AT_producer	("clang version 19.0.0git (https:/github.com/llvm/llvm-project ccdebbae4d77d3efc236af92c22941de5d437e01)")
+check:   DW_AT_language	(DW_LANG_C11)
+check:   DW_AT_name	("dwarf_fission.c")
+    "##,
+    )
+}
diff --git a/tests/disas/winch/aarch64/f32_abs/f32_abs_param.wat b/tests/disas/winch/aarch64/f32_abs/f32_abs_param.wat
index e798ed68f..2486629e0 100644
--- a/tests/disas/winch/aarch64/f32_abs/f32_abs_param.wat
+++ b/tests/disas/winch/aarch64/f32_abs/f32_abs_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       fabs    s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_add/locals.wat b/tests/disas/winch/aarch64/f32_add/locals.wat
index 63aaa278f..602657d81 100644
--- a/tests/disas/winch/aarch64/f32_add/locals.wat
+++ b/tests/disas/winch/aarch64/f32_add/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fadd    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_add/params.wat b/tests/disas/winch/aarch64/f32_add/params.wat
index ace7d94db..a94b2ede0 100644
--- a/tests/disas/winch/aarch64/f32_add/params.wat
+++ b/tests/disas/winch/aarch64/f32_add/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fadd    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_ceil/f32_ceil_param.wat b/tests/disas/winch/aarch64/f32_ceil/f32_ceil_param.wat
index b60ee329c..9dcdf4215 100644
--- a/tests/disas/winch/aarch64/f32_ceil/f32_ceil_param.wat
+++ b/tests/disas/winch/aarch64/f32_ceil/f32_ceil_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       frintp  s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_copysign/locals.wat b/tests/disas/winch/aarch64/f32_copysign/locals.wat
index 140e7ece6..59a6811de 100644
--- a/tests/disas/winch/aarch64/f32_copysign/locals.wat
+++ b/tests/disas/winch/aarch64/f32_copysign/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0xbf8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       ushr    v0.2s, v0.2s, #0x1f
 ;;       sli     v1.2s, v0.2s, #0x1f
 ;;       fmov    s0, s1
diff --git a/tests/disas/winch/aarch64/f32_copysign/params.wat b/tests/disas/winch/aarch64/f32_copysign/params.wat
index 5d99cddc3..120b363dd 100644
--- a/tests/disas/winch/aarch64/f32_copysign/params.wat
+++ b/tests/disas/winch/aarch64/f32_copysign/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       ushr    v0.2s, v0.2s, #0x1f
 ;;       sli     v1.2s, v0.2s, #0x1f
 ;;       fmov    s0, s1
diff --git a/tests/disas/winch/aarch64/f32_div/locals.wat b/tests/disas/winch/aarch64/f32_div/locals.wat
index 176410a96..8d467e5c3 100644
--- a/tests/disas/winch/aarch64/f32_div/locals.wat
+++ b/tests/disas/winch/aarch64/f32_div/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fdiv    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_div/params.wat b/tests/disas/winch/aarch64/f32_div/params.wat
index 2a078e781..e3dc8d6ed 100644
--- a/tests/disas/winch/aarch64/f32_div/params.wat
+++ b/tests/disas/winch/aarch64/f32_div/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fdiv    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_eq/locals.wat b/tests/disas/winch/aarch64/f32_eq/locals.wat
index 9c476d63c..2b6acca02 100644
--- a/tests/disas/winch/aarch64/f32_eq/locals.wat
+++ b/tests/disas/winch/aarch64/f32_eq/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0x40000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0x40400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, eq
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_eq/params.wat b/tests/disas/winch/aarch64/f32_eq/params.wat
index 047564a13..7cdf60228 100644
--- a/tests/disas/winch/aarch64/f32_eq/params.wat
+++ b/tests/disas/winch/aarch64/f32_eq/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, eq
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_floor/f32_floor_param.wat b/tests/disas/winch/aarch64/f32_floor/f32_floor_param.wat
index f850d6b29..367b76e34 100644
--- a/tests/disas/winch/aarch64/f32_floor/f32_floor_param.wat
+++ b/tests/disas/winch/aarch64/f32_floor/f32_floor_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       frintm  s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_ge/locals.wat b/tests/disas/winch/aarch64/f32_ge/locals.wat
index 1533fac1f..7fb8d52d8 100644
--- a/tests/disas/winch/aarch64/f32_ge/locals.wat
+++ b/tests/disas/winch/aarch64/f32_ge/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0xc0000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0xc0400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ge
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_ge/params.wat b/tests/disas/winch/aarch64/f32_ge/params.wat
index 91c65190c..261a7b9e9 100644
--- a/tests/disas/winch/aarch64/f32_ge/params.wat
+++ b/tests/disas/winch/aarch64/f32_ge/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ge
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_gt/locals.wat b/tests/disas/winch/aarch64/f32_gt/locals.wat
index 0e7618281..08f85ea12 100644
--- a/tests/disas/winch/aarch64/f32_gt/locals.wat
+++ b/tests/disas/winch/aarch64/f32_gt/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0xc0000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0xc0400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, gt
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_gt/params.wat b/tests/disas/winch/aarch64/f32_gt/params.wat
index 7199a69f0..8f879b802 100644
--- a/tests/disas/winch/aarch64/f32_gt/params.wat
+++ b/tests/disas/winch/aarch64/f32_gt/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, gt
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_le/locals.wat b/tests/disas/winch/aarch64/f32_le/locals.wat
index dad996edd..f00c4f424 100644
--- a/tests/disas/winch/aarch64/f32_le/locals.wat
+++ b/tests/disas/winch/aarch64/f32_le/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0xc0000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0xc0400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ls
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_le/params.wat b/tests/disas/winch/aarch64/f32_le/params.wat
index 4960aba8d..9928d133b 100644
--- a/tests/disas/winch/aarch64/f32_le/params.wat
+++ b/tests/disas/winch/aarch64/f32_le/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ls
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_lt/locals.wat b/tests/disas/winch/aarch64/f32_lt/locals.wat
index 55f0a3d9d..58c3b3f49 100644
--- a/tests/disas/winch/aarch64/f32_lt/locals.wat
+++ b/tests/disas/winch/aarch64/f32_lt/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0xc0000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0xc0400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, mi
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_lt/params.wat b/tests/disas/winch/aarch64/f32_lt/params.wat
index 9fec9b627..56f31d238 100644
--- a/tests/disas/winch/aarch64/f32_lt/params.wat
+++ b/tests/disas/winch/aarch64/f32_lt/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, mi
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_max/locals.wat b/tests/disas/winch/aarch64/f32_max/locals.wat
index fb5d60d2f..2570965c0 100644
--- a/tests/disas/winch/aarch64/f32_max/locals.wat
+++ b/tests/disas/winch/aarch64/f32_max/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmax    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_max/params.wat b/tests/disas/winch/aarch64/f32_max/params.wat
index 95a4e7956..5333168e4 100644
--- a/tests/disas/winch/aarch64/f32_max/params.wat
+++ b/tests/disas/winch/aarch64/f32_max/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmax    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_min/locals.wat b/tests/disas/winch/aarch64/f32_min/locals.wat
index ad226572a..dcab615fc 100644
--- a/tests/disas/winch/aarch64/f32_min/locals.wat
+++ b/tests/disas/winch/aarch64/f32_min/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmin    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_min/params.wat b/tests/disas/winch/aarch64/f32_min/params.wat
index 8356e0195..988a5b4d4 100644
--- a/tests/disas/winch/aarch64/f32_min/params.wat
+++ b/tests/disas/winch/aarch64/f32_min/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmin    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_mul/locals.wat b/tests/disas/winch/aarch64/f32_mul/locals.wat
index f6fb9930a..9f05bc2cd 100644
--- a/tests/disas/winch/aarch64/f32_mul/locals.wat
+++ b/tests/disas/winch/aarch64/f32_mul/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmul    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_mul/params.wat b/tests/disas/winch/aarch64/f32_mul/params.wat
index 43a411c7d..56aeec8f4 100644
--- a/tests/disas/winch/aarch64/f32_mul/params.wat
+++ b/tests/disas/winch/aarch64/f32_mul/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fmul    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_ne/locals.wat b/tests/disas/winch/aarch64/f32_ne/locals.wat
index 3dbe3c39c..29c35514d 100644
--- a/tests/disas/winch/aarch64/f32_ne/locals.wat
+++ b/tests/disas/winch/aarch64/f32_ne/locals.wat
@@ -30,12 +30,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0x40000000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     x16, #0x40400000
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ne
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_ne/params.wat b/tests/disas/winch/aarch64/f32_ne/params.wat
index aad8f7fad..5da87b1ea 100644
--- a/tests/disas/winch/aarch64/f32_ne/params.wat
+++ b/tests/disas/winch/aarch64/f32_ne/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fcmp    s0, s1
 ;;       cset    x0, ne
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_nearest/f32_nearest_param.wat b/tests/disas/winch/aarch64/f32_nearest/f32_nearest_param.wat
index fe716327d..a2a5ab26b 100644
--- a/tests/disas/winch/aarch64/f32_nearest/f32_nearest_param.wat
+++ b/tests/disas/winch/aarch64/f32_nearest/f32_nearest_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       frintn  s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_neg/f32_neg_param.wat b/tests/disas/winch/aarch64/f32_neg/f32_neg_param.wat
index 24d6548bb..b2477edca 100644
--- a/tests/disas/winch/aarch64/f32_neg/f32_neg_param.wat
+++ b/tests/disas/winch/aarch64/f32_neg/f32_neg_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       fneg    s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_sqrt/f32_sqrt_param.wat b/tests/disas/winch/aarch64/f32_sqrt/f32_sqrt_param.wat
index 9c1e4c4f8..426da3f07 100644
--- a/tests/disas/winch/aarch64/f32_sqrt/f32_sqrt_param.wat
+++ b/tests/disas/winch/aarch64/f32_sqrt/f32_sqrt_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       fsqrt   s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f32_sub/locals.wat b/tests/disas/winch/aarch64/f32_sub/locals.wat
index 97992b849..5db3c4410 100644
--- a/tests/disas/winch/aarch64/f32_sub/locals.wat
+++ b/tests/disas/winch/aarch64/f32_sub/locals.wat
@@ -31,13 +31,13 @@
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x3f8c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
 ;;       mov     w16, #0xcccd
 ;;       movk    w16, #0x400c, lsl #16
 ;;       fmov    s0, w16
-;;       stur    w0, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fsub    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_sub/params.wat b/tests/disas/winch/aarch64/f32_sub/params.wat
index e12c65231..079cef501 100644
--- a/tests/disas/winch/aarch64/f32_sub/params.wat
+++ b/tests/disas/winch/aarch64/f32_sub/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       stur    w1, [x28]
-;;       ldur    w0, [x28]
-;;       ldur    w1, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       stur    s1, [x28]
+;;       ldur    s0, [x28]
+;;       ldur    s1, [x28, #4]
 ;;       fsub    s1, s1, s0
 ;;       fmov    s0, s1
 ;;       add     sp, sp, #0x18
diff --git a/tests/disas/winch/aarch64/f32_trunc/f32_trunc_param.wat b/tests/disas/winch/aarch64/f32_trunc/f32_trunc_param.wat
index 3df3e3b03..8609a5ce4 100644
--- a/tests/disas/winch/aarch64/f32_trunc/f32_trunc_param.wat
+++ b/tests/disas/winch/aarch64/f32_trunc/f32_trunc_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    w0, [x28, #4]
-;;       ldur    w0, [x28, #4]
+;;       stur    s0, [x28, #4]
+;;       ldur    s0, [x28, #4]
 ;;       frintz  s0, s0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_abs/f64_abs_param.wat b/tests/disas/winch/aarch64/f64_abs/f64_abs_param.wat
index bbc7d51ea..2b56f5586 100644
--- a/tests/disas/winch/aarch64/f64_abs/f64_abs_param.wat
+++ b/tests/disas/winch/aarch64/f64_abs/f64_abs_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       fabs    d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_add/locals.wat b/tests/disas/winch/aarch64/f64_add/locals.wat
index d3dde833e..12011b318 100644
--- a/tests/disas/winch/aarch64/f64_add/locals.wat
+++ b/tests/disas/winch/aarch64/f64_add/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fadd    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_add/params.wat b/tests/disas/winch/aarch64/f64_add/params.wat
index 005a6d463..5e1ee9e0d 100644
--- a/tests/disas/winch/aarch64/f64_add/params.wat
+++ b/tests/disas/winch/aarch64/f64_add/params.wat
@@ -17,13 +17,13 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fadd    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
 ;;       mov     x28, sp
 ;;       ldp     x29, x30, [sp], #0x10
-;;       ret
\ No newline at end of file
+;;       ret
diff --git a/tests/disas/winch/aarch64/f64_ceil/f64_ceil_param.wat b/tests/disas/winch/aarch64/f64_ceil/f64_ceil_param.wat
index 8a4b391ce..05d472d44 100644
--- a/tests/disas/winch/aarch64/f64_ceil/f64_ceil_param.wat
+++ b/tests/disas/winch/aarch64/f64_ceil/f64_ceil_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       frintp  d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_copysign/locals.wat b/tests/disas/winch/aarch64/f64_copysign/locals.wat
index dc659515b..a57c206af 100644
--- a/tests/disas/winch/aarch64/f64_copysign/locals.wat
+++ b/tests/disas/winch/aarch64/f64_copysign/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0xbff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       ushr    d0, d0, #0x3f
 ;;       sli     d1, d0, #0x3f
 ;;       fmov    d0, d1
diff --git a/tests/disas/winch/aarch64/f64_copysign/params.wat b/tests/disas/winch/aarch64/f64_copysign/params.wat
index 271aa6d33..acc24a9f3 100644
--- a/tests/disas/winch/aarch64/f64_copysign/params.wat
+++ b/tests/disas/winch/aarch64/f64_copysign/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       ushr    d0, d0, #0x3f
 ;;       sli     d1, d0, #0x3f
 ;;       fmov    d0, d1
diff --git a/tests/disas/winch/aarch64/f64_div/locals.wat b/tests/disas/winch/aarch64/f64_div/locals.wat
index 0f3871692..b340a8972 100644
--- a/tests/disas/winch/aarch64/f64_div/locals.wat
+++ b/tests/disas/winch/aarch64/f64_div/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fdiv    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_div/params.wat b/tests/disas/winch/aarch64/f64_div/params.wat
index 8abb587b4..d23cce7a2 100644
--- a/tests/disas/winch/aarch64/f64_div/params.wat
+++ b/tests/disas/winch/aarch64/f64_div/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fdiv    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_eq/locals.wat b/tests/disas/winch/aarch64/f64_eq/locals.wat
index 919749f72..5411e9aff 100644
--- a/tests/disas/winch/aarch64/f64_eq/locals.wat
+++ b/tests/disas/winch/aarch64/f64_eq/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x4008000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, eq
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_eq/params.wat b/tests/disas/winch/aarch64/f64_eq/params.wat
index c590cd3a6..a94b7c04d 100644
--- a/tests/disas/winch/aarch64/f64_eq/params.wat
+++ b/tests/disas/winch/aarch64/f64_eq/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, eq
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_floor/f64_floor_param.wat b/tests/disas/winch/aarch64/f64_floor/f64_floor_param.wat
index 819933f78..b17ef0572 100644
--- a/tests/disas/winch/aarch64/f64_floor/f64_floor_param.wat
+++ b/tests/disas/winch/aarch64/f64_floor/f64_floor_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       frintm  d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_ge/locals.wat b/tests/disas/winch/aarch64/f64_ge/locals.wat
index 65b547f98..1f03d6958 100644
--- a/tests/disas/winch/aarch64/f64_ge/locals.wat
+++ b/tests/disas/winch/aarch64/f64_ge/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #-0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #-0x3ff8000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ge
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_ge/params.wat b/tests/disas/winch/aarch64/f64_ge/params.wat
index f519ff4dd..cc013f8f7 100644
--- a/tests/disas/winch/aarch64/f64_ge/params.wat
+++ b/tests/disas/winch/aarch64/f64_ge/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ge
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_gt/locals.wat b/tests/disas/winch/aarch64/f64_gt/locals.wat
index 078e4c75d..03b9ba36b 100644
--- a/tests/disas/winch/aarch64/f64_gt/locals.wat
+++ b/tests/disas/winch/aarch64/f64_gt/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #-0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #-0x3ff8000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, gt
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_gt/params.wat b/tests/disas/winch/aarch64/f64_gt/params.wat
index 9d1636585..5d5936cf0 100644
--- a/tests/disas/winch/aarch64/f64_gt/params.wat
+++ b/tests/disas/winch/aarch64/f64_gt/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, gt
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_le/locals.wat b/tests/disas/winch/aarch64/f64_le/locals.wat
index d3287fcc1..92d5cfc1e 100644
--- a/tests/disas/winch/aarch64/f64_le/locals.wat
+++ b/tests/disas/winch/aarch64/f64_le/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #-0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #-0x3ff8000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ls
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_le/params.wat b/tests/disas/winch/aarch64/f64_le/params.wat
index 52143045c..12a28272f 100644
--- a/tests/disas/winch/aarch64/f64_le/params.wat
+++ b/tests/disas/winch/aarch64/f64_le/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ls
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_lt/locals.wat b/tests/disas/winch/aarch64/f64_lt/locals.wat
index ef8e2bd8e..706d3bbc6 100644
--- a/tests/disas/winch/aarch64/f64_lt/locals.wat
+++ b/tests/disas/winch/aarch64/f64_lt/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #-0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #-0x3ff8000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, mi
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_lt/params.wat b/tests/disas/winch/aarch64/f64_lt/params.wat
index c4d06e407..5866d149f 100644
--- a/tests/disas/winch/aarch64/f64_lt/params.wat
+++ b/tests/disas/winch/aarch64/f64_lt/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, mi
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_max/locals.wat b/tests/disas/winch/aarch64/f64_max/locals.wat
index b6f97551b..4c74c88bb 100644
--- a/tests/disas/winch/aarch64/f64_max/locals.wat
+++ b/tests/disas/winch/aarch64/f64_max/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmax    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_max/params.wat b/tests/disas/winch/aarch64/f64_max/params.wat
index 19e25cf32..af51424b4 100644
--- a/tests/disas/winch/aarch64/f64_max/params.wat
+++ b/tests/disas/winch/aarch64/f64_max/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmax    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_min/locals.wat b/tests/disas/winch/aarch64/f64_min/locals.wat
index 15aa9ddeb..125d2fde8 100644
--- a/tests/disas/winch/aarch64/f64_min/locals.wat
+++ b/tests/disas/winch/aarch64/f64_min/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmin    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_min/params.wat b/tests/disas/winch/aarch64/f64_min/params.wat
index 1738beed4..a82749644 100644
--- a/tests/disas/winch/aarch64/f64_min/params.wat
+++ b/tests/disas/winch/aarch64/f64_min/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmin    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_mul/locals.wat b/tests/disas/winch/aarch64/f64_mul/locals.wat
index b7d5a5ebe..e5f07b489 100644
--- a/tests/disas/winch/aarch64/f64_mul/locals.wat
+++ b/tests/disas/winch/aarch64/f64_mul/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmul    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_mul/params.wat b/tests/disas/winch/aarch64/f64_mul/params.wat
index 17e258ac9..0c6ddc1ac 100644
--- a/tests/disas/winch/aarch64/f64_mul/params.wat
+++ b/tests/disas/winch/aarch64/f64_mul/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fmul    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_ne/locals.wat b/tests/disas/winch/aarch64/f64_ne/locals.wat
index df26293df..3dad452c3 100644
--- a/tests/disas/winch/aarch64/f64_ne/locals.wat
+++ b/tests/disas/winch/aarch64/f64_ne/locals.wat
@@ -31,12 +31,12 @@
 ;;       stur    x16, [x28]
 ;;       mov     x16, #0x4000000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x4008000000000000
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ne
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_ne/params.wat b/tests/disas/winch/aarch64/f64_ne/params.wat
index 5aeb7e6ee..93965d901 100644
--- a/tests/disas/winch/aarch64/f64_ne/params.wat
+++ b/tests/disas/winch/aarch64/f64_ne/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fcmp    d0, d1
 ;;       cset    x0, ne
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_nearest/f64_nearest_param.wat b/tests/disas/winch/aarch64/f64_nearest/f64_nearest_param.wat
index d83cd32ee..9ba4184d4 100644
--- a/tests/disas/winch/aarch64/f64_nearest/f64_nearest_param.wat
+++ b/tests/disas/winch/aarch64/f64_nearest/f64_nearest_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       frintn  d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_neg/f64_neg_param.wat b/tests/disas/winch/aarch64/f64_neg/f64_neg_param.wat
index 07bcc1a0c..64098dfaa 100644
--- a/tests/disas/winch/aarch64/f64_neg/f64_neg_param.wat
+++ b/tests/disas/winch/aarch64/f64_neg/f64_neg_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       fneg    d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_sqrt/f64_sqrt_param.wat b/tests/disas/winch/aarch64/f64_sqrt/f64_sqrt_param.wat
index a1e9002e9..a9edc57ce 100644
--- a/tests/disas/winch/aarch64/f64_sqrt/f64_sqrt_param.wat
+++ b/tests/disas/winch/aarch64/f64_sqrt/f64_sqrt_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       fsqrt   d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/f64_sub/locals.wat b/tests/disas/winch/aarch64/f64_sub/locals.wat
index dd21ce0a2..f6eb2c9e9 100644
--- a/tests/disas/winch/aarch64/f64_sub/locals.wat
+++ b/tests/disas/winch/aarch64/f64_sub/locals.wat
@@ -34,15 +34,15 @@
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x3ff1, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28, #8]
+;;       stur    d0, [x28, #8]
 ;;       mov     x16, #0x999a
 ;;       movk    x16, #0x9999, lsl #16
 ;;       movk    x16, #0x9999, lsl #32
 ;;       movk    x16, #0x4001, lsl #48
 ;;       fmov    d0, x16
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fsub    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_sub/params.wat b/tests/disas/winch/aarch64/f64_sub/params.wat
index 236655df0..200711aa3 100644
--- a/tests/disas/winch/aarch64/f64_sub/params.wat
+++ b/tests/disas/winch/aarch64/f64_sub/params.wat
@@ -17,10 +17,10 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x18]
 ;;       stur    x1, [x28, #0x10]
-;;       stur    x0, [x28, #8]
-;;       stur    x1, [x28]
-;;       ldur    x0, [x28]
-;;       ldur    x1, [x28, #8]
+;;       stur    d0, [x28, #8]
+;;       stur    d1, [x28]
+;;       ldur    d0, [x28]
+;;       ldur    d1, [x28, #8]
 ;;       fsub    d1, d1, d0
 ;;       fmov    d0, d1
 ;;       add     sp, sp, #0x20
diff --git a/tests/disas/winch/aarch64/f64_trunc/f64_trunc_param.wat b/tests/disas/winch/aarch64/f64_trunc/f64_trunc_param.wat
index 6089eefc1..726f4e040 100644
--- a/tests/disas/winch/aarch64/f64_trunc/f64_trunc_param.wat
+++ b/tests/disas/winch/aarch64/f64_trunc/f64_trunc_param.wat
@@ -16,8 +16,8 @@
 ;;       mov     x28, sp
 ;;       stur    x0, [x28, #0x10]
 ;;       stur    x1, [x28, #8]
-;;       stur    x0, [x28]
-;;       ldur    x0, [x28]
+;;       stur    d0, [x28]
+;;       ldur    d0, [x28]
 ;;       frintz  d0, d0
 ;;       add     sp, sp, #0x18
 ;;       mov     x28, sp
diff --git a/tests/disas/winch/aarch64/load/f32.wat b/tests/disas/winch/aarch64/load/f32.wat
new file mode 100644
index 000000000..71818bdd2
--- /dev/null
+++ b/tests/disas/winch/aarch64/load/f32.wat
@@ -0,0 +1,26 @@
+;;! target = "aarch64"
+;;! test = "winch"
+
+(module
+  (memory (data "\00\00\a0\7f"))
+
+  (func (export "f32.load") (result f32) (f32.load (i32.const 0)))
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       ldur    s0, [x1]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/load/f64.wat b/tests/disas/winch/aarch64/load/f64.wat
new file mode 100644
index 000000000..70a9b8d5c
--- /dev/null
+++ b/tests/disas/winch/aarch64/load/f64.wat
@@ -0,0 +1,25 @@
+;;! target = "aarch64"
+;;! test = "winch"
+(module
+  (memory (data "\00\00\00\00\00\00\f4\7f"))
+
+  (func (export "f64.load") (result f64) (f64.load (i32.const 0)))
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       ldur    d0, [x1]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/load/i32.wat b/tests/disas/winch/aarch64/load/i32.wat
new file mode 100644
index 000000000..0b65bcec2
--- /dev/null
+++ b/tests/disas/winch/aarch64/load/i32.wat
@@ -0,0 +1,26 @@
+;;! target = "aarch64"
+;;! test = "winch"
+(module
+  (memory 1)
+  (func (export "as-br-value") (result i32)
+    (block (result i32) (br 0 (i32.load (i32.const 0))))
+  )
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       ldur    w0, [x1]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/load/i64.wat b/tests/disas/winch/aarch64/load/i64.wat
new file mode 100644
index 000000000..c361d9212
--- /dev/null
+++ b/tests/disas/winch/aarch64/load/i64.wat
@@ -0,0 +1,34 @@
+;;! target = "aarch64"
+;;! test = "winch"
+(module
+  (memory 1)
+  (func (export "i64_load8_s") (param $i i64) (result i64)
+   (i64.store8 (i32.const 8) (local.get $i))
+   (i64.load8_s (i32.const 8))
+  )
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x18
+;;       mov     x28, sp
+;;       stur    x0, [x28, #0x10]
+;;       stur    x1, [x28, #8]
+;;       stur    x2, [x28]
+;;       ldur    x0, [x28]
+;;       mov     x16, #8
+;;       mov     w1, w16
+;;       ldur    x2, [x9, #0x60]
+;;       add     x2, x2, x1, uxtx
+;;       sturb   w0, [x2]
+;;       mov     x16, #8
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       ldursb  x0, [x1]
+;;       add     sp, sp, #0x18
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/store/f32.wat b/tests/disas/winch/aarch64/store/f32.wat
new file mode 100644
index 000000000..b3401532d
--- /dev/null
+++ b/tests/disas/winch/aarch64/store/f32.wat
@@ -0,0 +1,27 @@
+;;! target = "aarch64"
+;;! test = "winch"
+
+(module
+  (memory (data "\00\00\a0\7f"))
+  (func (export "f32.store") (f32.store (i32.const 0) (f32.const nan:0x200000)))
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0x7fa00000
+;;       fmov    s0, w16
+;;       mov     x16, #0
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       stur    s0, [x1]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/store/f64.wat b/tests/disas/winch/aarch64/store/f64.wat
new file mode 100644
index 000000000..84d030e85
--- /dev/null
+++ b/tests/disas/winch/aarch64/store/f64.wat
@@ -0,0 +1,28 @@
+;;! target = "aarch64"
+;;! test = "winch"
+
+(module
+  (memory (data "\00\00\00\00\00\00\f4\7f"))
+  (func (export "f64.store") (f64.store (i32.const 0) (f64.const nan:0x4000000000000)))
+)
+
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0x7ff4000000000000
+;;       fmov    d0, x16
+;;       mov     x16, #0
+;;       mov     w0, w16
+;;       ldur    x1, [x9, #0x60]
+;;       add     x1, x1, x0, uxtx
+;;       stur    d0, [x1]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/store/i32.wat b/tests/disas/winch/aarch64/store/i32.wat
new file mode 100644
index 000000000..37a3f6dce
--- /dev/null
+++ b/tests/disas/winch/aarch64/store/i32.wat
@@ -0,0 +1,29 @@
+;;! target = "aarch64"
+;;! test = "winch"
+(module
+  (memory 1)
+
+  (func (export "as-block-value")
+    (block (i32.store (i32.const 0) (i32.const 1)))
+  )
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #1
+;;       mov     w0, w16
+;;       mov     x16, #0
+;;       mov     w1, w16
+;;       ldur    x2, [x9, #0x60]
+;;       add     x2, x2, x1, uxtx
+;;       stur    w0, [x2]
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret
diff --git a/tests/disas/winch/aarch64/store/i64.wat b/tests/disas/winch/aarch64/store/i64.wat
new file mode 100644
index 000000000..ff968a2ba
--- /dev/null
+++ b/tests/disas/winch/aarch64/store/i64.wat
@@ -0,0 +1,25 @@
+;;! target = "aarch64"
+;;! test = "winch"
+(module
+  (memory 1)
+  (func (export "as-store-both") (result i32)
+    (block (result i32)
+      (i64.store (br 0 (i32.const 32))) (i32.const -1)
+    )
+  )
+)
+;; wasm[0]::function[0]:
+;;       stp     x29, x30, [sp, #-0x10]!
+;;       mov     x29, sp
+;;       mov     x28, sp
+;;       mov     x9, x0
+;;       sub     sp, sp, #0x10
+;;       mov     x28, sp
+;;       stur    x0, [x28, #8]
+;;       stur    x1, [x28]
+;;       mov     x16, #0x20
+;;       mov     w0, w16
+;;       add     sp, sp, #0x10
+;;       mov     x28, sp
+;;       ldp     x29, x30, [sp], #0x10
+;;       ret