add non SIMD test
diff --git a/Cargo.lock b/Cargo.lock
index 8f9656c..3da95d4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -919,8 +919,9 @@
 [[package]]
 name = "fearless_simd"
 version = "0.2.0"
-source = "git+https://github.com/raphlinus/fearless_simd?rev=e46bcfd#e46bcfd622dbd7edd8538c836d9b100b6101aa15"
+source = "git+https://github.com/raphlinus/fearless_simd?rev=1c658f7#1c658f79db9eb4014d5bb14ed08c5fb91c44a230"
 dependencies = [
+ "bytemuck",
  "libm",
 ]
 
@@ -1302,6 +1303,7 @@
  "allocator-api2",
  "equivalent",
  "foldhash",
+ "serde",
 ]
 
 [[package]]
@@ -3837,7 +3839,9 @@
  "vello_dev_macros",
  "vello_hybrid",
  "wasm-bindgen",
+ "wasm-bindgen-futures",
  "wasm-bindgen-test",
+ "wasmparser 0.235.0",
  "web-sys",
  "wgpu",
 ]
@@ -3895,7 +3899,7 @@
  "rayon",
  "walrus-macro",
  "wasm-encoder",
- "wasmparser",
+ "wasmparser 0.214.0",
 ]
 
 [[package]]
@@ -4085,7 +4089,7 @@
  "leb128",
  "log",
  "walrus",
- "wasmparser",
+ "wasmparser 0.214.0",
 ]
 
 [[package]]
@@ -4124,6 +4128,19 @@
 ]
 
 [[package]]
+name = "wasmparser"
+version = "0.235.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "161296c618fa2d63f6ed5fffd1112937e803cb9ec71b32b01a76321555660917"
+dependencies = [
+ "bitflags 2.9.1",
+ "hashbrown 0.15.3",
+ "indexmap 2.9.0",
+ "semver",
+ "serde",
+]
+
+[[package]]
 name = "wayland-backend"
 version = "0.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index b43823f..2db11ab 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -114,7 +114,7 @@
 thread_local = "1.1.8"
 crossbeam-channel = "0.5.15"
 ordered-channel = { version = "1.2.0", features = ["crossbeam-channel"] }
-fearless_simd = { git = "https://github.com/raphlinus/fearless_simd", rev = "e46bcfd", default-features = false }
+fearless_simd = { git = "https://github.com/raphlinus/fearless_simd", rev = "1c658f7", default-features = false }
 
 # The below crates are experimental!
 vello_api = { path = "sparse_strips/vello_api", default-features = false }
diff --git a/sparse_strips/vello_sparse_tests/Cargo.toml b/sparse_strips/vello_sparse_tests/Cargo.toml
index 538dd16..6dc66d2 100644
--- a/sparse_strips/vello_sparse_tests/Cargo.toml
+++ b/sparse_strips/vello_sparse_tests/Cargo.toml
@@ -41,8 +41,12 @@
     "Blob",
     "BlobPropertyBag",
     "Url",
+    "Response",
 ] }
 wasm-bindgen = "0.2.100"
+wasm-bindgen-futures = "0.4.50"
+# Required for introspecting the built WASM binary.
+wasmparser = "0.235.0"
 
 [features]
 webgl = ["vello_hybrid/webgl"]
diff --git a/sparse_strips/vello_sparse_tests/tests/mod.rs b/sparse_strips/vello_sparse_tests/tests/mod.rs
index 6f5658e..759b456 100644
--- a/sparse_strips/vello_sparse_tests/tests/mod.rs
+++ b/sparse_strips/vello_sparse_tests/tests/mod.rs
@@ -39,3 +39,5 @@
 mod renderer;
 #[macro_use]
 mod util;
+#[cfg(target_arch = "wasm32")]
+mod wasm_binary_invariants;
diff --git a/sparse_strips/vello_sparse_tests/tests/wasm_binary_invariants.rs b/sparse_strips/vello_sparse_tests/tests/wasm_binary_invariants.rs
new file mode 100644
index 0000000..3ed6ab7
--- /dev/null
+++ b/sparse_strips/vello_sparse_tests/tests/wasm_binary_invariants.rs
@@ -0,0 +1,38 @@
+// Copyright 2025 the Vello Authors
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
+use wasm_bindgen_test::*;
+
+#[cfg(not(target_feature = "simd128"))]
+#[wasm_bindgen_test]
+async fn no_simd_instruction_inclusion() {
+    // Unless the WASM binary is explicitly built with `RUSTFLAGS=-Ctarget-feature=+simd128` then it
+    // is imperative that there isn't a single SIMD instruction in the resulting binary. These can
+    // accidentally creep into the binary due to usage of `#![cfg(target_feature = "simd128")]`. Any
+    // inclusion of a SIMD instruction in a non-SIMD WASM binary can invalidate the whole binary for
+    // browsers that do not have SIMD support.
+    //
+    // This test runs when simd128 is not enabled, and self-introspects the binary to ensure no SIMD
+    // instructions are included.
+
+    use wasm_bindgen::JsCast;
+    use wasm_bindgen_futures::JsFuture;
+    use wasmparser::{Validator, WasmFeatures};
+
+    let window = web_sys::window().unwrap();
+    let url = "/wasm-bindgen-test_bg.wasm";
+    let response = JsFuture::from(window.fetch_with_str(&url)).await.unwrap();
+    let response: web_sys::Response = response.dyn_into().unwrap();
+    assert!(response.ok(), "binary could not be fetched");
+    let buffer = JsFuture::from(response.array_buffer().unwrap())
+        .await
+        .unwrap();
+    let bytes = web_sys::js_sys::Uint8Array::new(&buffer).to_vec();
+
+    // Create the default wasm featureset, and explicitly subtract SIMD.
+    let mut wasm_non_simd_validator =
+        Validator::new_with_features(WasmFeatures::default().difference(WasmFeatures::SIMD));
+
+    // If validation is ok then no simd128 instructions were encountered.
+    assert!(wasm_non_simd_validator.validate_all(&bytes).is_ok());
+}