2014-02-14 09:20:33 +00:00
|
|
|
# This directory contains a large amount of C code which provides
|
|
|
|
# generic implementations of the core runtime library along with optimized
|
|
|
|
# architecture-specific code in various subdirectories.
|
|
|
|
|
|
|
|
set(GENERIC_SOURCES
|
|
|
|
absvdi2.c
|
|
|
|
absvsi2.c
|
|
|
|
absvti2.c
|
|
|
|
adddf3.c
|
|
|
|
addsf3.c
|
2014-06-19 20:24:49 +00:00
|
|
|
addtf3.c
|
2014-02-14 09:20:33 +00:00
|
|
|
addvdi3.c
|
|
|
|
addvsi3.c
|
|
|
|
addvti3.c
|
|
|
|
apple_versioning.c
|
|
|
|
ashldi3.c
|
|
|
|
ashlti3.c
|
|
|
|
ashrdi3.c
|
|
|
|
ashrti3.c
|
|
|
|
# FIXME: atomic.c may only be compiled if host compiler understands _Atomic
|
|
|
|
# atomic.c
|
|
|
|
clear_cache.c
|
|
|
|
clzdi2.c
|
|
|
|
clzsi2.c
|
|
|
|
clzti2.c
|
|
|
|
cmpdi2.c
|
|
|
|
cmpti2.c
|
|
|
|
comparedf2.c
|
|
|
|
comparesf2.c
|
|
|
|
ctzdi2.c
|
|
|
|
ctzsi2.c
|
|
|
|
ctzti2.c
|
|
|
|
divdc3.c
|
|
|
|
divdf3.c
|
|
|
|
divdi3.c
|
|
|
|
divmoddi4.c
|
|
|
|
divmodsi4.c
|
|
|
|
divsc3.c
|
|
|
|
divsf3.c
|
|
|
|
divsi3.c
|
|
|
|
divti3.c
|
2014-06-19 20:24:49 +00:00
|
|
|
divtf3.c
|
2014-02-14 09:20:33 +00:00
|
|
|
divxc3.c
|
|
|
|
enable_execute_stack.c
|
|
|
|
eprintf.c
|
|
|
|
extendsfdf2.c
|
2015-05-12 18:33:42 +00:00
|
|
|
extendhfsf2.c
|
2014-02-14 09:20:33 +00:00
|
|
|
ffsdi2.c
|
|
|
|
ffsti2.c
|
|
|
|
fixdfdi.c
|
|
|
|
fixdfsi.c
|
|
|
|
fixdfti.c
|
|
|
|
fixsfdi.c
|
|
|
|
fixsfsi.c
|
|
|
|
fixsfti.c
|
|
|
|
fixunsdfdi.c
|
|
|
|
fixunsdfsi.c
|
|
|
|
fixunsdfti.c
|
|
|
|
fixunssfdi.c
|
|
|
|
fixunssfsi.c
|
|
|
|
fixunssfti.c
|
|
|
|
fixunsxfdi.c
|
|
|
|
fixunsxfsi.c
|
|
|
|
fixunsxfti.c
|
|
|
|
fixxfdi.c
|
|
|
|
fixxfti.c
|
|
|
|
floatdidf.c
|
|
|
|
floatdisf.c
|
|
|
|
floatdixf.c
|
|
|
|
floatsidf.c
|
|
|
|
floatsisf.c
|
|
|
|
floattidf.c
|
|
|
|
floattisf.c
|
|
|
|
floattixf.c
|
|
|
|
floatundidf.c
|
|
|
|
floatundisf.c
|
|
|
|
floatundixf.c
|
|
|
|
floatunsidf.c
|
|
|
|
floatunsisf.c
|
|
|
|
floatuntidf.c
|
|
|
|
floatuntisf.c
|
|
|
|
floatuntixf.c
|
|
|
|
int_util.c
|
|
|
|
lshrdi3.c
|
|
|
|
lshrti3.c
|
|
|
|
moddi3.c
|
|
|
|
modsi3.c
|
|
|
|
modti3.c
|
|
|
|
muldc3.c
|
|
|
|
muldf3.c
|
|
|
|
muldi3.c
|
|
|
|
mulodi4.c
|
|
|
|
mulosi4.c
|
|
|
|
muloti4.c
|
|
|
|
mulsc3.c
|
|
|
|
mulsf3.c
|
|
|
|
multi3.c
|
2014-06-19 20:34:03 +00:00
|
|
|
multf3.c
|
2014-02-14 09:20:33 +00:00
|
|
|
mulvdi3.c
|
|
|
|
mulvsi3.c
|
|
|
|
mulvti3.c
|
|
|
|
mulxc3.c
|
|
|
|
negdf2.c
|
|
|
|
negdi2.c
|
|
|
|
negsf2.c
|
|
|
|
negti2.c
|
|
|
|
negvdi2.c
|
|
|
|
negvsi2.c
|
|
|
|
negvti2.c
|
|
|
|
paritydi2.c
|
|
|
|
paritysi2.c
|
|
|
|
parityti2.c
|
|
|
|
popcountdi2.c
|
|
|
|
popcountsi2.c
|
|
|
|
popcountti2.c
|
|
|
|
powidf2.c
|
|
|
|
powisf2.c
|
|
|
|
powitf2.c
|
|
|
|
powixf2.c
|
|
|
|
subdf3.c
|
|
|
|
subsf3.c
|
|
|
|
subvdi3.c
|
|
|
|
subvsi3.c
|
|
|
|
subvti3.c
|
2014-06-19 20:24:49 +00:00
|
|
|
subtf3.c
|
2014-02-14 09:20:33 +00:00
|
|
|
trampoline_setup.c
|
2015-05-12 18:33:42 +00:00
|
|
|
truncdfhf2.c
|
2014-02-14 09:20:33 +00:00
|
|
|
truncdfsf2.c
|
2015-05-12 18:33:42 +00:00
|
|
|
truncsfhf2.c
|
2014-02-14 09:20:33 +00:00
|
|
|
ucmpdi2.c
|
|
|
|
ucmpti2.c
|
|
|
|
udivdi3.c
|
|
|
|
udivmoddi4.c
|
|
|
|
udivmodsi4.c
|
|
|
|
udivmodti4.c
|
|
|
|
udivsi3.c
|
|
|
|
udivti3.c
|
|
|
|
umoddi3.c
|
|
|
|
umodsi3.c
|
|
|
|
umodti3.c)
|
|
|
|
|
2015-09-23 15:28:44 +00:00
|
|
|
if(APPLE)
|
|
|
|
set(GENERIC_SOURCES
|
|
|
|
${GENERIC_SOURCES}
|
|
|
|
atomic_flag_clear.c
|
|
|
|
atomic_flag_clear_explicit.c
|
|
|
|
atomic_flag_test_and_set.c
|
|
|
|
atomic_flag_test_and_set_explicit.c
|
|
|
|
atomic_signal_fence.c
|
|
|
|
atomic_thread_fence.c)
|
|
|
|
endif()
|
|
|
|
|
2015-08-31 17:14:07 +00:00
|
|
|
if(NOT WIN32)
|
|
|
|
set(GENERIC_SOURCES
|
|
|
|
${GENERIC_SOURCES}
|
|
|
|
emutls.c)
|
|
|
|
endif()
|
|
|
|
|
2015-01-14 15:55:17 +00:00
|
|
|
if (HAVE_UNWIND_H)
|
|
|
|
set(GENERIC_SOURCES
|
|
|
|
${GENERIC_SOURCES}
|
|
|
|
gcc_personality_v0.c)
|
|
|
|
endif ()
|
|
|
|
|
2015-10-15 02:47:19 +00:00
|
|
|
if (NOT MSVC)
|
2015-07-17 16:23:05 +00:00
|
|
|
set(x86_64_SOURCES
|
2015-11-12 19:15:56 +00:00
|
|
|
x86_64/chkstk.S
|
|
|
|
x86_64/chkstk2.S
|
2015-10-15 02:47:19 +00:00
|
|
|
x86_64/floatdidf.c
|
|
|
|
x86_64/floatdisf.c
|
|
|
|
x86_64/floatdixf.c
|
|
|
|
x86_64/floatundidf.S
|
|
|
|
x86_64/floatundisf.S
|
|
|
|
x86_64/floatundixf.S
|
|
|
|
${GENERIC_SOURCES})
|
|
|
|
set(x86_64h_SOURCES ${x86_64_SOURCES})
|
2015-07-17 16:23:05 +00:00
|
|
|
|
2015-10-15 02:47:19 +00:00
|
|
|
if (WIN32)
|
|
|
|
set(x86_64_SOURCES
|
|
|
|
${x86_64_SOURCES}
|
2015-11-03 16:04:28 +00:00
|
|
|
x86_64/chkstk.S
|
2015-11-03 15:46:23 +00:00
|
|
|
x86_64/chkstk2.S)
|
2015-10-15 02:47:19 +00:00
|
|
|
endif()
|
2014-02-14 09:20:33 +00:00
|
|
|
|
2015-07-17 16:23:05 +00:00
|
|
|
set(i386_SOURCES
|
2015-10-15 02:47:19 +00:00
|
|
|
i386/ashldi3.S
|
|
|
|
i386/ashrdi3.S
|
2015-11-12 19:15:56 +00:00
|
|
|
i386/chkstk.S
|
|
|
|
i386/chkstk2.S
|
2015-10-15 02:47:19 +00:00
|
|
|
i386/divdi3.S
|
|
|
|
i386/floatdidf.S
|
|
|
|
i386/floatdisf.S
|
|
|
|
i386/floatdixf.S
|
|
|
|
i386/floatundidf.S
|
|
|
|
i386/floatundisf.S
|
|
|
|
i386/floatundixf.S
|
|
|
|
i386/lshrdi3.S
|
|
|
|
i386/moddi3.S
|
|
|
|
i386/muldi3.S
|
|
|
|
i386/udivdi3.S
|
|
|
|
i386/umoddi3.S
|
|
|
|
${GENERIC_SOURCES})
|
2015-07-17 16:23:05 +00:00
|
|
|
|
2015-10-15 02:47:19 +00:00
|
|
|
if (WIN32)
|
|
|
|
set(i386_SOURCES
|
|
|
|
${i386_SOURCES}
|
2015-11-03 16:04:28 +00:00
|
|
|
i386/chkstk.S
|
2015-11-03 15:46:23 +00:00
|
|
|
i386/chkstk2.S)
|
2015-10-15 02:47:19 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
set(i686_SOURCES
|
|
|
|
${i386_SOURCES})
|
|
|
|
else () # MSVC
|
|
|
|
# Use C versions of functions when building on MSVC
|
|
|
|
# MSVC's assembler takes Intel syntax, not AT&T syntax
|
|
|
|
set(x86_64_SOURCES
|
|
|
|
x86_64/floatdidf.c
|
|
|
|
x86_64/floatdisf.c
|
|
|
|
x86_64/floatdixf.c
|
|
|
|
${GENERIC_SOURCES})
|
|
|
|
set(x86_64h_SOURCES ${x86_64_SOURCES})
|
|
|
|
set(i386_SOURCES ${GENERIC_SOURCES})
|
|
|
|
set(i686_SOURCES ${i386_SOURCES})
|
|
|
|
endif () # if (NOT MSVC)
|
2014-10-01 12:55:06 +00:00
|
|
|
|
2014-02-14 09:20:33 +00:00
|
|
|
set(arm_SOURCES
|
|
|
|
arm/adddf3vfp.S
|
|
|
|
arm/addsf3vfp.S
|
2015-08-21 00:25:37 +00:00
|
|
|
arm/aeabi_cdcmp.S
|
|
|
|
arm/aeabi_cdcmpeq_check_nan.c
|
|
|
|
arm/aeabi_cfcmp.S
|
|
|
|
arm/aeabi_cfcmpeq_check_nan.c
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/aeabi_dcmp.S
|
2014-09-06 21:34:02 +00:00
|
|
|
arm/aeabi_div0.c
|
2015-08-18 18:10:33 +00:00
|
|
|
arm/aeabi_drsub.c
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/aeabi_fcmp.S
|
2015-08-18 18:10:33 +00:00
|
|
|
arm/aeabi_frsub.c
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/aeabi_idivmod.S
|
|
|
|
arm/aeabi_ldivmod.S
|
|
|
|
arm/aeabi_memcmp.S
|
|
|
|
arm/aeabi_memcpy.S
|
|
|
|
arm/aeabi_memmove.S
|
|
|
|
arm/aeabi_memset.S
|
|
|
|
arm/aeabi_uidivmod.S
|
|
|
|
arm/aeabi_uldivmod.S
|
|
|
|
arm/bswapdi2.S
|
|
|
|
arm/bswapsi2.S
|
2015-11-12 19:15:56 +00:00
|
|
|
arm/clzdi2.S
|
|
|
|
arm/clzsi2.S
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/comparesf2.S
|
|
|
|
arm/divdf3vfp.S
|
|
|
|
arm/divmodsi4.S
|
|
|
|
arm/divsf3vfp.S
|
|
|
|
arm/divsi3.S
|
|
|
|
arm/eqdf2vfp.S
|
|
|
|
arm/eqsf2vfp.S
|
|
|
|
arm/extendsfdf2vfp.S
|
|
|
|
arm/fixdfsivfp.S
|
|
|
|
arm/fixsfsivfp.S
|
|
|
|
arm/fixunsdfsivfp.S
|
|
|
|
arm/fixunssfsivfp.S
|
|
|
|
arm/floatsidfvfp.S
|
|
|
|
arm/floatsisfvfp.S
|
|
|
|
arm/floatunssidfvfp.S
|
|
|
|
arm/floatunssisfvfp.S
|
|
|
|
arm/gedf2vfp.S
|
|
|
|
arm/gesf2vfp.S
|
|
|
|
arm/gtdf2vfp.S
|
|
|
|
arm/gtsf2vfp.S
|
|
|
|
arm/ledf2vfp.S
|
|
|
|
arm/lesf2vfp.S
|
|
|
|
arm/ltdf2vfp.S
|
|
|
|
arm/ltsf2vfp.S
|
|
|
|
arm/modsi3.S
|
|
|
|
arm/muldf3vfp.S
|
|
|
|
arm/mulsf3vfp.S
|
|
|
|
arm/nedf2vfp.S
|
|
|
|
arm/negdf2vfp.S
|
|
|
|
arm/negsf2vfp.S
|
|
|
|
arm/nesf2vfp.S
|
|
|
|
arm/restore_vfp_d8_d15_regs.S
|
|
|
|
arm/save_vfp_d8_d15_regs.S
|
2015-11-12 19:15:56 +00:00
|
|
|
arm/softfloat-alias.list
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/subdf3vfp.S
|
|
|
|
arm/subsf3vfp.S
|
|
|
|
arm/switch16.S
|
|
|
|
arm/switch32.S
|
|
|
|
arm/switch8.S
|
|
|
|
arm/switchu8.S
|
2015-11-12 19:15:56 +00:00
|
|
|
arm/sync-ops.h
|
2014-03-04 10:10:17 +00:00
|
|
|
arm/sync_fetch_and_add_4.S
|
|
|
|
arm/sync_fetch_and_add_8.S
|
|
|
|
arm/sync_fetch_and_and_4.S
|
|
|
|
arm/sync_fetch_and_and_8.S
|
|
|
|
arm/sync_fetch_and_max_4.S
|
|
|
|
arm/sync_fetch_and_max_8.S
|
|
|
|
arm/sync_fetch_and_min_4.S
|
|
|
|
arm/sync_fetch_and_min_8.S
|
|
|
|
arm/sync_fetch_and_nand_4.S
|
|
|
|
arm/sync_fetch_and_nand_8.S
|
|
|
|
arm/sync_fetch_and_or_4.S
|
|
|
|
arm/sync_fetch_and_or_8.S
|
|
|
|
arm/sync_fetch_and_sub_4.S
|
|
|
|
arm/sync_fetch_and_sub_8.S
|
|
|
|
arm/sync_fetch_and_umax_4.S
|
|
|
|
arm/sync_fetch_and_umax_8.S
|
|
|
|
arm/sync_fetch_and_umin_4.S
|
|
|
|
arm/sync_fetch_and_umin_8.S
|
|
|
|
arm/sync_fetch_and_xor_4.S
|
|
|
|
arm/sync_fetch_and_xor_8.S
|
2014-02-14 09:20:33 +00:00
|
|
|
arm/sync_synchronize.S
|
|
|
|
arm/truncdfsf2vfp.S
|
|
|
|
arm/udivmodsi4.S
|
|
|
|
arm/udivsi3.S
|
|
|
|
arm/umodsi3.S
|
|
|
|
arm/unorddf2vfp.S
|
|
|
|
arm/unordsf2vfp.S
|
|
|
|
${GENERIC_SOURCES})
|
|
|
|
|
[compiler-rt] Add AArch64 to CMake configuration and several missing builtins
Summary:
Currently CMake doesn't build builtins for AArch64 and if one does this anyway
it's likely that at least `__multc3`, `__floatditf` and `__floatunditf` will be
missing. There is actually more builtins to add, but these come from
different libc implementations, thus providing them makes compiler-rt for
AArch64 good enough at least for basic usage.
Builtins implementation were originally taken from FreeBSD project:
* [[ https://reviews.freebsd.org/D2173 | __multc3 ]]
* [[ https://reviews.freebsd.org/D2174 | __floatditf and __floatunditf ]]
Until they have been tested to find mistakes in `__float*` functions.
`__floatditf` was based on `__floatsitf`, which had the same mistakes
(fixed it in r243746).
Version of the builtins in this patch are fixed and complemented with basic
tests. Additionally they were tested via GCC's torture (this is what revealed
these issues).
P.S. Ed (author of FreeBSD patches) asked for feedback on the list some time ago (here [[ http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-March/084064.html | here ]])
and got no response, but it seems to be worth adding these builtins as is and
extracting common part later.
Reviewers: howard.hinnant, t.p.northover, jmolloy, enefaim, rengolin, zatrazz
Subscribers: asl, emaste, samsonov, aemerson, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D11679
llvm-svn: 245296
2015-08-18 13:43:37 +00:00
|
|
|
set(aarch64_SOURCES
|
|
|
|
comparetf2.c
|
|
|
|
extenddftf2.c
|
|
|
|
extendsftf2.c
|
|
|
|
fixtfdi.c
|
|
|
|
fixtfsi.c
|
|
|
|
fixtfti.c
|
|
|
|
fixunstfdi.c
|
|
|
|
fixunstfsi.c
|
|
|
|
fixunstfti.c
|
|
|
|
floatditf.c
|
|
|
|
floatsitf.c
|
|
|
|
floatunditf.c
|
|
|
|
floatunsitf.c
|
|
|
|
multc3.c
|
|
|
|
trunctfdf2.c
|
|
|
|
trunctfsf2.c
|
|
|
|
${GENERIC_SOURCES})
|
|
|
|
|
2015-09-26 03:26:01 +00:00
|
|
|
set(armhf_SOURCES ${arm_SOURCES})
|
2015-08-31 21:24:50 +00:00
|
|
|
set(armv7_SOURCES ${arm_SOURCES})
|
|
|
|
set(armv7s_SOURCES ${arm_SOURCES})
|
|
|
|
set(arm64_SOURCES ${aarch64_SOURCES})
|
|
|
|
|
2015-09-29 23:13:45 +00:00
|
|
|
# macho_embedded archs
|
|
|
|
set(armv6m_SOURCES ${GENERIC_SOURCES})
|
|
|
|
set(armv7m_SOURCES ${arm_SOURCES})
|
|
|
|
set(armv7em_SOURCES ${arm_SOURCES})
|
|
|
|
|
2015-10-06 09:02:38 +00:00
|
|
|
set(mips_SOURCES ${GENERIC_SOURCES})
|
|
|
|
set(mipsel_SOURCES ${mips_SOURCES})
|
|
|
|
set(mips64_SOURCES ${mips_SOURCES})
|
|
|
|
set(mips64el_SOURCES ${mips_SOURCES})
|
|
|
|
|
2014-02-18 09:33:45 +00:00
|
|
|
add_custom_target(builtins)
|
|
|
|
|
2015-08-31 21:24:50 +00:00
|
|
|
if (APPLE)
|
2015-09-29 23:21:07 +00:00
|
|
|
add_subdirectory(Darwin-excludes)
|
|
|
|
add_subdirectory(macho_embedded)
|
2015-09-23 15:18:17 +00:00
|
|
|
darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS})
|
2015-10-11 22:30:10 +00:00
|
|
|
elseif (NOT WIN32 OR MINGW)
|
2015-08-31 21:24:50 +00:00
|
|
|
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
|
2014-07-26 23:44:22 +00:00
|
|
|
if (CAN_TARGET_${arch})
|
|
|
|
# Filter out generic versions of routines that are re-implemented in
|
|
|
|
# architecture specific manner. This prevents multiple definitions of the
|
|
|
|
# same symbols, making the symbol selection non-deterministic.
|
|
|
|
foreach (_file ${${arch}_SOURCES})
|
|
|
|
if (${_file} MATCHES ${arch}/*)
|
|
|
|
get_filename_component(_name ${_file} NAME)
|
|
|
|
string(REPLACE ".S" ".c" _cname "${_name}")
|
|
|
|
list(REMOVE_ITEM ${arch}_SOURCES ${_cname})
|
|
|
|
endif ()
|
|
|
|
endforeach ()
|
|
|
|
|
2015-08-25 19:53:09 +00:00
|
|
|
add_compiler_rt_runtime(clang_rt.builtins
|
|
|
|
STATIC
|
2015-08-31 21:24:50 +00:00
|
|
|
ARCHS ${arch}
|
2014-07-26 23:44:22 +00:00
|
|
|
SOURCES ${${arch}_SOURCES}
|
2015-08-25 19:53:09 +00:00
|
|
|
CFLAGS "-std=c99"
|
|
|
|
PARENT_TARGET builtins)
|
2014-07-26 23:44:22 +00:00
|
|
|
endif ()
|
|
|
|
endforeach ()
|
|
|
|
endif ()
|
2014-02-18 09:33:45 +00:00
|
|
|
|
|
|
|
add_dependencies(compiler-rt builtins)
|