summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 13:58:06 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 13:58:06 -0800
commitcf40973ef6a2b96ba755626f71bec9802f8aca95 (patch)
tree987eafc7333a2bcce7c596329a94331e389fac09 /src/wasm-interpreter.h
parent06eda827f3a5ec67e5302b8d51d82e300d07ff23 (diff)
downloadbinaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.tar.gz
binaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.tar.bz2
binaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.zip
copysign fix for nan
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index 4ba5a7427..dae45d529 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -345,7 +345,10 @@ public:
case Sub: return Flow(Literal(l - r));
case Mul: return Flow(Literal(l * r));
case Div: return Flow(Literal(l / r));
- case CopySign: return Flow(Literal(std::copysign(l, r)));
+ case CopySign: {
+ if (isnan(r)) r = 0;
+ return Literal(std::copysign(l, r));
+ }
case Min: {
if (l == r && l == 0) return Literal(1/l < 0 ? l : r);
return Literal(std::min(l, r));
@@ -363,7 +366,10 @@ public:
case Sub: return Flow(Literal(l - r));
case Mul: return Flow(Literal(l * r));
case Div: return Flow(Literal(l / r));
- case CopySign: return Flow(Literal(std::copysign(l, r)));
+ case CopySign: {
+ if (isnan(r)) r = 0;
+ return Literal(std::copysign(l, r));
+ }
case Min: {
if (l == r && l == 0) return Literal(1/l < 0 ? l : r);
return Literal(std::min(l, r));