diff options
| author | Alon Zakai <alonzakai@gmail.com> | 2014-02-03 21:15:09 -0500 |
|---|---|---|
| committer | Alon Zakai <alonzakai@gmail.com> | 2014-02-03 21:34:15 -0500 |
| commit | 9ed897e34410d1e2d454c6fe819fb46827477030 (patch) | |
| tree | 7595372e6e34ef8e08e7d5f116e2a9593e51c58a /lib/Target/JSBackend | |
| parent | ba3d7d28558ac87b4b3f68f458e4c560e54daa16 (diff) | |
make SItoF and UItoF support floats
Diffstat (limited to 'lib/Target/JSBackend')
| -rw-r--r-- | lib/Target/JSBackend/CallHandlers.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/Target/JSBackend/CallHandlers.h b/lib/Target/JSBackend/CallHandlers.h index dc66bec5f6..a78d3ffbe1 100644 --- a/lib/Target/JSBackend/CallHandlers.h +++ b/lib/Target/JSBackend/CallHandlers.h @@ -191,14 +191,20 @@ DEF_CALL_HANDLER(BDtoIHigh, { return getAssign(getJSName(CI), CI->getType()) + "HEAP32[tempDoublePtr+4>>2]|0"; }) DEF_CALL_HANDLER(SItoF, { - // TODO: fround - return getAssign(getJSName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getOperand(0), ASM_UNSIGNED) + ") + " + + std::string Ret = "(+" + getValueAsCastParenStr(CI->getOperand(0), ASM_UNSIGNED) + ") + " + "(+4294967296*(+" + getValueAsCastParenStr(CI->getOperand(1), ASM_SIGNED) + "))"; + if (PreciseF32 && CI->getType()->isFloatTy()) { + Ret = "Math_fround(" + Ret + ")"; + } + return getAssign(getJSName(CI), CI->getType()) + Ret; }) DEF_CALL_HANDLER(UItoF, { - // TODO: fround - return getAssign(getJSName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getOperand(0), ASM_UNSIGNED) + ") + " + + std::string Ret = "(+" + getValueAsCastParenStr(CI->getOperand(0), ASM_UNSIGNED) + ") + " + "(+4294967296*(+" + getValueAsCastParenStr(CI->getOperand(1), ASM_UNSIGNED) + "))"; + if (PreciseF32 && CI->getType()->isFloatTy()) { + Ret = "Math_fround(" + Ret + ")"; + } + return getAssign(getJSName(CI), CI->getType()) + Ret; }) DEF_CALL_HANDLER(SItoD, { return getAssign(getJSName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getOperand(0), ASM_UNSIGNED) + ") + " + |
