diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 13:58:06 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 13:58:06 -0800 |
commit | cf40973ef6a2b96ba755626f71bec9802f8aca95 (patch) | |
tree | 987eafc7333a2bcce7c596329a94331e389fac09 /src | |
parent | 06eda827f3a5ec67e5302b8d51d82e300d07ff23 (diff) | |
download | binaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.tar.gz binaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.tar.bz2 binaryen-cf40973ef6a2b96ba755626f71bec9802f8aca95.zip |
copysign fix for nan
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-interpreter.h | 10 |
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)); |