aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/CppBackend
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-12-15 11:06:10 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-12-15 11:06:10 -0800
commit567be43a95fc941e1f99491343927fc7ac6679da (patch)
tree2e69e234eb808798679fdd90b3811d02e95a5d08 /lib/Target/CppBackend
parent8baa3e012238480f98bb3a6992cfb5b8265d683d (diff)
handle i64 to float, not just double
Diffstat (limited to 'lib/Target/CppBackend')
-rw-r--r--lib/Target/CppBackend/CallHandlers.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/Target/CppBackend/CallHandlers.h b/lib/Target/CppBackend/CallHandlers.h
index 8e3326fe5f..3f3203676c 100644
--- a/lib/Target/CppBackend/CallHandlers.h
+++ b/lib/Target/CppBackend/CallHandlers.h
@@ -51,17 +51,29 @@ DEF_CALL_HANDLER(FPtoIHigh, {
return getAssign(getCppName(CI), CI->getType()) + "Math_abs(" + Input + ") >= +1 ? " + Input + " > +0 ? (Math_min(+Math_floor(" + Input + " / +4294967296), +4294967295) | 0) >>> 0 : ~~+Math_ceil((" + Input + " - +(~~" + Input + " >>> 0)) / +4294967296) >>> 0 : 0";
})
-DEF_CALL_HANDLER(SItoFP, {
+DEF_CALL_HANDLER(SItoF, {
+ // TODO: fround
return getAssign(getCppName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getArgOperand(0), ASM_UNSIGNED) + ") + " +
"(+4294967296*(+" + getValueAsCastParenStr(CI->getArgOperand(1), ASM_SIGNED) + "))";
})
-DEF_CALL_HANDLER(UItoFP, {
+DEF_CALL_HANDLER(UItoF, {
+ // TODO: fround
return getAssign(getCppName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getArgOperand(0), ASM_UNSIGNED) + ") + " +
"(+4294967296*(+" + getValueAsCastParenStr(CI->getArgOperand(1), ASM_UNSIGNED) + "))";
})
-DEF_CALL_HANDLER(BItoFP, {
+DEF_CALL_HANDLER(SItoD, {
+ return getAssign(getCppName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getArgOperand(0), ASM_UNSIGNED) + ") + " +
+ "(+4294967296*(+" + getValueAsCastParenStr(CI->getArgOperand(1), ASM_SIGNED) + "))";
+})
+
+DEF_CALL_HANDLER(UItoD, {
+ return getAssign(getCppName(CI), CI->getType()) + "(+" + getValueAsCastParenStr(CI->getArgOperand(0), ASM_UNSIGNED) + ") + " +
+ "(+4294967296*(+" + getValueAsCastParenStr(CI->getArgOperand(1), ASM_UNSIGNED) + "))";
+})
+
+DEF_CALL_HANDLER(BItoD, {
return "HEAP32[tempDoublePtr>>2] = " + getValueAsStr(CI->getArgOperand(0)) + ";" +
"HEAP32[tempDoublePtr+4>>2] = " + getValueAsStr(CI->getArgOperand(1)) + ";" +
getAssign(getCppName(CI), CI->getType()) + "HEAPF64[tempDoublePtr>>3]";
@@ -389,9 +401,11 @@ void setupCallHandlers() {
SETUP_CALL_HANDLER(setHigh32);
SETUP_CALL_HANDLER(FPtoILow);
SETUP_CALL_HANDLER(FPtoIHigh);
- SETUP_CALL_HANDLER(SItoFP);
- SETUP_CALL_HANDLER(UItoFP);
- SETUP_CALL_HANDLER(BItoFP);
+ SETUP_CALL_HANDLER(SItoF);
+ SETUP_CALL_HANDLER(UItoF);
+ SETUP_CALL_HANDLER(SItoD);
+ SETUP_CALL_HANDLER(UItoD);
+ SETUP_CALL_HANDLER(BItoD);
SETUP_CALL_HANDLER(llvm_nacl_atomic_store_i32);
SETUP_CALL_HANDLER(llvm_memcpy_p0i8_p0i8_i32);
SETUP_CALL_HANDLER(llvm_memset_p0i8_i32);