summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMax Graey <maxgraey@gmail.com>2020-10-01 15:49:40 +0300
committerGitHub <noreply@github.com>2020-10-01 14:49:40 +0200
commite1a843b15d9939eaa258261f5fed67ea9c493a65 (patch)
tree20ee07241fd721a63bea8f23761ed2a86dcd8a7e /src
parent2a935b64dde22671644c4712d0f45e8df60f94eb (diff)
downloadbinaryen-e1a843b15d9939eaa258261f5fed67ea9c493a65.tar.gz
binaryen-e1a843b15d9939eaa258261f5fed67ea9c493a65.tar.bz2
binaryen-e1a843b15d9939eaa258261f5fed67ea9c493a65.zip
Add C and JS APIs for fast math (#3188)
Adds `BinaryenGetFastMath` and `BinaryenSetFastMath` to the C API, respectively `binaryen.getFastMath` and `binaryen.setFastMath` to the JS API.
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp4
-rw-r--r--src/binaryen-c.h10
-rw-r--r--src/js/binaryen.js-post.js12
3 files changed, 26 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index f4515208f..bbacd517b 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 4ca76657d..10b52dbdd 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 529474098..3cce22411 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(() => {