summaryrefslogtreecommitdiff
path: root/src/wasm/literal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/literal.cpp')
-rw-r--r--src/wasm/literal.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp
index 2c61be12a..d4e1bfc45 100644
--- a/src/wasm/literal.cpp
+++ b/src/wasm/literal.cpp
@@ -467,6 +467,22 @@ bool Literal::isNaN() {
return false;
}
+bool Literal::isCanonicalNaN() {
+ if (!isNaN()) {
+ return false;
+ }
+ return (type == Type::f32 && NaNPayload(getf32()) == (1u << 23) - 1) ||
+ (type == Type::f64 && NaNPayload(getf64()) == (1ull << 52) - 1);
+}
+
+bool Literal::isArithmeticNaN() {
+ if (!isNaN()) {
+ return false;
+ }
+ return (type == Type::f32 && NaNPayload(getf32()) > (1u << 23) - 1) ||
+ (type == Type::f64 && NaNPayload(getf64()) > (1ull << 52) - 1);
+}
+
uint32_t Literal::NaNPayload(float f) {
assert(std::isnan(f) && "expected a NaN");
// SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF