summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-04 21:57:11 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-04 21:57:11 -0800
commit29677188899bb00ec7a06b85349ce9fc1b344094 (patch)
tree2fb40205c80928e5af0c47c9c3b04f04142f1be9 /src/wasm-interpreter.h
parent04388516db30df7184bd4eb3ef36498af9b9d9c7 (diff)
downloadbinaryen-29677188899bb00ec7a06b85349ce9fc1b344094.tar.gz
binaryen-29677188899bb00ec7a06b85349ce9fc1b344094.tar.bz2
binaryen-29677188899bb00ec7a06b85349ce9fc1b344094.zip
more conversions
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index f72dc524e..0843de8b4 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -359,13 +359,18 @@ public:
case ExtendSInt32: return Flow(Literal(int64_t(value.geti32())));
case ExtendUInt32: return Flow(Literal(uint64_t((uint32_t)value.geti32())));
case WrapInt64: return Flow(Literal(int32_t(value.geti64())));
- case TruncSFloat32: {
+ case TruncSFloat32: {
float val = value.getf32();
if (isnan(val)) instance.externalInterface->trap();
if (val > (double)INT_MAX || val < (double)INT_MIN) instance.externalInterface->trap();
return Flow(Literal(int32_t(val)));
}
- case TruncUFloat32: return Flow(Literal(uint32_t(value.getf32())));
+ case TruncUFloat32: {
+ float val = value.getf32();
+ if (isnan(val)) instance.externalInterface->trap();
+ if (val > (double)UINT_MAX || val <= (double)-1) instance.externalInterface->trap();
+ return Flow(Literal(uint32_t(val)));
+ }
case TruncSFloat64: return Flow(Literal(int32_t(value.getf64())));
case TruncUFloat64: return Flow(Literal(int32_t((uint32_t)value.getf64())));
case ReinterpretFloat: return curr->type == i32 ? Flow(Literal(value.reinterpreti32())) : Flow(Literal(value.reinterpreti64()));