From 7d958f6a4534c81db26ed739ce45128495d7157b Mon Sep 17 00:00:00 2001 From: Olexiy Kulchitskiy Date: Sat, 14 May 2022 13:07:08 +0300 Subject: [PATCH 1/3] Add cranelift_nan_canonicalization to c api header --- crates/c-api/include/wasmtime/config.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/crates/c-api/include/wasmtime/config.h b/crates/c-api/include/wasmtime/config.h index 92d7c2ea1e65..dcef84fa6a67 100644 --- a/crates/c-api/include/wasmtime/config.h +++ b/crates/c-api/include/wasmtime/config.h @@ -213,6 +213,19 @@ WASMTIME_CONFIG_PROP(wasmtime_error_t*, strategy, wasmtime_strategy_t) */ WASMTIME_CONFIG_PROP(void, cranelift_debug_verifier, bool) +/** + * \brief 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` + */ +WASMTIME_CONFIG_PROP(void, cranelift_nan_canonicalization, bool) + /** * \brief Configures Cranelift's optimization level for JIT code. * From 783c3b844d7e85d7233afb2c41aabf7c558855cb Mon Sep 17 00:00:00 2001 From: Olexiy Kulchitskiy Date: Sat, 14 May 2022 13:10:17 +0300 Subject: [PATCH 2/3] Add cranelift_nan_canonicalization to capi/config.rs --- crates/c-api/src/config.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/c-api/src/config.rs b/crates/c-api/src/config.rs index c62f3f477947..0cba5bec2c07 100644 --- a/crates/c-api/src/config.rs +++ b/crates/c-api/src/config.rs @@ -120,6 +120,14 @@ pub extern "C" fn wasmtime_config_cranelift_debug_verifier_set( c.config.cranelift_debug_verifier(enable); } +#[no_mangle] +pub extern "C" fn wasmtime_config_cranelift_nan_canonicalization( + c: &mut wasm_config_t, + enable: bool, +) { + c.config.cranelift_nan_canonicalization(enable); +} + #[no_mangle] pub extern "C" fn wasmtime_config_cranelift_opt_level_set( c: &mut wasm_config_t, From 0fdd130cc25b01909bae393b16a5580a262b50fc Mon Sep 17 00:00:00 2001 From: Olexiy Kulchitskiy Date: Sat, 14 May 2022 13:14:18 +0300 Subject: [PATCH 3/3] Fix func name --- crates/c-api/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/c-api/src/config.rs b/crates/c-api/src/config.rs index 0cba5bec2c07..f928ff39fb36 100644 --- a/crates/c-api/src/config.rs +++ b/crates/c-api/src/config.rs @@ -121,7 +121,7 @@ pub extern "C" fn wasmtime_config_cranelift_debug_verifier_set( } #[no_mangle] -pub extern "C" fn wasmtime_config_cranelift_nan_canonicalization( +pub extern "C" fn wasmtime_config_cranelift_nan_canonicalization_set( c: &mut wasm_config_t, enable: bool, ) {