Declare correct prototype for compiler-rt.
Change-Id: Idd5236d90a032339519c861a1aa2fd7d55fa4da7
diff --git a/src/compiler_llvm/compiler_runtime_func_list.h b/src/compiler_llvm/compiler_runtime_func_list.h
index 2eb3de9..ffbae85 100644
--- a/src/compiler_llvm/compiler_runtime_func_list.h
+++ b/src/compiler_llvm/compiler_runtime_func_list.h
@@ -20,213 +20,205 @@
// NOTE: COMPILER_RUNTIME_FUNC_LIST_* should be sorted!
#define COMPILER_RUNTIME_FUNC_LIST_X86(V) \
- V(__ashldi3) \
- V(__ashrdi3) \
- V(__divdi3) \
- V(__fixdfdi) \
- V(__fixsfdi) \
- V(__fixtfdi) \
- V(__fixtfsi) \
- V(__fixunsdfdi) \
- V(__fixunsdfsi) \
- V(__fixunssfdi) \
- V(__fixunssfsi) \
- V(__fixunstfdi) \
- V(__fixunstfsi) \
- V(__fixunsxfdi) \
- V(__fixunsxfsi) \
- V(__fixxfdi) \
- V(__floatdidf) \
- V(__floatdisf) \
- V(__floatditf) \
- V(__floatdixf) \
- V(__floatsitf) \
- V(__floatundidf) \
- V(__floatundisf) \
- V(__floatunditf) \
- V(__floatundixf) \
- V(__floatunsitf) \
- V(__lshrdi3) \
- V(__moddi3) \
- V(__muldi3) \
- V(__negdi2) \
- V(__powidf2) \
- V(__powisf2) \
- V(__powitf2) \
- V(__powixf2) \
- V(__trunctfdf2) \
- V(__trunctfsf2) \
- V(__udivdi3) \
- V(__umoddi3) \
- V(ceil) \
- V(ceilf) \
- V(ceill) \
- V(copysign) \
- V(copysignf) \
- V(copysignl) \
- V(cos) \
- V(cosf) \
- V(exp) \
- V(exp2) \
- V(exp2f) \
- V(expf) \
- V(floor) \
- V(floorf) \
- V(floorl) \
- V(fma) \
- V(fmaf) \
- V(fmod) \
- V(fmodf) \
- V(log) \
- V(log10) \
- V(log10f) \
- V(logf) \
- V(memcpy) \
- V(memmove) \
- V(memset) \
- V(nearbyint) \
- V(nearbyintf) \
- V(pow) \
- V(powf) \
- V(rint) \
- V(rintf) \
- V(sin) \
- V(sinf) \
- V(sqrt) \
- V(sqrtf) \
- V(trunc) \
- V(truncf) \
- V(truncl)
+ V(__ashldi3, long long, long long, int) \
+ V(__ashrdi3, long long, long long, int) \
+ V(__divdi3, long long, long long, long long) \
+ V(__fixdfdi, long long, double) \
+ V(__fixsfdi, long long, float) \
+ V(__fixtfdi, long long, long double) \
+ V(__fixtfsi, int, long double) \
+ V(__fixunsdfdi, unsigned long long, double) \
+ V(__fixunsdfsi, unsigned int, double) \
+ V(__fixunssfdi, unsigned long long, float) \
+ V(__fixunssfsi, unsigned int, float) \
+ V(__fixunstfdi, unsigned long long, long double) \
+ V(__fixunstfsi, unsigned int, long double) \
+ V(__fixunsxfdi, unsigned long long, long double) \
+ V(__fixunsxfsi, unsigned int, long double) \
+ V(__fixxfdi, long long, long double) \
+ V(__floatdidf, double, long long) \
+ V(__floatdisf, float, long long) \
+ V(__floatditf, long double, long long) \
+ V(__floatdixf, long double, long long) \
+ V(__floatsitf, long double, int) \
+ V(__floatundidf, double, unsigned long long) \
+ V(__floatundisf, float, unsigned long long) \
+ V(__floatunditf, long double, unsigned long long) \
+ V(__floatundixf, long double, unsigned long long) \
+ V(__floatunsitf, long double, int) \
+ V(__lshrdi3, long long, long long, int) \
+ V(__moddi3, long long, long long, long long) \
+ V(__muldi3, long long, long long, long long) \
+ V(__negdi2, long long, long long) \
+ V(__powidf2, double, double, int) \
+ V(__powisf2, float, float, int) \
+ V(__powitf2, long double, long double, int) \
+ V(__powixf2, long double, long double, int) \
+ V(__trunctfdf2, double, long double) \
+ V(__trunctfsf2, float, long double) \
+ V(__udivdi3, unsigned long long, unsigned long long, unsigned long long) \
+ V(__umoddi3, unsigned long long, unsigned long long, unsigned long long) \
+ V(ceil, double, double) \
+ V(ceilf, float, float) \
+ V(ceill, long double, long double) \
+ V(copysign, double, double, double) \
+ V(copysignf, float, float, float) \
+ V(copysignl, long double, long double, long double) \
+ V(cos, double, double) \
+ V(cosf, float, float) \
+ V(exp, double, double) \
+ V(exp2, double, double) \
+ V(exp2f, float, float) \
+ V(expf, float, float) \
+ V(floor, double, double) \
+ V(floorf, float, float) \
+ V(floorl, long double, long double) \
+ V(fma, double, double, double, double) \
+ V(fmaf, float, float, float, float) \
+ V(fmod, double, double, double) \
+ V(fmodf, float, float, float) \
+ V(log, double, double) \
+ V(log10, double, double) \
+ V(log10f, float, float) \
+ V(logf, float, float) \
+ V(memcpy, void *, void *, const void *, size_t) \
+ V(memmove, void *, void *, const void *, size_t) \
+ V(memset, void *, void *, int, size_t) \
+ V(nearbyint, double, double) \
+ V(nearbyintf, float, float) \
+ V(pow, double, double, double) \
+ V(powf, float, float, float) \
+ V(rint, double, double) \
+ V(rintf, float, float) \
+ V(sin, double, double) \
+ V(sinf, float, float) \
+ V(sqrt, double, double) \
+ V(sqrtf, float, float) \
+ V(trunc, double, double) \
+ V(truncf, float, float) \
+ V(truncl, long double, long double)
#define COMPILER_RUNTIME_FUNC_LIST_MIPS(V) \
- V(__ashldi3) \
- V(__ashrdi3) \
- V(__divdi3) \
- V(__fixdfdi) \
- V(__fixsfdi) \
- V(__fixunsdfdi) \
- V(__fixunsdfsi) \
- V(__fixunssfdi) \
- V(__fixunssfsi) \
- V(__floatdidf) \
- V(__floatdisf) \
- V(__floatundidf) \
- V(__floatundisf) \
- V(__lshrdi3) \
- V(__moddi3) \
- V(__muldi3) \
- V(__negdi2) \
- V(__powidf2) \
- V(__powisf2) \
- V(__udivdi3) \
- V(__umoddi3) \
- V(ceil) \
- V(ceilf) \
- V(ceill) \
- V(copysign) \
- V(copysignf) \
- V(copysignl) \
- V(cos) \
- V(cosf) \
- V(exp) \
- V(exp2) \
- V(exp2f) \
- V(expf) \
- V(floor) \
- V(floorf) \
- V(floorl) \
- V(fma) \
- V(fmaf) \
- V(fmod) \
- V(fmodf) \
- V(log) \
- V(log10) \
- V(log10f) \
- V(logf) \
- V(memcpy) \
- V(memmove) \
- V(memset) \
- V(nearbyint) \
- V(nearbyintf) \
- V(pow) \
- V(powf) \
- V(rint) \
- V(rintf) \
- V(sin) \
- V(sinf) \
- V(sqrt) \
- V(sqrtf) \
- V(trunc) \
- V(truncf) \
- V(truncl)
+ V(__ashldi3, long long, long long, int) \
+ V(__ashrdi3, long long, long long, int) \
+ V(__divdi3, long long, long long, long long) \
+ V(__fixdfdi, long long, double) \
+ V(__fixsfdi, long long, float) \
+ V(__fixunsdfdi, unsigned long long, double) \
+ V(__fixunsdfsi, unsigned int, double) \
+ V(__fixunssfdi, unsigned long long, float) \
+ V(__fixunssfsi, unsigned int, float) \
+ V(__floatdidf, double, long long) \
+ V(__floatdisf, float, long long) \
+ V(__floatundidf, double, unsigned long long) \
+ V(__floatundisf, float, unsigned long long) \
+ V(__lshrdi3, long long, long long, int) \
+ V(__moddi3, long long, long long, long long) \
+ V(__muldi3, long long, long long, long long) \
+ V(__negdi2, long long, long long) \
+ V(__powidf2, double, double, int) \
+ V(__powisf2, float, float, int) \
+ V(__udivdi3, unsigned long long, unsigned long long, unsigned long long) \
+ V(__umoddi3, unsigned long long, unsigned long long, unsigned long long) \
+ V(ceil, double, double) \
+ V(ceilf, float, float) \
+ V(ceill, long double, long double) \
+ V(copysign, double, double, double) \
+ V(copysignf, float, float, float) \
+ V(copysignl, long double, long double, long double) \
+ V(cos, double, double) \
+ V(cosf, float, float) \
+ V(exp, double, double) \
+ V(exp2, double, double) \
+ V(exp2f, float, float) \
+ V(expf, float, float) \
+ V(floor, double, double) \
+ V(floorf, float, float) \
+ V(floorl, long double, long double) \
+ V(fma, double, double, double, double) \
+ V(fmaf, float, float, float, float) \
+ V(fmod, double, double, double) \
+ V(fmodf, float, float, float) \
+ V(log, double, double) \
+ V(log10, double, double) \
+ V(log10f, float, float) \
+ V(logf, float, float) \
+ V(memcpy, void *, void *, const void *, size_t) \
+ V(memmove, void *, void *, const void *, size_t) \
+ V(memset, void *, void *, int, size_t) \
+ V(nearbyint, double, double) \
+ V(nearbyintf, float, float) \
+ V(pow, double, double, double) \
+ V(powf, float, float, float) \
+ V(rint, double, double) \
+ V(rintf, float, float) \
+ V(sin, double, double) \
+ V(sinf, float, float) \
+ V(sqrt, double, double) \
+ V(sqrtf, float, float) \
+ V(trunc, double, double) \
+ V(truncf, float, float) \
+ V(truncl, long double, long double)
#define COMPILER_RUNTIME_FUNC_LIST_ARM(V) \
- V(__aeabi_d2f) \
- V(__aeabi_d2iz) \
- V(__aeabi_d2lz) \
- V(__aeabi_d2uiz) \
- V(__aeabi_d2ulz) \
- V(__aeabi_dadd) \
- V(__aeabi_dcmpeq) \
- V(__aeabi_dcmpeq) \
- V(__aeabi_dcmpge) \
- V(__aeabi_dcmpgt) \
- V(__aeabi_dcmple) \
- V(__aeabi_dcmplt) \
- V(__aeabi_dcmpun) \
- V(__aeabi_dcmpun) \
- V(__aeabi_ddiv) \
- V(__aeabi_dmul) \
- V(__aeabi_dsub) \
- V(__aeabi_f2d) \
- V(__aeabi_f2iz) \
- V(__aeabi_f2lz) \
- V(__aeabi_f2uiz) \
- V(__aeabi_f2ulz) \
- V(__aeabi_fadd) \
- V(__aeabi_fcmpeq) \
- V(__aeabi_fcmpeq) \
- V(__aeabi_fcmpge) \
- V(__aeabi_fcmpgt) \
- V(__aeabi_fcmple) \
- V(__aeabi_fcmplt) \
- V(__aeabi_fcmpun) \
- V(__aeabi_fcmpun) \
- V(__aeabi_fdiv) \
- V(__aeabi_fmul) \
- V(__aeabi_fsub) \
- V(__aeabi_i2d) \
- V(__aeabi_i2f) \
- V(__aeabi_idiv) \
- V(__aeabi_idiv) \
- V(__aeabi_idiv) \
- V(__aeabi_l2d) \
- V(__aeabi_l2f) \
- V(__aeabi_lasr) \
- V(__aeabi_ldivmod) \
- V(__aeabi_llsl) \
- V(__aeabi_llsr) \
- V(__aeabi_lmul) \
- V(__aeabi_memcpy) \
- V(__aeabi_memmove) \
- V(__aeabi_memset) \
- V(__aeabi_ui2d) \
- V(__aeabi_ui2f) \
- V(__aeabi_uidiv) \
- V(__aeabi_uidiv) \
- V(__aeabi_uidiv) \
- V(__aeabi_ul2d) \
- V(__aeabi_ul2f) \
- V(__aeabi_uldivmod) \
- V(__moddi3) \
- V(__modsi3) \
- V(__umoddi3) \
- V(__umodsi3) \
- V(fmod) \
- V(fmodf) \
- V(memcpy) \
- V(memmove) \
- V(memset)
+ V(__aeabi_d2f, float, double) \
+ V(__aeabi_d2iz, int, double) \
+ V(__aeabi_d2lz, long long, double) \
+ V(__aeabi_d2uiz, unsigned, double) \
+ V(__aeabi_d2ulz, unsigned long long, double) \
+ V(__aeabi_dadd, double, double, double) \
+ V(__aeabi_dcmpeq, int, double, double) \
+ V(__aeabi_dcmpge, int, double, double) \
+ V(__aeabi_dcmpgt, int, double, double) \
+ V(__aeabi_dcmple, int, double, double) \
+ V(__aeabi_dcmplt, int, double, double) \
+ V(__aeabi_dcmpun, int, double, double) \
+ V(__aeabi_ddiv, double, double, double) \
+ V(__aeabi_dmul, double, double, double) \
+ V(__aeabi_dsub, double, double, double) \
+ V(__aeabi_f2d, double, float) \
+ V(__aeabi_f2iz, int, float) \
+ V(__aeabi_f2lz, long long, float) \
+ V(__aeabi_f2uiz, unsigned int, float) \
+ V(__aeabi_f2ulz, unsigned long long, float) \
+ V(__aeabi_fadd, float, float, float) \
+ V(__aeabi_fcmpeq, int, float, float) \
+ V(__aeabi_fcmpge, int, float, float) \
+ V(__aeabi_fcmpgt, int, float, float) \
+ V(__aeabi_fcmple, int, float, float) \
+ V(__aeabi_fcmplt, int, float, float) \
+ V(__aeabi_fcmpun, int, float, float) \
+ V(__aeabi_fdiv, float, float, float) \
+ V(__aeabi_fmul, float, float, float) \
+ V(__aeabi_fsub, float, float, float) \
+ V(__aeabi_i2d, double, int) \
+ V(__aeabi_i2f, float, int) \
+ V(__aeabi_idiv, int, int, int) \
+ V(__aeabi_l2d, double, long long) \
+ V(__aeabi_l2f, float, long long) \
+ V(__aeabi_lasr, long long, long long, int) \
+ V(__aeabi_ldivmod, /* value in regs */ void, long long, long long) \
+ V(__aeabi_llsl, long long, long long, int) \
+ V(__aeabi_llsr, long long, long long, int) \
+ V(__aeabi_lmul, long long, long long, long long) \
+ V(__aeabi_memcpy, void, void *, const void *, size_t) \
+ V(__aeabi_memmove, void, void *, const void *, size_t) \
+ V(__aeabi_memset, void, void *, size_t, int) /* different from stdlib */ \
+ V(__aeabi_ui2d, double, unsigned int) \
+ V(__aeabi_ui2f, float, unsigned int) \
+ V(__aeabi_uidiv, unsigned int, unsigned int, unsigned int) \
+ V(__aeabi_ul2d, double, unsigned long long) \
+ V(__aeabi_ul2f, float, unsigned long long) \
+ V(__aeabi_uldivmod, /* value in regs */ void, unsigned long long, unsigned long long) \
+ V(__moddi3, long long, long long, long long) \
+ V(__modsi3, int, int, int) \
+ V(__umoddi3, unsigned long long, unsigned long long, unsigned long long) \
+ V(__umodsi3, unsigned int, unsigned int, unsigned int) \
+ V(fmod, double, double, double) \
+ V(fmodf, float, float, float) \
+ V(memcpy, void *, void *, const void *, size_t) \
+ V(memmove, void *, void *, const void *, size_t) \
+ V(memset, void *, void *, int, size_t)
#if defined(__arm__)
diff --git a/src/compiler_llvm/procedure_linkage_table.cc b/src/compiler_llvm/procedure_linkage_table.cc
index 8e03605..cb4a9ed 100644
--- a/src/compiler_llvm/procedure_linkage_table.cc
+++ b/src/compiler_llvm/procedure_linkage_table.cc
@@ -42,19 +42,19 @@
};
const char* const compiler_runtime_func_name_list_arm[] = {
-#define DEFINE_ENTRY(NAME) #NAME,
+#define DEFINE_ENTRY(NAME, RETURN_TYPE, ...) #NAME,
COMPILER_RUNTIME_FUNC_LIST_ARM(DEFINE_ENTRY)
#undef DEFINE_ENTRY
};
const char* const compiler_runtime_func_name_list_mips[] = {
-#define DEFINE_ENTRY(NAME) #NAME,
+#define DEFINE_ENTRY(NAME, RETURN_TYPE, ...) #NAME,
COMPILER_RUNTIME_FUNC_LIST_MIPS(DEFINE_ENTRY)
#undef DEFINE_ENTRY
};
const char* const compiler_runtime_func_name_list_x86[] = {
-#define DEFINE_ENTRY(NAME) #NAME,
+#define DEFINE_ENTRY(NAME, RETURN_TYPE, ...) #NAME,
COMPILER_RUNTIME_FUNC_LIST_X86(DEFINE_ENTRY)
#undef DEFINE_ENTRY
};
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index 4566995..bf3c9ba 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -34,8 +34,10 @@
#include "well_known_classes.h"
#include <algorithm>
-#include <cstdarg>
+#include <math.h>
+#include <stdarg.h>
#include <stdint.h>
+#include <stdlib.h>
#include "asm_support.h"
@@ -605,21 +607,22 @@
// Runtime Support Function Lookup Callback
//----------------------------------------------------------------------------
-#define EXTERNAL_LINKAGE(NAME) \
-extern "C" void NAME(...);
+#define EXTERNAL_LINKAGE(NAME, RETURN_TYPE, ...) \
+extern "C" RETURN_TYPE NAME(__VA_ARGS__);
COMPILER_RUNTIME_FUNC_LIST_NATIVE(EXTERNAL_LINKAGE)
#undef EXTERNAL_LINKAGE
static void* art_find_compiler_runtime_func(const char* name) {
// TODO: If target support some math func, use the target's version. (e.g. art_d2i -> __aeabi_d2iz)
static const char* const names[] = {
-#define DEFINE_ENTRY(NAME) #NAME ,
+#define DEFINE_ENTRY(NAME, RETURN_TYPE, ...) #NAME ,
COMPILER_RUNTIME_FUNC_LIST_NATIVE(DEFINE_ENTRY)
#undef DEFINE_ENTRY
};
static void* const funcs[] = {
-#define DEFINE_ENTRY(NAME) reinterpret_cast<void*>(NAME) ,
+#define DEFINE_ENTRY(NAME, RETURN_TYPE, ...) \
+ reinterpret_cast<void*>(static_cast<RETURN_TYPE (*)(__VA_ARGS__)>(NAME)) ,
COMPILER_RUNTIME_FUNC_LIST_NATIVE(DEFINE_ENTRY)
#undef DEFINE_ENTRY
};