summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 10:49:32 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 10:49:32 -0800
commitf117fd69b9568aa31fd4b78b9ce0413220f4eb40 (patch)
tree149682a411a3933630785638a14271bb7d493867 /src/wasm-interpreter.h
parent9c5850f24085ac5843a799692d5099c8af98def7 (diff)
downloadbinaryen-f117fd69b9568aa31fd4b78b9ce0413220f4eb40.tar.gz
binaryen-f117fd69b9568aa31fd4b78b9ce0413220f4eb40.tar.bz2
binaryen-f117fd69b9568aa31fd4b78b9ce0413220f4eb40.zip
nan reinterpretation
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index b93832d03..f3f6d6986 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -385,7 +385,10 @@ public:
return Flow(Literal(converted));
}
}
- case ReinterpretFloat: return curr->type == i32 ? Flow(Literal(value.reinterpreti32())) : Flow(Literal(value.reinterpreti64()));
+ case ReinterpretFloat: {
+ if (value.type == f64 && isnan(value.getf64())) return Flow(Literal((int64_t)0x7ff8000000000000)); // canonicalized
+ return curr->type == i32 ? Flow(Literal(value.reinterpreti32())) : Flow(Literal(value.reinterpreti64()));
+ }
case ConvertUInt32: return curr->type == f32 ? Flow(Literal(float(uint32_t(value.geti32())))) : Flow(Literal(double(uint32_t(value.geti32()))));
case ConvertSInt32: return curr->type == f32 ? Flow(Literal(float(int32_t(value.geti32())))) : Flow(Literal(double(int32_t(value.geti32()))));
case ConvertUInt64: return curr->type == f32 ? Flow(Literal(float((uint64_t)value.geti64()))) : Flow(Literal(double((uint64_t)value.geti64())));