From d8f258e8e74b17d06ee7d94fc7c4dd3165819f0d Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Sat, 28 Nov 2015 20:07:28 -0800 Subject: be very careful when converting doubles to ints in asm2wasm --- src/emscripten-optimizer/optimizer-shared.cpp | 6 ++++++ src/emscripten-optimizer/optimizer.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/emscripten-optimizer') diff --git a/src/emscripten-optimizer/optimizer-shared.cpp b/src/emscripten-optimizer/optimizer-shared.cpp index 24c19cd79..6a8bbf9b5 100644 --- a/src/emscripten-optimizer/optimizer-shared.cpp +++ b/src/emscripten-optimizer/optimizer-shared.cpp @@ -19,6 +19,12 @@ bool isInteger32(double x) { return isInteger(x) && (x == (int32_t)x || x == (uint32_t)x); } +int32_t toInteger32(double x) { + if (x == (int32_t)x) return (int32_t)x; + assert(x == (uint32_t)x); + return (uint32_t)x; +} + int parseInt(const char *str) { int ret = *str - '0'; while (*(++str)) { diff --git a/src/emscripten-optimizer/optimizer.h b/src/emscripten-optimizer/optimizer.h index faef2cccb..12d0671eb 100644 --- a/src/emscripten-optimizer/optimizer.h +++ b/src/emscripten-optimizer/optimizer.h @@ -102,8 +102,8 @@ struct AsmData { }; bool isInteger(double x); - bool isInteger32(double x); +int32_t toInteger32(double x); extern cashew::IString ASM_FLOAT_ZERO; -- cgit v1.2.3