aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/CppBackend
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-12-15 12:14:21 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-12-15 12:14:21 -0800
commit7220bb8af7be49163dc27272f319aa8f9f1fb126 (patch)
tree9369b479375906186ebd0733a1d750a70faab872 /lib/Target/CppBackend
parent567be43a95fc941e1f99491343927fc7ac6679da (diff)
do not redirect to Math builtins, just call them
Diffstat (limited to 'lib/Target/CppBackend')
-rw-r--r--lib/Target/CppBackend/CallHandlers.h110
1 files changed, 58 insertions, 52 deletions
diff --git a/lib/Target/CppBackend/CallHandlers.h b/lib/Target/CppBackend/CallHandlers.h
index 3f3203676c..59cecb8e67 100644
--- a/lib/Target/CppBackend/CallHandlers.h
+++ b/lib/Target/CppBackend/CallHandlers.h
@@ -123,6 +123,12 @@ DEF_CALL_HANDLER(name, { \
return CH___default__(CI, "_" #to); \
})
+#define DEF_BUILTIN_HANDLER(name, to) \
+DEF_CALL_HANDLER(name, { \
+ if (!CI) return ""; \
+ return CH___default__(CI, #to); \
+})
+
// Various simple redirects for our js libc, see library.js and LibraryManager.load
DEF_REDIRECT_HANDLER(__01readdir64_, readdir);
DEF_REDIRECT_HANDLER(__xpg_basename, basename);
@@ -189,8 +195,8 @@ DEF_REDIRECT_HANDLER(_IO_getc, getc);
DEF_REDIRECT_HANDLER(_IO_putc, putc);
DEF_REDIRECT_HANDLER(_ZNSo3putEc, putchar);
DEF_REDIRECT_HANDLER(__01mmap64_, mmap);
-DEF_REDIRECT_HANDLER(abs, Math_abs);
-DEF_REDIRECT_HANDLER(labs, Math_abs);
+DEF_BUILTIN_HANDLER(abs, Math_abs);
+DEF_BUILTIN_HANDLER(labs, Math_abs);
DEF_REDIRECT_HANDLER(__cxa_atexit, atexit);
DEF_REDIRECT_HANDLER(strtoll_l, strtoll);
DEF_REDIRECT_HANDLER(strtol_l, strtol);
@@ -228,60 +234,60 @@ DEF_REDIRECT_HANDLER(iscntrl_l, iscntrl);
DEF_REDIRECT_HANDLER(isprint_l, isprint);
DEF_REDIRECT_HANDLER(isgraph_l, isgraph);
DEF_REDIRECT_HANDLER(terminate, __cxa_call_unexpected);
-DEF_REDIRECT_HANDLER(cos, Math_cos);
-DEF_REDIRECT_HANDLER(cosf, Math_cos);
-DEF_REDIRECT_HANDLER(cosl, Math_cos);
-DEF_REDIRECT_HANDLER(sin, Math_sin);
-DEF_REDIRECT_HANDLER(sinf, Math_sin);
-DEF_REDIRECT_HANDLER(sinl, Math_sin);
-DEF_REDIRECT_HANDLER(tan, Math_tan);
-DEF_REDIRECT_HANDLER(tanf, Math_tan);
-DEF_REDIRECT_HANDLER(tanl, Math_tan);
-DEF_REDIRECT_HANDLER(acos, Math_acos);
-DEF_REDIRECT_HANDLER(acosf, Math_acos);
-DEF_REDIRECT_HANDLER(acosl, Math_acos);
-DEF_REDIRECT_HANDLER(asin, Math_asin);
-DEF_REDIRECT_HANDLER(asinf, Math_asin);
-DEF_REDIRECT_HANDLER(asinl, Math_asin);
-DEF_REDIRECT_HANDLER(atan, Math_atan);
-DEF_REDIRECT_HANDLER(atanf, Math_atan);
-DEF_REDIRECT_HANDLER(atanl, Math_atan);
-DEF_REDIRECT_HANDLER(atan2, Math_atan2);
-DEF_REDIRECT_HANDLER(atan2f, Math_atan2);
-DEF_REDIRECT_HANDLER(atan2l, Math_atan2);
-DEF_REDIRECT_HANDLER(exp, Math_exp);
-DEF_REDIRECT_HANDLER(expf, Math_exp);
-DEF_REDIRECT_HANDLER(expl, Math_exp);
+DEF_BUILTIN_HANDLER(cos, Math_cos);
+DEF_BUILTIN_HANDLER(cosf, Math_cos);
+DEF_BUILTIN_HANDLER(cosl, Math_cos);
+DEF_BUILTIN_HANDLER(sin, Math_sin);
+DEF_BUILTIN_HANDLER(sinf, Math_sin);
+DEF_BUILTIN_HANDLER(sinl, Math_sin);
+DEF_BUILTIN_HANDLER(tan, Math_tan);
+DEF_BUILTIN_HANDLER(tanf, Math_tan);
+DEF_BUILTIN_HANDLER(tanl, Math_tan);
+DEF_BUILTIN_HANDLER(acos, Math_acos);
+DEF_BUILTIN_HANDLER(acosf, Math_acos);
+DEF_BUILTIN_HANDLER(acosl, Math_acos);
+DEF_BUILTIN_HANDLER(asin, Math_asin);
+DEF_BUILTIN_HANDLER(asinf, Math_asin);
+DEF_BUILTIN_HANDLER(asinl, Math_asin);
+DEF_BUILTIN_HANDLER(atan, Math_atan);
+DEF_BUILTIN_HANDLER(atanf, Math_atan);
+DEF_BUILTIN_HANDLER(atanl, Math_atan);
+DEF_BUILTIN_HANDLER(atan2, Math_atan2);
+DEF_BUILTIN_HANDLER(atan2f, Math_atan2);
+DEF_BUILTIN_HANDLER(atan2l, Math_atan2);
+DEF_BUILTIN_HANDLER(exp, Math_exp);
+DEF_BUILTIN_HANDLER(expf, Math_exp);
+DEF_BUILTIN_HANDLER(expl, Math_exp);
DEF_REDIRECT_HANDLER(erfcf, erfc);
DEF_REDIRECT_HANDLER(erfcl, erfc);
DEF_REDIRECT_HANDLER(erff, erf);
DEF_REDIRECT_HANDLER(erfl, erf);
-DEF_REDIRECT_HANDLER(log, Math_log);
-DEF_REDIRECT_HANDLER(logf, Math_log);
-DEF_REDIRECT_HANDLER(logl, Math_log);
-DEF_REDIRECT_HANDLER(sqrt, Math_sqrt);
-DEF_REDIRECT_HANDLER(sqrtf, Math_sqrt);
-DEF_REDIRECT_HANDLER(sqrtl, Math_sqrt);
-DEF_REDIRECT_HANDLER(fabs, Math_abs);
-DEF_REDIRECT_HANDLER(fabsf, Math_abs);
-DEF_REDIRECT_HANDLER(fabsl, Math_abs);
-DEF_REDIRECT_HANDLER(ceil, Math_ceil);
-DEF_REDIRECT_HANDLER(ceilf, Math_ceil);
-DEF_REDIRECT_HANDLER(ceill, Math_ceil);
-DEF_REDIRECT_HANDLER(floor, Math_floor);
-DEF_REDIRECT_HANDLER(floorf, Math_floor);
-DEF_REDIRECT_HANDLER(floorl, Math_floor);
-DEF_REDIRECT_HANDLER(pow, Math_pow);
-DEF_REDIRECT_HANDLER(powf, Math_pow);
-DEF_REDIRECT_HANDLER(powl, Math_pow);
-DEF_REDIRECT_HANDLER(llvm_sqrt_f32, Math_sqrt);
-DEF_REDIRECT_HANDLER(llvm_sqrt_f64, Math_sqrt);
-DEF_REDIRECT_HANDLER(llvm_pow_f32, Math_pow);
-DEF_REDIRECT_HANDLER(llvm_pow_f64, Math_pow);
-DEF_REDIRECT_HANDLER(llvm_log_f32, Math_log);
-DEF_REDIRECT_HANDLER(llvm_log_f64, Math_log);
-DEF_REDIRECT_HANDLER(llvm_exp_f32, Math_exp);
-DEF_REDIRECT_HANDLER(llvm_exp_f64, Math_exp);
+DEF_BUILTIN_HANDLER(log, Math_log);
+DEF_BUILTIN_HANDLER(logf, Math_log);
+DEF_BUILTIN_HANDLER(logl, Math_log);
+DEF_BUILTIN_HANDLER(sqrt, Math_sqrt);
+DEF_BUILTIN_HANDLER(sqrtf, Math_sqrt);
+DEF_BUILTIN_HANDLER(sqrtl, Math_sqrt);
+DEF_BUILTIN_HANDLER(fabs, Math_abs);
+DEF_BUILTIN_HANDLER(fabsf, Math_abs);
+DEF_BUILTIN_HANDLER(fabsl, Math_abs);
+DEF_BUILTIN_HANDLER(ceil, Math_ceil);
+DEF_BUILTIN_HANDLER(ceilf, Math_ceil);
+DEF_BUILTIN_HANDLER(ceill, Math_ceil);
+DEF_BUILTIN_HANDLER(floor, Math_floor);
+DEF_BUILTIN_HANDLER(floorf, Math_floor);
+DEF_BUILTIN_HANDLER(floorl, Math_floor);
+DEF_BUILTIN_HANDLER(pow, Math_pow);
+DEF_BUILTIN_HANDLER(powf, Math_pow);
+DEF_BUILTIN_HANDLER(powl, Math_pow);
+DEF_BUILTIN_HANDLER(llvm_sqrt_f32, Math_sqrt);
+DEF_BUILTIN_HANDLER(llvm_sqrt_f64, Math_sqrt);
+DEF_BUILTIN_HANDLER(llvm_pow_f32, Math_pow);
+DEF_BUILTIN_HANDLER(llvm_pow_f64, Math_pow);
+DEF_BUILTIN_HANDLER(llvm_log_f32, Math_log);
+DEF_BUILTIN_HANDLER(llvm_log_f64, Math_log);
+DEF_BUILTIN_HANDLER(llvm_exp_f32, Math_exp);
+DEF_BUILTIN_HANDLER(llvm_exp_f64, Math_exp);
DEF_REDIRECT_HANDLER(ldexpf, ldexp);
DEF_REDIRECT_HANDLER(scalb, ldexp);
DEF_REDIRECT_HANDLER(scalbn, ldexp);