summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 13:54:57 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 13:54:57 -0800
commit8568369a26510b61db639f55142797385e59abcb (patch)
tree48d3976c204b043e96ef4a80460595a35258213e /src/wasm-interpreter.h
parentebc45c89ca10c0e91a717abf83d914bb225ced0f (diff)
downloadbinaryen-8568369a26510b61db639f55142797385e59abcb.tar.gz
binaryen-8568369a26510b61db639f55142797385e59abcb.tar.bz2
binaryen-8568369a26510b61db639f55142797385e59abcb.zip
negative zero
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 2ac461a93..21d6fbd9f 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -346,8 +346,14 @@ public:
case Mul: return Flow(Literal(l * r));
case Div: return Flow(Literal(l / r));
case CopySign: return Flow(Literal(std::copysign(l, r)));
- case Min: return Flow(Literal(std::min(l, r)));
- case Max: return Flow(Literal(std::max(l, r)));
+ case Min: {
+ if (l == r && l == 0) return Literal(1/l < 0 ? l : r);
+ return Literal(std::min(l, r));
+ }
+ case Max: {
+ if (l == r && l == 0) return Literal(1/l < 0 ? r : l);
+ return Literal(std::max(l, r));
+ }
default: abort();
}
} else if (left.type == f64) {