diff --git a/src/Config.cs b/src/Config.cs
index 3e8e000..9977178 100644
--- a/src/Config.cs
+++ b/src/Config.cs
@@ -221,6 +221,25 @@ public Config WithCraneliftDebugVerifier(bool enable)
return this;
}
+ ///
+ /// Configures whether Cranelift should perform a NaN-canonicalization pass.
+ ///
+ /// When Cranelift is used as a code generation backend this will configure
+ /// it to replace NaNs with a single canonical value.This is useful for users
+ /// requiring entirely deterministic WebAssembly computation.
+ ///
+ /// This is not required by the WebAssembly spec, so it is not enabled by default.
+ ///
+ /// The default value for this is `false`
+ ///
+ /// True to enable the Cranelift nan canonicalization or false to disable.
+ /// Returns the current config.
+ public Config WithCraneliftNaNCanonicalization(bool enable)
+ {
+ Native.wasmtime_config_cranelift_nan_canonicalization_set(handle, enable);
+ return this;
+ }
+
///
/// Sets the optimization level to use.
///
@@ -388,6 +407,9 @@ private static class Native
[DllImport(Engine.LibraryName)]
public static extern void wasmtime_config_cranelift_debug_verifier_set(Handle config, bool enable);
+ [DllImport(Engine.LibraryName)]
+ public static extern void wasmtime_config_cranelift_nan_canonicalization_set(Handle config, bool enable);
+
[DllImport(Engine.LibraryName)]
public static extern void wasmtime_config_cranelift_opt_level_set(Handle config, byte level);
diff --git a/tests/ConfigTests.cs b/tests/ConfigTests.cs
index f6f189e..a97ee51 100644
--- a/tests/ConfigTests.cs
+++ b/tests/ConfigTests.cs
@@ -35,5 +35,15 @@ public void ItSetsOptimizationLevel()
using var engine = new Engine(config);
}
+
+ [Fact]
+ public void ItSetsNanCanonicalization()
+ {
+ var config = new Config();
+
+ config.WithCraneliftNaNCanonicalization(true);
+
+ using var engine = new Engine(config);
+ }
}
}