summaryrefslogtreecommitdiff
path: root/src/wasm2js.h
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2019-05-06 15:09:53 -0700
committerGitHub <noreply@github.com>2019-05-06 15:09:53 -0700
commitf10bc3e2c9c6a96634e14500347bbd2c51ce607c (patch)
treeeeed6d591b3302ae546c6fb57c4573d87bcf6e49 /src/wasm2js.h
parentae7c24e664cf95fb63fcb2bac2477d7391cae01b (diff)
downloadbinaryen-f10bc3e2c9c6a96634e14500347bbd2c51ce607c.tar.gz
binaryen-f10bc3e2c9c6a96634e14500347bbd2c51ce607c.tar.bz2
binaryen-f10bc3e2c9c6a96634e14500347bbd2c51ce607c.zip
wasm2js: 'handle' saturating float to int conversions - we don't handle any of them precisely anyhow (#2087)
Diffstat (limited to 'src/wasm2js.h')
-rw-r--r--src/wasm2js.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/wasm2js.h b/src/wasm2js.h
index 30d694f78..24d168355 100644
--- a/src/wasm2js.h
+++ b/src/wasm2js.h
@@ -1176,19 +1176,22 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m,
switch (curr->type) {
case i32: {
switch (curr->op) {
- case ClzInt32:
+ case ClzInt32: {
return ValueBuilder::makeCall(
MATH_CLZ32, visit(curr->value, EXPRESSION_RESULT));
+ }
case CtzInt32:
- case PopcntInt32:
+ case PopcntInt32: {
std::cerr << "i32 unary should have been removed: " << curr
<< std::endl;
WASM_UNREACHABLE();
- case EqZInt32:
+ }
+ case EqZInt32: {
// XXX !x does change the type to bool, which is correct, but may
// be slower?
return ValueBuilder::makeUnary(
L_NOT, visit(curr->value, EXPRESSION_RESULT));
+ }
case ReinterpretFloat32: {
ABI::wasm2js::ensureScratchMemoryHelpers(
module, ABI::wasm2js::SCRATCH_STORE_F32);
@@ -1205,14 +1208,18 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m,
// generate (~~expr), what Emscripten does
case TruncSFloat32ToInt32:
case TruncSFloat64ToInt32:
+ case TruncSatSFloat32ToInt32:
+ case TruncSatSFloat64ToInt32: {
return ValueBuilder::makeUnary(
B_NOT,
ValueBuilder::makeUnary(B_NOT,
visit(curr->value, EXPRESSION_RESULT)));
-
+ }
// generate (~~expr >>> 0), what Emscripten does
case TruncUFloat32ToInt32:
case TruncUFloat64ToInt32:
+ case TruncSatUFloat32ToInt32:
+ case TruncSatUFloat64ToInt32: {
return ValueBuilder::makeBinary(
ValueBuilder::makeUnary(
B_NOT,
@@ -1220,7 +1227,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m,
B_NOT, visit(curr->value, EXPRESSION_RESULT))),
TRSHIFT,
ValueBuilder::makeNum(0));
-
+ }
default: {
std::cerr << "Unhandled unary i32 operator: " << curr
<< std::endl;