diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index f4515208fc3..bbacd517b1d 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -3570,6 +3570,10 @@ void BinaryenSetLowMemoryUnused(int on) { globalPassOptions.lowMemoryUnused = on != 0; } +int BinaryenGetFastMath(void) { return globalPassOptions.fastMath; } + +void BinaryenSetFastMath(int value) { globalPassOptions.fastMath = value != 0; } + const char* BinaryenGetPassArgument(const char* key) { assert(key); const auto& args = globalPassOptions.arguments; diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 4ca76657d97..10b52dbdd73 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -2134,6 +2134,16 @@ BINARYEN_API int BinaryenGetLowMemoryUnused(void); // when optimizing. Applies to all modules, globally. BINARYEN_API void BinaryenSetLowMemoryUnused(int on); +// Gets whether fast math optimizations are enabled, ignoring for example +// corner cases of floating-point math like NaN changes. +// Applies to all modules, globally. +BINARYEN_API int BinaryenGetFastMath(void); + +// Enables or disables fast math optimizations, ignoring for example +// corner cases of floating-point math like NaN changes. +// Applies to all modules, globally. +BINARYEN_API void BinaryenSetFastMath(int value); + // Gets the value of the specified arbitrary pass argument. // Applies to all modules, globally. BINARYEN_API const char* BinaryenGetPassArgument(const char* name); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 529474098cb..3cce22411a0 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -3046,6 +3046,18 @@ Module['setLowMemoryUnused'] = function(on) { Module['_BinaryenSetLowMemoryUnused'](on); }; +// Gets whether fast math optimizations are enabled, ignoring for example +// corner cases of floating-point math like NaN changes. +Module['getFastMath'] = function() { + return Boolean(Module['_BinaryenGetFastMath']()); +}; + +// Enables or disables fast math optimizations, ignoring for example +// corner cases of floating-point math like NaN changes. +Module['setFastMath'] = function(value) { + Module['_BinaryenSetFastMath'](value); +}; + // Gets the value of the specified arbitrary pass argument. Module['getPassArgument'] = function(key) { return preserveStack(() => { diff --git a/test/binaryen.js/fast-math.js b/test/binaryen.js/fast-math.js new file mode 100644 index 00000000000..48b575b4155 --- /dev/null +++ b/test/binaryen.js/fast-math.js @@ -0,0 +1,3 @@ +console.log("// fastMath=" + binaryen.getFastMath()); +binaryen.setFastMath(true); +assert(binaryen.getFastMath() == true); diff --git a/test/binaryen.js/fast-math.js.txt b/test/binaryen.js/fast-math.js.txt new file mode 100644 index 00000000000..0a0d43cb6f9 --- /dev/null +++ b/test/binaryen.js/fast-math.js.txt @@ -0,0 +1 @@ +// fastMath=false