aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/JSBackend
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-02-03 21:15:09 -0500
committerAlon Zakai <alonzakai@gmail.com>2014-02-03 21:34:15 -0500
commit9ed897e34410d1e2d454c6fe819fb46827477030 (patch)
tree7595372e6e34ef8e08e7d5f116e2a9593e51c58a /lib/Target/JSBackend
parentba3d7d28558ac87b4b3f68f458e4c560e54daa16 (diff)
make SItoF and UItoF support floats
Diffstat (limited to 'lib/Target/JSBackend')
-rw-r--r--lib/Target/JSBackend/CallHandlers.h14
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) + ") + " +