diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 21:57:11 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 21:57:11 -0800 |
commit | 29677188899bb00ec7a06b85349ce9fc1b344094 (patch) | |
tree | 2fb40205c80928e5af0c47c9c3b04f04142f1be9 /src/wasm-interpreter.h | |
parent | 04388516db30df7184bd4eb3ef36498af9b9d9c7 (diff) | |
download | binaryen-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.h | 9 |
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())); |