summaryrefslogtreecommitdiffstats
path: root/lib/libcompiler_rt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libcompiler_rt')
-rw-r--r--lib/libcompiler_rt/CMakeLists.txt615
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/CMakeLists.txt4
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/README.TXT11
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios-armv7.txt57
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios-armv7s.txt57
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios.txt1
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios6-armv7.txt120
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios6-armv7s.txt120
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/ios7-arm64.txt16
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/iossim-i386.txt82
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/iossim-x86_64.txt12
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/iossim.txt1
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/osx-i386.txt35
-rw-r--r--lib/libcompiler_rt/Darwin-excludes/osx.txt7
-rw-r--r--lib/libcompiler_rt/LICENSE.TXT91
-rw-r--r--lib/libcompiler_rt/Makefile317
-rw-r--r--lib/libcompiler_rt/README.txt346
-rw-r--r--lib/libcompiler_rt/aarch64/chkstk.S34
-rw-r--r--lib/libcompiler_rt/absvdi2.c29
-rw-r--r--lib/libcompiler_rt/absvsi2.c29
-rw-r--r--lib/libcompiler_rt/absvti2.c34
-rw-r--r--lib/libcompiler_rt/adddf3.c30
-rw-r--r--lib/libcompiler_rt/addsf3.c30
-rw-r--r--lib/libcompiler_rt/addtf3.c25
-rw-r--r--lib/libcompiler_rt/addvdi3.c36
-rw-r--r--lib/libcompiler_rt/addvsi3.c36
-rw-r--r--lib/libcompiler_rt/addvti3.c40
-rw-r--r--lib/libcompiler_rt/apple_versioning.c350
-rw-r--r--lib/libcompiler_rt/arm/adddf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/addsf3.S277
-rw-r--r--lib/libcompiler_rt/arm/addsf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/aeabi_cdcmp.S145
-rw-r--r--lib/libcompiler_rt/arm/aeabi_cdcmpeq_check_nan.c16
-rw-r--r--lib/libcompiler_rt/arm/aeabi_cfcmp.S140
-rw-r--r--lib/libcompiler_rt/arm/aeabi_cfcmpeq_check_nan.c16
-rw-r--r--lib/libcompiler_rt/arm/aeabi_dcmp.S52
-rw-r--r--lib/libcompiler_rt/arm/aeabi_div0.c45
-rw-r--r--lib/libcompiler_rt/arm/aeabi_drsub.c19
-rw-r--r--lib/libcompiler_rt/arm/aeabi_fcmp.S52
-rw-r--r--lib/libcompiler_rt/arm/aeabi_frsub.c19
-rw-r--r--lib/libcompiler_rt/arm/aeabi_idivmod.S51
-rw-r--r--lib/libcompiler_rt/arm/aeabi_ldivmod.S46
-rw-r--r--lib/libcompiler_rt/arm/aeabi_memcmp.S30
-rw-r--r--lib/libcompiler_rt/arm/aeabi_memcpy.S30
-rw-r--r--lib/libcompiler_rt/arm/aeabi_memmove.S29
-rw-r--r--lib/libcompiler_rt/arm/aeabi_memset.S50
-rw-r--r--lib/libcompiler_rt/arm/aeabi_uidivmod.S58
-rw-r--r--lib/libcompiler_rt/arm/aeabi_uldivmod.S46
-rw-r--r--lib/libcompiler_rt/arm/bswapdi2.S44
-rw-r--r--lib/libcompiler_rt/arm/bswapsi2.S36
-rw-r--r--lib/libcompiler_rt/arm/chkstk.S34
-rw-r--r--lib/libcompiler_rt/arm/clzdi2.S93
-rw-r--r--lib/libcompiler_rt/arm/clzsi2.S73
-rw-r--r--lib/libcompiler_rt/arm/comparesf2.S296
-rw-r--r--lib/libcompiler_rt/arm/divdf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/divmodsi4.S71
-rw-r--r--lib/libcompiler_rt/arm/divsf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/divsi3.S82
-rw-r--r--lib/libcompiler_rt/arm/eqdf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/eqsf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/extendsfdf2vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/fixdfsivfp.S34
-rw-r--r--lib/libcompiler_rt/arm/fixsfsivfp.S34
-rw-r--r--lib/libcompiler_rt/arm/fixunsdfsivfp.S35
-rw-r--r--lib/libcompiler_rt/arm/fixunssfsivfp.S35
-rw-r--r--lib/libcompiler_rt/arm/floatsidfvfp.S34
-rw-r--r--lib/libcompiler_rt/arm/floatsisfvfp.S34
-rw-r--r--lib/libcompiler_rt/arm/floatunssidfvfp.S34
-rw-r--r--lib/libcompiler_rt/arm/floatunssisfvfp.S34
-rw-r--r--lib/libcompiler_rt/arm/gedf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/gesf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/gtdf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/gtsf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/ledf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/lesf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/ltdf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/ltsf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/modsi3.S60
-rw-r--r--lib/libcompiler_rt/arm/muldf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/mulsf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/nedf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/negdf2vfp.S30
-rw-r--r--lib/libcompiler_rt/arm/negsf2vfp.S30
-rw-r--r--lib/libcompiler_rt/arm/nesf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/restore_vfp_d8_d15_regs.S35
-rw-r--r--lib/libcompiler_rt/arm/save_vfp_d8_d15_regs.S35
-rw-r--r--lib/libcompiler_rt/arm/softfloat-alias.list21
-rw-r--r--lib/libcompiler_rt/arm/subdf3vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/subsf3vfp.S34
-rw-r--r--lib/libcompiler_rt/arm/switch16.S46
-rw-r--r--lib/libcompiler_rt/arm/switch32.S46
-rw-r--r--lib/libcompiler_rt/arm/switch8.S44
-rw-r--r--lib/libcompiler_rt/arm/switchu8.S44
-rw-r--r--lib/libcompiler_rt/arm/sync-ops.h64
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_add_4.S23
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_add_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_and_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_and_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_max_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_max_8.S24
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_min_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_min_8.S24
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_nand_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_nand_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_or_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_or_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_sub_4.S23
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_sub_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_umax_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_umax_8.S24
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_umin_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_umin_8.S24
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_xor_4.S22
-rw-r--r--lib/libcompiler_rt/arm/sync_fetch_and_xor_8.S26
-rw-r--r--lib/libcompiler_rt/arm/sync_synchronize.S38
-rw-r--r--lib/libcompiler_rt/arm/truncdfsf2vfp.S33
-rw-r--r--lib/libcompiler_rt/arm/udivmodsi4.S180
-rw-r--r--lib/libcompiler_rt/arm/udivsi3.S264
-rw-r--r--lib/libcompiler_rt/arm/umodsi3.S158
-rw-r--r--lib/libcompiler_rt/arm/unorddf2vfp.S37
-rw-r--r--lib/libcompiler_rt/arm/unordsf2vfp.S37
-rw-r--r--lib/libcompiler_rt/ashldi3.c45
-rw-r--r--lib/libcompiler_rt/ashlti3.c45
-rw-r--r--lib/libcompiler_rt/ashrdi3.c46
-rw-r--r--lib/libcompiler_rt/ashrti3.c46
-rw-r--r--lib/libcompiler_rt/assembly.h204
-rw-r--r--lib/libcompiler_rt/atomic.c338
-rw-r--r--lib/libcompiler_rt/atomic_flag_clear.c27
-rw-r--r--lib/libcompiler_rt/atomic_flag_clear_explicit.c28
-rw-r--r--lib/libcompiler_rt/atomic_flag_test_and_set.c27
-rw-r--r--lib/libcompiler_rt/atomic_flag_test_and_set_explicit.c28
-rw-r--r--lib/libcompiler_rt/atomic_signal_fence.c27
-rw-r--r--lib/libcompiler_rt/atomic_thread_fence.c27
-rw-r--r--lib/libcompiler_rt/bswapdi2.c27
-rw-r--r--lib/libcompiler_rt/bswapsi2.c23
-rw-r--r--lib/libcompiler_rt/clear_cache.c199
-rw-r--r--lib/libcompiler_rt/clzdi2.c40
-rw-r--r--lib/libcompiler_rt/clzsi2.c53
-rw-r--r--lib/libcompiler_rt/clzti2.c33
-rw-r--r--lib/libcompiler_rt/cmpdi2.c51
-rw-r--r--lib/libcompiler_rt/cmpti2.c42
-rw-r--r--lib/libcompiler_rt/comparedf2.c153
-rw-r--r--lib/libcompiler_rt/comparesf2.c153
-rw-r--r--lib/libcompiler_rt/comparetf2.c138
-rw-r--r--lib/libcompiler_rt/cpu_model.c651
-rw-r--r--lib/libcompiler_rt/ctzdi2.c40
-rw-r--r--lib/libcompiler_rt/ctzsi2.c57
-rw-r--r--lib/libcompiler_rt/ctzti2.c33
-rw-r--r--lib/libcompiler_rt/divdc3.c62
-rw-r--r--lib/libcompiler_rt/divdf3.c193
-rw-r--r--lib/libcompiler_rt/divdi3.c29
-rw-r--r--lib/libcompiler_rt/divmoddi4.c25
-rw-r--r--lib/libcompiler_rt/divmodsi4.c27
-rw-r--r--lib/libcompiler_rt/divsc3.c63
-rw-r--r--lib/libcompiler_rt/divsf3.c177
-rw-r--r--lib/libcompiler_rt/divsi3.c39
-rw-r--r--lib/libcompiler_rt/divtc3.c63
-rw-r--r--lib/libcompiler_rt/divtf3.c203
-rw-r--r--lib/libcompiler_rt/divti3.c33
-rw-r--r--lib/libcompiler_rt/divxc3.c63
-rw-r--r--lib/libcompiler_rt/emutls.c405
-rw-r--r--lib/libcompiler_rt/enable_execute_stack.c72
-rw-r--r--lib/libcompiler_rt/eprintf.c35
-rw-r--r--lib/libcompiler_rt/extenddftf2.c23
-rw-r--r--lib/libcompiler_rt/extendhfsf2.c33
-rw-r--r--lib/libcompiler_rt/extendsfdf2.c27
-rw-r--r--lib/libcompiler_rt/extendsftf2.c23
-rw-r--r--lib/libcompiler_rt/ffsdi2.c33
-rw-r--r--lib/libcompiler_rt/ffssi2.c29
-rw-r--r--lib/libcompiler_rt/ffsti2.c37
-rw-r--r--lib/libcompiler_rt/fixdfdi.c55
-rw-r--r--lib/libcompiler_rt/fixdfsi.c30
-rw-r--r--lib/libcompiler_rt/fixdfti.c26
-rw-r--r--lib/libcompiler_rt/fixsfdi.c55
-rw-r--r--lib/libcompiler_rt/fixsfsi.c30
-rw-r--r--lib/libcompiler_rt/fixsfti.c26
-rw-r--r--lib/libcompiler_rt/fixtfdi.c23
-rw-r--r--lib/libcompiler_rt/fixtfsi.c23
-rw-r--r--lib/libcompiler_rt/fixtfti.c23
-rw-r--r--lib/libcompiler_rt/fixunsdfdi.c52
-rw-r--r--lib/libcompiler_rt/fixunsdfsi.c29
-rw-r--r--lib/libcompiler_rt/fixunsdfti.c23
-rw-r--r--lib/libcompiler_rt/fixunssfdi.c53
-rw-r--r--lib/libcompiler_rt/fixunssfsi.c33
-rw-r--r--lib/libcompiler_rt/fixunssfti.c26
-rw-r--r--lib/libcompiler_rt/fixunstfdi.c22
-rw-r--r--lib/libcompiler_rt/fixunstfsi.c22
-rw-r--r--lib/libcompiler_rt/fixunstfti.c22
-rw-r--r--lib/libcompiler_rt/fixunsxfdi.c46
-rw-r--r--lib/libcompiler_rt/fixunsxfsi.c45
-rw-r--r--lib/libcompiler_rt/fixunsxfti.c50
-rw-r--r--lib/libcompiler_rt/fixxfdi.c48
-rw-r--r--lib/libcompiler_rt/fixxfti.c51
-rw-r--r--lib/libcompiler_rt/floatdidf.c115
-rw-r--r--lib/libcompiler_rt/floatdisf.c88
-rw-r--r--lib/libcompiler_rt/floatditf.c50
-rw-r--r--lib/libcompiler_rt/floatdixf.c46
-rw-r--r--lib/libcompiler_rt/floatsidf.c61
-rw-r--r--lib/libcompiler_rt/floatsisf.c67
-rw-r--r--lib/libcompiler_rt/floatsitf.c50
-rw-r--r--lib/libcompiler_rt/floattidf.c83
-rw-r--r--lib/libcompiler_rt/floattisf.c82
-rw-r--r--lib/libcompiler_rt/floattitf.c82
-rw-r--r--lib/libcompiler_rt/floattixf.c84
-rw-r--r--lib/libcompiler_rt/floatundidf.c114
-rw-r--r--lib/libcompiler_rt/floatundisf.c85
-rw-r--r--lib/libcompiler_rt/floatunditf.c40
-rw-r--r--lib/libcompiler_rt/floatundixf.c42
-rw-r--r--lib/libcompiler_rt/floatunsidf.c50
-rw-r--r--lib/libcompiler_rt/floatunsisf.c58
-rw-r--r--lib/libcompiler_rt/floatunsitf.c40
-rw-r--r--lib/libcompiler_rt/floatuntidf.c80
-rw-r--r--lib/libcompiler_rt/floatuntisf.c79
-rw-r--r--lib/libcompiler_rt/floatuntitf.c79
-rw-r--r--lib/libcompiler_rt/floatuntixf.c81
-rw-r--r--lib/libcompiler_rt/fp_add_impl.inc144
-rw-r--r--lib/libcompiler_rt/fp_extend.h89
-rw-r--r--lib/libcompiler_rt/fp_extend_impl.inc108
-rw-r--r--lib/libcompiler_rt/fp_fixint_impl.inc41
-rw-r--r--lib/libcompiler_rt/fp_fixuint_impl.inc39
-rw-r--r--lib/libcompiler_rt/fp_lib.h327
-rw-r--r--lib/libcompiler_rt/fp_mul_impl.inc116
-rw-r--r--lib/libcompiler_rt/fp_trunc.h76
-rw-r--r--lib/libcompiler_rt/fp_trunc_impl.inc135
-rw-r--r--lib/libcompiler_rt/gcc_personality_v0.c251
-rw-r--r--lib/libcompiler_rt/i386/ashldi3.S61
-rw-r--r--lib/libcompiler_rt/i386/ashrdi3.S72
-rw-r--r--lib/libcompiler_rt/i386/chkstk.S34
-rw-r--r--lib/libcompiler_rt/i386/chkstk2.S40
-rw-r--r--lib/libcompiler_rt/i386/divdi3.S165
-rw-r--r--lib/libcompiler_rt/i386/floatdidf.S42
-rw-r--r--lib/libcompiler_rt/i386/floatdisf.S35
-rw-r--r--lib/libcompiler_rt/i386/floatdixf.S33
-rw-r--r--lib/libcompiler_rt/i386/floatundidf.S55
-rw-r--r--lib/libcompiler_rt/i386/floatundisf.S108
-rw-r--r--lib/libcompiler_rt/i386/floatundixf.S46
-rw-r--r--lib/libcompiler_rt/i386/lshrdi3.S62
-rw-r--r--lib/libcompiler_rt/i386/moddi3.S169
-rw-r--r--lib/libcompiler_rt/i386/muldi3.S33
-rw-r--r--lib/libcompiler_rt/i386/udivdi3.S118
-rw-r--r--lib/libcompiler_rt/i386/umoddi3.S129
-rw-r--r--lib/libcompiler_rt/int_endianness.h116
-rw-r--r--lib/libcompiler_rt/int_lib.h134
-rw-r--r--lib/libcompiler_rt/int_math.h110
-rw-r--r--lib/libcompiler_rt/int_types.h185
-rw-r--r--lib/libcompiler_rt/int_util.c71
-rw-r--r--lib/libcompiler_rt/int_util.h33
-rw-r--r--lib/libcompiler_rt/lshrdi3.c45
-rw-r--r--lib/libcompiler_rt/lshrti3.c45
-rw-r--r--lib/libcompiler_rt/macho_embedded/CMakeLists.txt4
-rw-r--r--lib/libcompiler_rt/macho_embedded/arm.txt16
-rw-r--r--lib/libcompiler_rt/macho_embedded/common.txt92
-rw-r--r--lib/libcompiler_rt/macho_embedded/i386.txt7
-rw-r--r--lib/libcompiler_rt/macho_embedded/thumb2-64.txt10
-rw-r--r--lib/libcompiler_rt/macho_embedded/thumb2.txt14
-rw-r--r--lib/libcompiler_rt/mingw_fixfloat.c36
-rw-r--r--lib/libcompiler_rt/moddi3.c30
-rw-r--r--lib/libcompiler_rt/modsi3.c23
-rw-r--r--lib/libcompiler_rt/modti3.c34
-rw-r--r--lib/libcompiler_rt/muldc3.c73
-rw-r--r--lib/libcompiler_rt/muldf3.c30
-rw-r--r--lib/libcompiler_rt/muldi3.c58
-rw-r--r--lib/libcompiler_rt/mulodi4.c58
-rw-r--r--lib/libcompiler_rt/mulosi4.c58
-rw-r--r--lib/libcompiler_rt/muloti4.c62
-rw-r--r--lib/libcompiler_rt/mulsc3.c73
-rw-r--r--lib/libcompiler_rt/mulsf3.c30
-rw-r--r--lib/libcompiler_rt/multc3.c68
-rw-r--r--lib/libcompiler_rt/multf3.c25
-rw-r--r--lib/libcompiler_rt/multi3.c58
-rw-r--r--lib/libcompiler_rt/mulvdi3.c56
-rw-r--r--lib/libcompiler_rt/mulvsi3.c56
-rw-r--r--lib/libcompiler_rt/mulvti3.c60
-rw-r--r--lib/libcompiler_rt/mulxc3.c77
-rw-r--r--lib/libcompiler_rt/negdf2.c30
-rw-r--r--lib/libcompiler_rt/negdi2.c26
-rw-r--r--lib/libcompiler_rt/negsf2.c30
-rw-r--r--lib/libcompiler_rt/negti2.c30
-rw-r--r--lib/libcompiler_rt/negvdi2.c28
-rw-r--r--lib/libcompiler_rt/negvsi2.c28
-rw-r--r--lib/libcompiler_rt/negvti2.c32
-rw-r--r--lib/libcompiler_rt/paritydi2.c25
-rw-r--r--lib/libcompiler_rt/paritysi2.c27
-rw-r--r--lib/libcompiler_rt/parityti2.c29
-rw-r--r--lib/libcompiler_rt/popcountdi2.c36
-rw-r--r--lib/libcompiler_rt/popcountsi2.c33
-rw-r--r--lib/libcompiler_rt/popcountti2.c44
-rw-r--r--lib/libcompiler_rt/powidf2.c34
-rw-r--r--lib/libcompiler_rt/powisf2.c34
-rw-r--r--lib/libcompiler_rt/powitf2.c38
-rw-r--r--lib/libcompiler_rt/powixf2.c38
-rw-r--r--lib/libcompiler_rt/ppc/DD.h45
-rw-r--r--lib/libcompiler_rt/ppc/atomic_lock_free.c22
-rw-r--r--lib/libcompiler_rt/ppc/divtc3.c97
-rw-r--r--lib/libcompiler_rt/ppc/fixtfdi.c104
-rw-r--r--lib/libcompiler_rt/ppc/fixunstfdi.c59
-rw-r--r--lib/libcompiler_rt/ppc/fixunstfti.c106
-rw-r--r--lib/libcompiler_rt/ppc/floatditf.c36
-rw-r--r--lib/libcompiler_rt/ppc/floattitf.c48
-rw-r--r--lib/libcompiler_rt/ppc/floatunditf.c41
-rw-r--r--lib/libcompiler_rt/ppc/gcc_qadd.c76
-rw-r--r--lib/libcompiler_rt/ppc/gcc_qdiv.c55
-rw-r--r--lib/libcompiler_rt/ppc/gcc_qmul.c53
-rw-r--r--lib/libcompiler_rt/ppc/gcc_qsub.c76
-rw-r--r--lib/libcompiler_rt/ppc/multc3.c90
-rw-r--r--lib/libcompiler_rt/ppc/restFP.S46
-rw-r--r--lib/libcompiler_rt/ppc/saveFP.S43
-rw-r--r--lib/libcompiler_rt/riscv/mulsi3.S28
-rw-r--r--lib/libcompiler_rt/subdf3.c32
-rw-r--r--lib/libcompiler_rt/subsf3.c32
-rw-r--r--lib/libcompiler_rt/subtf3.c27
-rw-r--r--lib/libcompiler_rt/subvdi3.c36
-rw-r--r--lib/libcompiler_rt/subvsi3.c36
-rw-r--r--lib/libcompiler_rt/subvti3.c40
-rw-r--r--lib/libcompiler_rt/trampoline_setup.c48
-rw-r--r--lib/libcompiler_rt/truncdfhf2.c26
-rw-r--r--lib/libcompiler_rt/truncdfsf2.c26
-rw-r--r--lib/libcompiler_rt/truncsfhf2.c32
-rw-r--r--lib/libcompiler_rt/trunctfdf2.c22
-rw-r--r--lib/libcompiler_rt/trunctfsf2.c22
-rw-r--r--lib/libcompiler_rt/ucmpdi2.c51
-rw-r--r--lib/libcompiler_rt/ucmpti2.c42
-rw-r--r--lib/libcompiler_rt/udivdi3.c23
-rw-r--r--lib/libcompiler_rt/udivmoddi4.c231
-rw-r--r--lib/libcompiler_rt/udivmodsi4.c27
-rw-r--r--lib/libcompiler_rt/udivmodti4.c238
-rw-r--r--lib/libcompiler_rt/udivsi3.c68
-rw-r--r--lib/libcompiler_rt/udivti3.c27
-rw-r--r--lib/libcompiler_rt/umoddi3.c25
-rw-r--r--lib/libcompiler_rt/umodsi3.c23
-rw-r--r--lib/libcompiler_rt/umodti3.c29
-rw-r--r--lib/libcompiler_rt/unwind-ehabi-helpers.h55
-rw-r--r--lib/libcompiler_rt/x86_64/chkstk.S39
-rw-r--r--lib/libcompiler_rt/x86_64/chkstk2.S42
-rw-r--r--lib/libcompiler_rt/x86_64/floatdidf.c16
-rw-r--r--lib/libcompiler_rt/x86_64/floatdisf.c14
-rw-r--r--lib/libcompiler_rt/x86_64/floatdixf.c16
-rw-r--r--lib/libcompiler_rt/x86_64/floatundidf.S52
-rw-r--r--lib/libcompiler_rt/x86_64/floatundisf.S38
-rw-r--r--lib/libcompiler_rt/x86_64/floatundixf.S71
340 files changed, 0 insertions, 21199 deletions
diff --git a/lib/libcompiler_rt/CMakeLists.txt b/lib/libcompiler_rt/CMakeLists.txt
deleted file mode 100644
index 77947417bfe..00000000000
--- a/lib/libcompiler_rt/CMakeLists.txt
+++ /dev/null
@@ -1,615 +0,0 @@
-# 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.
-
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
- cmake_minimum_required(VERSION 3.4.3)
-
- project(CompilerRTBuiltins C ASM)
- set(COMPILER_RT_STANDALONE_BUILD TRUE)
- set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE)
- list(INSERT CMAKE_MODULE_PATH 0
- "${CMAKE_SOURCE_DIR}/../../cmake"
- "${CMAKE_SOURCE_DIR}/../../cmake/Modules")
- include(base-config-ix)
- include(CompilerRTUtils)
-
- load_llvm_config()
- construct_compiler_rt_default_triple()
-
- if(APPLE)
- include(CompilerRTDarwinUtils)
- endif()
- include(AddCompilerRT)
-endif()
-
-include(builtin-config-ix)
-
-# TODO: Need to add a mechanism for logging errors when builtin source files are
-# added to a sub-directory and not this CMakeLists file.
-set(GENERIC_SOURCES
- absvdi2.c
- absvsi2.c
- absvti2.c
- adddf3.c
- addsf3.c
- addtf3.c
- addvdi3.c
- addvsi3.c
- addvti3.c
- apple_versioning.c
- ashldi3.c
- ashlti3.c
- ashrdi3.c
- ashrti3.c
- bswapdi2.c
- bswapsi2.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
- divtc3.c
- divti3.c
- divtf3.c
- extendsfdf2.c
- extendhfsf2.c
- ffsdi2.c
- ffssi2.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
- floatdidf.c
- floatdisf.c
- floatsidf.c
- floatsisf.c
- floattidf.c
- floattisf.c
- floatundidf.c
- floatundisf.c
- floatunsidf.c
- floatunsisf.c
- floatuntidf.c
- floatuntisf.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
- multf3.c
- mulvdi3.c
- mulvsi3.c
- mulvti3.c
- negdf2.c
- negdi2.c
- negsf2.c
- negti2.c
- negvdi2.c
- negvsi2.c
- negvti2.c
- os_version_check.c
- paritydi2.c
- paritysi2.c
- parityti2.c
- popcountdi2.c
- popcountsi2.c
- popcountti2.c
- powidf2.c
- powisf2.c
- powitf2.c
- subdf3.c
- subsf3.c
- subvdi3.c
- subvsi3.c
- subvti3.c
- subtf3.c
- trampoline_setup.c
- truncdfhf2.c
- truncdfsf2.c
- truncsfhf2.c
- ucmpdi2.c
- ucmpti2.c
- udivdi3.c
- udivmoddi4.c
- udivmodsi4.c
- udivmodti4.c
- udivsi3.c
- udivti3.c
- umoddi3.c
- umodsi3.c
- umodti3.c)
-
-set(GENERIC_TF_SOURCES
- comparetf2.c
- extenddftf2.c
- extendsftf2.c
- fixtfdi.c
- fixtfsi.c
- fixtfti.c
- fixunstfdi.c
- fixunstfsi.c
- fixunstfti.c
- floatditf.c
- floatsitf.c
- floattitf.c
- floatunditf.c
- floatunsitf.c
- floatuntitf.c
- multc3.c
- trunctfdf2.c
- trunctfsf2.c)
-
-option(COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN
- "Skip the atomic builtin (these should normally be provided by a shared library)"
- On)
-
-if(NOT FUCHSIA AND NOT COMPILER_RT_BAREMETAL_BUILD)
- set(GENERIC_SOURCES
- ${GENERIC_SOURCES}
- emutls.c
- enable_execute_stack.c
- eprintf.c)
-endif()
-
-if(COMPILER_RT_HAS_ATOMIC_KEYWORD AND NOT COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN)
- set(GENERIC_SOURCES
- ${GENERIC_SOURCES}
- atomic.c)
-endif()
-
-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()
-
-if (HAVE_UNWIND_H)
- set(GENERIC_SOURCES
- ${GENERIC_SOURCES}
- gcc_personality_v0.c)
-endif ()
-
-if (NOT FUCHSIA)
- set(GENERIC_SOURCES
- ${GENERIC_SOURCES}
- clear_cache.c)
-endif()
-
-# These sources work on all x86 variants, but only x86 variants.
-set(x86_ARCH_SOURCES
- cpu_model.c
- divxc3.c
- fixxfdi.c
- fixxfti.c
- fixunsxfdi.c
- fixunsxfsi.c
- fixunsxfti.c
- floatdixf.c
- floattixf.c
- floatundixf.c
- floatuntixf.c
- mulxc3.c
- powixf2.c
-)
-
-if (NOT MSVC)
- set(x86_64_SOURCES
- x86_64/floatdidf.c
- x86_64/floatdisf.c
- x86_64/floatdixf.c
- x86_64/floatundidf.S
- x86_64/floatundisf.S
- x86_64/floatundixf.S)
- filter_builtin_sources(x86_64_SOURCES EXCLUDE x86_64_SOURCES "${x86_64_SOURCES};${GENERIC_SOURCES}")
- set(x86_64h_SOURCES ${x86_64_SOURCES})
-
- if (WIN32)
- set(x86_64_SOURCES
- ${x86_64_SOURCES}
- x86_64/chkstk.S
- x86_64/chkstk2.S)
- endif()
-
- set(i386_SOURCES
- i386/ashldi3.S
- i386/ashrdi3.S
- 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)
- filter_builtin_sources(i386_SOURCES EXCLUDE i386_SOURCES "${i386_SOURCES};${GENERIC_SOURCES}")
-
- if (WIN32)
- set(i386_SOURCES
- ${i386_SOURCES}
- i386/chkstk.S
- i386/chkstk2.S)
- endif()
-else () # MSVC
- # Use C versions of functions when building on MSVC
- # MSVC's assembler takes Intel syntax, not AT&T syntax.
- # Also use only MSVC compilable builtin implementations.
- 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})
-endif () # if (NOT MSVC)
-
-set(x86_64h_SOURCES ${x86_64h_SOURCES} ${x86_ARCH_SOURCES})
-set(x86_64_SOURCES ${x86_64_SOURCES} ${x86_ARCH_SOURCES})
-set(i386_SOURCES ${i386_SOURCES} ${x86_ARCH_SOURCES})
-set(i686_SOURCES ${i686_SOURCES} ${x86_ARCH_SOURCES})
-
-set(arm_SOURCES
- arm/bswapdi2.S
- arm/bswapsi2.S
- arm/clzdi2.S
- arm/clzsi2.S
- arm/comparesf2.S
- arm/divmodsi4.S
- arm/divsi3.S
- arm/modsi3.S
- 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
- arm/udivmodsi4.S
- arm/udivsi3.S
- arm/umodsi3.S)
-filter_builtin_sources(arm_SOURCES EXCLUDE arm_SOURCES "${arm_SOURCES};${GENERIC_SOURCES}")
-
-set(thumb1_SOURCES
- arm/divsi3.S
- arm/udivsi3.S
- arm/comparesf2.S
- arm/addsf3.S
- ${GENERIC_SOURCES})
-
-set(arm_EABI_SOURCES
- arm/aeabi_cdcmp.S
- arm/aeabi_cdcmpeq_check_nan.c
- arm/aeabi_cfcmp.S
- arm/aeabi_cfcmpeq_check_nan.c
- arm/aeabi_dcmp.S
- arm/aeabi_div0.c
- arm/aeabi_drsub.c
- arm/aeabi_fcmp.S
- arm/aeabi_frsub.c
- 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)
-
-set(arm_Thumb1_JT_SOURCES
- arm/switch16.S
- arm/switch32.S
- arm/switch8.S
- arm/switchu8.S)
-set(arm_Thumb1_SjLj_EH_SOURCES
- arm/restore_vfp_d8_d15_regs.S
- arm/save_vfp_d8_d15_regs.S)
-set(arm_Thumb1_VFPv2_SOURCES
- arm/adddf3vfp.S
- arm/addsf3vfp.S
- arm/divdf3vfp.S
- arm/divsf3vfp.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/muldf3vfp.S
- arm/mulsf3vfp.S
- arm/nedf2vfp.S
- arm/negdf2vfp.S
- arm/negsf2vfp.S
- arm/nesf2vfp.S
- arm/subdf3vfp.S
- arm/subsf3vfp.S
- arm/truncdfsf2vfp.S
- arm/unorddf2vfp.S
- arm/unordsf2vfp.S)
-set(arm_Thumb1_icache_SOURCES
- arm/sync_synchronize.S)
-set(arm_Thumb1_SOURCES
- ${arm_Thumb1_JT_SOURCES}
- ${arm_Thumb1_SjLj_EH_SOURCES}
- ${arm_Thumb1_VFPv2_SOURCES}
- ${arm_Thumb1_icache_SOURCES})
-
-if(MINGW)
- set(arm_SOURCES
- arm/aeabi_idivmod.S
- arm/aeabi_ldivmod.S
- arm/aeabi_uidivmod.S
- arm/aeabi_uldivmod.S
- arm/chkstk.S
- divmoddi4.c
- divmodsi4.c
- divdi3.c
- divsi3.c
- fixdfdi.c
- fixsfdi.c
- fixunsdfdi.c
- fixunssfdi.c
- floatdidf.c
- floatdisf.c
- floatundidf.c
- floatundisf.c
- mingw_fixfloat.c
- moddi3.c
- udivmoddi4.c
- udivmodsi4.c
- udivsi3.c
- umoddi3.c
- emutls.c)
- filter_builtin_sources(arm_SOURCES EXCLUDE arm_SOURCES "${arm_SOURCES};${GENERIC_SOURCES}")
-elseif(NOT WIN32)
- # TODO the EABI sources should only be added to EABI targets
- set(arm_SOURCES
- ${arm_SOURCES}
- ${arm_EABI_SOURCES}
- ${arm_Thumb1_SOURCES})
-
- set(thumb1_SOURCES
- ${thumb1_SOURCES}
- ${arm_EABI_SOURCES})
-endif()
-
-set(aarch64_SOURCES
- ${GENERIC_TF_SOURCES}
- ${GENERIC_SOURCES})
-
-if (MINGW)
- set(aarch64_SOURCES
- ${aarch64_SOURCES}
- aarch64/chkstk.S)
-endif()
-
-set(armhf_SOURCES ${arm_SOURCES})
-set(armv7_SOURCES ${arm_SOURCES})
-set(armv7s_SOURCES ${arm_SOURCES})
-set(armv7k_SOURCES ${arm_SOURCES})
-set(arm64_SOURCES ${aarch64_SOURCES})
-
-# macho_embedded archs
-set(armv6m_SOURCES ${thumb1_SOURCES})
-set(armv7m_SOURCES ${arm_SOURCES})
-set(armv7em_SOURCES ${arm_SOURCES})
-
-# hexagon arch
-set(hexagon_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
-set(hexagon_SOURCES
- hexagon/common_entry_exit_abi1.S
- hexagon/common_entry_exit_abi2.S
- hexagon/common_entry_exit_legacy.S
- hexagon/dfaddsub.S
- hexagon/dfdiv.S
- hexagon/dffma.S
- hexagon/dfminmax.S
- hexagon/dfmul.S
- hexagon/dfsqrt.S
- hexagon/divdi3.S
- hexagon/divsi3.S
- hexagon/fabs_opt.S
- hexagon/fastmath2_dlib_asm.S
- hexagon/fastmath2_ldlib_asm.S
- hexagon/fastmath_dlib_asm.S
- hexagon/fma_opt.S
- hexagon/fmax_opt.S
- hexagon/fmin_opt.S
- hexagon/memcpy_forward_vp4cp4n2.S
- hexagon/memcpy_likely_aligned.S
- hexagon/moddi3.S
- hexagon/modsi3.S
- hexagon/sfdiv_opt.S
- hexagon/sfsqrt_opt.S
- hexagon/udivdi3.S
- hexagon/udivmoddi4.S
- hexagon/udivmodsi4.S
- hexagon/udivsi3.S
- hexagon/umoddi3.S
- hexagon/umodsi3.S)
-
-
-set(mips_SOURCES ${GENERIC_SOURCES})
-set(mipsel_SOURCES ${mips_SOURCES})
-set(mips64_SOURCES ${GENERIC_TF_SOURCES}
- ${mips_SOURCES})
-set(mips64el_SOURCES ${GENERIC_TF_SOURCES}
- ${mips_SOURCES})
-
-set(powerpc64_SOURCES
- ppc/divtc3.c
- ppc/fixtfdi.c
- ppc/fixunstfti.c
- ppc/fixunstfdi.c
- ppc/floattitf.c
- ppc/floatditf.c
- ppc/floatunditf.c
- ppc/gcc_qadd.c
- ppc/gcc_qdiv.c
- ppc/gcc_qmul.c
- ppc/gcc_qsub.c
- ppc/multc3.c
- ${GENERIC_SOURCES})
-set(powerpc64le_SOURCES ${powerpc64_SOURCES})
-
-set(riscv_SOURCES ${GENERIC_SOURCES} ${GENERIC_TF_SOURCES})
-set(riscv32_SOURCES
- riscv/mulsi3.S
- ${riscv_SOURCES})
-set(riscv64_SOURCES ${riscv_SOURCES})
-
-set(wasm32_SOURCES
- ${GENERIC_TF_SOURCES}
- ${GENERIC_SOURCES})
-set(wasm64_SOURCES
- ${GENERIC_TF_SOURCES}
- ${GENERIC_SOURCES})
-
-add_custom_target(builtins)
-set_target_properties(builtins PROPERTIES FOLDER "Compiler-RT Misc")
-
-if (APPLE)
- add_subdirectory(Darwin-excludes)
- add_subdirectory(macho_embedded)
- darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS})
-else ()
- set(BUILTIN_CFLAGS "")
-
- append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 BUILTIN_CFLAGS)
-
- # These flags would normally be added to CMAKE_C_FLAGS by the llvm
- # cmake step. Add them manually if this is a standalone build.
- if(COMPILER_RT_STANDALONE_BUILD)
- append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC BUILTIN_CFLAGS)
- append_list_if(COMPILER_RT_HAS_FNO_BUILTIN_FLAG -fno-builtin BUILTIN_CFLAGS)
- append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG -fvisibility=hidden BUILTIN_CFLAGS)
- if(NOT COMPILER_RT_DEBUG)
- append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fomit-frame-pointer BUILTIN_CFLAGS)
- endif()
- endif()
-
- set(BUILTIN_DEFS "")
-
- append_list_if(COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG VISIBILITY_HIDDEN BUILTIN_DEFS)
-
- foreach (arch ${BUILTIN_SUPPORTED_ARCH})
- if (CAN_TARGET_${arch})
- # NOTE: some architectures (e.g. i386) have multiple names. Ensure that
- # we catch them all.
- set(_arch ${arch})
- if("${arch}" STREQUAL "armv6m")
- set(_arch "arm|armv6m")
- elseif("${arch}" MATCHES "^(armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
- set(_arch "arm")
- endif()
-
- # For ARM archs, exclude any VFP builtins if VFP is not supported
- if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
- string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}")
- check_compile_definition(__VFP_FP__ "${CMAKE_C_FLAGS} ${_TARGET_${arch}_CFLAGS}" COMPILER_RT_HAS_${arch}_VFP)
- if(NOT COMPILER_RT_HAS_${arch}_VFP)
- list(REMOVE_ITEM ${arch}_SOURCES ${arm_Thumb1_VFPv2_SOURCES} ${arm_Thumb1_SjLj_EH_SOURCES})
- endif()
- endif()
-
- # 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 ()
-
- # Needed for clear_cache on debug mode, due to r7's usage in inline asm.
- # Release mode already sets it via -O2/3, Debug mode doesn't.
- if (${arch} STREQUAL "armhf")
- list(APPEND BUILTIN_CFLAGS -fomit-frame-pointer -DCOMPILER_RT_ARMHF_TARGET)
- endif()
-
- # For RISCV32, we must force enable int128 for compiling long
- # double routines.
- if("${arch}" STREQUAL "riscv32")
- list(APPEND BUILTIN_CFLAGS -fforce-enable-int128)
- endif()
-
- add_compiler_rt_runtime(clang_rt.builtins
- STATIC
- ARCHS ${arch}
- SOURCES ${${arch}_SOURCES}
- DEFS ${BUILTIN_DEFS}
- CFLAGS ${BUILTIN_CFLAGS}
- PARENT_TARGET builtins)
- endif ()
- endforeach ()
-endif ()
-
-add_dependencies(compiler-rt builtins)
diff --git a/lib/libcompiler_rt/Darwin-excludes/CMakeLists.txt b/lib/libcompiler_rt/Darwin-excludes/CMakeLists.txt
deleted file mode 100644
index 266e4221524..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-file(GLOB filter_files ${CMAKE_CURRENT_SOURCE_DIR}/*.txt)
-foreach(filter_file ${filter_files})
- set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${filter_file})
-endforeach()
diff --git a/lib/libcompiler_rt/Darwin-excludes/README.TXT b/lib/libcompiler_rt/Darwin-excludes/README.TXT
deleted file mode 100644
index 173eccca6de..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/README.TXT
+++ /dev/null
@@ -1,11 +0,0 @@
-This folder contains list of symbols that should be excluded from the builtin
-libraries for Darwin. There are two reasons symbols are excluded:
-
-(1) They aren't supported on Darwin
-(2) They are contained within the OS on the minimum supported target
-
-The builtin libraries must contain all symbols not provided by the lowest
-supported target OS. Meaning if minimum deployment target is iOS 6, all builtins
-not included in the ios6-<arch>.txt files need to be included. The one catch is
-that this is per-architecture. Since iOS 6 doesn't support arm64, when supporting
-iOS 6, the minimum deployment target for arm64 binaries is iOS 7.
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios-armv7.txt b/lib/libcompiler_rt/Darwin-excludes/ios-armv7.txt
deleted file mode 100644
index 6aa542f7fe4..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios-armv7.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-absvti2
-addtf3
-addvti3
-aeabi_cdcmp
-aeabi_cdcmpeq_check_nan
-aeabi_cfcmp
-aeabi_cfcmpeq_check_nan
-aeabi_dcmp
-aeabi_div0
-aeabi_drsub
-aeabi_fcmp
-aeabi_frsub
-aeabi_idivmod
-aeabi_ldivmod
-aeabi_memcmp
-aeabi_memcpy
-aeabi_memmove
-aeabi_memset
-aeabi_uidivmod
-aeabi_uldivmod
-ashlti3
-ashrti3
-clzti2
-cmpti2
-ctzti2
-divtf3
-divti3
-ffsti2
-fixdfti
-fixsfti
-fixunsdfti
-fixunssfti
-fixunsxfti
-fixxfti
-floattidf
-floattisf
-floattixf
-floatuntidf
-floatuntisf
-floatuntixf
-lshrti3
-modti3
-multf3
-multi3
-mulvti3
-negti2
-negvti2
-parityti2
-popcountti2
-powitf2
-subtf3
-subvti3
-trampoline_setup
-ucmpti2
-udivmodti4
-udivti3
-umodti3
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios-armv7s.txt b/lib/libcompiler_rt/Darwin-excludes/ios-armv7s.txt
deleted file mode 100644
index 28167aa4c5d..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios-armv7s.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-absvti2
-addtf3
-addvti3
-aeabi_cdcmp
-aeabi_cdcmpeq_check_nan
-aeabi_cfcmp
-aeabi_cfcmpeq_check_nan
-aeabi_dcmp
-aeabi_div0
-aeabi_drsub
-aeabi_fcmp
-aeabi_frsub
-aeabi_idivmod
-aeabi_ldivmod
-aeabi_memcmp
-aeabi_memcpy
-aeabi_memmove
-aeabi_memset
-aeabi_uidivmod
-aeabi_uldivmod
-ashlti3
-ashrti3
-clzti2
-cmpti2
-ctzti2
-divtf3
-divti3
-ffsti2
-fixdfti
-fixsfti
-fixunsdfti
-fixunssfti
-fixunsxfti
-fixxfti
-floattidf
-floattisf
-floattixf
-floatuntidf
-floatuntisf
-floatuntixf
-lshrti3
-modti3
-multf
-multi3
-mulvti3
-negti2
-negvti2
-parityti2
-popcountti2
-powitf2
-subtf3
-subvti3
-trampoline_setup
-ucmpti2
-udivmodti4
-udivti3
-umodti3
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios.txt b/lib/libcompiler_rt/Darwin-excludes/ios.txt
deleted file mode 100644
index 5db24000a17..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios.txt
+++ /dev/null
@@ -1 +0,0 @@
-apple_versioning
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios6-armv7.txt b/lib/libcompiler_rt/Darwin-excludes/ios6-armv7.txt
deleted file mode 100644
index b01fa711a35..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios6-armv7.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-absvdi2
-absvsi2
-adddf3
-adddf3vfp
-addsf3
-addsf3vfp
-addvdi3
-addvsi3
-ashldi3
-ashrdi3
-bswapdi2
-bswapsi2
-clzdi2
-clzsi2
-cmpdi2
-ctzdi2
-ctzsi2
-divdc3
-divdf3
-divdf3vfp
-divdi3
-divmodsi4
-divsc3
-divsf3
-divsf3vfp
-divsi3
-eqdf2
-eqdf2vfp
-eqsf2
-eqsf2vfp
-extendsfdf2
-extendsfdf2vfp
-ffsdi2
-fixdfdi
-fixdfsi
-fixdfsivfp
-fixsfdi
-fixsfsi
-fixsfsivfp
-fixunsdfdi
-fixunsdfsi
-fixunsdfsivfp
-fixunssfdi
-fixunssfsi
-fixunssfsivfp
-floatdidf
-floatdisf
-floatsidf
-floatsidfvfp
-floatsisf
-floatsisfvfp
-floatundidf
-floatundisf
-floatunsidf
-floatunsisf
-floatunssidfvfp
-floatunssisfvfp
-gcc_personality_sj0
-gedf2
-gedf2vfp
-gesf2
-gesf2vfp
-gtdf2
-gtdf2vfp
-gtsf2
-gtsf2vfp
-ledf2
-ledf2vfp
-lesf2
-lesf2vfp
-lshrdi3
-ltdf2
-ltdf2vfp
-ltsf2
-ltsf2vfp
-moddi3
-modsi3
-muldc3
-muldf3
-muldf3vfp
-muldi3
-mulodi4
-mulosi4
-mulsc3
-mulsf3
-mulsf3vfp
-mulvdi3
-mulvsi3
-nedf2
-nedf2vfp
-negdi2
-negvdi2
-negvsi2
-nesf2
-nesf2vfp
-paritydi2
-paritysi2
-popcountdi2
-popcountsi2
-powidf2
-powisf2
-subdf3
-subdf3vfp
-subsf3
-subsf3vfp
-subvdi3
-subvsi3
-truncdfsf2
-truncdfsf2vfp
-ucmpdi2
-udivdi3
-udivmoddi4
-udivmodsi4
-udivsi3
-umoddi3
-umodsi3
-unorddf2
-unorddf2vfp
-unordsf2
-unordsf2vfp
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios6-armv7s.txt b/lib/libcompiler_rt/Darwin-excludes/ios6-armv7s.txt
deleted file mode 100644
index b01fa711a35..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios6-armv7s.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-absvdi2
-absvsi2
-adddf3
-adddf3vfp
-addsf3
-addsf3vfp
-addvdi3
-addvsi3
-ashldi3
-ashrdi3
-bswapdi2
-bswapsi2
-clzdi2
-clzsi2
-cmpdi2
-ctzdi2
-ctzsi2
-divdc3
-divdf3
-divdf3vfp
-divdi3
-divmodsi4
-divsc3
-divsf3
-divsf3vfp
-divsi3
-eqdf2
-eqdf2vfp
-eqsf2
-eqsf2vfp
-extendsfdf2
-extendsfdf2vfp
-ffsdi2
-fixdfdi
-fixdfsi
-fixdfsivfp
-fixsfdi
-fixsfsi
-fixsfsivfp
-fixunsdfdi
-fixunsdfsi
-fixunsdfsivfp
-fixunssfdi
-fixunssfsi
-fixunssfsivfp
-floatdidf
-floatdisf
-floatsidf
-floatsidfvfp
-floatsisf
-floatsisfvfp
-floatundidf
-floatundisf
-floatunsidf
-floatunsisf
-floatunssidfvfp
-floatunssisfvfp
-gcc_personality_sj0
-gedf2
-gedf2vfp
-gesf2
-gesf2vfp
-gtdf2
-gtdf2vfp
-gtsf2
-gtsf2vfp
-ledf2
-ledf2vfp
-lesf2
-lesf2vfp
-lshrdi3
-ltdf2
-ltdf2vfp
-ltsf2
-ltsf2vfp
-moddi3
-modsi3
-muldc3
-muldf3
-muldf3vfp
-muldi3
-mulodi4
-mulosi4
-mulsc3
-mulsf3
-mulsf3vfp
-mulvdi3
-mulvsi3
-nedf2
-nedf2vfp
-negdi2
-negvdi2
-negvsi2
-nesf2
-nesf2vfp
-paritydi2
-paritysi2
-popcountdi2
-popcountsi2
-powidf2
-powisf2
-subdf3
-subdf3vfp
-subsf3
-subsf3vfp
-subvdi3
-subvsi3
-truncdfsf2
-truncdfsf2vfp
-ucmpdi2
-udivdi3
-udivmoddi4
-udivmodsi4
-udivsi3
-umoddi3
-umodsi3
-unorddf2
-unorddf2vfp
-unordsf2
-unordsf2vfp
diff --git a/lib/libcompiler_rt/Darwin-excludes/ios7-arm64.txt b/lib/libcompiler_rt/Darwin-excludes/ios7-arm64.txt
deleted file mode 100644
index 5e4caf9e9fb..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/ios7-arm64.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-clzti2
-divti3
-fixdfti
-fixsfti
-fixunsdfti
-floattidf
-floattisf
-floatuntidf
-floatuntisf
-gcc_personality_v0
-modti3
-powidf2
-powisf2
-udivmodti4
-udivti3
-umodti3
diff --git a/lib/libcompiler_rt/Darwin-excludes/iossim-i386.txt b/lib/libcompiler_rt/Darwin-excludes/iossim-i386.txt
deleted file mode 100644
index 60c0e2d6505..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/iossim-i386.txt
+++ /dev/null
@@ -1,82 +0,0 @@
-absvti2
-addtf3
-addvti3
-ashlti3
-ashrti3
-clzti2
-cmpti2
-ctzti2
-divti3
-divtf3
-ffsti2
-fixdfti
-fixsfti
-fixunsdfti
-fixunssfti
-fixunsxfti
-fixxfti
-floattidf
-floattisf
-floattixf
-floatuntidf
-floatuntisf
-floatuntixf
-lshrti3
-modti3
-muloti4
-multi3
-multf3
-mulvti3
-negti2
-negvti2
-parityti2
-popcountti2
-powitf2
-subvti3
-subtf3
-trampoline_setup
-ucmpti2
-udivmodti4
-udivti3
-umodti3
-absvti2
-addtf3
-addvti3
-ashlti3
-ashrti3
-clzti2
-cmpti2
-ctzti2
-divti3
-divtf3
-ffsti2
-fixdfti
-fixsfti
-fixunsdfti
-fixunssfti
-fixunsxfti
-fixxfti
-floattidf
-floattisf
-floattixf
-floatuntidf
-floatuntisf
-floatuntixf
-lshrti3
-modti3
-muloti4
-multi3
-multf3
-mulvti3
-negti2
-negvti2
-parityti2
-popcountti2
-powitf2
-subvti3
-subtf3
-trampoline_setup
-ucmpti2
-udivmodti4
-udivti3
-umodti3
diff --git a/lib/libcompiler_rt/Darwin-excludes/iossim-x86_64.txt b/lib/libcompiler_rt/Darwin-excludes/iossim-x86_64.txt
deleted file mode 100644
index de1574e6ce3..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/iossim-x86_64.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-addtf3
-divtf3
-multf3
-powitf2
-subtf3
-trampoline_setup
-addtf3
-divtf3
-multf3
-powitf2
-subtf3
-trampoline_setup
diff --git a/lib/libcompiler_rt/Darwin-excludes/iossim.txt b/lib/libcompiler_rt/Darwin-excludes/iossim.txt
deleted file mode 100644
index 5db24000a17..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/iossim.txt
+++ /dev/null
@@ -1 +0,0 @@
-apple_versioning
diff --git a/lib/libcompiler_rt/Darwin-excludes/osx-i386.txt b/lib/libcompiler_rt/Darwin-excludes/osx-i386.txt
deleted file mode 100644
index f2ee7fef0c6..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/osx-i386.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-absvti2
-addvti3
-ashlti3
-ashrti3
-clzti2
-cmpti2
-ctzti2
-divti3
-ffsti2
-fixdfti
-fixsfti
-fixunsdfti
-fixunssfti
-fixunsxfti
-fixxfti
-floattidf
-floattisf
-floattixf
-floatuntidf
-floatuntisf
-floatuntixf
-lshrti3
-modti3
-muloti4
-multi3
-mulvti3
-negti2
-negvti2
-parityti2
-popcountti2
-subvti3
-ucmpti2
-udivmodti4
-udivti3
-umodti3
diff --git a/lib/libcompiler_rt/Darwin-excludes/osx.txt b/lib/libcompiler_rt/Darwin-excludes/osx.txt
deleted file mode 100644
index 6f9d0a7b245..00000000000
--- a/lib/libcompiler_rt/Darwin-excludes/osx.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-apple_versioning
-addtf3
-divtf3
-multf3
-powitf2
-subtf3
-trampoline_setup
diff --git a/lib/libcompiler_rt/LICENSE.TXT b/lib/libcompiler_rt/LICENSE.TXT
deleted file mode 100644
index 1c94ad5d891..00000000000
--- a/lib/libcompiler_rt/LICENSE.TXT
+++ /dev/null
@@ -1,91 +0,0 @@
-==============================================================================
-compiler_rt License
-==============================================================================
-
-The compiler_rt library is dual licensed under both the University of Illinois
-"BSD-Like" license and the MIT license. As a user of this code you may choose
-to use it under either license. As a contributor, you agree to allow your code
-to be used under both.
-
-Full text of the relevant licenses is included below.
-
-==============================================================================
-
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2019 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
- LLVM Team
-
- University of Illinois at Urbana-Champaign
-
- http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimers.
-
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimers in the
- documentation and/or other materials provided with the distribution.
-
- * Neither the names of the LLVM Team, University of Illinois at
- Urbana-Champaign, nor the names of its contributors may be used to
- endorse or promote products derived from this Software without specific
- prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-
-==============================================================================
-
-Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-==============================================================================
-Copyrights and Licenses for Third Party Software Distributed with LLVM:
-==============================================================================
-The LLVM software contains code written by third parties. Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
-
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the LLVM Distribution, and nothing in any of the
-other licenses gives permission to use the names of the LLVM Team or the
-University of Illinois to endorse or promote products derived from this
-Software.
-
diff --git a/lib/libcompiler_rt/Makefile b/lib/libcompiler_rt/Makefile
deleted file mode 100644
index 6c92a870f20..00000000000
--- a/lib/libcompiler_rt/Makefile
+++ /dev/null
@@ -1,317 +0,0 @@
-# $OpenBSD: Makefile,v 1.15 2020/04/04 22:11:36 kettenis Exp $
-
-.include <bsd.own.mk>
-
-.if ${COMPILER_VERSION:L} != "clang"
-CC= clang
-CXX= clang++
-.endif
-
-.if ${BUILD_CLANG:L} == "yes"
-
-LIB= compiler_rt
-NOPIC=
-NOPROFILE=
-
-CFLAGS+= -fPIC -std=gnu99 -fvisibility=hidden -fno-stack-protector
-CPPFLAGS+= -DVISIBILITY_HIDDEN
-
-.if ${MACHINE_ARCH} == "amd64"
-RTARCH= x86_64
-.elif ${MACHINE_ARCH} == "powerpc"
-RTARCH= ppc
-.else
-RTARCH= ${MACHINE_ARCH}
-.endif
-
-.PATH: ${.CURDIR}/${RTARCH}
-
-GEN_SRCS= absvdi2 \
- absvsi2 \
- absvti2 \
- addtf3 \
- addvdi3 \
- addvsi3 \
- addvti3 \
- apple_versioning \
- ashldi3 \
- ashlti3 \
- ashrdi3 \
- ashrti3 \
- atomic \
- bswapdi2 \
- bswapsi2 \
- clear_cache \
- clzdi2 \
- clzsi2 \
- clzti2 \
- cmpdi2 \
- cmpti2 \
- comparedf2 \
- comparesf2 \
- cpu_model \
- ctzdi2 \
- ctzsi2 \
- ctzti2 \
- divdc3 \
- divdi3 \
- divmoddi4 \
- divmodsi4 \
- divsc3 \
- divtc3 \
- divti3 \
- divtf3 \
- divxc3 \
- emutls \
- enable_execute_stack \
- eprintf \
- extendhfsf2 \
- ffsdi2 \
- ffssi2 \
- ffsti2 \
- fixdfti \
- fixsfti \
- fixunsdfsi \
- fixunsdfti \
- fixunssfsi \
- fixunssfti \
- fixunsxfdi \
- fixunsxfsi \
- fixunsxfti \
- fixxfdi \
- fixxfti \
- floattidf \
- floattisf \
- floattixf \
- floatunsidf \
- floatunsisf \
- floatuntidf \
- floatuntisf \
- floatuntixf \
- gcc_personality_v0 \
- int_util \
- lshrdi3 \
- lshrti3 \
- moddi3 \
- modsi3 \
- modti3 \
- muldc3 \
- muldi3 \
- mulodi4 \
- mulosi4 \
- muloti4 \
- mulsc3 \
- multi3 \
- multf3 \
- mulvdi3 \
- mulvsi3 \
- mulvti3 \
- mulxc3 \
- negdf2 \
- negdi2 \
- negsf2 \
- negti2 \
- negvdi2 \
- negvsi2 \
- negvti2 \
- paritydi2 \
- paritysi2 \
- parityti2 \
- popcountdi2 \
- popcountsi2 \
- popcountti2 \
- powidf2 \
- powisf2 \
- powitf2 \
- powixf2 \
- subvdi3 \
- subvsi3 \
- subvti3 \
- subtf3 \
- trampoline_setup \
- truncdfhf2 \
- truncsfhf2 \
- ucmpdi2 \
- ucmpti2 \
- udivdi3 \
- udivmoddi4 \
- udivmodsi4 \
- udivmodti4 \
- udivti3 \
- umoddi3 \
- umodsi3 \
- umodti3
-
-.if ${RTARCH} != "arm"
-GEN_SRCS+= adddf3 \
- addsf3 \
- divdf3 \
- divsf3 \
- divsi3 \
- extendsfdf2 \
- fixdfdi \
- fixdfsi \
- fixsfdi \
- fixsfsi \
- fixunsdfdi \
- fixunssfdi \
- floatsidf \
- floatsisf \
- muldf3 \
- mulsf3 \
- subdf3 \
- subsf3 \
- truncdfsf2 \
- udivsi3
-.endif
-
-.if ${RTARCH} == "i386"
-SRCS+= floatdidf.c \
- floatdisf.c \
- floatdixf.c \
- floatundidf.c \
- floatundisf.c \
- floatundixf.c
-.else
-GEN_SRCS+= floatdidf \
- floatdisf \
- floatdixf \
- floatundidf \
- floatundisf \
- floatundixf
-.endif
-
-.for file in ${GEN_SRCS}
-. if exists(${.CURDIR}/${RTARCH}/${file}.S)
-SRCS+= ${file}.S
-. else
-SRCS+= ${file}.c
-. endif
-.endfor
-
-.if ${RTARCH} == "aarch64"
-SRCS+= comparetf2.c \
- extenddftf2.c \
- extendsftf2.c \
- fixtfdi.c \
- fixtfsi.c \
- fixtfti.c \
- fixunstfdi.c \
- fixunstfsi.c \
- fixunstfti.c \
- floatditf.c \
- floatsitf.c \
- floattitf.c \
- floatunditf.c \
- floatunsitf.c \
- floatuntitf.c \
- multc3.c \
- trunctfdf2.c \
- trunctfsf2.c
-.endif
-
-.if ${RTARCH} == "arm"
-SRCS+= aeabi_cdcmp.S \
- aeabi_cdcmpeq_check_nan.c \
- aeabi_cfcmp.S \
- aeabi_cfcmpeq_check_nan.c \
- aeabi_dcmp.S \
- aeabi_div0.c \
- aeabi_drsub.c \
- aeabi_fcmp.S \
- aeabi_frsub.c \
- aeabi_ldivmod.S \
- aeabi_memcmp.S \
- aeabi_memcpy.S \
- aeabi_memmove.S \
- aeabi_memset.S \
- aeabi_uldivmod.S \
- switch16.S \
- switch32.S \
- switch8.S \
- switchu8.S \
- sync_fetch_and_add_4.S \
- sync_fetch_and_add_8.S \
- sync_fetch_and_and_4.S \
- sync_fetch_and_and_8.S \
- sync_fetch_and_max_4.S \
- sync_fetch_and_max_8.S \
- sync_fetch_and_min_4.S \
- sync_fetch_and_min_8.S \
- sync_fetch_and_nand_4.S \
- sync_fetch_and_nand_8.S \
- sync_fetch_and_or_4.S \
- sync_fetch_and_or_8.S \
- sync_fetch_and_sub_4.S \
- sync_fetch_and_sub_8.S \
- sync_fetch_and_umax_4.S \
- sync_fetch_and_umax_8.S \
- sync_fetch_and_umin_4.S \
- sync_fetch_and_umin_8.S \
- sync_fetch_and_xor_4.S \
- sync_fetch_and_xor_8.S \
- sync_synchronize.S
-.endif
-
-.if ${RTARCH} == "mips64" || ${RTARCH} == "mips64el"
-SRCS+= comparetf2.c \
- extenddftf2.c \
- extendsftf2.c \
- fixtfdi.c \
- fixtfsi.c \
- fixtfti.c \
- fixunstfdi.c \
- fixunstfsi.c \
- fixunstfti.c \
- floatditf.c \
- floatsitf.c \
- floattitf.c \
- floatunditf.c \
- floatunsitf.c \
- floatuntitf.c \
- multc3.c \
- trunctfdf2.c \
- trunctfsf2.c
-.endif
-
-.if ${RTARCH} == "ppc"
-SRCS+= atomic_lock_free.c \
- divtc3.c \
- fixtfdi.c \
- fixunstfdi.c \
- floatditf.c \
- floatunditf.c \
- gcc_qadd.c \
- gcc_qdiv.c \
- gcc_qmul.c \
- gcc_qsub.c \
- multc3.c
-.endif
-
-.if ${RTARCH} == "sparc64"
-SRCS+= comparetf2.c \
- extenddftf2.c \
- extendsftf2.c \
- fixtfdi.c \
- fixtfsi.c \
- fixtfti.c \
- fixunstfdi.c \
- fixunstfsi.c \
- fixunstfti.c \
- floatditf.c \
- floatsitf.c \
- floattitf.c \
- floatunditf.c \
- floatunsitf.c \
- floatuntitf.c \
- multc3.c \
- trunctfdf2.c \
- trunctfsf2.c
-.endif
-
-.include <bsd.lib.mk>
-
-.else
-NOPROG=
-.include <bsd.prog.mk>
-.endif
diff --git a/lib/libcompiler_rt/README.txt b/lib/libcompiler_rt/README.txt
deleted file mode 100644
index e603dfa0535..00000000000
--- a/lib/libcompiler_rt/README.txt
+++ /dev/null
@@ -1,346 +0,0 @@
-Compiler-RT
-================================
-
-This directory and its subdirectories contain source code for the compiler
-support routines.
-
-Compiler-RT is open source software. You may freely distribute it under the
-terms of the license agreement found in LICENSE.txt.
-
-================================
-
-This is a replacement library for libgcc. Each function is contained
-in its own file. Each function has a corresponding unit test under
-test/Unit.
-
-A rudimentary script to test each file is in the file called
-test/Unit/test.
-
-Here is the specification for this library:
-
-http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc
-
-Here is a synopsis of the contents of this library:
-
-typedef int si_int;
-typedef unsigned su_int;
-
-typedef long long di_int;
-typedef unsigned long long du_int;
-
-// Integral bit manipulation
-
-di_int __ashldi3(di_int a, si_int b); // a << b
-ti_int __ashlti3(ti_int a, si_int b); // a << b
-
-di_int __ashrdi3(di_int a, si_int b); // a >> b arithmetic (sign fill)
-ti_int __ashrti3(ti_int a, si_int b); // a >> b arithmetic (sign fill)
-di_int __lshrdi3(di_int a, si_int b); // a >> b logical (zero fill)
-ti_int __lshrti3(ti_int a, si_int b); // a >> b logical (zero fill)
-
-si_int __clzsi2(si_int a); // count leading zeros
-si_int __clzdi2(di_int a); // count leading zeros
-si_int __clzti2(ti_int a); // count leading zeros
-si_int __ctzsi2(si_int a); // count trailing zeros
-si_int __ctzdi2(di_int a); // count trailing zeros
-si_int __ctzti2(ti_int a); // count trailing zeros
-
-si_int __ffssi2(si_int a); // find least significant 1 bit
-si_int __ffsdi2(di_int a); // find least significant 1 bit
-si_int __ffsti2(ti_int a); // find least significant 1 bit
-
-si_int __paritysi2(si_int a); // bit parity
-si_int __paritydi2(di_int a); // bit parity
-si_int __parityti2(ti_int a); // bit parity
-
-si_int __popcountsi2(si_int a); // bit population
-si_int __popcountdi2(di_int a); // bit population
-si_int __popcountti2(ti_int a); // bit population
-
-uint32_t __bswapsi2(uint32_t a); // a byteswapped
-uint64_t __bswapdi2(uint64_t a); // a byteswapped
-
-// Integral arithmetic
-
-di_int __negdi2 (di_int a); // -a
-ti_int __negti2 (ti_int a); // -a
-di_int __muldi3 (di_int a, di_int b); // a * b
-ti_int __multi3 (ti_int a, ti_int b); // a * b
-si_int __divsi3 (si_int a, si_int b); // a / b signed
-di_int __divdi3 (di_int a, di_int b); // a / b signed
-ti_int __divti3 (ti_int a, ti_int b); // a / b signed
-su_int __udivsi3 (su_int n, su_int d); // a / b unsigned
-du_int __udivdi3 (du_int a, du_int b); // a / b unsigned
-tu_int __udivti3 (tu_int a, tu_int b); // a / b unsigned
-si_int __modsi3 (si_int a, si_int b); // a % b signed
-di_int __moddi3 (di_int a, di_int b); // a % b signed
-ti_int __modti3 (ti_int a, ti_int b); // a % b signed
-su_int __umodsi3 (su_int a, su_int b); // a % b unsigned
-du_int __umoddi3 (du_int a, du_int b); // a % b unsigned
-tu_int __umodti3 (tu_int a, tu_int b); // a % b unsigned
-du_int __udivmoddi4(du_int a, du_int b, du_int* rem); // a / b, *rem = a % b unsigned
-tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem); // a / b, *rem = a % b unsigned
-su_int __udivmodsi4(su_int a, su_int b, su_int* rem); // a / b, *rem = a % b unsigned
-si_int __divmodsi4(si_int a, si_int b, si_int* rem); // a / b, *rem = a % b signed
-
-
-
-// Integral arithmetic with trapping overflow
-
-si_int __absvsi2(si_int a); // abs(a)
-di_int __absvdi2(di_int a); // abs(a)
-ti_int __absvti2(ti_int a); // abs(a)
-
-si_int __negvsi2(si_int a); // -a
-di_int __negvdi2(di_int a); // -a
-ti_int __negvti2(ti_int a); // -a
-
-si_int __addvsi3(si_int a, si_int b); // a + b
-di_int __addvdi3(di_int a, di_int b); // a + b
-ti_int __addvti3(ti_int a, ti_int b); // a + b
-
-si_int __subvsi3(si_int a, si_int b); // a - b
-di_int __subvdi3(di_int a, di_int b); // a - b
-ti_int __subvti3(ti_int a, ti_int b); // a - b
-
-si_int __mulvsi3(si_int a, si_int b); // a * b
-di_int __mulvdi3(di_int a, di_int b); // a * b
-ti_int __mulvti3(ti_int a, ti_int b); // a * b
-
-
-// Integral arithmetic which returns if overflow
-
-si_int __mulosi4(si_int a, si_int b, int* overflow); // a * b, overflow set to one if result not in signed range
-di_int __mulodi4(di_int a, di_int b, int* overflow); // a * b, overflow set to one if result not in signed range
-ti_int __muloti4(ti_int a, ti_int b, int* overflow); // a * b, overflow set to
- one if result not in signed range
-
-
-// Integral comparison: a < b -> 0
-// a == b -> 1
-// a > b -> 2
-
-si_int __cmpdi2 (di_int a, di_int b);
-si_int __cmpti2 (ti_int a, ti_int b);
-si_int __ucmpdi2(du_int a, du_int b);
-si_int __ucmpti2(tu_int a, tu_int b);
-
-// Integral / floating point conversion
-
-di_int __fixsfdi( float a);
-di_int __fixdfdi( double a);
-di_int __fixxfdi(long double a);
-
-ti_int __fixsfti( float a);
-ti_int __fixdfti( double a);
-ti_int __fixxfti(long double a);
-uint64_t __fixtfdi(long double input); // ppc only, doesn't match documentation
-
-su_int __fixunssfsi( float a);
-su_int __fixunsdfsi( double a);
-su_int __fixunsxfsi(long double a);
-
-du_int __fixunssfdi( float a);
-du_int __fixunsdfdi( double a);
-du_int __fixunsxfdi(long double a);
-
-tu_int __fixunssfti( float a);
-tu_int __fixunsdfti( double a);
-tu_int __fixunsxfti(long double a);
-uint64_t __fixunstfdi(long double input); // ppc only
-
-float __floatdisf(di_int a);
-double __floatdidf(di_int a);
-long double __floatdixf(di_int a);
-long double __floatditf(int64_t a); // ppc only
-
-float __floattisf(ti_int a);
-double __floattidf(ti_int a);
-long double __floattixf(ti_int a);
-
-float __floatundisf(du_int a);
-double __floatundidf(du_int a);
-long double __floatundixf(du_int a);
-long double __floatunditf(uint64_t a); // ppc only
-
-float __floatuntisf(tu_int a);
-double __floatuntidf(tu_int a);
-long double __floatuntixf(tu_int a);
-
-// Floating point raised to integer power
-
-float __powisf2( float a, si_int b); // a ^ b
-double __powidf2( double a, si_int b); // a ^ b
-long double __powixf2(long double a, si_int b); // a ^ b
-long double __powitf2(long double a, si_int b); // ppc only, a ^ b
-
-// Complex arithmetic
-
-// (a + ib) * (c + id)
-
- float _Complex __mulsc3( float a, float b, float c, float d);
- double _Complex __muldc3(double a, double b, double c, double d);
-long double _Complex __mulxc3(long double a, long double b,
- long double c, long double d);
-long double _Complex __multc3(long double a, long double b,
- long double c, long double d); // ppc only
-
-// (a + ib) / (c + id)
-
- float _Complex __divsc3( float a, float b, float c, float d);
- double _Complex __divdc3(double a, double b, double c, double d);
-long double _Complex __divxc3(long double a, long double b,
- long double c, long double d);
-long double _Complex __divtc3(long double a, long double b,
- long double c, long double d); // ppc only
-
-
-// Runtime support
-
-// __clear_cache() is used to tell process that new instructions have been
-// written to an address range. Necessary on processors that do not have
-// a unified instruction and data cache.
-void __clear_cache(void* start, void* end);
-
-// __enable_execute_stack() is used with nested functions when a trampoline
-// function is written onto the stack and that page range needs to be made
-// executable.
-void __enable_execute_stack(void* addr);
-
-// __gcc_personality_v0() is normally only called by the system unwinder.
-// C code (as opposed to C++) normally does not need a personality function
-// because there are no catch clauses or destructors to be run. But there
-// is a C language extension __attribute__((cleanup(func))) which marks local
-// variables as needing the cleanup function "func" to be run when the
-// variable goes out of scope. That includes when an exception is thrown,
-// so a personality handler is needed.
-_Unwind_Reason_Code __gcc_personality_v0(int version, _Unwind_Action actions,
- uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
- _Unwind_Context_t context);
-
-// for use with some implementations of assert() in <assert.h>
-void __eprintf(const char* format, const char* assertion_expression,
- const char* line, const char* file);
-
-// for systems with emulated thread local storage
-void* __emutls_get_address(struct __emutls_control*);
-
-
-// Power PC specific functions
-
-// There is no C interface to the saveFP/restFP functions. They are helper
-// functions called by the prolog and epilog of functions that need to save
-// a number of non-volatile float point registers.
-saveFP
-restFP
-
-// PowerPC has a standard template for trampoline functions. This function
-// generates a custom trampoline function with the specific realFunc
-// and localsPtr values.
-void __trampoline_setup(uint32_t* trampOnStack, int trampSizeAllocated,
- const void* realFunc, void* localsPtr);
-
-// adds two 128-bit double-double precision values ( x + y )
-long double __gcc_qadd(long double x, long double y);
-
-// subtracts two 128-bit double-double precision values ( x - y )
-long double __gcc_qsub(long double x, long double y);
-
-// multiples two 128-bit double-double precision values ( x * y )
-long double __gcc_qmul(long double x, long double y);
-
-// divides two 128-bit double-double precision values ( x / y )
-long double __gcc_qdiv(long double a, long double b);
-
-
-// ARM specific functions
-
-// There is no C interface to the switch* functions. These helper functions
-// are only needed by Thumb1 code for efficient switch table generation.
-switch16
-switch32
-switch8
-switchu8
-
-// There is no C interface to the *_vfp_d8_d15_regs functions. There are
-// called in the prolog and epilog of Thumb1 functions. When the C++ ABI use
-// SJLJ for exceptions, each function with a catch clause or destuctors needs
-// to save and restore all registers in it prolog and epliog. But there is
-// no way to access vector and high float registers from thumb1 code, so the
-// compiler must add call outs to these helper functions in the prolog and
-// epilog.
-restore_vfp_d8_d15_regs
-save_vfp_d8_d15_regs
-
-
-// Note: long ago ARM processors did not have floating point hardware support.
-// Floating point was done in software and floating point parameters were
-// passed in integer registers. When hardware support was added for floating
-// point, new *vfp functions were added to do the same operations but with
-// floating point parameters in floating point registers.
-
-// Undocumented functions
-
-float __addsf3vfp(float a, float b); // Appears to return a + b
-double __adddf3vfp(double a, double b); // Appears to return a + b
-float __divsf3vfp(float a, float b); // Appears to return a / b
-double __divdf3vfp(double a, double b); // Appears to return a / b
-int __eqsf2vfp(float a, float b); // Appears to return one
- // iff a == b and neither is NaN.
-int __eqdf2vfp(double a, double b); // Appears to return one
- // iff a == b and neither is NaN.
-double __extendsfdf2vfp(float a); // Appears to convert from
- // float to double.
-int __fixdfsivfp(double a); // Appears to convert from
- // double to int.
-int __fixsfsivfp(float a); // Appears to convert from
- // float to int.
-unsigned int __fixunssfsivfp(float a); // Appears to convert from
- // float to unsigned int.
-unsigned int __fixunsdfsivfp(double a); // Appears to convert from
- // double to unsigned int.
-double __floatsidfvfp(int a); // Appears to convert from
- // int to double.
-float __floatsisfvfp(int a); // Appears to convert from
- // int to float.
-double __floatunssidfvfp(unsigned int a); // Appears to convert from
- // unisgned int to double.
-float __floatunssisfvfp(unsigned int a); // Appears to convert from
- // unisgned int to float.
-int __gedf2vfp(double a, double b); // Appears to return __gedf2
- // (a >= b)
-int __gesf2vfp(float a, float b); // Appears to return __gesf2
- // (a >= b)
-int __gtdf2vfp(double a, double b); // Appears to return __gtdf2
- // (a > b)
-int __gtsf2vfp(float a, float b); // Appears to return __gtsf2
- // (a > b)
-int __ledf2vfp(double a, double b); // Appears to return __ledf2
- // (a <= b)
-int __lesf2vfp(float a, float b); // Appears to return __lesf2
- // (a <= b)
-int __ltdf2vfp(double a, double b); // Appears to return __ltdf2
- // (a < b)
-int __ltsf2vfp(float a, float b); // Appears to return __ltsf2
- // (a < b)
-double __muldf3vfp(double a, double b); // Appears to return a * b
-float __mulsf3vfp(float a, float b); // Appears to return a * b
-int __nedf2vfp(double a, double b); // Appears to return __nedf2
- // (a != b)
-double __negdf2vfp(double a); // Appears to return -a
-float __negsf2vfp(float a); // Appears to return -a
-float __negsf2vfp(float a); // Appears to return -a
-double __subdf3vfp(double a, double b); // Appears to return a - b
-float __subsf3vfp(float a, float b); // Appears to return a - b
-float __truncdfsf2vfp(double a); // Appears to convert from
- // double to float.
-int __unorddf2vfp(double a, double b); // Appears to return __unorddf2
-int __unordsf2vfp(float a, float b); // Appears to return __unordsf2
-
-
-Preconditions are listed for each function at the definition when there are any.
-Any preconditions reflect the specification at
-http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html#Libgcc.
-
-Assumptions are listed in "int_lib.h", and in individual files. Where possible
-assumptions are checked at compile time.
diff --git a/lib/libcompiler_rt/aarch64/chkstk.S b/lib/libcompiler_rt/aarch64/chkstk.S
deleted file mode 100644
index 89ec90b08a1..00000000000
--- a/lib/libcompiler_rt/aarch64/chkstk.S
+++ /dev/null
@@ -1,34 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// __chkstk routine
-// This routine is windows specific.
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-// This clobbers registers x16 and x17.
-// Does not modify any memory or the stack pointer.
-
-// mov x15, #256 // Number of bytes of stack, in units of 16 byte
-// bl __chkstk
-// sub sp, sp, x15, lsl #4
-
-#ifdef __aarch64__
-
-#define PAGE_SIZE 4096
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__chkstk)
- lsl x16, x15, #4
- mov x17, sp
-1:
- sub x17, x17, #PAGE_SIZE
- subs x16, x16, #PAGE_SIZE
- ldr xzr, [x17]
- b.gt 1b
-
- ret
-END_COMPILERRT_FUNCTION(__chkstk)
-
-#endif // __aarch64__
diff --git a/lib/libcompiler_rt/absvdi2.c b/lib/libcompiler_rt/absvdi2.c
deleted file mode 100644
index 682c2355d2a..00000000000
--- a/lib/libcompiler_rt/absvdi2.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/*===-- absvdi2.c - Implement __absvdi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===
- *
- * This file implements __absvdi2 for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: absolute value */
-
-/* Effects: aborts if abs(x) < 0 */
-
-COMPILER_RT_ABI di_int
-__absvdi2(di_int a)
-{
- const int N = (int)(sizeof(di_int) * CHAR_BIT);
- if (a == ((di_int)1 << (N-1)))
- compilerrt_abort();
- const di_int t = a >> (N - 1);
- return (a ^ t) - t;
-}
diff --git a/lib/libcompiler_rt/absvsi2.c b/lib/libcompiler_rt/absvsi2.c
deleted file mode 100644
index 4812af81598..00000000000
--- a/lib/libcompiler_rt/absvsi2.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- absvsi2.c - Implement __absvsi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __absvsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: absolute value */
-
-/* Effects: aborts if abs(x) < 0 */
-
-COMPILER_RT_ABI si_int
-__absvsi2(si_int a)
-{
- const int N = (int)(sizeof(si_int) * CHAR_BIT);
- if (a == (1 << (N-1)))
- compilerrt_abort();
- const si_int t = a >> (N - 1);
- return (a ^ t) - t;
-}
diff --git a/lib/libcompiler_rt/absvti2.c b/lib/libcompiler_rt/absvti2.c
deleted file mode 100644
index 7927770c9ab..00000000000
--- a/lib/libcompiler_rt/absvti2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ===-- absvti2.c - Implement __absvdi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __absvti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: absolute value */
-
-/* Effects: aborts if abs(x) < 0 */
-
-COMPILER_RT_ABI ti_int
-__absvti2(ti_int a)
-{
- const int N = (int)(sizeof(ti_int) * CHAR_BIT);
- if (a == ((ti_int)1 << (N-1)))
- compilerrt_abort();
- const ti_int s = a >> (N - 1);
- return (a ^ s) - s;
-}
-
-#endif /* CRT_HAS_128BIT */
-
diff --git a/lib/libcompiler_rt/adddf3.c b/lib/libcompiler_rt/adddf3.c
deleted file mode 100644
index 9a3901312e5..00000000000
--- a/lib/libcompiler_rt/adddf3.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/adddf3.c - Double-precision addition ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements double-precision soft-float addition with the IEEE-754
-// default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_add_impl.inc"
-
-COMPILER_RT_ABI double __adddf3(double a, double b){
- return __addXf3__(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI double __aeabi_dadd(double a, double b) {
- return __adddf3(a, b);
-}
-#else
-AEABI_RTABI double __aeabi_dadd(double a, double b) COMPILER_RT_ALIAS(__adddf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/addsf3.c b/lib/libcompiler_rt/addsf3.c
deleted file mode 100644
index c5c1a41c361..00000000000
--- a/lib/libcompiler_rt/addsf3.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/addsf3.c - Single-precision addition ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements single-precision soft-float addition with the IEEE-754
-// default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_add_impl.inc"
-
-COMPILER_RT_ABI float __addsf3(float a, float b) {
- return __addXf3__(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI float __aeabi_fadd(float a, float b) {
- return __addsf3(a, b);
-}
-#else
-AEABI_RTABI float __aeabi_fadd(float a, float b) COMPILER_RT_ALIAS(__addsf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/addtf3.c b/lib/libcompiler_rt/addtf3.c
deleted file mode 100644
index e4bbe0227ae..00000000000
--- a/lib/libcompiler_rt/addtf3.c
+++ /dev/null
@@ -1,25 +0,0 @@
-//===-- lib/addtf3.c - Quad-precision addition --------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements quad-precision soft-float addition with the IEEE-754
-// default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#include "fp_add_impl.inc"
-
-COMPILER_RT_ABI long double __addtf3(long double a, long double b){
- return __addXf3__(a, b);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/addvdi3.c b/lib/libcompiler_rt/addvdi3.c
deleted file mode 100644
index 0da38945679..00000000000
--- a/lib/libcompiler_rt/addvdi3.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- addvdi3.c - Implement __addvdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __addvdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a + b */
-
-/* Effects: aborts if a + b overflows */
-
-COMPILER_RT_ABI di_int
-__addvdi3(di_int a, di_int b)
-{
- di_int s = (du_int) a + (du_int) b;
- if (b >= 0)
- {
- if (s < a)
- compilerrt_abort();
- }
- else
- {
- if (s >= a)
- compilerrt_abort();
- }
- return s;
-}
diff --git a/lib/libcompiler_rt/addvsi3.c b/lib/libcompiler_rt/addvsi3.c
deleted file mode 100644
index 94ca726f42b..00000000000
--- a/lib/libcompiler_rt/addvsi3.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- addvsi3.c - Implement __addvsi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __addvsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a + b */
-
-/* Effects: aborts if a + b overflows */
-
-COMPILER_RT_ABI si_int
-__addvsi3(si_int a, si_int b)
-{
- si_int s = (su_int) a + (su_int) b;
- if (b >= 0)
- {
- if (s < a)
- compilerrt_abort();
- }
- else
- {
- if (s >= a)
- compilerrt_abort();
- }
- return s;
-}
diff --git a/lib/libcompiler_rt/addvti3.c b/lib/libcompiler_rt/addvti3.c
deleted file mode 100644
index c224de60aab..00000000000
--- a/lib/libcompiler_rt/addvti3.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ===-- addvti3.c - Implement __addvti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __addvti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a + b */
-
-/* Effects: aborts if a + b overflows */
-
-COMPILER_RT_ABI ti_int
-__addvti3(ti_int a, ti_int b)
-{
- ti_int s = (tu_int) a + (tu_int) b;
- if (b >= 0)
- {
- if (s < a)
- compilerrt_abort();
- }
- else
- {
- if (s >= a)
- compilerrt_abort();
- }
- return s;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/apple_versioning.c b/lib/libcompiler_rt/apple_versioning.c
deleted file mode 100644
index 3797a1ab02d..00000000000
--- a/lib/libcompiler_rt/apple_versioning.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/* ===-- apple_versioning.c - Adds versioning symbols for ld ---------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-
-#if __APPLE__
- #include <Availability.h>
-
- #if __IPHONE_OS_VERSION_MIN_REQUIRED
- #define NOT_HERE_BEFORE_10_6(sym)
- #define NOT_HERE_IN_10_8_AND_EARLIER(sym) \
- extern const char sym##_tmp61 __asm("$ld$hide$os6.1$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp61 = 0; \
- extern const char sym##_tmp60 __asm("$ld$hide$os6.0$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp60 = 0; \
- extern const char sym##_tmp51 __asm("$ld$hide$os5.1$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp51 = 0; \
- extern const char sym##_tmp50 __asm("$ld$hide$os5.0$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp50 = 0;
- #else
- #define NOT_HERE_BEFORE_10_6(sym) \
- extern const char sym##_tmp4 __asm("$ld$hide$os10.4$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp4 = 0; \
- extern const char sym##_tmp5 __asm("$ld$hide$os10.5$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp5 = 0;
- #define NOT_HERE_IN_10_8_AND_EARLIER(sym) \
- extern const char sym##_tmp8 __asm("$ld$hide$os10.8$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp8 = 0; \
- extern const char sym##_tmp7 __asm("$ld$hide$os10.7$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp7 = 0; \
- extern const char sym##_tmp6 __asm("$ld$hide$os10.6$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp6 = 0;
- #endif
-
-
-/* Symbols in libSystem.dylib in 10.6 and later,
- * but are in libgcc_s.dylib in earlier versions
- */
-
-NOT_HERE_BEFORE_10_6(__absvdi2)
-NOT_HERE_BEFORE_10_6(__absvsi2)
-NOT_HERE_BEFORE_10_6(__absvti2)
-NOT_HERE_BEFORE_10_6(__addvdi3)
-NOT_HERE_BEFORE_10_6(__addvsi3)
-NOT_HERE_BEFORE_10_6(__addvti3)
-NOT_HERE_BEFORE_10_6(__ashldi3)
-NOT_HERE_BEFORE_10_6(__ashlti3)
-NOT_HERE_BEFORE_10_6(__ashrdi3)
-NOT_HERE_BEFORE_10_6(__ashrti3)
-NOT_HERE_BEFORE_10_6(__clear_cache)
-NOT_HERE_BEFORE_10_6(__clzdi2)
-NOT_HERE_BEFORE_10_6(__clzsi2)
-NOT_HERE_BEFORE_10_6(__clzti2)
-NOT_HERE_BEFORE_10_6(__cmpdi2)
-NOT_HERE_BEFORE_10_6(__cmpti2)
-NOT_HERE_BEFORE_10_6(__ctzdi2)
-NOT_HERE_BEFORE_10_6(__ctzsi2)
-NOT_HERE_BEFORE_10_6(__ctzti2)
-NOT_HERE_BEFORE_10_6(__divdc3)
-NOT_HERE_BEFORE_10_6(__divdi3)
-NOT_HERE_BEFORE_10_6(__divsc3)
-NOT_HERE_BEFORE_10_6(__divtc3)
-NOT_HERE_BEFORE_10_6(__divti3)
-NOT_HERE_BEFORE_10_6(__divxc3)
-NOT_HERE_BEFORE_10_6(__enable_execute_stack)
-NOT_HERE_BEFORE_10_6(__ffsdi2)
-NOT_HERE_BEFORE_10_6(__ffsti2)
-NOT_HERE_BEFORE_10_6(__fixdfdi)
-NOT_HERE_BEFORE_10_6(__fixdfti)
-NOT_HERE_BEFORE_10_6(__fixsfdi)
-NOT_HERE_BEFORE_10_6(__fixsfti)
-NOT_HERE_BEFORE_10_6(__fixtfdi)
-NOT_HERE_BEFORE_10_6(__fixunsdfdi)
-NOT_HERE_BEFORE_10_6(__fixunsdfsi)
-NOT_HERE_BEFORE_10_6(__fixunsdfti)
-NOT_HERE_BEFORE_10_6(__fixunssfdi)
-NOT_HERE_BEFORE_10_6(__fixunssfsi)
-NOT_HERE_BEFORE_10_6(__fixunssfti)
-NOT_HERE_BEFORE_10_6(__fixunstfdi)
-NOT_HERE_BEFORE_10_6(__fixunsxfdi)
-NOT_HERE_BEFORE_10_6(__fixunsxfsi)
-NOT_HERE_BEFORE_10_6(__fixunsxfti)
-NOT_HERE_BEFORE_10_6(__fixxfdi)
-NOT_HERE_BEFORE_10_6(__fixxfti)
-NOT_HERE_BEFORE_10_6(__floatdidf)
-NOT_HERE_BEFORE_10_6(__floatdisf)
-NOT_HERE_BEFORE_10_6(__floatditf)
-NOT_HERE_BEFORE_10_6(__floatdixf)
-NOT_HERE_BEFORE_10_6(__floattidf)
-NOT_HERE_BEFORE_10_6(__floattisf)
-NOT_HERE_BEFORE_10_6(__floattixf)
-NOT_HERE_BEFORE_10_6(__floatundidf)
-NOT_HERE_BEFORE_10_6(__floatundisf)
-NOT_HERE_BEFORE_10_6(__floatunditf)
-NOT_HERE_BEFORE_10_6(__floatundixf)
-NOT_HERE_BEFORE_10_6(__floatuntidf)
-NOT_HERE_BEFORE_10_6(__floatuntisf)
-NOT_HERE_BEFORE_10_6(__floatuntixf)
-NOT_HERE_BEFORE_10_6(__gcc_personality_v0)
-NOT_HERE_BEFORE_10_6(__lshrdi3)
-NOT_HERE_BEFORE_10_6(__lshrti3)
-NOT_HERE_BEFORE_10_6(__moddi3)
-NOT_HERE_BEFORE_10_6(__modti3)
-NOT_HERE_BEFORE_10_6(__muldc3)
-NOT_HERE_BEFORE_10_6(__muldi3)
-NOT_HERE_BEFORE_10_6(__mulsc3)
-NOT_HERE_BEFORE_10_6(__multc3)
-NOT_HERE_BEFORE_10_6(__multi3)
-NOT_HERE_BEFORE_10_6(__mulvdi3)
-NOT_HERE_BEFORE_10_6(__mulvsi3)
-NOT_HERE_BEFORE_10_6(__mulvti3)
-NOT_HERE_BEFORE_10_6(__mulxc3)
-NOT_HERE_BEFORE_10_6(__negdi2)
-NOT_HERE_BEFORE_10_6(__negti2)
-NOT_HERE_BEFORE_10_6(__negvdi2)
-NOT_HERE_BEFORE_10_6(__negvsi2)
-NOT_HERE_BEFORE_10_6(__negvti2)
-NOT_HERE_BEFORE_10_6(__paritydi2)
-NOT_HERE_BEFORE_10_6(__paritysi2)
-NOT_HERE_BEFORE_10_6(__parityti2)
-NOT_HERE_BEFORE_10_6(__popcountdi2)
-NOT_HERE_BEFORE_10_6(__popcountsi2)
-NOT_HERE_BEFORE_10_6(__popcountti2)
-NOT_HERE_BEFORE_10_6(__powidf2)
-NOT_HERE_BEFORE_10_6(__powisf2)
-NOT_HERE_BEFORE_10_6(__powitf2)
-NOT_HERE_BEFORE_10_6(__powixf2)
-NOT_HERE_BEFORE_10_6(__subvdi3)
-NOT_HERE_BEFORE_10_6(__subvsi3)
-NOT_HERE_BEFORE_10_6(__subvti3)
-NOT_HERE_BEFORE_10_6(__ucmpdi2)
-NOT_HERE_BEFORE_10_6(__ucmpti2)
-NOT_HERE_BEFORE_10_6(__udivdi3)
-NOT_HERE_BEFORE_10_6(__udivmoddi4)
-NOT_HERE_BEFORE_10_6(__udivmodti4)
-NOT_HERE_BEFORE_10_6(__udivti3)
-NOT_HERE_BEFORE_10_6(__umoddi3)
-NOT_HERE_BEFORE_10_6(__umodti3)
-
-
-#if __ppc__
-NOT_HERE_BEFORE_10_6(__gcc_qadd)
-NOT_HERE_BEFORE_10_6(__gcc_qdiv)
-NOT_HERE_BEFORE_10_6(__gcc_qmul)
-NOT_HERE_BEFORE_10_6(__gcc_qsub)
-NOT_HERE_BEFORE_10_6(__trampoline_setup)
-#endif /* __ppc__ */
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_8)
-
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_1)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_2)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_4)
-NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_8)
-
-
-#if __arm__ && __DYNAMIC__
- #define NOT_HERE_UNTIL_AFTER_4_3(sym) \
- extern const char sym##_tmp1 __asm("$ld$hide$os3.0$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp1 = 0; \
- extern const char sym##_tmp2 __asm("$ld$hide$os3.1$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp2 = 0; \
- extern const char sym##_tmp3 __asm("$ld$hide$os3.2$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp3 = 0; \
- extern const char sym##_tmp4 __asm("$ld$hide$os4.0$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp4 = 0; \
- extern const char sym##_tmp5 __asm("$ld$hide$os4.1$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp5 = 0; \
- extern const char sym##_tmp6 __asm("$ld$hide$os4.2$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp6 = 0; \
- extern const char sym##_tmp7 __asm("$ld$hide$os4.3$_" #sym ); \
- __attribute__((visibility("default"))) const char sym##_tmp7 = 0;
-
-NOT_HERE_UNTIL_AFTER_4_3(__absvdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__absvsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__adddf3)
-NOT_HERE_UNTIL_AFTER_4_3(__adddf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__addsf3)
-NOT_HERE_UNTIL_AFTER_4_3(__addsf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__addvdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__addvsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__ashldi3)
-NOT_HERE_UNTIL_AFTER_4_3(__ashrdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__bswapdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__bswapsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__clzdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__clzsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__cmpdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__ctzdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__ctzsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__divdc3)
-NOT_HERE_UNTIL_AFTER_4_3(__divdf3)
-NOT_HERE_UNTIL_AFTER_4_3(__divdf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__divdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__divsc3)
-NOT_HERE_UNTIL_AFTER_4_3(__divsf3)
-NOT_HERE_UNTIL_AFTER_4_3(__divsf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__divsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__eqdf2)
-NOT_HERE_UNTIL_AFTER_4_3(__eqdf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__eqsf2)
-NOT_HERE_UNTIL_AFTER_4_3(__eqsf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2)
-NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__ffsdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__fixdfdi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixdfsi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixdfsivfp)
-NOT_HERE_UNTIL_AFTER_4_3(__fixsfdi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixsfsi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixsfsivfp)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfdi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsivfp)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunssfdi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsi)
-NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsivfp)
-NOT_HERE_UNTIL_AFTER_4_3(__floatdidf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatdisf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatsidf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatsidfvfp)
-NOT_HERE_UNTIL_AFTER_4_3(__floatsisf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatsisfvfp)
-NOT_HERE_UNTIL_AFTER_4_3(__floatundidf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatundisf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatunsidf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatunsisf)
-NOT_HERE_UNTIL_AFTER_4_3(__floatunssidfvfp)
-NOT_HERE_UNTIL_AFTER_4_3(__floatunssisfvfp)
-NOT_HERE_UNTIL_AFTER_4_3(__gedf2)
-NOT_HERE_UNTIL_AFTER_4_3(__gedf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__gesf2)
-NOT_HERE_UNTIL_AFTER_4_3(__gesf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__gtdf2)
-NOT_HERE_UNTIL_AFTER_4_3(__gtdf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__gtsf2)
-NOT_HERE_UNTIL_AFTER_4_3(__gtsf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__ledf2)
-NOT_HERE_UNTIL_AFTER_4_3(__ledf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__lesf2)
-NOT_HERE_UNTIL_AFTER_4_3(__lesf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__lshrdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__ltdf2)
-NOT_HERE_UNTIL_AFTER_4_3(__ltdf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__ltsf2)
-NOT_HERE_UNTIL_AFTER_4_3(__ltsf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__moddi3)
-NOT_HERE_UNTIL_AFTER_4_3(__modsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__muldc3)
-NOT_HERE_UNTIL_AFTER_4_3(__muldf3)
-NOT_HERE_UNTIL_AFTER_4_3(__muldf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__muldi3)
-NOT_HERE_UNTIL_AFTER_4_3(__mulsc3)
-NOT_HERE_UNTIL_AFTER_4_3(__mulsf3)
-NOT_HERE_UNTIL_AFTER_4_3(__mulsf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__mulvdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__mulvsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__nedf2)
-NOT_HERE_UNTIL_AFTER_4_3(__nedf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__negdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__negvdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__negvsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__nesf2)
-NOT_HERE_UNTIL_AFTER_4_3(__nesf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__paritydi2)
-NOT_HERE_UNTIL_AFTER_4_3(__paritysi2)
-NOT_HERE_UNTIL_AFTER_4_3(__popcountdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__popcountsi2)
-NOT_HERE_UNTIL_AFTER_4_3(__powidf2)
-NOT_HERE_UNTIL_AFTER_4_3(__powisf2)
-NOT_HERE_UNTIL_AFTER_4_3(__subdf3)
-NOT_HERE_UNTIL_AFTER_4_3(__subdf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__subsf3)
-NOT_HERE_UNTIL_AFTER_4_3(__subsf3vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__subvdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__subvsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2)
-NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__ucmpdi2)
-NOT_HERE_UNTIL_AFTER_4_3(__udivdi3)
-NOT_HERE_UNTIL_AFTER_4_3(__udivmoddi4)
-NOT_HERE_UNTIL_AFTER_4_3(__udivsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__umoddi3)
-NOT_HERE_UNTIL_AFTER_4_3(__umodsi3)
-NOT_HERE_UNTIL_AFTER_4_3(__unorddf2)
-NOT_HERE_UNTIL_AFTER_4_3(__unorddf2vfp)
-NOT_HERE_UNTIL_AFTER_4_3(__unordsf2)
-NOT_HERE_UNTIL_AFTER_4_3(__unordsf2vfp)
-
-NOT_HERE_UNTIL_AFTER_4_3(__divmodsi4)
-NOT_HERE_UNTIL_AFTER_4_3(__udivmodsi4)
-#endif // __arm__ && __DYNAMIC__
-
-
-
-
-
-#else /* !__APPLE__ */
-
-extern int avoid_empty_file;
-
-#endif /* !__APPLE__*/
diff --git a/lib/libcompiler_rt/arm/adddf3vfp.S b/lib/libcompiler_rt/arm/adddf3vfp.S
deleted file mode 100644
index 8e476cad162..00000000000
--- a/lib/libcompiler_rt/arm/adddf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- adddf3vfp.S - Implement adddf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// double __adddf3vfp(double a, double b) { return a + b; }
-//
-// Adds two double precision floating point numbers using the Darwin
-// calling convention where double arguments are passsed in GPR pairs
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__adddf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vadd.f64 d0, d0, d1
-#else
- vmov d6, r0, r1 // move first param from r0/r1 pair into d6
- vmov d7, r2, r3 // move second param from r2/r3 pair into d7
- vadd.f64 d6, d6, d7
- vmov r0, r1, d6 // move result back to r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__adddf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/addsf3.S b/lib/libcompiler_rt/arm/addsf3.S
deleted file mode 100644
index 74723cbeff7..00000000000
--- a/lib/libcompiler_rt/arm/addsf3.S
+++ /dev/null
@@ -1,277 +0,0 @@
-/*===-- addsf3.S - Adds two single precision floating pointer numbers-----===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __addsf3 (single precision floating pointer number
- * addition with the IEEE-754 default rounding (to nearest, ties to even)
- * function for the ARM Thumb1 ISA.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-#define significandBits 23
-#define typeWidth 32
-
- .syntax unified
- .text
- .thumb
- .p2align 2
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_fadd, __addsf3)
-
-DEFINE_COMPILERRT_THUMB_FUNCTION(__addsf3)
- push {r4, r5, r6, r7, lr}
- // Get the absolute value of a and b.
- lsls r2, r0, #1
- lsls r3, r1, #1
- lsrs r2, r2, #1 /* aAbs */
- beq LOCAL_LABEL(a_zero_nan_inf)
- lsrs r3, r3, #1 /* bAbs */
- beq LOCAL_LABEL(zero_nan_inf)
-
- // Detect if a or b is infinity or Nan.
- lsrs r6, r2, #(significandBits)
- lsrs r7, r3, #(significandBits)
- cmp r6, #0xFF
- beq LOCAL_LABEL(zero_nan_inf)
- cmp r7, #0xFF
- beq LOCAL_LABEL(zero_nan_inf)
-
- // Swap Rep and Abs so that a and aAbs has the larger absolute value.
- cmp r2, r3
- bhs LOCAL_LABEL(no_swap)
- movs r4, r0
- movs r5, r2
- movs r0, r1
- movs r2, r3
- movs r1, r4
- movs r3, r5
-LOCAL_LABEL(no_swap):
-
- // Get the significands and shift them to give us round, guard and sticky.
- lsls r4, r0, #(typeWidth - significandBits)
- lsrs r4, r4, #(typeWidth - significandBits - 3) /* aSignificand << 3 */
- lsls r5, r1, #(typeWidth - significandBits)
- lsrs r5, r5, #(typeWidth - significandBits - 3) /* bSignificand << 3 */
-
- // Get the implicitBit.
- movs r6, #1
- lsls r6, r6, #(significandBits + 3)
-
- // Get aExponent and set implicit bit if necessary.
- lsrs r2, r2, #(significandBits)
- beq LOCAL_LABEL(a_done_implicit_bit)
- orrs r4, r6
-LOCAL_LABEL(a_done_implicit_bit):
-
- // Get bExponent and set implicit bit if necessary.
- lsrs r3, r3, #(significandBits)
- beq LOCAL_LABEL(b_done_implicit_bit)
- orrs r5, r6
-LOCAL_LABEL(b_done_implicit_bit):
-
- // Get the difference in exponents.
- subs r6, r2, r3
- beq LOCAL_LABEL(done_align)
-
- // If b is denormal, then a must be normal as align > 0, and we only need to
- // right shift bSignificand by (align - 1) bits.
- cmp r3, #0
- bne 1f
- subs r6, r6, #1
-1:
-
- // No longer needs bExponent. r3 is dead here.
- // Set sticky bits of b: sticky = bSignificand << (typeWidth - align).
- movs r3, #(typeWidth)
- subs r3, r3, r6
- movs r7, r5
- lsls r7, r3
- beq 1f
- movs r7, #1
-1:
-
- // bSignificand = bSignificand >> align | sticky;
- lsrs r5, r6
- orrs r5, r7
- bne LOCAL_LABEL(done_align)
- movs r5, #1 // sticky; b is known to be non-zero.
-
-LOCAL_LABEL(done_align):
- // isSubtraction = (aRep ^ bRep) >> 31;
- movs r7, r0
- eors r7, r1
- lsrs r7, #31
- bne LOCAL_LABEL(do_substraction)
-
- // Same sign, do Addition.
-
- // aSignificand += bSignificand;
- adds r4, r4, r5
-
- // Check carry bit.
- movs r6, #1
- lsls r6, r6, #(significandBits + 3 + 1)
- movs r7, r4
- ands r7, r6
- beq LOCAL_LABEL(form_result)
- // If the addition carried up, we need to right-shift the result and
- // adjust the exponent.
- movs r7, r4
- movs r6, #1
- ands r7, r6 // sticky = aSignificand & 1;
- lsrs r4, #1
- orrs r4, r7 // result Significand
- adds r2, #1 // result Exponent
- // If we have overflowed the type, return +/- infinity.
- cmp r2, 0xFF
- beq LOCAL_LABEL(ret_inf)
-
-LOCAL_LABEL(form_result):
- // Shift the sign, exponent and significand into place.
- lsrs r0, #(typeWidth - 1)
- lsls r0, #(typeWidth - 1) // Get Sign.
- lsls r2, #(significandBits)
- orrs r0, r2
- movs r1, r4
- lsls r4, #(typeWidth - significandBits - 3)
- lsrs r4, #(typeWidth - significandBits)
- orrs r0, r4
-
- // Final rounding. The result may overflow to infinity, but that is the
- // correct result in that case.
- // roundGuardSticky = aSignificand & 0x7;
- movs r2, #0x7
- ands r1, r2
- // if (roundGuardSticky > 0x4) result++;
-
- cmp r1, #0x4
- blt LOCAL_LABEL(done_round)
- beq 1f
- adds r0, #1
- pop {r4, r5, r6, r7, pc}
-1:
-
- // if (roundGuardSticky == 0x4) result += result & 1;
- movs r1, r0
- lsrs r1, #1
- bcc LOCAL_LABEL(done_round)
- adds r0, r0, #1
-LOCAL_LABEL(done_round):
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(do_substraction):
- subs r4, r4, r5 // aSignificand -= bSignificand;
- beq LOCAL_LABEL(ret_zero)
- movs r6, r4
- cmp r2, 0
- beq LOCAL_LABEL(form_result) // if a's exp is 0, no need to normalize.
- // If partial cancellation occured, we need to left-shift the result
- // and adjust the exponent:
- lsrs r6, r6, #(significandBits + 3)
- bne LOCAL_LABEL(form_result)
-
- push {r0, r1, r2, r3}
- movs r0, r4
- bl SYMBOL_NAME(__clzsi2)
- movs r5, r0
- pop {r0, r1, r2, r3}
- // shift = rep_clz(aSignificand) - rep_clz(implicitBit << 3);
- subs r5, r5, #(typeWidth - significandBits - 3 - 1)
- // aSignificand <<= shift; aExponent -= shift;
- lsls r4, r5
- subs r2, r2, r5
- bgt LOCAL_LABEL(form_result)
-
- // Do normalization if aExponent <= 0.
- movs r6, #1
- subs r6, r6, r2 // 1 - aExponent;
- movs r2, #0 // aExponent = 0;
- movs r3, #(typeWidth) // bExponent is dead.
- subs r3, r3, r6
- movs r7, r4
- lsls r7, r3 // stickyBit = (bool)(aSignificant << (typeWidth - align))
- beq 1f
- movs r7, #1
-1:
- lsrs r4, r6 /* aSignificand >> shift */
- orrs r4, r7
- b LOCAL_LABEL(form_result)
-
-LOCAL_LABEL(ret_zero):
- movs r0, #0
- pop {r4, r5, r6, r7, pc}
-
-
-LOCAL_LABEL(a_zero_nan_inf):
- lsrs r3, r3, #1
-
-LOCAL_LABEL(zero_nan_inf):
- // Here r2 has aAbs, r3 has bAbs
- movs r4, #0xFF
- lsls r4, r4, #(significandBits) // Make +inf.
-
- cmp r2, r4
- bhi LOCAL_LABEL(a_is_nan)
- cmp r3, r4
- bhi LOCAL_LABEL(b_is_nan)
-
- cmp r2, r4
- bne LOCAL_LABEL(a_is_rational)
- // aAbs is INF.
- eors r1, r0 // aRep ^ bRep.
- movs r6, #1
- lsls r6, r6, #(typeWidth - 1) // get sign mask.
- cmp r1, r6 // if they only differ on sign bit, it's -INF + INF
- beq LOCAL_LABEL(a_is_nan)
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(a_is_rational):
- cmp r3, r4
- bne LOCAL_LABEL(b_is_rational)
- movs r0, r1
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(b_is_rational):
- // either a or b or both are zero.
- adds r4, r2, r3
- beq LOCAL_LABEL(both_zero)
- cmp r2, #0 // is absA 0 ?
- beq LOCAL_LABEL(ret_b)
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(both_zero):
- ands r0, r1 // +0 + -0 = +0
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(ret_b):
- movs r0, r1
-
-LOCAL_LABEL(ret):
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(b_is_nan):
- movs r0, r1
-LOCAL_LABEL(a_is_nan):
- movs r1, #1
- lsls r1, r1, #(significandBits -1) // r1 is quiet bit.
- orrs r0, r1
- pop {r4, r5, r6, r7, pc}
-
-LOCAL_LABEL(ret_inf):
- movs r4, #0xFF
- lsls r4, r4, #(significandBits)
- orrs r0, r4
- lsrs r0, r0, #(significandBits)
- lsls r0, r0, #(significandBits)
- pop {r4, r5, r6, r7, pc}
-
-
-END_COMPILERRT_FUNCTION(__addsf3)
-
-NO_EXEC_STACK_DIRECTIVE
diff --git a/lib/libcompiler_rt/arm/addsf3vfp.S b/lib/libcompiler_rt/arm/addsf3vfp.S
deleted file mode 100644
index 8871efdcc5d..00000000000
--- a/lib/libcompiler_rt/arm/addsf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- addsf3vfp.S - Implement addsf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __addsf3vfp(float a, float b);
-//
-// Adds two single precision floating point numbers using the Darwin
-// calling convention where single arguments are passsed in GPRs
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__addsf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vadd.f32 s0, s0, s1
-#else
- vmov s14, r0 // move first param from r0 into float register
- vmov s15, r1 // move second param from r1 into float register
- vadd.f32 s14, s14, s15
- vmov r0, s14 // move result back to r0
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__addsf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_cdcmp.S b/lib/libcompiler_rt/arm/aeabi_cdcmp.S
deleted file mode 100644
index adc2d55d90f..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_cdcmp.S
+++ /dev/null
@@ -1,145 +0,0 @@
-//===-- aeabi_cdcmp.S - EABI cdcmp* implementation ------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
-#error big endian support not implemented
-#endif
-
-#define APSR_Z (1 << 30)
-#define APSR_C (1 << 29)
-
-// void __aeabi_cdcmpeq(double a, double b) {
-// if (isnan(a) || isnan(b)) {
-// Z = 0; C = 1;
-// } else {
-// __aeabi_cdcmple(a, b);
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
- push {r0-r3, lr}
- bl __aeabi_cdcmpeq_check_nan
- cmp r0, #1
-#if defined(USE_THUMB_1)
- beq 1f
- // NaN has been ruled out, so __aeabi_cdcmple can't trap
- mov r0, sp
- ldm r0, {r0-r3}
- bl __aeabi_cdcmple
- pop {r0-r3, pc}
-1:
- // Z = 0, C = 1
- movs r0, #0xF
- lsls r0, r0, #31
- pop {r0-r3, pc}
-#else
- pop {r0-r3, lr}
-
- // NaN has been ruled out, so __aeabi_cdcmple can't trap
- // Use "it ne" + unconditional branch to guarantee a supported relocation if
- // __aeabi_cdcmple is in a different section for some builds.
- IT(ne)
- bne __aeabi_cdcmple
-
-#if defined(USE_THUMB_2)
- mov ip, #APSR_C
- msr APSR_nzcvq, ip
-#else
- msr APSR_nzcvq, #APSR_C
-#endif
- JMP(lr)
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_cdcmpeq)
-
-
-// void __aeabi_cdcmple(double a, double b) {
-// if (__aeabi_dcmplt(a, b)) {
-// Z = 0; C = 0;
-// } else if (__aeabi_dcmpeq(a, b)) {
-// Z = 1; C = 1;
-// } else {
-// Z = 0; C = 1;
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cdcmple)
- // Per the RTABI, this function must preserve r0-r11.
- // Save lr in the same instruction for compactness
- push {r0-r3, lr}
-
- bl __aeabi_dcmplt
- cmp r0, #1
-#if defined(USE_THUMB_1)
- bne 1f
- // Z = 0, C = 0
- movs r0, #1
- lsls r0, r0, #1
- pop {r0-r3, pc}
-1:
- mov r0, sp
- ldm r0, {r0-r3}
- bl __aeabi_dcmpeq
- cmp r0, #1
- bne 2f
- // Z = 1, C = 1
- movs r0, #2
- lsls r0, r0, #31
- pop {r0-r3, pc}
-2:
- // Z = 0, C = 1
- movs r0, #0xF
- lsls r0, r0, #31
- pop {r0-r3, pc}
-#else
- ITT(eq)
- moveq ip, #0
- beq 1f
-
- ldm sp, {r0-r3}
- bl __aeabi_dcmpeq
- cmp r0, #1
- ITE(eq)
- moveq ip, #(APSR_C | APSR_Z)
- movne ip, #(APSR_C)
-
-1:
- msr APSR_nzcvq, ip
- pop {r0-r3}
- POP_PC()
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_cdcmple)
-
-// int __aeabi_cdrcmple(double a, double b) {
-// return __aeabi_cdcmple(b, a);
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cdrcmple)
- // Swap r0 and r2
- mov ip, r0
- mov r0, r2
- mov r2, ip
-
- // Swap r1 and r3
- mov ip, r1
- mov r1, r3
- mov r3, ip
-
- b __aeabi_cdcmple
-END_COMPILERRT_FUNCTION(__aeabi_cdrcmple)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_cdcmpeq_check_nan.c b/lib/libcompiler_rt/arm/aeabi_cdcmpeq_check_nan.c
deleted file mode 100644
index 7578433a1df..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_cdcmpeq_check_nan.c
+++ /dev/null
@@ -1,16 +0,0 @@
-//===-- lib/arm/aeabi_cdcmpeq_helper.c - Helper for cdcmpeq ---------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <stdint.h>
-#include "../int_lib.h"
-
-AEABI_RTABI __attribute__((visibility("hidden")))
-int __aeabi_cdcmpeq_check_nan(double a, double b) {
- return __builtin_isnan(a) || __builtin_isnan(b);
-}
diff --git a/lib/libcompiler_rt/arm/aeabi_cfcmp.S b/lib/libcompiler_rt/arm/aeabi_cfcmp.S
deleted file mode 100644
index 4b1de997687..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_cfcmp.S
+++ /dev/null
@@ -1,140 +0,0 @@
-//===-- aeabi_cfcmp.S - EABI cfcmp* implementation ------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
-#error big endian support not implemented
-#endif
-
-#define APSR_Z (1 << 30)
-#define APSR_C (1 << 29)
-
-// void __aeabi_cfcmpeq(float a, float b) {
-// if (isnan(a) || isnan(b)) {
-// Z = 0; C = 1;
-// } else {
-// __aeabi_cfcmple(a, b);
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
- push {r0-r3, lr}
- bl __aeabi_cfcmpeq_check_nan
- cmp r0, #1
-#if defined(USE_THUMB_1)
- beq 1f
- // NaN has been ruled out, so __aeabi_cfcmple can't trap
- mov r0, sp
- ldm r0, {r0-r3}
- bl __aeabi_cfcmple
- pop {r0-r3, pc}
-1:
- // Z = 0, C = 1
- movs r0, #0xF
- lsls r0, r0, #31
- pop {r0-r3, pc}
-#else
- pop {r0-r3, lr}
-
- // NaN has been ruled out, so __aeabi_cfcmple can't trap
- // Use "it ne" + unconditional branch to guarantee a supported relocation if
- // __aeabi_cfcmple is in a different section for some builds.
- IT(ne)
- bne __aeabi_cfcmple
-
-#if defined(USE_THUMB_2)
- mov ip, #APSR_C
- msr APSR_nzcvq, ip
-#else
- msr APSR_nzcvq, #APSR_C
-#endif
- JMP(lr)
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_cfcmpeq)
-
-
-// void __aeabi_cfcmple(float a, float b) {
-// if (__aeabi_fcmplt(a, b)) {
-// Z = 0; C = 0;
-// } else if (__aeabi_fcmpeq(a, b)) {
-// Z = 1; C = 1;
-// } else {
-// Z = 0; C = 1;
-// }
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfcmple)
- // Per the RTABI, this function must preserve r0-r11.
- // Save lr in the same instruction for compactness
- push {r0-r3, lr}
-
- bl __aeabi_fcmplt
- cmp r0, #1
-#if defined(USE_THUMB_1)
- bne 1f
- // Z = 0, C = 0
- movs r0, #1
- lsls r0, r0, #1
- pop {r0-r3, pc}
-1:
- mov r0, sp
- ldm r0, {r0-r3}
- bl __aeabi_fcmpeq
- cmp r0, #1
- bne 2f
- // Z = 1, C = 1
- movs r0, #2
- lsls r0, r0, #31
- pop {r0-r3, pc}
-2:
- // Z = 0, C = 1
- movs r0, #0xF
- lsls r0, r0, #31
- pop {r0-r3, pc}
-#else
- ITT(eq)
- moveq ip, #0
- beq 1f
-
- ldm sp, {r0-r3}
- bl __aeabi_fcmpeq
- cmp r0, #1
- ITE(eq)
- moveq ip, #(APSR_C | APSR_Z)
- movne ip, #(APSR_C)
-
-1:
- msr APSR_nzcvq, ip
- pop {r0-r3}
- POP_PC()
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_cfcmple)
-
-// int __aeabi_cfrcmple(float a, float b) {
-// return __aeabi_cfcmple(b, a);
-// }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
- // Swap r0 and r1
- mov ip, r0
- mov r0, r1
- mov r1, ip
-
- b __aeabi_cfcmple
-END_COMPILERRT_FUNCTION(__aeabi_cfrcmple)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_cfcmpeq_check_nan.c b/lib/libcompiler_rt/arm/aeabi_cfcmpeq_check_nan.c
deleted file mode 100644
index 43dde9a4959..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_cfcmpeq_check_nan.c
+++ /dev/null
@@ -1,16 +0,0 @@
-//===-- lib/arm/aeabi_cfcmpeq_helper.c - Helper for cdcmpeq ---------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <stdint.h>
-#include "../int_lib.h"
-
-AEABI_RTABI __attribute__((visibility("hidden")))
-int __aeabi_cfcmpeq_check_nan(float a, float b) {
- return __builtin_isnan(a) || __builtin_isnan(b);
-}
diff --git a/lib/libcompiler_rt/arm/aeabi_dcmp.S b/lib/libcompiler_rt/arm/aeabi_dcmp.S
deleted file mode 100644
index 9fa78b46124..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_dcmp.S
+++ /dev/null
@@ -1,52 +0,0 @@
-//===-- aeabi_dcmp.S - EABI dcmp* implementation ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// int __aeabi_dcmp{eq,lt,le,ge,gt}(double a, double b) {
-// int result = __{eq,lt,le,ge,gt}df2(a, b);
-// if (result {==,<,<=,>=,>} 0) {
-// return 1;
-// } else {
-// return 0;
-// }
-// }
-
-#if defined(COMPILER_RT_ARMHF_TARGET)
-# define CONVERT_DCMP_ARGS_TO_DF2_ARGS \
- vmov d0, r0, r1 SEPARATOR \
- vmov d1, r2, r3
-#else
-# define CONVERT_DCMP_ARGS_TO_DF2_ARGS
-#endif
-
-#define DEFINE_AEABI_DCMP(cond) \
- .syntax unified SEPARATOR \
- .p2align 2 SEPARATOR \
-DEFINE_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond) \
- push { r4, lr } SEPARATOR \
- CONVERT_DCMP_ARGS_TO_DF2_ARGS SEPARATOR \
- bl SYMBOL_NAME(__ ## cond ## df2) SEPARATOR \
- cmp r0, #0 SEPARATOR \
- b ## cond 1f SEPARATOR \
- movs r0, #0 SEPARATOR \
- pop { r4, pc } SEPARATOR \
-1: SEPARATOR \
- movs r0, #1 SEPARATOR \
- pop { r4, pc } SEPARATOR \
-END_COMPILERRT_FUNCTION(__aeabi_dcmp ## cond)
-
-DEFINE_AEABI_DCMP(eq)
-DEFINE_AEABI_DCMP(lt)
-DEFINE_AEABI_DCMP(le)
-DEFINE_AEABI_DCMP(ge)
-DEFINE_AEABI_DCMP(gt)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_div0.c b/lib/libcompiler_rt/arm/aeabi_div0.c
deleted file mode 100644
index dc3031326e3..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_div0.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ===-- aeabi_div0.c - ARM Runtime ABI support routines for compiler-rt ---===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements the division by zero helper routines as specified by the
- * Run-time ABI for the ARM Architecture.
- *
- * ===----------------------------------------------------------------------===
- */
-
-/*
- * RTABI 4.3.2 - Division by zero
- *
- * The *div0 functions:
- * - Return the value passed to them as a parameter
- * - Or, return a fixed value defined by the execution environment (such as 0)
- * - Or, raise a signal (often SIGFPE) or throw an exception, and do not return
- *
- * An application may provide its own implementations of the *div0 functions to
- * for a particular behaviour from the *div and *divmod functions called out of
- * line.
- */
-
-#include "../int_lib.h"
-
-/* provide an unused declaration to pacify pendantic compilation */
-extern unsigned char declaration;
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI int __attribute__((weak)) __attribute__((visibility("hidden")))
-__aeabi_idiv0(int return_value) {
- return return_value;
-}
-
-AEABI_RTABI long long __attribute__((weak)) __attribute__((visibility("hidden")))
-__aeabi_ldiv0(long long return_value) {
- return return_value;
-}
-#endif
-
diff --git a/lib/libcompiler_rt/arm/aeabi_drsub.c b/lib/libcompiler_rt/arm/aeabi_drsub.c
deleted file mode 100644
index 1254886086f..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_drsub.c
+++ /dev/null
@@ -1,19 +0,0 @@
-//===-- lib/arm/aeabi_drsub.c - Double-precision subtraction --------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "../fp_lib.h"
-
-AEABI_RTABI fp_t
-__aeabi_dsub(fp_t, fp_t);
-
-AEABI_RTABI fp_t
-__aeabi_drsub(fp_t a, fp_t b) {
- return __aeabi_dsub(b, a);
-}
diff --git a/lib/libcompiler_rt/arm/aeabi_fcmp.S b/lib/libcompiler_rt/arm/aeabi_fcmp.S
deleted file mode 100644
index ea5b96c21d5..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_fcmp.S
+++ /dev/null
@@ -1,52 +0,0 @@
-//===-- aeabi_fcmp.S - EABI fcmp* implementation ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// int __aeabi_fcmp{eq,lt,le,ge,gt}(float a, float b) {
-// int result = __{eq,lt,le,ge,gt}sf2(a, b);
-// if (result {==,<,<=,>=,>} 0) {
-// return 1;
-// } else {
-// return 0;
-// }
-// }
-
-#if defined(COMPILER_RT_ARMHF_TARGET)
-# define CONVERT_FCMP_ARGS_TO_SF2_ARGS \
- vmov s0, r0 SEPARATOR \
- vmov s1, r1
-#else
-# define CONVERT_FCMP_ARGS_TO_SF2_ARGS
-#endif
-
-#define DEFINE_AEABI_FCMP(cond) \
- .syntax unified SEPARATOR \
- .p2align 2 SEPARATOR \
-DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond) \
- push { r4, lr } SEPARATOR \
- CONVERT_FCMP_ARGS_TO_SF2_ARGS SEPARATOR \
- bl SYMBOL_NAME(__ ## cond ## sf2) SEPARATOR \
- cmp r0, #0 SEPARATOR \
- b ## cond 1f SEPARATOR \
- movs r0, #0 SEPARATOR \
- pop { r4, pc } SEPARATOR \
-1: SEPARATOR \
- movs r0, #1 SEPARATOR \
- pop { r4, pc } SEPARATOR \
-END_COMPILERRT_FUNCTION(__aeabi_fcmp ## cond)
-
-DEFINE_AEABI_FCMP(eq)
-DEFINE_AEABI_FCMP(lt)
-DEFINE_AEABI_FCMP(le)
-DEFINE_AEABI_FCMP(ge)
-DEFINE_AEABI_FCMP(gt)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_frsub.c b/lib/libcompiler_rt/arm/aeabi_frsub.c
deleted file mode 100644
index 34f2303745b..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_frsub.c
+++ /dev/null
@@ -1,19 +0,0 @@
-//===-- lib/arm/aeabi_frsub.c - Single-precision subtraction --------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "../fp_lib.h"
-
-AEABI_RTABI fp_t
-__aeabi_fsub(fp_t, fp_t);
-
-AEABI_RTABI fp_t
-__aeabi_frsub(fp_t a, fp_t b) {
- return __aeabi_fsub(b, a);
-}
diff --git a/lib/libcompiler_rt/arm/aeabi_idivmod.S b/lib/libcompiler_rt/arm/aeabi_idivmod.S
deleted file mode 100644
index 9c9c80ab5a7..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_idivmod.S
+++ /dev/null
@@ -1,51 +0,0 @@
-//===-- aeabi_idivmod.S - EABI idivmod implementation ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// struct { int quot, int rem} __aeabi_idivmod(int numerator, int denominator) {
-// int rem, quot;
-// quot = __divmodsi4(numerator, denominator, &rem);
-// return {quot, rem};
-// }
-
-#if defined(__MINGW32__)
-#define __aeabi_idivmod __rt_sdiv
-#endif
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
-#if defined(USE_THUMB_1)
- push {r0, r1, lr}
- bl SYMBOL_NAME(__divsi3)
- pop {r1, r2, r3} // now r0 = quot, r1 = num, r2 = denom
- muls r2, r0, r2 // r2 = quot * denom
- subs r1, r1, r2
- JMP (r3)
-#else // defined(USE_THUMB_1)
- push { lr }
- sub sp, sp, #4
- mov r2, sp
-#if defined(__MINGW32__)
- mov r3, r0
- mov r0, r1
- mov r1, r3
-#endif
- bl SYMBOL_NAME(__divmodsi4)
- ldr r1, [sp]
- add sp, sp, #4
- pop { pc }
-#endif // defined(USE_THUMB_1)
-END_COMPILERRT_FUNCTION(__aeabi_idivmod)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_ldivmod.S b/lib/libcompiler_rt/arm/aeabi_ldivmod.S
deleted file mode 100644
index 038ae5d723a..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_ldivmod.S
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- aeabi_ldivmod.S - EABI ldivmod implementation ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// struct { int64_t quot, int64_t rem}
-// __aeabi_ldivmod(int64_t numerator, int64_t denominator) {
-// int64_t rem, quot;
-// quot = __divmoddi4(numerator, denominator, &rem);
-// return {quot, rem};
-// }
-
-#if defined(__MINGW32__)
-#define __aeabi_ldivmod __rt_sdiv64
-#endif
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
- push {r6, lr}
- sub sp, sp, #16
- add r6, sp, #8
- str r6, [sp]
-#if defined(__MINGW32__)
- movs r6, r0
- movs r0, r2
- movs r2, r6
- movs r6, r1
- movs r1, r3
- movs r3, r6
-#endif
- bl SYMBOL_NAME(__divmoddi4)
- ldr r2, [sp, #8]
- ldr r3, [sp, #12]
- add sp, sp, #16
- pop {r6, pc}
-END_COMPILERRT_FUNCTION(__aeabi_ldivmod)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_memcmp.S b/lib/libcompiler_rt/arm/aeabi_memcmp.S
deleted file mode 100644
index e86d6113760..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_memcmp.S
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- aeabi_memcmp.S - EABI memcmp implementation -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// void __aeabi_memcmp(void *dest, void *src, size_t n) { memcmp(dest, src, n); }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp)
-#ifdef USE_THUMB_1
- push {r7, lr}
- bl memcmp
- pop {r7, pc}
-#else
- b memcmp
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_memcmp)
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp)
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp8, __aeabi_memcmp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_memcpy.S b/lib/libcompiler_rt/arm/aeabi_memcpy.S
deleted file mode 100644
index e83c5fd4dbb..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_memcpy.S
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- aeabi_memcpy.S - EABI memcpy implementation -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// void __aeabi_memcpy(void *dest, void *src, size_t n) { memcpy(dest, src, n); }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy)
-#ifdef USE_THUMB_1
- push {r7, lr}
- bl memcpy
- pop {r7, pc}
-#else
- b memcpy
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_memcpy)
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy)
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy8, __aeabi_memcpy)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_memmove.S b/lib/libcompiler_rt/arm/aeabi_memmove.S
deleted file mode 100644
index ee28300e46f..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_memmove.S
+++ /dev/null
@@ -1,29 +0,0 @@
-//===-- aeabi_memmove.S - EABI memmove implementation --------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===---------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// void __aeabi_memmove(void *dest, void *src, size_t n) { memmove(dest, src, n); }
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove)
-#ifdef USE_THUMB_1
- push {r7, lr}
- bl memmove
- pop {r7, pc}
-#else
- b memmove
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_memmove)
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove)
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove8, __aeabi_memmove)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_memset.S b/lib/libcompiler_rt/arm/aeabi_memset.S
deleted file mode 100644
index 0a678d7627e..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_memset.S
+++ /dev/null
@@ -1,50 +0,0 @@
-//===-- aeabi_memset.S - EABI memset implementation -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// void __aeabi_memset(void *dest, size_t n, int c) { memset(dest, c, n); }
-// void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0); }
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_memset)
- mov r3, r1
- mov r1, r2
- mov r2, r3
-#ifdef USE_THUMB_1
- push {r7, lr}
- bl memset
- pop {r7, pc}
-#else
- b memset
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_memset)
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset)
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset)
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
- mov r2, r1
- movs r1, #0
-#ifdef USE_THUMB_1
- push {r7, lr}
- bl memset
- pop {r7, pc}
-#else
- b memset
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_memclr)
-
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr8, __aeabi_memclr)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_uidivmod.S b/lib/libcompiler_rt/arm/aeabi_uidivmod.S
deleted file mode 100644
index 88a4a6d8bc1..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_uidivmod.S
+++ /dev/null
@@ -1,58 +0,0 @@
-//===-- aeabi_uidivmod.S - EABI uidivmod implementation -------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// struct { unsigned quot, unsigned rem}
-// __aeabi_uidivmod(unsigned numerator, unsigned denominator) {
-// unsigned rem, quot;
-// quot = __udivmodsi4(numerator, denominator, &rem);
-// return {quot, rem};
-// }
-
-#if defined(__MINGW32__)
-#define __aeabi_uidivmod __rt_udiv
-#endif
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_uidivmod)
-#if defined(USE_THUMB_1)
- cmp r0, r1
- bcc LOCAL_LABEL(case_denom_larger)
- push {r0, r1, lr}
- bl SYMBOL_NAME(__aeabi_uidiv)
- pop {r1, r2, r3}
- muls r2, r0, r2 // r2 = quot * denom
- subs r1, r1, r2
- JMP (r3)
-LOCAL_LABEL(case_denom_larger):
- movs r1, r0
- movs r0, #0
- JMP (lr)
-#else // defined(USE_THUMB_1)
- push { lr }
- sub sp, sp, #4
- mov r2, sp
-#if defined(__MINGW32__)
- mov r3, r0
- mov r0, r1
- mov r1, r3
-#endif
- bl SYMBOL_NAME(__udivmodsi4)
- ldr r1, [sp]
- add sp, sp, #4
- pop { pc }
-#endif
-END_COMPILERRT_FUNCTION(__aeabi_uidivmod)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/aeabi_uldivmod.S b/lib/libcompiler_rt/arm/aeabi_uldivmod.S
deleted file mode 100644
index be343b6bc82..00000000000
--- a/lib/libcompiler_rt/arm/aeabi_uldivmod.S
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- aeabi_uldivmod.S - EABI uldivmod implementation -------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// struct { uint64_t quot, uint64_t rem}
-// __aeabi_uldivmod(uint64_t numerator, uint64_t denominator) {
-// uint64_t rem, quot;
-// quot = __udivmoddi4(numerator, denominator, &rem);
-// return {quot, rem};
-// }
-
-#if defined(__MINGW32__)
-#define __aeabi_uldivmod __rt_udiv64
-#endif
-
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__aeabi_uldivmod)
- push {r6, lr}
- sub sp, sp, #16
- add r6, sp, #8
- str r6, [sp]
-#if defined(__MINGW32__)
- movs r6, r0
- movs r0, r2
- movs r2, r6
- movs r6, r1
- movs r1, r3
- movs r3, r6
-#endif
- bl SYMBOL_NAME(__udivmoddi4)
- ldr r2, [sp, #8]
- ldr r3, [sp, #12]
- add sp, sp, #16
- pop {r6, pc}
-END_COMPILERRT_FUNCTION(__aeabi_uldivmod)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/bswapdi2.S b/lib/libcompiler_rt/arm/bswapdi2.S
deleted file mode 100644
index e9db8bac799..00000000000
--- a/lib/libcompiler_rt/arm/bswapdi2.S
+++ /dev/null
@@ -1,44 +0,0 @@
-//===------- bswapdi2 - Implement bswapdi2 --------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-//
-// extern uint64_t __bswapdi2(uint64_t);
-//
-// Reverse all the bytes in a 64-bit integer.
-//
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__bswapdi2)
-#if __ARM_ARCH < 6
- // before armv6 does not have "rev" instruction
- // r2 = rev(r0)
- eor r2, r0, r0, ror #16
- bic r2, r2, #0xff0000
- mov r2, r2, lsr #8
- eor r2, r2, r0, ror #8
- // r0 = rev(r1)
- eor r0, r1, r1, ror #16
- bic r0, r0, #0xff0000
- mov r0, r0, lsr #8
- eor r0, r0, r1, ror #8
-#else
- rev r2, r0 // r2 = rev(r0)
- rev r0, r1 // r0 = rev(r1)
-#endif
- mov r1, r2 // r1 = r2 = rev(r0)
- JMP(lr)
-END_COMPILERRT_FUNCTION(__bswapdi2)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/bswapsi2.S b/lib/libcompiler_rt/arm/bswapsi2.S
deleted file mode 100644
index 1f6eed5c1bb..00000000000
--- a/lib/libcompiler_rt/arm/bswapsi2.S
+++ /dev/null
@@ -1,36 +0,0 @@
-//===------- bswapsi2 - Implement bswapsi2 --------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-//
-// extern uint32_t __bswapsi2(uint32_t);
-//
-// Reverse all the bytes in a 32-bit integer.
-//
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__bswapsi2)
-#if __ARM_ARCH < 6
- // before armv6 does not have "rev" instruction
- eor r1, r0, r0, ror #16
- bic r1, r1, #0xff0000
- mov r1, r1, lsr #8
- eor r0, r1, r0, ror #8
-#else
- rev r0, r0
-#endif
- JMP(lr)
-END_COMPILERRT_FUNCTION(__bswapsi2)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/chkstk.S b/lib/libcompiler_rt/arm/chkstk.S
deleted file mode 100644
index e3002105897..00000000000
--- a/lib/libcompiler_rt/arm/chkstk.S
+++ /dev/null
@@ -1,34 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// __chkstk routine
-// This routine is windows specific.
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-// This clobbers the register r12, and the condition codes, and uses r5 and r6
-// as temporaries by backing them up and restoring them afterwards.
-// Does not modify any memory or the stack pointer.
-
-// movw r4, #256 // Number of bytes of stack, in units of 4 byte
-// bl __chkstk
-// sub.w sp, sp, r4
-
-#define PAGE_SIZE 4096
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__chkstk)
- lsl r4, r4, #2
- mov r12, sp
- push {r5, r6}
- mov r5, r4
-1:
- sub r12, r12, #PAGE_SIZE
- subs r5, r5, #PAGE_SIZE
- ldr r6, [r12]
- bgt 1b
-
- pop {r5, r6}
- bx lr
-END_COMPILERRT_FUNCTION(__chkstk)
diff --git a/lib/libcompiler_rt/arm/clzdi2.S b/lib/libcompiler_rt/arm/clzdi2.S
deleted file mode 100644
index fc03b385cdf..00000000000
--- a/lib/libcompiler_rt/arm/clzdi2.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ===-- clzdi2.c - Implement __clzdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements count leading zeros for 64bit arguments.
- *
- * ===----------------------------------------------------------------------===
- */
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__clzdi2)
-#ifdef __ARM_FEATURE_CLZ
-#ifdef __ARMEB__
- cmp r0, 0
- itee ne
- clzne r0, r0
- clzeq r0, r1
- addeq r0, r0, 32
-#else
- cmp r1, 0
- itee ne
- clzne r0, r1
- clzeq r0, r0
- addeq r0, r0, 32
-#endif
- JMP(lr)
-#else
- /* Assumption: n != 0 */
-
- /*
- * r0: n
- * r1: upper half of n, overwritten after check
- * r1: count of leading zeros in n + 1
- * r2: scratch register for shifted r0
- */
-#ifdef __ARMEB__
- cmp r0, 0
- moveq r0, r1
-#else
- cmp r1, 0
- movne r0, r1
-#endif
- movne r1, 1
- moveq r1, 33
-
- /*
- * Basic block:
- * if ((r0 >> SHIFT) == 0)
- * r1 += SHIFT;
- * else
- * r0 >>= SHIFT;
- * for descending powers of two as SHIFT.
- */
-#define BLOCK(shift) \
- lsrs r2, r0, shift; \
- movne r0, r2; \
- addeq r1, shift \
-
- BLOCK(16)
- BLOCK(8)
- BLOCK(4)
- BLOCK(2)
-
- /*
- * The basic block invariants at this point are (r0 >> 2) == 0 and
- * r0 != 0. This means 1 <= r0 <= 3 and 0 <= (r0 >> 1) <= 1.
- *
- * r0 | (r0 >> 1) == 0 | (r0 >> 1) == 1 | -(r0 >> 1) | 1 - (r0 >> 1)
- * ---+----------------+----------------+------------+--------------
- * 1 | 1 | 0 | 0 | 1
- * 2 | 0 | 1 | -1 | 0
- * 3 | 0 | 1 | -1 | 0
- *
- * The r1's initial value of 1 compensates for the 1 here.
- */
- sub r0, r1, r0, lsr #1
-
- JMP(lr)
-#endif // __ARM_FEATURE_CLZ
-END_COMPILERRT_FUNCTION(__clzdi2)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/clzsi2.S b/lib/libcompiler_rt/arm/clzsi2.S
deleted file mode 100644
index f2ce59c9011..00000000000
--- a/lib/libcompiler_rt/arm/clzsi2.S
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ===-- clzsi2.c - Implement __clzsi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements count leading zeros for 32bit arguments.
- *
- * ===----------------------------------------------------------------------===
- */
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__clzsi2)
-#ifdef __ARM_FEATURE_CLZ
- clz r0, r0
- JMP(lr)
-#else
- /* Assumption: n != 0 */
-
- /*
- * r0: n
- * r1: count of leading zeros in n + 1
- * r2: scratch register for shifted r0
- */
- mov r1, 1
-
- /*
- * Basic block:
- * if ((r0 >> SHIFT) == 0)
- * r1 += SHIFT;
- * else
- * r0 >>= SHIFT;
- * for descending powers of two as SHIFT.
- */
-
-#define BLOCK(shift) \
- lsrs r2, r0, shift; \
- movne r0, r2; \
- addeq r1, shift \
-
- BLOCK(16)
- BLOCK(8)
- BLOCK(4)
- BLOCK(2)
-
- /*
- * The basic block invariants at this point are (r0 >> 2) == 0 and
- * r0 != 0. This means 1 <= r0 <= 3 and 0 <= (r0 >> 1) <= 1.
- *
- * r0 | (r0 >> 1) == 0 | (r0 >> 1) == 1 | -(r0 >> 1) | 1 - (r0 >> 1)
- * ---+----------------+----------------+------------+--------------
- * 1 | 1 | 0 | 0 | 1
- * 2 | 0 | 1 | -1 | 0
- * 3 | 0 | 1 | -1 | 0
- *
- * The r1's initial value of 1 compensates for the 1 here.
- */
- sub r0, r1, r0, lsr #1
-
- JMP(lr)
-#endif // __ARM_FEATURE_CLZ
-END_COMPILERRT_FUNCTION(__clzsi2)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/comparesf2.S b/lib/libcompiler_rt/arm/comparesf2.S
deleted file mode 100644
index c6c4cc067f0..00000000000
--- a/lib/libcompiler_rt/arm/comparesf2.S
+++ /dev/null
@@ -1,296 +0,0 @@
-//===-- comparesf2.S - Implement single-precision soft-float comparisons --===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the following soft-fp_t comparison routines:
-//
-// __eqsf2 __gesf2 __unordsf2
-// __lesf2 __gtsf2
-// __ltsf2
-// __nesf2
-//
-// The semantics of the routines grouped in each column are identical, so there
-// is a single implementation for each, with multiple names.
-//
-// The routines behave as follows:
-//
-// __lesf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// 1 if either a or b is NaN
-//
-// __gesf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// -1 if either a or b is NaN
-//
-// __unordsf2(a,b) returns 0 if both a and b are numbers
-// 1 if either a or b is NaN
-//
-// Note that __lesf2( ) and __gesf2( ) are identical except in their handling of
-// NaN values.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-@ int __eqsf2(float a, float b)
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__eqsf2)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov r0, s0
- vmov r1, s1
-#endif
- // Make copies of a and b with the sign bit shifted off the top. These will
- // be used to detect zeros and NaNs.
-#if defined(USE_THUMB_1)
- push {r6, lr}
- lsls r2, r0, #1
- lsls r3, r1, #1
-#else
- mov r2, r0, lsl #1
- mov r3, r1, lsl #1
-#endif
-
- // We do the comparison in three stages (ignoring NaN values for the time
- // being). First, we orr the absolute values of a and b; this sets the Z
- // flag if both a and b are zero (of either sign). The shift of r3 doesn't
- // effect this at all, but it *does* make sure that the C flag is clear for
- // the subsequent operations.
-#if defined(USE_THUMB_1)
- lsrs r6, r3, #1
- orrs r6, r2
-#else
- orrs r12, r2, r3, lsr #1
-#endif
- // Next, we check if a and b have the same or different signs. If they have
- // opposite signs, this eor will set the N flag.
-#if defined(USE_THUMB_1)
- beq 1f
- movs r6, r0
- eors r6, r1
-1:
-#else
- it ne
- eorsne r12, r0, r1
-#endif
-
- // If a and b are equal (either both zeros or bit identical; again, we're
- // ignoring NaNs for now), this subtract will zero out r0. If they have the
- // same sign, the flags are updated as they would be for a comparison of the
- // absolute values of a and b.
-#if defined(USE_THUMB_1)
- bmi 1f
- subs r0, r2, r3
-1:
-#else
- it pl
- subspl r0, r2, r3
-#endif
-
- // If a is smaller in magnitude than b and both have the same sign, place
- // the negation of the sign of b in r0. Thus, if both are negative and
- // a > b, this sets r0 to 0; if both are positive and a < b, this sets
- // r0 to -1.
- //
- // This is also done if a and b have opposite signs and are not both zero,
- // because in that case the subtract was not performed and the C flag is
- // still clear from the shift argument in orrs; if a is positive and b
- // negative, this places 0 in r0; if a is negative and b positive, -1 is
- // placed in r0.
-#if defined(USE_THUMB_1)
- bhs 1f
- // Here if a and b have the same sign and absA < absB, the result is thus
- // b < 0 ? 1 : -1. Same if a and b have the opposite sign (ignoring Nan).
- movs r0, #1
- lsrs r1, #31
- bne LOCAL_LABEL(CHECK_NAN)
- negs r0, r0
- b LOCAL_LABEL(CHECK_NAN)
-1:
-#else
- it lo
- mvnlo r0, r1, asr #31
-#endif
-
- // If a is greater in magnitude than b and both have the same sign, place
- // the sign of b in r0. Thus, if both are negative and a < b, -1 is placed
- // in r0, which is the desired result. Conversely, if both are positive
- // and a > b, zero is placed in r0.
-#if defined(USE_THUMB_1)
- bls 1f
- // Here both have the same sign and absA > absB.
- movs r0, #1
- lsrs r1, #31
- beq LOCAL_LABEL(CHECK_NAN)
- negs r0, r0
-1:
-#else
- it hi
- movhi r0, r1, asr #31
-#endif
-
- // If you've been keeping track, at this point r0 contains -1 if a < b and
- // 0 if a >= b. All that remains to be done is to set it to 1 if a > b.
- // If a == b, then the Z flag is set, so we can get the correct final value
- // into r0 by simply or'ing with 1 if Z is clear.
- // For Thumb-1, r0 contains -1 if a < b, 0 if a > b and 0 if a == b.
-#if !defined(USE_THUMB_1)
- it ne
- orrne r0, r0, #1
-#endif
-
- // Finally, we need to deal with NaNs. If either argument is NaN, replace
- // the value in r0 with 1.
-#if defined(USE_THUMB_1)
-LOCAL_LABEL(CHECK_NAN):
- movs r6, #0xff
- lsls r6, #24
- cmp r2, r6
- bhi 1f
- cmp r3, r6
-1:
- bls 2f
- movs r0, #1
-2:
- pop {r6, pc}
-#else
- cmp r2, #0xff000000
- ite ls
- cmpls r3, #0xff000000
- movhi r0, #1
- JMP(lr)
-#endif
-END_COMPILERRT_FUNCTION(__eqsf2)
-
-DEFINE_COMPILERRT_FUNCTION_ALIAS(__lesf2, __eqsf2)
-DEFINE_COMPILERRT_FUNCTION_ALIAS(__ltsf2, __eqsf2)
-DEFINE_COMPILERRT_FUNCTION_ALIAS(__nesf2, __eqsf2)
-
-@ int __gtsf2(float a, float b)
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__gtsf2)
- // Identical to the preceding except in that we return -1 for NaN values.
- // Given that the two paths share so much code, one might be tempted to
- // unify them; however, the extra code needed to do so makes the code size
- // to performance tradeoff very hard to justify for such small functions.
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov r0, s0
- vmov r1, s1
-#endif
-#if defined(USE_THUMB_1)
- push {r6, lr}
- lsls r2, r0, #1
- lsls r3, r1, #1
- lsrs r6, r3, #1
- orrs r6, r2
- beq 1f
- movs r6, r0
- eors r6, r1
-1:
- bmi 2f
- subs r0, r2, r3
-2:
- bhs 3f
- movs r0, #1
- lsrs r1, #31
- bne LOCAL_LABEL(CHECK_NAN_2)
- negs r0, r0
- b LOCAL_LABEL(CHECK_NAN_2)
-3:
- bls 4f
- movs r0, #1
- lsrs r1, #31
- beq LOCAL_LABEL(CHECK_NAN_2)
- negs r0, r0
-4:
-LOCAL_LABEL(CHECK_NAN_2):
- movs r6, #0xff
- lsls r6, #24
- cmp r2, r6
- bhi 5f
- cmp r3, r6
-5:
- bls 6f
- movs r0, #1
- negs r0, r0
-6:
- pop {r6, pc}
-#else
- mov r2, r0, lsl #1
- mov r3, r1, lsl #1
- orrs r12, r2, r3, lsr #1
- it ne
- eorsne r12, r0, r1
- it pl
- subspl r0, r2, r3
- it lo
- mvnlo r0, r1, asr #31
- it hi
- movhi r0, r1, asr #31
- it ne
- orrne r0, r0, #1
- cmp r2, #0xff000000
- ite ls
- cmpls r3, #0xff000000
- movhi r0, #-1
- JMP(lr)
-#endif
-END_COMPILERRT_FUNCTION(__gtsf2)
-
-DEFINE_COMPILERRT_FUNCTION_ALIAS(__gesf2, __gtsf2)
-
-@ int __unordsf2(float a, float b)
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__unordsf2)
-
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov r0, s0
- vmov r1, s1
-#endif
- // Return 1 for NaN values, 0 otherwise.
- lsls r2, r0, #1
- lsls r3, r1, #1
- movs r0, #0
-#if defined(USE_THUMB_1)
- movs r1, #0xff
- lsls r1, #24
- cmp r2, r1
- bhi 1f
- cmp r3, r1
-1:
- bls 2f
- movs r0, #1
-2:
-#else
- cmp r2, #0xff000000
- ite ls
- cmpls r3, #0xff000000
- movhi r0, #1
-#endif
- JMP(lr)
-END_COMPILERRT_FUNCTION(__unordsf2)
-
-#if defined(COMPILER_RT_ARMHF_TARGET)
-DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmpum)
- vmov s0, r0
- vmov s1, r1
- b SYMBOL_NAME(__unordsf2)
-END_COMPILERRT_FUNCTION(__aeabi_fcmpum)
-#else
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_fcmpun, __unordsf2)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/divdf3vfp.S b/lib/libcompiler_rt/arm/divdf3vfp.S
deleted file mode 100644
index 776ba4f24b4..00000000000
--- a/lib/libcompiler_rt/arm/divdf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- divdf3vfp.S - Implement divdf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __divdf3vfp(double a, double b);
-//
-// Divides two double precision floating point numbers using the Darwin
-// calling convention where double arguments are passsed in GPR pairs
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__divdf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vdiv.f64 d0, d0, d1
-#else
- vmov d6, r0, r1 // move first param from r0/r1 pair into d6
- vmov d7, r2, r3 // move second param from r2/r3 pair into d7
- vdiv.f64 d5, d6, d7
- vmov r0, r1, d5 // move result back to r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__divdf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/divmodsi4.S b/lib/libcompiler_rt/arm/divmodsi4.S
deleted file mode 100644
index 8a027b741ef..00000000000
--- a/lib/libcompiler_rt/arm/divmodsi4.S
+++ /dev/null
@@ -1,71 +0,0 @@
-/*===-- divmodsi4.S - 32-bit signed integer divide and modulus ------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __divmodsi4 (32-bit signed integer divide and
- * modulus) function for the ARM architecture. A naive digit-by-digit
- * computation is employed for simplicity.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
-#define ESTABLISH_FRAME \
- push {r4-r7, lr} ;\
- add r7, sp, #12
-#define CLEAR_FRAME_AND_RETURN \
- pop {r4-r7, pc}
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-@ int __divmodsi4(int divident, int divisor, int *remainder)
-@ Calculate the quotient and remainder of the (signed) division. The return
-@ value is the quotient, the remainder is placed in the variable.
-
- .p2align 3
-DEFINE_COMPILERRT_FUNCTION(__divmodsi4)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1, r1
- beq LOCAL_LABEL(divzero)
- mov r3, r0
- sdiv r0, r3, r1
- mls r1, r0, r1, r3
- str r1, [r2]
- bx lr
-LOCAL_LABEL(divzero):
- mov r0, #0
- bx lr
-#else
- ESTABLISH_FRAME
-// Set aside the sign of the quotient and modulus, and the address for the
-// modulus.
- eor r4, r0, r1
- mov r5, r0
- mov r6, r2
-// Take the absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >> 31).
- eor ip, r0, r0, asr #31
- eor lr, r1, r1, asr #31
- sub r0, ip, r0, asr #31
- sub r1, lr, r1, asr #31
-// Unsigned divmod:
- bl SYMBOL_NAME(__udivmodsi4)
-// Apply the sign of quotient and modulus
- ldr r1, [r6]
- eor r0, r0, r4, asr #31
- eor r1, r1, r5, asr #31
- sub r0, r0, r4, asr #31
- sub r1, r1, r5, asr #31
- str r1, [r6]
- CLEAR_FRAME_AND_RETURN
-#endif
-END_COMPILERRT_FUNCTION(__divmodsi4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/divsf3vfp.S b/lib/libcompiler_rt/arm/divsf3vfp.S
deleted file mode 100644
index 130318f0c37..00000000000
--- a/lib/libcompiler_rt/arm/divsf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- divsf3vfp.S - Implement divsf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __divsf3vfp(float a, float b);
-//
-// Divides two single precision floating point numbers using the Darwin
-// calling convention where single arguments are passsed like 32-bit ints.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__divsf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vdiv.f32 s0, s0, s1
-#else
- vmov s14, r0 // move first param from r0 into float register
- vmov s15, r1 // move second param from r1 into float register
- vdiv.f32 s13, s14, s15
- vmov r0, s13 // move result back to r0
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__divsf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/divsi3.S b/lib/libcompiler_rt/arm/divsi3.S
deleted file mode 100644
index 19757af177e..00000000000
--- a/lib/libcompiler_rt/arm/divsi3.S
+++ /dev/null
@@ -1,82 +0,0 @@
-/*===-- divsi3.S - 32-bit signed integer divide ---------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __divsi3 (32-bit signed integer divide) function
- * for the ARM architecture as a wrapper around the unsigned routine.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
-#define ESTABLISH_FRAME \
- push {r4, r7, lr} ;\
- add r7, sp, #4
-#define CLEAR_FRAME_AND_RETURN \
- pop {r4, r7, pc}
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
- .p2align 3
-// Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the same routine.
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_idiv, __divsi3)
-
-@ int __divsi3(int divident, int divisor)
-@ Calculate and return the quotient of the (signed) division.
-
-DEFINE_COMPILERRT_FUNCTION(__divsi3)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1,r1
- beq LOCAL_LABEL(divzero)
- sdiv r0, r0, r1
- bx lr
-LOCAL_LABEL(divzero):
- mov r0,#0
- bx lr
-#else
-ESTABLISH_FRAME
-// Set aside the sign of the quotient.
-# if defined(USE_THUMB_1)
- movs r4, r0
- eors r4, r1
-# else
- eor r4, r0, r1
-# endif
-// Take absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >> 31).
-# if defined(USE_THUMB_1)
- asrs r2, r0, #31
- asrs r3, r1, #31
- eors r0, r2
- eors r1, r3
- subs r0, r0, r2
- subs r1, r1, r3
-# else
- eor r2, r0, r0, asr #31
- eor r3, r1, r1, asr #31
- sub r0, r2, r0, asr #31
- sub r1, r3, r1, asr #31
-# endif
-// abs(a) / abs(b)
- bl SYMBOL_NAME(__udivsi3)
-// Apply sign of quotient to result and return.
-# if defined(USE_THUMB_1)
- asrs r4, #31
- eors r0, r4
- subs r0, r0, r4
-# else
- eor r0, r0, r4, asr #31
- sub r0, r0, r4, asr #31
-# endif
- CLEAR_FRAME_AND_RETURN
-#endif
-END_COMPILERRT_FUNCTION(__divsi3)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/eqdf2vfp.S b/lib/libcompiler_rt/arm/eqdf2vfp.S
deleted file mode 100644
index d5070657091..00000000000
--- a/lib/libcompiler_rt/arm/eqdf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- eqdf2vfp.S - Implement eqdf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __eqdf2vfp(double a, double b);
-//
-// Returns one iff a == b and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__eqdf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(eq)
- moveq r0, #1 // set result register to 1 if equal
- movne r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__eqdf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/eqsf2vfp.S b/lib/libcompiler_rt/arm/eqsf2vfp.S
deleted file mode 100644
index fd72b2fdbde..00000000000
--- a/lib/libcompiler_rt/arm/eqsf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- eqsf2vfp.S - Implement eqsf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __eqsf2vfp(float a, float b);
-//
-// Returns one iff a == b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__eqsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(eq)
- moveq r0, #1 // set result register to 1 if equal
- movne r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__eqsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/extendsfdf2vfp.S b/lib/libcompiler_rt/arm/extendsfdf2vfp.S
deleted file mode 100644
index 1079f977bae..00000000000
--- a/lib/libcompiler_rt/arm/extendsfdf2vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- extendsfdf2vfp.S - Implement extendsfdf2vfp -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __extendsfdf2vfp(float a);
-//
-// Converts single precision float to double precision result.
-// Uses Darwin calling convention where a single precision parameter is
-// passed in a GPR and a double precision result is returned in R0/R1 pair.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__extendsfdf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.f64.f32 d0, s0
-#else
- vmov s15, r0 // load float register from R0
- vcvt.f64.f32 d7, s15 // convert single to double
- vmov r0, r1, d7 // return result in r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__extendsfdf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/fixdfsivfp.S b/lib/libcompiler_rt/arm/fixdfsivfp.S
deleted file mode 100644
index 5d7b0f85654..00000000000
--- a/lib/libcompiler_rt/arm/fixdfsivfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- fixdfsivfp.S - Implement fixdfsivfp -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __fixdfsivfp(double a);
-//
-// Converts double precision float to a 32-bit int rounding towards zero.
-// Uses Darwin calling convention where a double precision parameter is
-// passed in GPR register pair.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__fixdfsivfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.s32.f64 s0, d0
- vmov r0, s0
-#else
- vmov d7, r0, r1 // load double register from R0/R1
- vcvt.s32.f64 s15, d7 // convert double to 32-bit int into s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__fixdfsivfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/fixsfsivfp.S b/lib/libcompiler_rt/arm/fixsfsivfp.S
deleted file mode 100644
index 805a277afa3..00000000000
--- a/lib/libcompiler_rt/arm/fixsfsivfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- fixsfsivfp.S - Implement fixsfsivfp -----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __fixsfsivfp(float a);
-//
-// Converts single precision float to a 32-bit int rounding towards zero.
-// Uses Darwin calling convention where a single precision parameter is
-// passed in a GPR..
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__fixsfsivfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.s32.f32 s0, s0
- vmov r0, s0
-#else
- vmov s15, r0 // load float register from R0
- vcvt.s32.f32 s15, s15 // convert single to 32-bit int into s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__fixsfsivfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/fixunsdfsivfp.S b/lib/libcompiler_rt/arm/fixunsdfsivfp.S
deleted file mode 100644
index 4f1b2c8cefd..00000000000
--- a/lib/libcompiler_rt/arm/fixunsdfsivfp.S
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- fixunsdfsivfp.S - Implement fixunsdfsivfp -------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern unsigned int __fixunsdfsivfp(double a);
-//
-// Converts double precision float to a 32-bit unsigned int rounding towards
-// zero. All negative values become zero.
-// Uses Darwin calling convention where a double precision parameter is
-// passed in GPR register pair.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__fixunsdfsivfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.u32.f64 s0, d0
- vmov r0, s0
-#else
- vmov d7, r0, r1 // load double register from R0/R1
- vcvt.u32.f64 s15, d7 // convert double to 32-bit int into s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__fixunsdfsivfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/fixunssfsivfp.S b/lib/libcompiler_rt/arm/fixunssfsivfp.S
deleted file mode 100644
index e5d77823687..00000000000
--- a/lib/libcompiler_rt/arm/fixunssfsivfp.S
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- fixunssfsivfp.S - Implement fixunssfsivfp -------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern unsigned int __fixunssfsivfp(float a);
-//
-// Converts single precision float to a 32-bit unsigned int rounding towards
-// zero. All negative values become zero.
-// Uses Darwin calling convention where a single precision parameter is
-// passed in a GPR..
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__fixunssfsivfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.u32.f32 s0, s0
- vmov r0, s0
-#else
- vmov s15, r0 // load float register from R0
- vcvt.u32.f32 s15, s15 // convert single to 32-bit unsigned into s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__fixunssfsivfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/floatsidfvfp.S b/lib/libcompiler_rt/arm/floatsidfvfp.S
deleted file mode 100644
index 3297ad44d8c..00000000000
--- a/lib/libcompiler_rt/arm/floatsidfvfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- floatsidfvfp.S - Implement floatsidfvfp ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __floatsidfvfp(int a);
-//
-// Converts a 32-bit int to a double precision float.
-// Uses Darwin calling convention where a double precision result is
-// return in GPR register pair.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__floatsidfvfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov s0, r0
- vcvt.f64.s32 d0, s0
-#else
- vmov s15, r0 // move int to float register s15
- vcvt.f64.s32 d7, s15 // convert 32-bit int in s15 to double in d7
- vmov r0, r1, d7 // move d7 to result register pair r0/r1
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__floatsidfvfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/floatsisfvfp.S b/lib/libcompiler_rt/arm/floatsisfvfp.S
deleted file mode 100644
index 65408b54b8d..00000000000
--- a/lib/libcompiler_rt/arm/floatsisfvfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- floatsisfvfp.S - Implement floatsisfvfp ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __floatsisfvfp(int a);
-//
-// Converts single precision float to a 32-bit int rounding towards zero.
-// Uses Darwin calling convention where a single precision result is
-// return in a GPR..
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__floatsisfvfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov s0, r0
- vcvt.f32.s32 s0, s0
-#else
- vmov s15, r0 // move int to float register s15
- vcvt.f32.s32 s15, s15 // convert 32-bit int in s15 to float in s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__floatsisfvfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/floatunssidfvfp.S b/lib/libcompiler_rt/arm/floatunssidfvfp.S
deleted file mode 100644
index d7a7024a25b..00000000000
--- a/lib/libcompiler_rt/arm/floatunssidfvfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- floatunssidfvfp.S - Implement floatunssidfvfp ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __floatunssidfvfp(unsigned int a);
-//
-// Converts a 32-bit int to a double precision float.
-// Uses Darwin calling convention where a double precision result is
-// return in GPR register pair.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__floatunssidfvfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov s0, r0
- vcvt.f64.u32 d0, s0
-#else
- vmov s15, r0 // move int to float register s15
- vcvt.f64.u32 d7, s15 // convert 32-bit int in s15 to double in d7
- vmov r0, r1, d7 // move d7 to result register pair r0/r1
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__floatunssidfvfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/floatunssisfvfp.S b/lib/libcompiler_rt/arm/floatunssisfvfp.S
deleted file mode 100644
index 1ca856519a9..00000000000
--- a/lib/libcompiler_rt/arm/floatunssisfvfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- floatunssisfvfp.S - Implement floatunssisfvfp ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __floatunssisfvfp(unsigned int a);
-//
-// Converts single precision float to a 32-bit int rounding towards zero.
-// Uses Darwin calling convention where a single precision result is
-// return in a GPR..
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__floatunssisfvfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmov s0, r0
- vcvt.f32.u32 s0, s0
-#else
- vmov s15, r0 // move int to float register s15
- vcvt.f32.u32 s15, s15 // convert 32-bit int in s15 to float in s15
- vmov r0, s15 // move s15 to result register
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__floatunssisfvfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/gedf2vfp.S b/lib/libcompiler_rt/arm/gedf2vfp.S
deleted file mode 100644
index 364fc5b24cd..00000000000
--- a/lib/libcompiler_rt/arm/gedf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- gedf2vfp.S - Implement gedf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __gedf2vfp(double a, double b);
-//
-// Returns one iff a >= b and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__gedf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ge)
- movge r0, #1 // set result register to 1 if greater than or equal
- movlt r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__gedf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/gesf2vfp.S b/lib/libcompiler_rt/arm/gesf2vfp.S
deleted file mode 100644
index 346c3473ae4..00000000000
--- a/lib/libcompiler_rt/arm/gesf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- gesf2vfp.S - Implement gesf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __gesf2vfp(float a, float b);
-//
-// Returns one iff a >= b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__gesf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ge)
- movge r0, #1 // set result register to 1 if greater than or equal
- movlt r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__gesf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/gtdf2vfp.S b/lib/libcompiler_rt/arm/gtdf2vfp.S
deleted file mode 100644
index 3389c3ad973..00000000000
--- a/lib/libcompiler_rt/arm/gtdf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- gtdf2vfp.S - Implement gtdf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __gtdf2vfp(double a, double b);
-//
-// Returns one iff a > b and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__gtdf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(gt)
- movgt r0, #1 // set result register to 1 if equal
- movle r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__gtdf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/gtsf2vfp.S b/lib/libcompiler_rt/arm/gtsf2vfp.S
deleted file mode 100644
index afdba8b018e..00000000000
--- a/lib/libcompiler_rt/arm/gtsf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- gtsf2vfp.S - Implement gtsf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __gtsf2vfp(float a, float b);
-//
-// Returns one iff a > b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__gtsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(gt)
- movgt r0, #1 // set result register to 1 if equal
- movle r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__gtsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/ledf2vfp.S b/lib/libcompiler_rt/arm/ledf2vfp.S
deleted file mode 100644
index 4bbe4c86837..00000000000
--- a/lib/libcompiler_rt/arm/ledf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- ledf2vfp.S - Implement ledf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __ledf2vfp(double a, double b);
-//
-// Returns one iff a <= b and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__ledf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ls)
- movls r0, #1 // set result register to 1 if equal
- movhi r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__ledf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/lesf2vfp.S b/lib/libcompiler_rt/arm/lesf2vfp.S
deleted file mode 100644
index 51232bd8ced..00000000000
--- a/lib/libcompiler_rt/arm/lesf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- lesf2vfp.S - Implement lesf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __lesf2vfp(float a, float b);
-//
-// Returns one iff a <= b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__lesf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ls)
- movls r0, #1 // set result register to 1 if equal
- movhi r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__lesf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/ltdf2vfp.S b/lib/libcompiler_rt/arm/ltdf2vfp.S
deleted file mode 100644
index 8e2928c813d..00000000000
--- a/lib/libcompiler_rt/arm/ltdf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- ltdf2vfp.S - Implement ltdf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __ltdf2vfp(double a, double b);
-//
-// Returns one iff a < b and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__ltdf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(mi)
- movmi r0, #1 // set result register to 1 if equal
- movpl r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__ltdf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/ltsf2vfp.S b/lib/libcompiler_rt/arm/ltsf2vfp.S
deleted file mode 100644
index 59c00c6bab6..00000000000
--- a/lib/libcompiler_rt/arm/ltsf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- ltsf2vfp.S - Implement ltsf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __ltsf2vfp(float a, float b);
-//
-// Returns one iff a < b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__ltsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(mi)
- movmi r0, #1 // set result register to 1 if equal
- movpl r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__ltsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/modsi3.S b/lib/libcompiler_rt/arm/modsi3.S
deleted file mode 100644
index be263834d7f..00000000000
--- a/lib/libcompiler_rt/arm/modsi3.S
+++ /dev/null
@@ -1,60 +0,0 @@
-/*===-- modsi3.S - 32-bit signed integer modulus --------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __modsi3 (32-bit signed integer modulus) function
- * for the ARM architecture as a wrapper around the unsigned routine.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
-#define ESTABLISH_FRAME \
- push {r4, r7, lr} ;\
- add r7, sp, #4
-#define CLEAR_FRAME_AND_RETURN \
- pop {r4, r7, pc}
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-@ int __modsi3(int divident, int divisor)
-@ Calculate and return the remainder of the (signed) division.
-
- .p2align 3
-DEFINE_COMPILERRT_FUNCTION(__modsi3)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1, r1
- beq LOCAL_LABEL(divzero)
- sdiv r2, r0, r1
- mls r0, r2, r1, r0
- bx lr
-LOCAL_LABEL(divzero):
- mov r0, #0
- bx lr
-#else
- ESTABLISH_FRAME
- // Set aside the sign of the dividend.
- mov r4, r0
- // Take absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >> 31).
- eor r2, r0, r0, asr #31
- eor r3, r1, r1, asr #31
- sub r0, r2, r0, asr #31
- sub r1, r3, r1, asr #31
- // abs(a) % abs(b)
- bl SYMBOL_NAME(__umodsi3)
- // Apply sign of dividend to result and return.
- eor r0, r0, r4, asr #31
- sub r0, r0, r4, asr #31
- CLEAR_FRAME_AND_RETURN
-#endif
-END_COMPILERRT_FUNCTION(__modsi3)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/muldf3vfp.S b/lib/libcompiler_rt/arm/muldf3vfp.S
deleted file mode 100644
index aa7b2349503..00000000000
--- a/lib/libcompiler_rt/arm/muldf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- muldf3vfp.S - Implement muldf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __muldf3vfp(double a, double b);
-//
-// Multiplies two double precision floating point numbers using the Darwin
-// calling convention where double arguments are passsed in GPR pairs
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__muldf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmul.f64 d0, d0, d1
-#else
- vmov d6, r0, r1 // move first param from r0/r1 pair into d6
- vmov d7, r2, r3 // move second param from r2/r3 pair into d7
- vmul.f64 d6, d6, d7
- vmov r0, r1, d6 // move result back to r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__muldf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/mulsf3vfp.S b/lib/libcompiler_rt/arm/mulsf3vfp.S
deleted file mode 100644
index a1da789dcad..00000000000
--- a/lib/libcompiler_rt/arm/mulsf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- mulsf3vfp.S - Implement mulsf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __mulsf3vfp(float a, float b);
-//
-// Multiplies two single precision floating point numbers using the Darwin
-// calling convention where single arguments are passsed like 32-bit ints.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__mulsf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vmul.f32 s0, s0, s1
-#else
- vmov s14, r0 // move first param from r0 into float register
- vmov s15, r1 // move second param from r1 into float register
- vmul.f32 s13, s14, s15
-#endif
- vmov r0, s13 // move result back to r0
- bx lr
-END_COMPILERRT_FUNCTION(__mulsf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/nedf2vfp.S b/lib/libcompiler_rt/arm/nedf2vfp.S
deleted file mode 100644
index aef72eb0097..00000000000
--- a/lib/libcompiler_rt/arm/nedf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- nedf2vfp.S - Implement nedf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __nedf2vfp(double a, double b);
-//
-// Returns zero if a and b are unequal and neither is NaN.
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__nedf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ne)
- movne r0, #1 // set result register to 0 if unequal
- moveq r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__nedf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/negdf2vfp.S b/lib/libcompiler_rt/arm/negdf2vfp.S
deleted file mode 100644
index 81f0ab8eec1..00000000000
--- a/lib/libcompiler_rt/arm/negdf2vfp.S
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- negdf2vfp.S - Implement negdf2vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __negdf2vfp(double a, double b);
-//
-// Returns the negation a double precision floating point numbers using the
-// Darwin calling convention where double arguments are passsed in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__negdf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vneg.f64 d0, d0
-#else
- eor r1, r1, #-2147483648 // flip sign bit on double in r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__negdf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/negsf2vfp.S b/lib/libcompiler_rt/arm/negsf2vfp.S
deleted file mode 100644
index 46ab4a9cf16..00000000000
--- a/lib/libcompiler_rt/arm/negsf2vfp.S
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- negsf2vfp.S - Implement negsf2vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __negsf2vfp(float a);
-//
-// Returns the negation of a single precision floating point numbers using the
-// Darwin calling convention where single arguments are passsed like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__negsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vneg.f32 s0, s0
-#else
- eor r0, r0, #-2147483648 // flip sign bit on float in r0
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__negsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/nesf2vfp.S b/lib/libcompiler_rt/arm/nesf2vfp.S
deleted file mode 100644
index 50d60f49300..00000000000
--- a/lib/libcompiler_rt/arm/nesf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- nesf2vfp.S - Implement nesf2vfp -----------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __nesf2vfp(float a, float b);
-//
-// Returns one iff a != b and neither is NaN.
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__nesf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(ne)
- movne r0, #1 // set result register to 1 if unequal
- moveq r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__nesf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/restore_vfp_d8_d15_regs.S b/lib/libcompiler_rt/arm/restore_vfp_d8_d15_regs.S
deleted file mode 100644
index 0692cf3e1b7..00000000000
--- a/lib/libcompiler_rt/arm/restore_vfp_d8_d15_regs.S
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- save_restore_regs.S - Implement save/restore* ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling C++ functions that need to handle thrown exceptions the
-// compiler is required to save all registers and call __Unwind_SjLj_Register
-// in the function prolog. But when compiling for thumb1, there are
-// no instructions to access the floating point registers, so the
-// compiler needs to add a call to the helper function _save_vfp_d8_d15_regs
-// written in ARM to save the float registers. In the epilog, the compiler
-// must also add a call to __restore_vfp_d8_d15_regs to restore those registers.
-//
-
- .text
- .syntax unified
-
-//
-// Restore registers d8-d15 from stack
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__restore_vfp_d8_d15_regs)
- vldmia sp!, {d8-d15} // pop registers d8-d15 off stack
- bx lr // return to prolog
-END_COMPILERRT_FUNCTION(__restore_vfp_d8_d15_regs)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/save_vfp_d8_d15_regs.S b/lib/libcompiler_rt/arm/save_vfp_d8_d15_regs.S
deleted file mode 100644
index 544dd5467a4..00000000000
--- a/lib/libcompiler_rt/arm/save_vfp_d8_d15_regs.S
+++ /dev/null
@@ -1,35 +0,0 @@
-//===-- save_restore_regs.S - Implement save/restore* ---------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling C++ functions that need to handle thrown exceptions the
-// compiler is required to save all registers and call __Unwind_SjLj_Register
-// in the function prolog. But when compiling for thumb1, there are
-// no instructions to access the floating point registers, so the
-// compiler needs to add a call to the helper function _save_vfp_d8_d15_regs
-// written in ARM to save the float registers. In the epilog, the compiler
-// must also add a call to __restore_vfp_d8_d15_regs to restore those registers.
-//
-
- .text
- .syntax unified
-
-//
-// Save registers d8-d15 onto stack
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__save_vfp_d8_d15_regs)
- vstmdb sp!, {d8-d15} // push registers d8-d15 onto stack
- bx lr // return to prolog
-END_COMPILERRT_FUNCTION(__save_vfp_d8_d15_regs)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/softfloat-alias.list b/lib/libcompiler_rt/arm/softfloat-alias.list
deleted file mode 100644
index cc6a4b3cdd2..00000000000
--- a/lib/libcompiler_rt/arm/softfloat-alias.list
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# These are soft float functions which can be
-# aliased to the *vfp functions on arm processors
-# that support floating point instructions.
-#
-___adddf3vfp ___adddf3
-___addsf3vfp ___addsf3
-___divdf3vfp ___divdf3
-___divsf3vfp ___divsf3
-___extendsfdf2vfp ___extendsfdf2
-___fixdfsivfp ___fixdfsi
-___fixsfsivfp ___fixsfsi
-___floatsidfvfp ___floatsidf
-___floatsisfvfp ___floatsisf
-___muldf3vfp ___muldf3
-___mulsf3vfp ___mulsf3
-___subdf3vfp ___subdf3
-___subsf3vfp ___subsf3
-___truncdfsf2vfp ___truncdfsf2
-___floatunssidfvfp ___floatunsidf
-___floatunssisfvfp ___floatunsisf
diff --git a/lib/libcompiler_rt/arm/subdf3vfp.S b/lib/libcompiler_rt/arm/subdf3vfp.S
deleted file mode 100644
index 2b6f2bdbfdd..00000000000
--- a/lib/libcompiler_rt/arm/subdf3vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- subdf3vfp.S - Implement subdf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern double __subdf3vfp(double a, double b);
-//
-// Returns difference between two double precision floating point numbers using
-// the Darwin calling convention where double arguments are passsed in GPR pairs
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__subdf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vsub.f64 d0, d0, d1
-#else
- vmov d6, r0, r1 // move first param from r0/r1 pair into d6
- vmov d7, r2, r3 // move second param from r2/r3 pair into d7
- vsub.f64 d6, d6, d7
- vmov r0, r1, d6 // move result back to r0/r1 pair
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__subdf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/subsf3vfp.S b/lib/libcompiler_rt/arm/subsf3vfp.S
deleted file mode 100644
index 3e83ea26507..00000000000
--- a/lib/libcompiler_rt/arm/subsf3vfp.S
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- subsf3vfp.S - Implement subsf3vfp ---------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __subsf3vfp(float a, float b);
-//
-// Returns the difference between two single precision floating point numbers
-// using the Darwin calling convention where single arguments are passsed
-// like 32-bit ints.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__subsf3vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vsub.f32 s0, s0, s1
-#else
- vmov s14, r0 // move first param from r0 into float register
- vmov s15, r1 // move second param from r1 into float register
- vsub.f32 s14, s14, s15
- vmov r0, s14 // move result back to r0
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__subsf3vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/switch16.S b/lib/libcompiler_rt/arm/switch16.S
deleted file mode 100644
index df9e38e176c..00000000000
--- a/lib/libcompiler_rt/arm/switch16.S
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- switch.S - Implement switch* --------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling switch statements in thumb mode, the compiler
-// can use these __switch* helper functions The compiler emits a blx to
-// the __switch* function followed by a table of displacements for each
-// case statement. On entry, R0 is the index into the table. The __switch*
-// function uses the return address in lr to find the start of the table.
-// The first entry in the table is the count of the entries in the table.
-// It then uses R0 to index into the table and get the displacement of the
-// address to jump to. If R0 is greater than the size of the table, it jumps
-// to the last entry in the table. Each displacement in the table is actually
-// the distance from lr to the label, thus making the tables PIC.
-
-
- .text
- .syntax unified
-
-//
-// The table contains signed 2-byte sized elements which are 1/2 the distance
-// from lr to the target label.
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch16)
- ldrh ip, [lr, #-1] // get first 16-bit word in table
- cmp r0, ip // compare with index
- add r0, lr, r0, lsl #1 // compute address of element in table
- add ip, lr, ip, lsl #1 // compute address of last element in table
- ite lo
- ldrshlo r0, [r0, #1] // load 16-bit element if r0 is in range
- ldrshhs r0, [ip, #1] // load 16-bit element if r0 out of range
- add ip, lr, r0, lsl #1 // compute label = lr + element*2
- bx ip // jump to computed label
-END_COMPILERRT_FUNCTION(__switch16)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/switch32.S b/lib/libcompiler_rt/arm/switch32.S
deleted file mode 100644
index d97b5361436..00000000000
--- a/lib/libcompiler_rt/arm/switch32.S
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- switch.S - Implement switch* --------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling switch statements in thumb mode, the compiler
-// can use these __switch* helper functions The compiler emits a blx to
-// the __switch* function followed by a table of displacements for each
-// case statement. On entry, R0 is the index into the table. The __switch*
-// function uses the return address in lr to find the start of the table.
-// The first entry in the table is the count of the entries in the table.
-// It then uses R0 to index into the table and get the displacement of the
-// address to jump to. If R0 is greater than the size of the table, it jumps
-// to the last entry in the table. Each displacement in the table is actually
-// the distance from lr to the label, thus making the tables PIC.
-
-
- .text
- .syntax unified
-
-//
-// The table contains signed 4-byte sized elements which are the distance
-// from lr to the target label.
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch32)
- ldr ip, [lr, #-1] // get first 32-bit word in table
- cmp r0, ip // compare with index
- add r0, lr, r0, lsl #2 // compute address of element in table
- add ip, lr, ip, lsl #2 // compute address of last element in table
- ite lo
- ldrlo r0, [r0, #3] // load 32-bit element if r0 is in range
- ldrhs r0, [ip, #3] // load 32-bit element if r0 out of range
- add ip, lr, r0 // compute label = lr + element
- bx ip // jump to computed label
-END_COMPILERRT_FUNCTION(__switch32)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/switch8.S b/lib/libcompiler_rt/arm/switch8.S
deleted file mode 100644
index 4d9e0eaff84..00000000000
--- a/lib/libcompiler_rt/arm/switch8.S
+++ /dev/null
@@ -1,44 +0,0 @@
-//===-- switch.S - Implement switch* --------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling switch statements in thumb mode, the compiler
-// can use these __switch* helper functions The compiler emits a blx to
-// the __switch* function followed by a table of displacements for each
-// case statement. On entry, R0 is the index into the table. The __switch*
-// function uses the return address in lr to find the start of the table.
-// The first entry in the table is the count of the entries in the table.
-// It then uses R0 to index into the table and get the displacement of the
-// address to jump to. If R0 is greater than the size of the table, it jumps
-// to the last entry in the table. Each displacement in the table is actually
-// the distance from lr to the label, thus making the tables PIC.
-
-
- .text
- .syntax unified
-
-//
-// The table contains signed byte sized elements which are 1/2 the distance
-// from lr to the target label.
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switch8)
- ldrb ip, [lr, #-1] // get first byte in table
- cmp r0, ip // signed compare with index
- ite lo
- ldrsblo r0, [lr, r0] // get indexed byte out of table
- ldrsbhs r0, [lr, ip] // if out of range, use last entry in table
- add ip, lr, r0, lsl #1 // compute label = lr + element*2
- bx ip // jump to computed label
-END_COMPILERRT_FUNCTION(__switch8)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/switchu8.S b/lib/libcompiler_rt/arm/switchu8.S
deleted file mode 100644
index 4ffe35f0549..00000000000
--- a/lib/libcompiler_rt/arm/switchu8.S
+++ /dev/null
@@ -1,44 +0,0 @@
-//===-- switch.S - Implement switch* --------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling switch statements in thumb mode, the compiler
-// can use these __switch* helper functions The compiler emits a blx to
-// the __switch* function followed by a table of displacements for each
-// case statement. On entry, R0 is the index into the table. The __switch*
-// function uses the return address in lr to find the start of the table.
-// The first entry in the table is the count of the entries in the table.
-// It then uses R0 to index into the table and get the displacement of the
-// address to jump to. If R0 is greater than the size of the table, it jumps
-// to the last entry in the table. Each displacement in the table is actually
-// the distance from lr to the label, thus making the tables PIC.
-
-
- .text
- .syntax unified
-
-//
-// The table contains unsigned byte sized elements which are 1/2 the distance
-// from lr to the target label.
-//
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__switchu8)
- ldrb ip, [lr, #-1] // get first byte in table
- cmp r0, ip // compare with index
- ite lo
- ldrblo r0, [lr, r0] // get indexed byte out of table
- ldrbhs r0, [lr, ip] // if out of range, use last entry in table
- add ip, lr, r0, lsl #1 // compute label = lr + element*2
- bx ip // jump to computed label
-END_COMPILERRT_FUNCTION(__switchu8)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync-ops.h b/lib/libcompiler_rt/arm/sync-ops.h
deleted file mode 100644
index ee02c30c6ea..00000000000
--- a/lib/libcompiler_rt/arm/sync-ops.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*===-- sync-ops.h - --===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements outline macros for the __sync_fetch_and_*
- * operations. Different instantiations will generate appropriate assembly for
- * ARM and Thumb-2 versions of the functions.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
-#define SYNC_OP_4(op) \
- .p2align 2 ; \
- .thumb ; \
- .syntax unified ; \
- DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_ ## op) \
- dmb ; \
- mov r12, r0 ; \
- LOCAL_LABEL(tryatomic_ ## op): \
- ldrex r0, [r12] ; \
- op(r2, r0, r1) ; \
- strex r3, r2, [r12] ; \
- cmp r3, #0 ; \
- bne LOCAL_LABEL(tryatomic_ ## op) ; \
- dmb ; \
- bx lr
-
-#define SYNC_OP_8(op) \
- .p2align 2 ; \
- .thumb ; \
- .syntax unified ; \
- DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_ ## op) \
- push {r4, r5, r6, lr} ; \
- dmb ; \
- mov r12, r0 ; \
- LOCAL_LABEL(tryatomic_ ## op): \
- ldrexd r0, r1, [r12] ; \
- op(r4, r5, r0, r1, r2, r3) ; \
- strexd r6, r4, r5, [r12] ; \
- cmp r6, #0 ; \
- bne LOCAL_LABEL(tryatomic_ ## op) ; \
- dmb ; \
- pop {r4, r5, r6, pc}
-
-#define MINMAX_4(rD, rN, rM, cmp_kind) \
- cmp rN, rM ; \
- mov rD, rM ; \
- it cmp_kind ; \
- mov##cmp_kind rD, rN
-
-#define MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, cmp_kind) \
- cmp rN_LO, rM_LO ; \
- sbcs rN_HI, rM_HI ; \
- mov rD_LO, rM_LO ; \
- mov rD_HI, rM_HI ; \
- itt cmp_kind ; \
- mov##cmp_kind rD_LO, rN_LO ; \
- mov##cmp_kind rD_HI, rN_HI
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_add_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_add_4.S
deleted file mode 100644
index 7877d6c46c1..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_add_4.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/*===-- sync_fetch_and_add_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_add_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-/* "adds" is 2 bytes shorter than "add". */
-#define add_4(rD, rN, rM) add rD, rN, rM
-
-SYNC_OP_4(add_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_add_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_add_8.S
deleted file mode 100644
index 1df07a342a1..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_add_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_add_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_add_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define add_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- adds rD_LO, rN_LO, rM_LO ; \
- adc rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(add_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_and_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_and_4.S
deleted file mode 100644
index 720ff02279c..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_and_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_and_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_and_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define and_4(rD, rN, rM) and rD, rN, rM
-
-SYNC_OP_4(and_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_and_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_and_8.S
deleted file mode 100644
index 4f7b5ca7ab2..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_and_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_and_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_and_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define and_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- and rD_LO, rN_LO, rM_LO ; \
- and rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(and_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_max_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_max_4.S
deleted file mode 100644
index 43da9c7d406..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_max_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_max_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_max_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define max_4(rD, rN, rM) MINMAX_4(rD, rN, rM, gt)
-
-SYNC_OP_4(max_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_max_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_max_8.S
deleted file mode 100644
index 898fc6202ac..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_max_8.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*===-- sync_fetch_and_max_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_max_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define max_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, gt)
-
-SYNC_OP_8(max_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_min_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_min_4.S
deleted file mode 100644
index bba31a03aac..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_min_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_min_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_min_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define min_4(rD, rN, rM) MINMAX_4(rD, rN, rM, lt)
-
-SYNC_OP_4(min_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_min_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_min_8.S
deleted file mode 100644
index e7ccf9fb60e..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_min_8.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*===-- sync_fetch_and_min_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_min_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define min_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, lt)
-
-SYNC_OP_8(min_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_nand_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_nand_4.S
deleted file mode 100644
index c13dd394588..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_nand_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_nand_4.S - -----------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_nand_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define nand_4(rD, rN, rM) bic rD, rN, rM
-
-SYNC_OP_4(nand_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_nand_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_nand_8.S
deleted file mode 100644
index e8107ab3a33..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_nand_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_nand_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_nand_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define nand_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- bic rD_LO, rN_LO, rM_LO ; \
- bic rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(nand_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_or_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_or_4.S
deleted file mode 100644
index 6726571a944..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_or_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_or_4.S - -------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_or_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define or_4(rD, rN, rM) orr rD, rN, rM
-
-SYNC_OP_4(or_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_or_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_or_8.S
deleted file mode 100644
index f7f162c7c3b..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_or_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_or_8.S - -------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_or_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define or_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- orr rD_LO, rN_LO, rM_LO ; \
- orr rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(or_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_sub_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_sub_4.S
deleted file mode 100644
index b9326b14cdd..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_sub_4.S
+++ /dev/null
@@ -1,23 +0,0 @@
-/*===-- sync_fetch_and_sub_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_sub_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-/* "subs" is 2 bytes shorter than "sub". */
-#define sub_4(rD, rN, rM) sub rD, rN, rM
-
-SYNC_OP_4(sub_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_sub_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_sub_8.S
deleted file mode 100644
index 6ce743e5ee9..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_sub_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_sub_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_sub_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define sub_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- subs rD_LO, rN_LO, rM_LO ; \
- sbc rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(sub_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_umax_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_umax_4.S
deleted file mode 100644
index b8d19ff3505..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_umax_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_umax_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_umax_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define umax_4(rD, rN, rM) MINMAX_4(rD, rN, rM, hi)
-
-SYNC_OP_4(umax_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_umax_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_umax_8.S
deleted file mode 100644
index 34442fd7745..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_umax_8.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*===-- sync_fetch_and_umax_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_umax_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define umax_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, hi)
-
-SYNC_OP_8(umax_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_umin_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_umin_4.S
deleted file mode 100644
index 0998e3e10f5..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_umin_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_umin_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_umin_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define umin_4(rD, rN, rM) MINMAX_4(rD, rN, rM, lo)
-
-SYNC_OP_4(umin_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_umin_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_umin_8.S
deleted file mode 100644
index 558f9139051..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_umin_8.S
+++ /dev/null
@@ -1,24 +0,0 @@
-/*===-- sync_fetch_and_umin_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_umin_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define umin_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) MINMAX_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI, lo)
-
-SYNC_OP_8(umin_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_xor_4.S b/lib/libcompiler_rt/arm/sync_fetch_and_xor_4.S
deleted file mode 100644
index 824f4914688..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_xor_4.S
+++ /dev/null
@@ -1,22 +0,0 @@
-/*===-- sync_fetch_and_xor_4.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_xor_4 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#define xor_4(rD, rN, rM) eor rD, rN, rM
-
-SYNC_OP_4(xor_4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_fetch_and_xor_8.S b/lib/libcompiler_rt/arm/sync_fetch_and_xor_8.S
deleted file mode 100644
index 073fb9c20f2..00000000000
--- a/lib/libcompiler_rt/arm/sync_fetch_and_xor_8.S
+++ /dev/null
@@ -1,26 +0,0 @@
-/*===-- sync_fetch_and_xor_8.S - ------------------------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __sync_fetch_and_xor_8 function for the ARM
- * architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "sync-ops.h"
-
-#if __ARM_ARCH_PROFILE != 'M'
-#define xor_8(rD_LO, rD_HI, rN_LO, rN_HI, rM_LO, rM_HI) \
- eor rD_LO, rN_LO, rM_LO ; \
- eor rD_HI, rN_HI, rM_HI
-
-SYNC_OP_8(xor_8)
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/sync_synchronize.S b/lib/libcompiler_rt/arm/sync_synchronize.S
deleted file mode 100644
index 61d1db910f0..00000000000
--- a/lib/libcompiler_rt/arm/sync_synchronize.S
+++ /dev/null
@@ -1,38 +0,0 @@
-//===-- sync_synchronize - Implement memory barrier * ----------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// When compiling a use of the gcc built-in __sync_synchronize() in thumb1 mode
-// the compiler may emit a call to __sync_synchronize.
-// On Darwin the implementation jumps to an OS supplied function named
-// OSMemoryBarrier
-//
-
- .text
- .syntax unified
-
-#if __APPLE__
-
- .p2align 2
-DEFINE_COMPILERRT_PRIVATE_FUNCTION(__sync_synchronize)
- stmfd sp!, {r7, lr}
- add r7, sp, #0
- bl _OSMemoryBarrier
- ldmfd sp!, {r7, pc}
-END_COMPILERRT_FUNCTION(__sync_synchronize)
-
- // tell linker it can break up file at label boundaries
- .subsections_via_symbols
-
-#endif
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/truncdfsf2vfp.S b/lib/libcompiler_rt/arm/truncdfsf2vfp.S
deleted file mode 100644
index 682e54d3d29..00000000000
--- a/lib/libcompiler_rt/arm/truncdfsf2vfp.S
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- truncdfsf2vfp.S - Implement truncdfsf2vfp -------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern float __truncdfsf2vfp(double a);
-//
-// Converts double precision float to signle precision result.
-// Uses Darwin calling convention where a double precision parameter is
-// passed in a R0/R1 pair and a signle precision result is returned in R0.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__truncdfsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcvt.f32.f64 s0, d0
-#else
- vmov d7, r0, r1 // load double from r0/r1 pair
- vcvt.f32.f64 s15, d7 // convert double to single (trucate precision)
- vmov r0, s15 // return result in r0
-#endif
- bx lr
-END_COMPILERRT_FUNCTION(__truncdfsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/udivmodsi4.S b/lib/libcompiler_rt/arm/udivmodsi4.S
deleted file mode 100644
index ee3950c9b0e..00000000000
--- a/lib/libcompiler_rt/arm/udivmodsi4.S
+++ /dev/null
@@ -1,180 +0,0 @@
-/*===-- udivmodsi4.S - 32-bit unsigned integer divide and modulus ---------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __udivmodsi4 (32-bit unsigned integer divide and
- * modulus) function for the ARM 32-bit architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-@ unsigned int __udivmodsi4(unsigned int divident, unsigned int divisor,
-@ unsigned int *remainder)
-@ Calculate the quotient and remainder of the (unsigned) division. The return
-@ value is the quotient, the remainder is placed in the variable.
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1, r1
- beq LOCAL_LABEL(divby0)
- mov r3, r0
- udiv r0, r3, r1
- mls r1, r0, r1, r3
- str r1, [r2]
- bx lr
-#else
- cmp r1, #1
- bcc LOCAL_LABEL(divby0)
- beq LOCAL_LABEL(divby1)
- cmp r0, r1
- bcc LOCAL_LABEL(quotient0)
- /*
- * Implement division using binary long division algorithm.
- *
- * r0 is the numerator, r1 the denominator.
- *
- * The code before JMP computes the correct shift I, so that
- * r0 and (r1 << I) have the highest bit set in the same position.
- * At the time of JMP, ip := .Ldiv0block - 12 * I.
- * This depends on the fixed instruction size of block.
- * For ARM mode, this is 12 Bytes, for THUMB mode 14 Bytes.
- *
- * block(shift) implements the test-and-update-quotient core.
- * It assumes (r0 << shift) can be computed without overflow and
- * that (r0 << shift) < 2 * r1. The quotient is stored in r3.
- */
-
-# ifdef __ARM_FEATURE_CLZ
- clz ip, r0
- clz r3, r1
- /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
- sub r3, r3, ip
-# if defined(USE_THUMB_2)
- adr ip, LOCAL_LABEL(div0block) + 1
- sub ip, ip, r3, lsl #1
-# else
- adr ip, LOCAL_LABEL(div0block)
-# endif
- sub ip, ip, r3, lsl #2
- sub ip, ip, r3, lsl #3
- mov r3, #0
- bx ip
-# else
-# if defined(USE_THUMB_2)
-# error THUMB mode requires CLZ or UDIV
-# endif
- str r4, [sp, #-8]!
-
- mov r4, r0
- adr ip, LOCAL_LABEL(div0block)
-
- lsr r3, r4, #16
- cmp r3, r1
- movhs r4, r3
- subhs ip, ip, #(16 * 12)
-
- lsr r3, r4, #8
- cmp r3, r1
- movhs r4, r3
- subhs ip, ip, #(8 * 12)
-
- lsr r3, r4, #4
- cmp r3, r1
- movhs r4, r3
- subhs ip, #(4 * 12)
-
- lsr r3, r4, #2
- cmp r3, r1
- movhs r4, r3
- subhs ip, ip, #(2 * 12)
-
- /* Last block, no need to update r3 or r4. */
- cmp r1, r4, lsr #1
- subls ip, ip, #(1 * 12)
-
- ldr r4, [sp], #8 /* restore r4, we are done with it. */
- mov r3, #0
-
- JMP(ip)
-# endif
-
-#define IMM #
-
-#define block(shift) \
- cmp r0, r1, lsl IMM shift; \
- ITT(hs); \
- WIDE(addhs) r3, r3, IMM (1 << shift); \
- WIDE(subhs) r0, r0, r1, lsl IMM shift
-
- block(31)
- block(30)
- block(29)
- block(28)
- block(27)
- block(26)
- block(25)
- block(24)
- block(23)
- block(22)
- block(21)
- block(20)
- block(19)
- block(18)
- block(17)
- block(16)
- block(15)
- block(14)
- block(13)
- block(12)
- block(11)
- block(10)
- block(9)
- block(8)
- block(7)
- block(6)
- block(5)
- block(4)
- block(3)
- block(2)
- block(1)
-LOCAL_LABEL(div0block):
- block(0)
-
- str r0, [r2]
- mov r0, r3
- JMP(lr)
-
-LOCAL_LABEL(quotient0):
- str r0, [r2]
- mov r0, #0
- JMP(lr)
-
-LOCAL_LABEL(divby1):
- mov r3, #0
- str r3, [r2]
- JMP(lr)
-#endif /* __ARM_ARCH_EXT_IDIV__ */
-
-LOCAL_LABEL(divby0):
- mov r0, #0
-#ifdef __ARM_EABI__
- b __aeabi_idiv0
-#else
- JMP(lr)
-#endif
-
-END_COMPILERRT_FUNCTION(__udivmodsi4)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/udivsi3.S b/lib/libcompiler_rt/arm/udivsi3.S
deleted file mode 100644
index 6dea27d404f..00000000000
--- a/lib/libcompiler_rt/arm/udivsi3.S
+++ /dev/null
@@ -1,264 +0,0 @@
-/*===-- udivsi3.S - 32-bit unsigned integer divide ------------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __udivsi3 (32-bit unsigned integer divide)
- * function for the ARM 32-bit architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
- .syntax unified
- .text
-
-DEFINE_CODE_STATE
-
- .p2align 2
-DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidiv, __udivsi3)
-
-@ unsigned int __udivsi3(unsigned int divident, unsigned int divisor)
-@ Calculate and return the quotient of the (unsigned) division.
-
-DEFINE_COMPILERRT_FUNCTION(__udivsi3)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1, r1
- beq LOCAL_LABEL(divby0)
- udiv r0, r0, r1
- bx lr
-
-LOCAL_LABEL(divby0):
- mov r0, #0
-# ifdef __ARM_EABI__
- b __aeabi_idiv0
-# else
- JMP(lr)
-# endif
-
-#else /* ! __ARM_ARCH_EXT_IDIV__ */
- cmp r1, #1
- bcc LOCAL_LABEL(divby0)
-#if defined(USE_THUMB_1)
- bne LOCAL_LABEL(num_neq_denom)
- JMP(lr)
-LOCAL_LABEL(num_neq_denom):
-#else
- IT(eq)
- JMPc(lr, eq)
-#endif
- cmp r0, r1
-#if defined(USE_THUMB_1)
- bhs LOCAL_LABEL(num_ge_denom)
- movs r0, #0
- JMP(lr)
-LOCAL_LABEL(num_ge_denom):
-#else
- ITT(cc)
- movcc r0, #0
- JMPc(lr, cc)
-#endif
-
- /*
- * Implement division using binary long division algorithm.
- *
- * r0 is the numerator, r1 the denominator.
- *
- * The code before JMP computes the correct shift I, so that
- * r0 and (r1 << I) have the highest bit set in the same position.
- * At the time of JMP, ip := .Ldiv0block - 12 * I.
- * This depends on the fixed instruction size of block.
- * For ARM mode, this is 12 Bytes, for THUMB mode 14 Bytes.
- *
- * block(shift) implements the test-and-update-quotient core.
- * It assumes (r0 << shift) can be computed without overflow and
- * that (r0 << shift) < 2 * r1. The quotient is stored in r3.
- */
-
-# if defined(__ARM_FEATURE_CLZ)
- clz ip, r0
- clz r3, r1
- /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
- sub r3, r3, ip
-# if defined(USE_THUMB_2)
- adr ip, LOCAL_LABEL(div0block) + 1
- sub ip, ip, r3, lsl #1
-# else
- adr ip, LOCAL_LABEL(div0block)
-# endif
- sub ip, ip, r3, lsl #2
- sub ip, ip, r3, lsl #3
- mov r3, #0
- bx ip
-# else /* No CLZ Feature */
-# if defined(USE_THUMB_2)
-# error THUMB mode requires CLZ or UDIV
-# endif
-# if defined(USE_THUMB_1)
-# define BLOCK_SIZE 10
-# else
-# define BLOCK_SIZE 12
-# endif
-
- mov r2, r0
-# if defined(USE_THUMB_1)
- mov ip, r0
- adr r0, LOCAL_LABEL(div0block)
- adds r0, #1
-# else
- adr ip, LOCAL_LABEL(div0block)
-# endif
- lsrs r3, r2, #16
- cmp r3, r1
-# if defined(USE_THUMB_1)
- blo LOCAL_LABEL(skip_16)
- movs r2, r3
- subs r0, r0, #(16 * BLOCK_SIZE)
-LOCAL_LABEL(skip_16):
-# else
- movhs r2, r3
- subhs ip, ip, #(16 * BLOCK_SIZE)
-# endif
-
- lsrs r3, r2, #8
- cmp r3, r1
-# if defined(USE_THUMB_1)
- blo LOCAL_LABEL(skip_8)
- movs r2, r3
- subs r0, r0, #(8 * BLOCK_SIZE)
-LOCAL_LABEL(skip_8):
-# else
- movhs r2, r3
- subhs ip, ip, #(8 * BLOCK_SIZE)
-# endif
-
- lsrs r3, r2, #4
- cmp r3, r1
-# if defined(USE_THUMB_1)
- blo LOCAL_LABEL(skip_4)
- movs r2, r3
- subs r0, r0, #(4 * BLOCK_SIZE)
-LOCAL_LABEL(skip_4):
-# else
- movhs r2, r3
- subhs ip, #(4 * BLOCK_SIZE)
-# endif
-
- lsrs r3, r2, #2
- cmp r3, r1
-# if defined(USE_THUMB_1)
- blo LOCAL_LABEL(skip_2)
- movs r2, r3
- subs r0, r0, #(2 * BLOCK_SIZE)
-LOCAL_LABEL(skip_2):
-# else
- movhs r2, r3
- subhs ip, ip, #(2 * BLOCK_SIZE)
-# endif
-
- /* Last block, no need to update r2 or r3. */
-# if defined(USE_THUMB_1)
- lsrs r3, r2, #1
- cmp r3, r1
- blo LOCAL_LABEL(skip_1)
- subs r0, r0, #(1 * BLOCK_SIZE)
-LOCAL_LABEL(skip_1):
- movs r2, r0
- mov r0, ip
- movs r3, #0
- JMP (r2)
-
-# else
- cmp r1, r2, lsr #1
- subls ip, ip, #(1 * BLOCK_SIZE)
-
- movs r3, #0
-
- JMP(ip)
-# endif
-# endif /* __ARM_FEATURE_CLZ */
-
-
-#define IMM #
- /* due to the range limit of branch in Thumb1, we have to place the
- block closer */
-LOCAL_LABEL(divby0):
- movs r0, #0
-# if defined(__ARM_EABI__)
- push {r7, lr}
- bl __aeabi_idiv0 // due to relocation limit, can't use b.
- pop {r7, pc}
-# else
- JMP(lr)
-# endif
-
-
-#if defined(USE_THUMB_1)
-#define block(shift) \
- lsls r2, r1, IMM shift; \
- cmp r0, r2; \
- blo LOCAL_LABEL(block_skip_##shift); \
- subs r0, r0, r2; \
- LOCAL_LABEL(block_skip_##shift) :; \
- adcs r3, r3 /* same as ((r3 << 1) | Carry). Carry is set if r0 >= r2. */
-
- /* TODO: if current location counter is not not word aligned, we don't
- need the .p2align and nop */
- /* Label div0block must be word-aligned. First align block 31 */
- .p2align 2
- nop /* Padding to align div0block as 31 blocks = 310 bytes */
-
-#else
-#define block(shift) \
- cmp r0, r1, lsl IMM shift; \
- ITT(hs); \
- WIDE(addhs) r3, r3, IMM (1 << shift); \
- WIDE(subhs) r0, r0, r1, lsl IMM shift
-#endif
-
- block(31)
- block(30)
- block(29)
- block(28)
- block(27)
- block(26)
- block(25)
- block(24)
- block(23)
- block(22)
- block(21)
- block(20)
- block(19)
- block(18)
- block(17)
- block(16)
- block(15)
- block(14)
- block(13)
- block(12)
- block(11)
- block(10)
- block(9)
- block(8)
- block(7)
- block(6)
- block(5)
- block(4)
- block(3)
- block(2)
- block(1)
-LOCAL_LABEL(div0block):
- block(0)
-
- mov r0, r3
- JMP(lr)
-#endif /* __ARM_ARCH_EXT_IDIV__ */
-
-END_COMPILERRT_FUNCTION(__udivsi3)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/umodsi3.S b/lib/libcompiler_rt/arm/umodsi3.S
deleted file mode 100644
index 069fad34cb9..00000000000
--- a/lib/libcompiler_rt/arm/umodsi3.S
+++ /dev/null
@@ -1,158 +0,0 @@
-/*===-- umodsi3.S - 32-bit unsigned integer modulus -----------------------===//
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===//
- *
- * This file implements the __umodsi3 (32-bit unsigned integer modulus)
- * function for the ARM 32-bit architecture.
- *
- *===----------------------------------------------------------------------===*/
-
-#include "../assembly.h"
-
- .syntax unified
- .text
- DEFINE_CODE_STATE
-
-@ unsigned int __umodsi3(unsigned int divident, unsigned int divisor)
-@ Calculate and return the remainder of the (unsigned) division.
-
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__umodsi3)
-#if __ARM_ARCH_EXT_IDIV__
- tst r1, r1
- beq LOCAL_LABEL(divby0)
- udiv r2, r0, r1
- mls r0, r2, r1, r0
- bx lr
-#else
- cmp r1, #1
- bcc LOCAL_LABEL(divby0)
- ITT(eq)
- moveq r0, #0
- JMPc(lr, eq)
- cmp r0, r1
- IT(cc)
- JMPc(lr, cc)
- /*
- * Implement division using binary long division algorithm.
- *
- * r0 is the numerator, r1 the denominator.
- *
- * The code before JMP computes the correct shift I, so that
- * r0 and (r1 << I) have the highest bit set in the same position.
- * At the time of JMP, ip := .Ldiv0block - 8 * I.
- * This depends on the fixed instruction size of block.
- * For ARM mode, this is 8 Bytes, for THUMB mode 10 Bytes.
- *
- * block(shift) implements the test-and-update-quotient core.
- * It assumes (r0 << shift) can be computed without overflow and
- * that (r0 << shift) < 2 * r1. The quotient is stored in r3.
- */
-
-# ifdef __ARM_FEATURE_CLZ
- clz ip, r0
- clz r3, r1
- /* r0 >= r1 implies clz(r0) <= clz(r1), so ip <= r3. */
- sub r3, r3, ip
-# if defined(USE_THUMB_2)
- adr ip, LOCAL_LABEL(div0block) + 1
- sub ip, ip, r3, lsl #1
-# else
- adr ip, LOCAL_LABEL(div0block)
-# endif
- sub ip, ip, r3, lsl #3
- bx ip
-# else
-# if defined(USE_THUMB_2)
-# error THUMB mode requires CLZ or UDIV
-# endif
- mov r2, r0
- adr ip, LOCAL_LABEL(div0block)
-
- lsr r3, r2, #16
- cmp r3, r1
- movhs r2, r3
- subhs ip, ip, #(16 * 8)
-
- lsr r3, r2, #8
- cmp r3, r1
- movhs r2, r3
- subhs ip, ip, #(8 * 8)
-
- lsr r3, r2, #4
- cmp r3, r1
- movhs r2, r3
- subhs ip, #(4 * 8)
-
- lsr r3, r2, #2
- cmp r3, r1
- movhs r2, r3
- subhs ip, ip, #(2 * 8)
-
- /* Last block, no need to update r2 or r3. */
- cmp r1, r2, lsr #1
- subls ip, ip, #(1 * 8)
-
- JMP(ip)
-# endif
-
-#define IMM #
-
-#define block(shift) \
- cmp r0, r1, lsl IMM shift; \
- IT(hs); \
- WIDE(subhs) r0, r0, r1, lsl IMM shift
-
- block(31)
- block(30)
- block(29)
- block(28)
- block(27)
- block(26)
- block(25)
- block(24)
- block(23)
- block(22)
- block(21)
- block(20)
- block(19)
- block(18)
- block(17)
- block(16)
- block(15)
- block(14)
- block(13)
- block(12)
- block(11)
- block(10)
- block(9)
- block(8)
- block(7)
- block(6)
- block(5)
- block(4)
- block(3)
- block(2)
- block(1)
-LOCAL_LABEL(div0block):
- block(0)
- JMP(lr)
-#endif /* __ARM_ARCH_EXT_IDIV__ */
-
-LOCAL_LABEL(divby0):
- mov r0, #0
-#ifdef __ARM_EABI__
- b __aeabi_idiv0
-#else
- JMP(lr)
-#endif
-
-END_COMPILERRT_FUNCTION(__umodsi3)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/unorddf2vfp.S b/lib/libcompiler_rt/arm/unorddf2vfp.S
deleted file mode 100644
index 6625fa8a311..00000000000
--- a/lib/libcompiler_rt/arm/unorddf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- unorddf2vfp.S - Implement unorddf2vfp ------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __unorddf2vfp(double a, double b);
-//
-// Returns one iff a or b is NaN
-// Uses Darwin calling convention where double precision arguments are passsed
-// like in GPR pairs.
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__unorddf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f64 d0, d1
-#else
- vmov d6, r0, r1 // load r0/r1 pair in double register
- vmov d7, r2, r3 // load r2/r3 pair in double register
- vcmp.f64 d6, d7
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(vs)
- movvs r0, #1 // set result register to 1 if "overflow" (any NaNs)
- movvc r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__unorddf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/arm/unordsf2vfp.S b/lib/libcompiler_rt/arm/unordsf2vfp.S
deleted file mode 100644
index 0b5da2ba3e1..00000000000
--- a/lib/libcompiler_rt/arm/unordsf2vfp.S
+++ /dev/null
@@ -1,37 +0,0 @@
-//===-- unordsf2vfp.S - Implement unordsf2vfp -----------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// extern int __unordsf2vfp(float a, float b);
-//
-// Returns one iff a or b is NaN
-// Uses Darwin calling convention where single precision arguments are passsed
-// like 32-bit ints
-//
- .syntax unified
- .p2align 2
-DEFINE_COMPILERRT_FUNCTION(__unordsf2vfp)
-#if defined(COMPILER_RT_ARMHF_TARGET)
- vcmp.f32 s0, s1
-#else
- vmov s14, r0 // move from GPR 0 to float register
- vmov s15, r1 // move from GPR 1 to float register
- vcmp.f32 s14, s15
-#endif
- vmrs apsr_nzcv, fpscr
- ITE(vs)
- movvs r0, #1 // set result register to 1 if "overflow" (any NaNs)
- movvc r0, #0
- bx lr
-END_COMPILERRT_FUNCTION(__unordsf2vfp)
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/ashldi3.c b/lib/libcompiler_rt/ashldi3.c
deleted file mode 100644
index a5c1836006b..00000000000
--- a/lib/libcompiler_rt/ashldi3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ====-- ashldi3.c - Implement __ashldi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ashldi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a << b */
-
-/* Precondition: 0 <= b < bits_in_dword */
-
-COMPILER_RT_ABI di_int
-__ashldi3(di_int a, si_int b)
-{
- const int bits_in_word = (int)(sizeof(si_int) * CHAR_BIT);
- dwords input;
- dwords result;
- input.all = a;
- if (b & bits_in_word) /* bits_in_word <= b < bits_in_dword */
- {
- result.s.low = 0;
- result.s.high = input.s.low << (b - bits_in_word);
- }
- else /* 0 <= b < bits_in_word */
- {
- if (b == 0)
- return a;
- result.s.low = input.s.low << b;
- result.s.high = (input.s.high << b) | (input.s.low >> (bits_in_word - b));
- }
- return result.all;
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI di_int __aeabi_llsl(di_int a, si_int b) COMPILER_RT_ALIAS(__ashldi3);
-#endif
diff --git a/lib/libcompiler_rt/ashlti3.c b/lib/libcompiler_rt/ashlti3.c
deleted file mode 100644
index 638ae845ff0..00000000000
--- a/lib/libcompiler_rt/ashlti3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ===-- ashlti3.c - Implement __ashlti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ashlti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a << b */
-
-/* Precondition: 0 <= b < bits_in_tword */
-
-COMPILER_RT_ABI ti_int
-__ashlti3(ti_int a, si_int b)
-{
- const int bits_in_dword = (int)(sizeof(di_int) * CHAR_BIT);
- twords input;
- twords result;
- input.all = a;
- if (b & bits_in_dword) /* bits_in_dword <= b < bits_in_tword */
- {
- result.s.low = 0;
- result.s.high = input.s.low << (b - bits_in_dword);
- }
- else /* 0 <= b < bits_in_dword */
- {
- if (b == 0)
- return a;
- result.s.low = input.s.low << b;
- result.s.high = (input.s.high << b) | (input.s.low >> (bits_in_dword - b));
- }
- return result.all;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/ashrdi3.c b/lib/libcompiler_rt/ashrdi3.c
deleted file mode 100644
index 84619965eca..00000000000
--- a/lib/libcompiler_rt/ashrdi3.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*===-- ashrdi3.c - Implement __ashrdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ashrdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: arithmetic a >> b */
-
-/* Precondition: 0 <= b < bits_in_dword */
-
-COMPILER_RT_ABI di_int
-__ashrdi3(di_int a, si_int b)
-{
- const int bits_in_word = (int)(sizeof(si_int) * CHAR_BIT);
- dwords input;
- dwords result;
- input.all = a;
- if (b & bits_in_word) /* bits_in_word <= b < bits_in_dword */
- {
- /* result.s.high = input.s.high < 0 ? -1 : 0 */
- result.s.high = input.s.high >> (bits_in_word - 1);
- result.s.low = input.s.high >> (b - bits_in_word);
- }
- else /* 0 <= b < bits_in_word */
- {
- if (b == 0)
- return a;
- result.s.high = input.s.high >> b;
- result.s.low = (input.s.high << (bits_in_word - b)) | (input.s.low >> b);
- }
- return result.all;
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI di_int __aeabi_lasr(di_int a, si_int b) COMPILER_RT_ALIAS(__ashrdi3);
-#endif
diff --git a/lib/libcompiler_rt/ashrti3.c b/lib/libcompiler_rt/ashrti3.c
deleted file mode 100644
index f78205d961e..00000000000
--- a/lib/libcompiler_rt/ashrti3.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ===-- ashrti3.c - Implement __ashrti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ashrti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: arithmetic a >> b */
-
-/* Precondition: 0 <= b < bits_in_tword */
-
-COMPILER_RT_ABI ti_int
-__ashrti3(ti_int a, si_int b)
-{
- const int bits_in_dword = (int)(sizeof(di_int) * CHAR_BIT);
- twords input;
- twords result;
- input.all = a;
- if (b & bits_in_dword) /* bits_in_dword <= b < bits_in_tword */
- {
- /* result.s.high = input.s.high < 0 ? -1 : 0 */
- result.s.high = input.s.high >> (bits_in_dword - 1);
- result.s.low = input.s.high >> (b - bits_in_dword);
- }
- else /* 0 <= b < bits_in_dword */
- {
- if (b == 0)
- return a;
- result.s.high = input.s.high >> b;
- result.s.low = (input.s.high << (bits_in_dword - b)) | (input.s.low >> b);
- }
- return result.all;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/assembly.h b/lib/libcompiler_rt/assembly.h
deleted file mode 100644
index 3f5e59b2544..00000000000
--- a/lib/libcompiler_rt/assembly.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/* ===-- assembly.h - compiler-rt assembler support macros -----------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file defines macros for use in compiler-rt assembler source.
- * This file is not part of the interface of this library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#ifndef COMPILERRT_ASSEMBLY_H
-#define COMPILERRT_ASSEMBLY_H
-
-#if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
-#define SEPARATOR @
-#else
-#define SEPARATOR ;
-#endif
-
-#if defined(__APPLE__)
-#define HIDDEN(name) .private_extern name
-#define LOCAL_LABEL(name) L_##name
-// tell linker it can break up file at label boundaries
-#define FILE_LEVEL_DIRECTIVE .subsections_via_symbols
-#define SYMBOL_IS_FUNC(name)
-#define CONST_SECTION .const
-
-#define NO_EXEC_STACK_DIRECTIVE
-
-#elif defined(__ELF__)
-
-#define HIDDEN(name) .hidden name
-#define LOCAL_LABEL(name) .L_##name
-#define FILE_LEVEL_DIRECTIVE
-#if defined(__arm__)
-#define SYMBOL_IS_FUNC(name) .type name,%function
-#else
-#define SYMBOL_IS_FUNC(name) .type name,@function
-#endif
-#define CONST_SECTION .section .rodata
-
-#if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \
- defined(__linux__)
-#define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits
-#else
-#define NO_EXEC_STACK_DIRECTIVE
-#endif
-
-#else // !__APPLE__ && !__ELF__
-
-#define HIDDEN(name)
-#define LOCAL_LABEL(name) .L ## name
-#define FILE_LEVEL_DIRECTIVE
-#define SYMBOL_IS_FUNC(name) \
- .def name SEPARATOR \
- .scl 2 SEPARATOR \
- .type 32 SEPARATOR \
- .endef
-#define CONST_SECTION .section .rdata,"rd"
-
-#define NO_EXEC_STACK_DIRECTIVE
-
-#endif
-
-#if defined(__arm__)
-
-/*
- * Determine actual [ARM][THUMB[1][2]] ISA using compiler predefined macros:
- * - for '-mthumb -march=armv6' compiler defines '__thumb__'
- * - for '-mthumb -march=armv7' compiler defines '__thumb__' and '__thumb2__'
- */
-#if defined(__thumb2__) || defined(__thumb__)
-#define DEFINE_CODE_STATE .thumb SEPARATOR
-#define DECLARE_FUNC_ENCODING .thumb_func SEPARATOR
-#if defined(__thumb2__)
-#define USE_THUMB_2
-#define IT(cond) it cond
-#define ITT(cond) itt cond
-#define ITE(cond) ite cond
-#else
-#define USE_THUMB_1
-#define IT(cond)
-#define ITT(cond)
-#define ITE(cond)
-#endif // defined(__thumb__2)
-#else // !defined(__thumb2__) && !defined(__thumb__)
-#define DEFINE_CODE_STATE .arm SEPARATOR
-#define DECLARE_FUNC_ENCODING
-#define IT(cond)
-#define ITT(cond)
-#define ITE(cond)
-#endif
-
-#if defined(USE_THUMB_1) && defined(USE_THUMB_2)
-#error "USE_THUMB_1 and USE_THUMB_2 can't be defined together."
-#endif
-
-#if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5
-#define ARM_HAS_BX
-#endif
-#if !defined(__ARM_FEATURE_CLZ) && !defined(USE_THUMB_1) && \
- (__ARM_ARCH >= 6 || (__ARM_ARCH == 5 && !defined(__ARM_ARCH_5__)))
-#define __ARM_FEATURE_CLZ
-#endif
-
-#ifdef ARM_HAS_BX
-#define JMP(r) bx r
-#define JMPc(r, c) bx##c r
-#else
-#define JMP(r) mov pc, r
-#define JMPc(r, c) mov##c pc, r
-#endif
-
-// pop {pc} can't switch Thumb mode on ARMv4T
-#if __ARM_ARCH >= 5
-#define POP_PC() pop {pc}
-#else
-#define POP_PC() \
- pop {ip}; \
- JMP(ip)
-#endif
-
-#if defined(USE_THUMB_2)
-#define WIDE(op) op.w
-#else
-#define WIDE(op) op
-#endif
-#else // !defined(__arm)
-#define DECLARE_FUNC_ENCODING
-#define DEFINE_CODE_STATE
-#endif
-
-#define GLUE2(a, b) a##b
-#define GLUE(a, b) GLUE2(a, b)
-#define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
-
-#ifdef VISIBILITY_HIDDEN
-#define DECLARE_SYMBOL_VISIBILITY(name) \
- HIDDEN(SYMBOL_NAME(name)) SEPARATOR
-#else
-#define DECLARE_SYMBOL_VISIBILITY(name)
-#endif
-
-#define DEFINE_COMPILERRT_FUNCTION(name) \
- DEFINE_CODE_STATE \
- FILE_LEVEL_DIRECTIVE SEPARATOR \
- .globl SYMBOL_NAME(name) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
- DECLARE_SYMBOL_VISIBILITY(name) \
- DECLARE_FUNC_ENCODING \
- SYMBOL_NAME(name):
-
-#define DEFINE_COMPILERRT_THUMB_FUNCTION(name) \
- DEFINE_CODE_STATE \
- FILE_LEVEL_DIRECTIVE SEPARATOR \
- .globl SYMBOL_NAME(name) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
- DECLARE_SYMBOL_VISIBILITY(name) SEPARATOR \
- .thumb_func SEPARATOR \
- SYMBOL_NAME(name):
-
-#define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
- DEFINE_CODE_STATE \
- FILE_LEVEL_DIRECTIVE SEPARATOR \
- .globl SYMBOL_NAME(name) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
- HIDDEN(SYMBOL_NAME(name)) SEPARATOR \
- DECLARE_FUNC_ENCODING \
- SYMBOL_NAME(name):
-
-#define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
- DEFINE_CODE_STATE \
- .globl name SEPARATOR \
- SYMBOL_IS_FUNC(name) SEPARATOR \
- HIDDEN(name) SEPARATOR \
- DECLARE_FUNC_ENCODING \
- name:
-
-#define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target) \
- .globl SYMBOL_NAME(name) SEPARATOR \
- SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
- DECLARE_SYMBOL_VISIBILITY(SYMBOL_NAME(name)) SEPARATOR \
- .set SYMBOL_NAME(name), SYMBOL_NAME(target) SEPARATOR
-
-#if defined(__ARM_EABI__)
-#define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name) \
- DEFINE_COMPILERRT_FUNCTION_ALIAS(aeabi_name, name)
-#else
-#define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name)
-#endif
-
-#ifdef __ELF__
-#define END_COMPILERRT_FUNCTION(name) \
- .size SYMBOL_NAME(name), . - SYMBOL_NAME(name)
-#else
-#define END_COMPILERRT_FUNCTION(name)
-#endif
-
-#endif /* COMPILERRT_ASSEMBLY_H */
diff --git a/lib/libcompiler_rt/atomic.c b/lib/libcompiler_rt/atomic.c
deleted file mode 100644
index ee35e342eda..00000000000
--- a/lib/libcompiler_rt/atomic.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/*===-- atomic.c - Implement support functions for atomic operations.------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===
- *
- * atomic.c defines a set of functions for performing atomic accesses on
- * arbitrary-sized memory locations. This design uses locks that should
- * be fast in the uncontended case, for two reasons:
- *
- * 1) This code must work with C programs that do not link to anything
- * (including pthreads) and so it should not depend on any pthread
- * functions.
- * 2) Atomic operations, rather than explicit mutexes, are most commonly used
- * on code where contended operations are rate.
- *
- * To avoid needing a per-object lock, this code allocates an array of
- * locks and hashes the object pointers to find the one that it should use.
- * For operations that must be atomic on two locations, the lower lock is
- * always acquired first, to avoid deadlock.
- *
- *===----------------------------------------------------------------------===
- */
-
-#include <stdint.h>
-#include <string.h>
-
-#include "assembly.h"
-
-// Clang objects if you redefine a builtin. This little hack allows us to
-// define a function with the same name as an intrinsic.
-#pragma redefine_extname __atomic_load_c SYMBOL_NAME(__atomic_load)
-#pragma redefine_extname __atomic_store_c SYMBOL_NAME(__atomic_store)
-#pragma redefine_extname __atomic_exchange_c SYMBOL_NAME(__atomic_exchange)
-#pragma redefine_extname __atomic_compare_exchange_c SYMBOL_NAME(__atomic_compare_exchange)
-
-/// Number of locks. This allocates one page on 32-bit platforms, two on
-/// 64-bit. This can be specified externally if a different trade between
-/// memory usage and contention probability is required for a given platform.
-#ifndef SPINLOCK_COUNT
-#define SPINLOCK_COUNT (1<<10)
-#endif
-static const long SPINLOCK_MASK = SPINLOCK_COUNT - 1;
-
-////////////////////////////////////////////////////////////////////////////////
-// Platform-specific lock implementation. Falls back to spinlocks if none is
-// defined. Each platform should define the Lock type, and corresponding
-// lock() and unlock() functions.
-////////////////////////////////////////////////////////////////////////////////
-#ifdef __FreeBSD__
-#include <errno.h>
-#include <sys/types.h>
-#include <machine/atomic.h>
-#include <sys/umtx.h>
-typedef struct _usem Lock;
-__inline static void unlock(Lock *l) {
- __c11_atomic_store((_Atomic(uint32_t)*)&l->_count, 1, __ATOMIC_RELEASE);
- __c11_atomic_thread_fence(__ATOMIC_SEQ_CST);
- if (l->_has_waiters)
- _umtx_op(l, UMTX_OP_SEM_WAKE, 1, 0, 0);
-}
-__inline static void lock(Lock *l) {
- uint32_t old = 1;
- while (!__c11_atomic_compare_exchange_weak((_Atomic(uint32_t)*)&l->_count, &old,
- 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
- _umtx_op(l, UMTX_OP_SEM_WAIT, 0, 0, 0);
- old = 1;
- }
-}
-/// locks for atomic operations
-static Lock locks[SPINLOCK_COUNT] = { [0 ... SPINLOCK_COUNT-1] = {0,1,0} };
-
-#elif defined(__APPLE__)
-#include <libkern/OSAtomic.h>
-typedef OSSpinLock Lock;
-__inline static void unlock(Lock *l) {
- OSSpinLockUnlock(l);
-}
-/// Locks a lock. In the current implementation, this is potentially
-/// unbounded in the contended case.
-__inline static void lock(Lock *l) {
- OSSpinLockLock(l);
-}
-static Lock locks[SPINLOCK_COUNT]; // initialized to OS_SPINLOCK_INIT which is 0
-
-#else
-typedef _Atomic(uintptr_t) Lock;
-/// Unlock a lock. This is a release operation.
-__inline static void unlock(Lock *l) {
- __c11_atomic_store(l, 0, __ATOMIC_RELEASE);
-}
-/// Locks a lock. In the current implementation, this is potentially
-/// unbounded in the contended case.
-__inline static void lock(Lock *l) {
- uintptr_t old = 0;
- while (!__c11_atomic_compare_exchange_weak(l, &old, 1, __ATOMIC_ACQUIRE,
- __ATOMIC_RELAXED))
- old = 0;
-}
-/// locks for atomic operations
-static Lock locks[SPINLOCK_COUNT];
-#endif
-
-
-/// Returns a lock to use for a given pointer.
-static __inline Lock *lock_for_pointer(void *ptr) {
- intptr_t hash = (intptr_t)ptr;
- // Disregard the lowest 4 bits. We want all values that may be part of the
- // same memory operation to hash to the same value and therefore use the same
- // lock.
- hash >>= 4;
- // Use the next bits as the basis for the hash
- intptr_t low = hash & SPINLOCK_MASK;
- // Now use the high(er) set of bits to perturb the hash, so that we don't
- // get collisions from atomic fields in a single object
- hash >>= 16;
- hash ^= low;
- // Return a pointer to the word to use
- return locks + (hash & SPINLOCK_MASK);
-}
-
-/// Macros for determining whether a size is lock free. Clang can not yet
-/// codegen __atomic_is_lock_free(16), so for now we assume 16-byte values are
-/// not lock free.
-#define IS_LOCK_FREE_1 __c11_atomic_is_lock_free(1)
-#define IS_LOCK_FREE_2 __c11_atomic_is_lock_free(2)
-#define IS_LOCK_FREE_4 __c11_atomic_is_lock_free(4)
-#define IS_LOCK_FREE_8 __c11_atomic_is_lock_free(8)
-#define IS_LOCK_FREE_16 0
-
-/// Macro that calls the compiler-generated lock-free versions of functions
-/// when they exist.
-#define LOCK_FREE_CASES() \
- do {\
- switch (size) {\
- case 2:\
- if (IS_LOCK_FREE_2) {\
- LOCK_FREE_ACTION(uint16_t);\
- }\
- case 4:\
- if (IS_LOCK_FREE_4) {\
- LOCK_FREE_ACTION(uint32_t);\
- }\
- case 8:\
- if (IS_LOCK_FREE_8) {\
- LOCK_FREE_ACTION(uint64_t);\
- }\
- case 16:\
- if (IS_LOCK_FREE_16) {\
- /* FIXME: __uint128_t isn't available on 32 bit platforms.
- LOCK_FREE_ACTION(__uint128_t);*/\
- }\
- }\
- } while (0)
-
-
-/// An atomic load operation. This is atomic with respect to the source
-/// pointer only.
-void __atomic_load_c(int size, void *src, void *dest, int model) {
-#define LOCK_FREE_ACTION(type) \
- *((type*)dest) = __c11_atomic_load((_Atomic(type)*)src, model);\
- return;
- LOCK_FREE_CASES();
-#undef LOCK_FREE_ACTION
- Lock *l = lock_for_pointer(src);
- lock(l);
- memcpy(dest, src, size);
- unlock(l);
-}
-
-/// An atomic store operation. This is atomic with respect to the destination
-/// pointer only.
-void __atomic_store_c(int size, void *dest, void *src, int model) {
-#define LOCK_FREE_ACTION(type) \
- __c11_atomic_store((_Atomic(type)*)dest, *(type*)dest, model);\
- return;
- LOCK_FREE_CASES();
-#undef LOCK_FREE_ACTION
- Lock *l = lock_for_pointer(dest);
- lock(l);
- memcpy(dest, src, size);
- unlock(l);
-}
-
-/// Atomic compare and exchange operation. If the value at *ptr is identical
-/// to the value at *expected, then this copies value at *desired to *ptr. If
-/// they are not, then this stores the current value from *ptr in *expected.
-///
-/// This function returns 1 if the exchange takes place or 0 if it fails.
-int __atomic_compare_exchange_c(int size, void *ptr, void *expected,
- void *desired, int success, int failure) {
-#define LOCK_FREE_ACTION(type) \
- return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, (type*)expected,\
- *(type*)desired, success, failure)
- LOCK_FREE_CASES();
-#undef LOCK_FREE_ACTION
- Lock *l = lock_for_pointer(ptr);
- lock(l);
- if (memcmp(ptr, expected, size) == 0) {
- memcpy(ptr, desired, size);
- unlock(l);
- return 1;
- }
- memcpy(expected, ptr, size);
- unlock(l);
- return 0;
-}
-
-/// Performs an atomic exchange operation between two pointers. This is atomic
-/// with respect to the target address.
-void __atomic_exchange_c(int size, void *ptr, void *val, void *old, int model) {
-#define LOCK_FREE_ACTION(type) \
- *(type*)old = __c11_atomic_exchange((_Atomic(type)*)ptr, *(type*)val,\
- model);\
- return;
- LOCK_FREE_CASES();
-#undef LOCK_FREE_ACTION
- Lock *l = lock_for_pointer(ptr);
- lock(l);
- memcpy(old, ptr, size);
- memcpy(ptr, val, size);
- unlock(l);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Where the size is known at compile time, the compiler may emit calls to
-// specialised versions of the above functions.
-////////////////////////////////////////////////////////////////////////////////
-#ifdef __SIZEOF_INT128__
-#define OPTIMISED_CASES\
- OPTIMISED_CASE(1, IS_LOCK_FREE_1, uint8_t)\
- OPTIMISED_CASE(2, IS_LOCK_FREE_2, uint16_t)\
- OPTIMISED_CASE(4, IS_LOCK_FREE_4, uint32_t)\
- OPTIMISED_CASE(8, IS_LOCK_FREE_8, uint64_t)\
- OPTIMISED_CASE(16, IS_LOCK_FREE_16, __uint128_t)
-#else
-#define OPTIMISED_CASES\
- OPTIMISED_CASE(1, IS_LOCK_FREE_1, uint8_t)\
- OPTIMISED_CASE(2, IS_LOCK_FREE_2, uint16_t)\
- OPTIMISED_CASE(4, IS_LOCK_FREE_4, uint32_t)\
- OPTIMISED_CASE(8, IS_LOCK_FREE_8, uint64_t)
-#endif
-
-#define OPTIMISED_CASE(n, lockfree, type)\
-type __atomic_load_##n(type *src, int model) {\
- if (lockfree)\
- return __c11_atomic_load((_Atomic(type)*)src, model);\
- Lock *l = lock_for_pointer(src);\
- lock(l);\
- type val = *src;\
- unlock(l);\
- return val;\
-}
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-
-#define OPTIMISED_CASE(n, lockfree, type)\
-void __atomic_store_##n(type *dest, type val, int model) {\
- if (lockfree) {\
- __c11_atomic_store((_Atomic(type)*)dest, val, model);\
- return;\
- }\
- Lock *l = lock_for_pointer(dest);\
- lock(l);\
- *dest = val;\
- unlock(l);\
- return;\
-}
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-
-#define OPTIMISED_CASE(n, lockfree, type)\
-type __atomic_exchange_##n(type *dest, type val, int model) {\
- if (lockfree)\
- return __c11_atomic_exchange((_Atomic(type)*)dest, val, model);\
- Lock *l = lock_for_pointer(dest);\
- lock(l);\
- type tmp = *dest;\
- *dest = val;\
- unlock(l);\
- return tmp;\
-}
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-
-#define OPTIMISED_CASE(n, lockfree, type)\
-int __atomic_compare_exchange_##n(type *ptr, type *expected, type desired,\
- int success, int failure) {\
- if (lockfree)\
- return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, expected, desired,\
- success, failure);\
- Lock *l = lock_for_pointer(ptr);\
- lock(l);\
- if (*ptr == *expected) {\
- *ptr = desired;\
- unlock(l);\
- return 1;\
- }\
- *expected = *ptr;\
- unlock(l);\
- return 0;\
-}
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-
-////////////////////////////////////////////////////////////////////////////////
-// Atomic read-modify-write operations for integers of various sizes.
-////////////////////////////////////////////////////////////////////////////////
-#define ATOMIC_RMW(n, lockfree, type, opname, op) \
-type __atomic_fetch_##opname##_##n(type *ptr, type val, int model) {\
- if (lockfree) \
- return __c11_atomic_fetch_##opname((_Atomic(type)*)ptr, val, model);\
- Lock *l = lock_for_pointer(ptr);\
- lock(l);\
- type tmp = *ptr;\
- *ptr = tmp op val;\
- unlock(l);\
- return tmp;\
-}
-
-#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, add, +)
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, sub, -)
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, and, &)
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, or, |)
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
-#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, xor, ^)
-OPTIMISED_CASES
-#undef OPTIMISED_CASE
diff --git a/lib/libcompiler_rt/atomic_flag_clear.c b/lib/libcompiler_rt/atomic_flag_clear.c
deleted file mode 100644
index da912af6431..00000000000
--- a/lib/libcompiler_rt/atomic_flag_clear.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- atomic_flag_clear.c -------------------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_flag_clear from C11's stdatomic.h.
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_flag_clear
-void atomic_flag_clear(volatile atomic_flag *object) {
- __c11_atomic_store(&(object)->_Value, 0, __ATOMIC_SEQ_CST);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/atomic_flag_clear_explicit.c b/lib/libcompiler_rt/atomic_flag_clear_explicit.c
deleted file mode 100644
index 1059b787f16..00000000000
--- a/lib/libcompiler_rt/atomic_flag_clear_explicit.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*===-- atomic_flag_clear_explicit.c ----------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_flag_clear_explicit from C11's stdatomic.h.
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_flag_clear_explicit
-void atomic_flag_clear_explicit(volatile atomic_flag *object,
- memory_order order) {
- __c11_atomic_store(&(object)->_Value, 0, order);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/atomic_flag_test_and_set.c b/lib/libcompiler_rt/atomic_flag_test_and_set.c
deleted file mode 100644
index e8811d39ef2..00000000000
--- a/lib/libcompiler_rt/atomic_flag_test_and_set.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- atomic_flag_test_and_set.c ------------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_flag_test_and_set from C11's stdatomic.h.
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_flag_test_and_set
-_Bool atomic_flag_test_and_set(volatile atomic_flag *object) {
- return __c11_atomic_exchange(&(object)->_Value, 1, __ATOMIC_SEQ_CST);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/atomic_flag_test_and_set_explicit.c b/lib/libcompiler_rt/atomic_flag_test_and_set_explicit.c
deleted file mode 100644
index 5c8c2df9054..00000000000
--- a/lib/libcompiler_rt/atomic_flag_test_and_set_explicit.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*===-- atomic_flag_test_and_set_explicit.c ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_flag_test_and_set_explicit from C11's stdatomic.h
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_flag_test_and_set_explicit
-_Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *object,
- memory_order order) {
- return __c11_atomic_exchange(&(object)->_Value, 1, order);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/atomic_signal_fence.c b/lib/libcompiler_rt/atomic_signal_fence.c
deleted file mode 100644
index 9ccc2ae60ad..00000000000
--- a/lib/libcompiler_rt/atomic_signal_fence.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- atomic_signal_fence.c -----------------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_signal_fence from C11's stdatomic.h.
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_signal_fence
-void atomic_signal_fence(memory_order order) {
- __c11_atomic_signal_fence(order);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/atomic_thread_fence.c b/lib/libcompiler_rt/atomic_thread_fence.c
deleted file mode 100644
index d22560151bc..00000000000
--- a/lib/libcompiler_rt/atomic_thread_fence.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- atomic_thread_fence.c -----------------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===------------------------------------------------------------------------===
- *
- * This file implements atomic_thread_fence from C11's stdatomic.h.
- *
- *===------------------------------------------------------------------------===
- */
-
-#ifndef __has_include
-#define __has_include(inc) 0
-#endif
-
-#if __has_include(<stdatomic.h>)
-
-#include <stdatomic.h>
-#undef atomic_thread_fence
-void atomic_thread_fence(memory_order order) {
- __c11_atomic_thread_fence(order);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/bswapdi2.c b/lib/libcompiler_rt/bswapdi2.c
deleted file mode 100644
index eb220007bb1..00000000000
--- a/lib/libcompiler_rt/bswapdi2.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ===-- bswapdi2.c - Implement __bswapdi2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __bswapdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI uint64_t __bswapdi2(uint64_t u) {
- return (
- (((u)&0xff00000000000000ULL) >> 56) |
- (((u)&0x00ff000000000000ULL) >> 40) |
- (((u)&0x0000ff0000000000ULL) >> 24) |
- (((u)&0x000000ff00000000ULL) >> 8) |
- (((u)&0x00000000ff000000ULL) << 8) |
- (((u)&0x0000000000ff0000ULL) << 24) |
- (((u)&0x000000000000ff00ULL) << 40) |
- (((u)&0x00000000000000ffULL) << 56));
-}
diff --git a/lib/libcompiler_rt/bswapsi2.c b/lib/libcompiler_rt/bswapsi2.c
deleted file mode 100644
index 5d941e69f7c..00000000000
--- a/lib/libcompiler_rt/bswapsi2.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- bswapsi2.c - Implement __bswapsi2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __bswapsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI uint32_t __bswapsi2(uint32_t u) {
- return (
- (((u)&0xff000000) >> 24) |
- (((u)&0x00ff0000) >> 8) |
- (((u)&0x0000ff00) << 8) |
- (((u)&0x000000ff) << 24));
-}
diff --git a/lib/libcompiler_rt/clear_cache.c b/lib/libcompiler_rt/clear_cache.c
deleted file mode 100644
index e6bd170df38..00000000000
--- a/lib/libcompiler_rt/clear_cache.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/* ===-- clear_cache.c - Implement __clear_cache ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-#include <assert.h>
-#include <stddef.h>
-
-#if __APPLE__
- #include <libkern/OSCacheControl.h>
-#endif
-
-#if defined(_WIN32)
-/* Forward declare Win32 APIs since the GCC mode driver does not handle the
- newer SDKs as well as needed. */
-uint32_t FlushInstructionCache(uintptr_t hProcess, void *lpBaseAddress,
- uintptr_t dwSize);
-uintptr_t GetCurrentProcess(void);
-#endif
-
-#if defined(__FreeBSD__) && defined(__arm__)
- #include <sys/types.h>
- #include <machine/sysarch.h>
-#endif
-
-#if defined(__NetBSD__) && defined(__arm__)
- #include <machine/sysarch.h>
-#endif
-
-#if defined(__OpenBSD__) && (defined(__arm__) || defined(__mips__))
- #include <sys/types.h>
- #include <machine/sysarch.h>
-#endif
-
-#if defined(__linux__) && defined(__mips__)
- #include <sys/cachectl.h>
- #include <sys/syscall.h>
- #include <unistd.h>
- #if defined(__ANDROID__) && defined(__LP64__)
- /*
- * clear_mips_cache - Invalidates instruction cache for Mips.
- */
- static void clear_mips_cache(const void* Addr, size_t Size) {
- __asm__ volatile (
- ".set push\n"
- ".set noreorder\n"
- ".set noat\n"
- "beq %[Size], $zero, 20f\n" /* If size == 0, branch around. */
- "nop\n"
- "daddu %[Size], %[Addr], %[Size]\n" /* Calculate end address + 1 */
- "rdhwr $v0, $1\n" /* Get step size for SYNCI.
- $1 is $HW_SYNCI_Step */
- "beq $v0, $zero, 20f\n" /* If no caches require
- synchronization, branch
- around. */
- "nop\n"
- "10:\n"
- "synci 0(%[Addr])\n" /* Synchronize all caches around
- address. */
- "daddu %[Addr], %[Addr], $v0\n" /* Add step size. */
- "sltu $at, %[Addr], %[Size]\n" /* Compare current with end
- address. */
- "bne $at, $zero, 10b\n" /* Branch if more to do. */
- "nop\n"
- "sync\n" /* Clear memory hazards. */
- "20:\n"
- "bal 30f\n"
- "nop\n"
- "30:\n"
- "daddiu $ra, $ra, 12\n" /* $ra has a value of $pc here.
- Add offset of 12 to point to the
- instruction after the last nop.
- */
- "jr.hb $ra\n" /* Return, clearing instruction
- hazards. */
- "nop\n"
- ".set pop\n"
- : [Addr] "+r"(Addr), [Size] "+r"(Size)
- :: "at", "ra", "v0", "memory"
- );
- }
- #endif
-#endif
-
-/*
- * The compiler generates calls to __clear_cache() when creating
- * trampoline functions on the stack for use with nested functions.
- * It is expected to invalidate the instruction cache for the
- * specified range.
- */
-
-void __clear_cache(void *start, void *end) {
-#if __i386__ || __x86_64__ || defined(_M_IX86) || defined(_M_X64)
-/*
- * Intel processors have a unified instruction and data cache
- * so there is nothing to do
- */
-#elif defined(_WIN32) && (defined(__arm__) || defined(__aarch64__))
- FlushInstructionCache(GetCurrentProcess(), start, end - start);
-#elif defined(__arm__) && !defined(__APPLE__)
- #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
- struct arm_sync_icache_args arg;
-
- arg.addr = (uintptr_t)start;
- arg.len = (uintptr_t)end - (uintptr_t)start;
-
- sysarch(ARM_SYNC_ICACHE, &arg);
- #elif defined(__linux__)
- /*
- * We used to include asm/unistd.h for the __ARM_NR_cacheflush define, but
- * it also brought many other unused defines, as well as a dependency on
- * kernel headers to be installed.
- *
- * This value is stable at least since Linux 3.13 and should remain so for
- * compatibility reasons, warranting it's re-definition here.
- */
- #define __ARM_NR_cacheflush 0x0f0002
- register int start_reg __asm("r0") = (int) (intptr_t) start;
- const register int end_reg __asm("r1") = (int) (intptr_t) end;
- const register int flags __asm("r2") = 0;
- const register int syscall_nr __asm("r7") = __ARM_NR_cacheflush;
- __asm __volatile("svc 0x0"
- : "=r"(start_reg)
- : "r"(syscall_nr), "r"(start_reg), "r"(end_reg),
- "r"(flags));
- assert(start_reg == 0 && "Cache flush syscall failed.");
- #else
- compilerrt_abort();
- #endif
-#elif defined(__linux__) && defined(__mips__)
- const uintptr_t start_int = (uintptr_t) start;
- const uintptr_t end_int = (uintptr_t) end;
- #if defined(__ANDROID__) && defined(__LP64__)
- // Call synci implementation for short address range.
- const uintptr_t address_range_limit = 256;
- if ((end_int - start_int) <= address_range_limit) {
- clear_mips_cache(start, (end_int - start_int));
- } else {
- syscall(__NR_cacheflush, start, (end_int - start_int), BCACHE);
- }
- #else
- syscall(__NR_cacheflush, start, (end_int - start_int), BCACHE);
- #endif
-#elif defined(__mips__) && defined(__OpenBSD__)
- cacheflush(start, (uintptr_t)end - (uintptr_t)start, BCACHE);
-#elif defined(__aarch64__) && !defined(__APPLE__)
- uint64_t xstart = (uint64_t)(uintptr_t) start;
- uint64_t xend = (uint64_t)(uintptr_t) end;
- uint64_t addr;
-
- // Get Cache Type Info
- uint64_t ctr_el0;
- __asm __volatile("mrs %0, ctr_el0" : "=r"(ctr_el0));
-
- /*
- * dc & ic instructions must use 64bit registers so we don't use
- * uintptr_t in case this runs in an IPL32 environment.
- */
- const size_t dcache_line_size = 4 << ((ctr_el0 >> 16) & 15);
- for (addr = xstart & ~(dcache_line_size - 1); addr < xend;
- addr += dcache_line_size)
- __asm __volatile("dc cvau, %0" :: "r"(addr));
- __asm __volatile("dsb ish");
-
- const size_t icache_line_size = 4 << ((ctr_el0 >> 0) & 15);
- for (addr = xstart & ~(icache_line_size - 1); addr < xend;
- addr += icache_line_size)
- __asm __volatile("ic ivau, %0" :: "r"(addr));
- __asm __volatile("isb sy");
-#elif defined (__powerpc64__)
- const size_t line_size = 32;
- const size_t len = (uintptr_t)end - (uintptr_t)start;
-
- const uintptr_t mask = ~(line_size - 1);
- const uintptr_t start_line = ((uintptr_t)start) & mask;
- const uintptr_t end_line = ((uintptr_t)start + len + line_size - 1) & mask;
-
- for (uintptr_t line = start_line; line < end_line; line += line_size)
- __asm__ volatile("dcbf 0, %0" : : "r"(line));
- __asm__ volatile("sync");
-
- for (uintptr_t line = start_line; line < end_line; line += line_size)
- __asm__ volatile("icbi 0, %0" : : "r"(line));
- __asm__ volatile("isync");
-#else
- #if __APPLE__
- /* On Darwin, sys_icache_invalidate() provides this functionality */
- sys_icache_invalidate(start, end-start);
- #else
- compilerrt_abort();
- #endif
-#endif
-}
diff --git a/lib/libcompiler_rt/clzdi2.c b/lib/libcompiler_rt/clzdi2.c
deleted file mode 100644
index 1819e6be436..00000000000
--- a/lib/libcompiler_rt/clzdi2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ===-- clzdi2.c - Implement __clzdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __clzdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the number of leading 0-bits */
-
-#if !defined(__clang__) && \
- ((defined(__sparc__) && defined(__arch64__)) || \
- defined(__mips64) || \
- (defined(__riscv) && __SIZEOF_POINTER__ >= 8))
-/* On 64-bit architectures with neither a native clz instruction nor a native
- * ctz instruction, gcc resolves __builtin_clz to __clzdi2 rather than
- * __clzsi2, leading to infinite recursion. */
-#define __builtin_clz(a) __clzsi2(a)
-extern si_int __clzsi2(si_int);
-#endif
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__clzdi2(di_int a)
-{
- dwords x;
- x.all = a;
- const si_int f = -(x.s.high == 0);
- return __builtin_clz((x.s.high & ~f) | (x.s.low & f)) +
- (f & ((si_int)(sizeof(si_int) * CHAR_BIT)));
-}
diff --git a/lib/libcompiler_rt/clzsi2.c b/lib/libcompiler_rt/clzsi2.c
deleted file mode 100644
index 25b8ed2c4c2..00000000000
--- a/lib/libcompiler_rt/clzsi2.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ===-- clzsi2.c - Implement __clzsi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __clzsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the number of leading 0-bits */
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__clzsi2(si_int a)
-{
- su_int x = (su_int)a;
- si_int t = ((x & 0xFFFF0000) == 0) << 4; /* if (x is small) t = 16 else 0 */
- x >>= 16 - t; /* x = [0 - 0xFFFF] */
- su_int r = t; /* r = [0, 16] */
- /* return r + clz(x) */
- t = ((x & 0xFF00) == 0) << 3;
- x >>= 8 - t; /* x = [0 - 0xFF] */
- r += t; /* r = [0, 8, 16, 24] */
- /* return r + clz(x) */
- t = ((x & 0xF0) == 0) << 2;
- x >>= 4 - t; /* x = [0 - 0xF] */
- r += t; /* r = [0, 4, 8, 12, 16, 20, 24, 28] */
- /* return r + clz(x) */
- t = ((x & 0xC) == 0) << 1;
- x >>= 2 - t; /* x = [0 - 3] */
- r += t; /* r = [0 - 30] and is even */
- /* return r + clz(x) */
-/* switch (x)
- * {
- * case 0:
- * return r + 2;
- * case 1:
- * return r + 1;
- * case 2:
- * case 3:
- * return r;
- * }
- */
- return r + ((2 - x) & -((x & 2) == 0));
-}
diff --git a/lib/libcompiler_rt/clzti2.c b/lib/libcompiler_rt/clzti2.c
deleted file mode 100644
index 15a7b3c9000..00000000000
--- a/lib/libcompiler_rt/clzti2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- clzti2.c - Implement __clzti2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __clzti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: the number of leading 0-bits */
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__clzti2(ti_int a)
-{
- twords x;
- x.all = a;
- const di_int f = -(x.s.high == 0);
- return __builtin_clzll((x.s.high & ~f) | (x.s.low & f)) +
- ((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/cmpdi2.c b/lib/libcompiler_rt/cmpdi2.c
deleted file mode 100644
index 52634d9c336..00000000000
--- a/lib/libcompiler_rt/cmpdi2.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ===-- cmpdi2.c - Implement __cmpdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __cmpdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: if (a < b) returns 0
-* if (a == b) returns 1
-* if (a > b) returns 2
-*/
-
-COMPILER_RT_ABI si_int
-__cmpdi2(di_int a, di_int b)
-{
- dwords x;
- x.all = a;
- dwords y;
- y.all = b;
- if (x.s.high < y.s.high)
- return 0;
- if (x.s.high > y.s.high)
- return 2;
- if (x.s.low < y.s.low)
- return 0;
- if (x.s.low > y.s.low)
- return 2;
- return 1;
-}
-
-#ifdef __ARM_EABI__
-/* Returns: if (a < b) returns -1
-* if (a == b) returns 0
-* if (a > b) returns 1
-*/
-COMPILER_RT_ABI si_int
-__aeabi_lcmp(di_int a, di_int b)
-{
- return __cmpdi2(a, b) - 1;
-}
-#endif
-
diff --git a/lib/libcompiler_rt/cmpti2.c b/lib/libcompiler_rt/cmpti2.c
deleted file mode 100644
index 2c8b56e29a0..00000000000
--- a/lib/libcompiler_rt/cmpti2.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ===-- cmpti2.c - Implement __cmpti2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __cmpti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: if (a < b) returns 0
- * if (a == b) returns 1
- * if (a > b) returns 2
- */
-
-COMPILER_RT_ABI si_int
-__cmpti2(ti_int a, ti_int b)
-{
- twords x;
- x.all = a;
- twords y;
- y.all = b;
- if (x.s.high < y.s.high)
- return 0;
- if (x.s.high > y.s.high)
- return 2;
- if (x.s.low < y.s.low)
- return 0;
- if (x.s.low > y.s.low)
- return 2;
- return 1;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/comparedf2.c b/lib/libcompiler_rt/comparedf2.c
deleted file mode 100644
index 44e5d2b288a..00000000000
--- a/lib/libcompiler_rt/comparedf2.c
+++ /dev/null
@@ -1,153 +0,0 @@
-//===-- lib/comparedf2.c - Double-precision comparisons -----------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// // This file implements the following soft-float comparison routines:
-//
-// __eqdf2 __gedf2 __unorddf2
-// __ledf2 __gtdf2
-// __ltdf2
-// __nedf2
-//
-// The semantics of the routines grouped in each column are identical, so there
-// is a single implementation for each, and wrappers to provide the other names.
-//
-// The main routines behave as follows:
-//
-// __ledf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// 1 if either a or b is NaN
-//
-// __gedf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// -1 if either a or b is NaN
-//
-// __unorddf2(a,b) returns 0 if both a and b are numbers
-// 1 if either a or b is NaN
-//
-// Note that __ledf2( ) and __gedf2( ) are identical except in their handling of
-// NaN values.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-enum LE_RESULT {
- LE_LESS = -1,
- LE_EQUAL = 0,
- LE_GREATER = 1,
- LE_UNORDERED = 1
-};
-
-COMPILER_RT_ABI enum LE_RESULT
-__ledf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- // If either a or b is NaN, they are unordered.
- if (aAbs > infRep || bAbs > infRep) return LE_UNORDERED;
-
- // If a and b are both zeros, they are equal.
- if ((aAbs | bAbs) == 0) return LE_EQUAL;
-
- // If at least one of a and b is positive, we get the same result comparing
- // a and b as signed integers as we would with a floating-point compare.
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
-
- // Otherwise, both are negative, so we need to flip the sense of the
- // comparison to get the correct result. (This assumes a twos- or ones-
- // complement integer representation; if integers are represented in a
- // sign-magnitude representation, then this flip is incorrect).
- else {
- if (aInt > bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
-}
-
-#if defined(__ELF__)
-// Alias for libgcc compatibility
-FNALIAS(__cmpdf2, __ledf2);
-#endif
-
-enum GE_RESULT {
- GE_LESS = -1,
- GE_EQUAL = 0,
- GE_GREATER = 1,
- GE_UNORDERED = -1 // Note: different from LE_UNORDERED
-};
-
-COMPILER_RT_ABI enum GE_RESULT
-__gedf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- if (aAbs > infRep || bAbs > infRep) return GE_UNORDERED;
- if ((aAbs | bAbs) == 0) return GE_EQUAL;
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- } else {
- if (aInt > bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- }
-}
-
-COMPILER_RT_ABI int
-__unorddf2(fp_t a, fp_t b) {
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
- return aAbs > infRep || bAbs > infRep;
-}
-
-// The following are alternative names for the preceding routines.
-
-COMPILER_RT_ABI enum LE_RESULT
-__eqdf2(fp_t a, fp_t b) {
- return __ledf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT
-__ltdf2(fp_t a, fp_t b) {
- return __ledf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT
-__nedf2(fp_t a, fp_t b) {
- return __ledf2(a, b);
-}
-
-COMPILER_RT_ABI enum GE_RESULT
-__gtdf2(fp_t a, fp_t b) {
- return __gedf2(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI int __aeabi_dcmpun(fp_t a, fp_t b) {
- return __unorddf2(a, b);
-}
-#else
-AEABI_RTABI int __aeabi_dcmpun(fp_t a, fp_t b) COMPILER_RT_ALIAS(__unorddf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/comparesf2.c b/lib/libcompiler_rt/comparesf2.c
deleted file mode 100644
index 43cd6a6a700..00000000000
--- a/lib/libcompiler_rt/comparesf2.c
+++ /dev/null
@@ -1,153 +0,0 @@
-//===-- lib/comparesf2.c - Single-precision comparisons -----------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements the following soft-fp_t comparison routines:
-//
-// __eqsf2 __gesf2 __unordsf2
-// __lesf2 __gtsf2
-// __ltsf2
-// __nesf2
-//
-// The semantics of the routines grouped in each column are identical, so there
-// is a single implementation for each, and wrappers to provide the other names.
-//
-// The main routines behave as follows:
-//
-// __lesf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// 1 if either a or b is NaN
-//
-// __gesf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// -1 if either a or b is NaN
-//
-// __unordsf2(a,b) returns 0 if both a and b are numbers
-// 1 if either a or b is NaN
-//
-// Note that __lesf2( ) and __gesf2( ) are identical except in their handling of
-// NaN values.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-enum LE_RESULT {
- LE_LESS = -1,
- LE_EQUAL = 0,
- LE_GREATER = 1,
- LE_UNORDERED = 1
-};
-
-COMPILER_RT_ABI enum LE_RESULT
-__lesf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- // If either a or b is NaN, they are unordered.
- if (aAbs > infRep || bAbs > infRep) return LE_UNORDERED;
-
- // If a and b are both zeros, they are equal.
- if ((aAbs | bAbs) == 0) return LE_EQUAL;
-
- // If at least one of a and b is positive, we get the same result comparing
- // a and b as signed integers as we would with a fp_ting-point compare.
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
-
- // Otherwise, both are negative, so we need to flip the sense of the
- // comparison to get the correct result. (This assumes a twos- or ones-
- // complement integer representation; if integers are represented in a
- // sign-magnitude representation, then this flip is incorrect).
- else {
- if (aInt > bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
-}
-
-#if defined(__ELF__)
-// Alias for libgcc compatibility
-FNALIAS(__cmpsf2, __lesf2);
-#endif
-
-enum GE_RESULT {
- GE_LESS = -1,
- GE_EQUAL = 0,
- GE_GREATER = 1,
- GE_UNORDERED = -1 // Note: different from LE_UNORDERED
-};
-
-COMPILER_RT_ABI enum GE_RESULT
-__gesf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- if (aAbs > infRep || bAbs > infRep) return GE_UNORDERED;
- if ((aAbs | bAbs) == 0) return GE_EQUAL;
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- } else {
- if (aInt > bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- }
-}
-
-COMPILER_RT_ABI int
-__unordsf2(fp_t a, fp_t b) {
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
- return aAbs > infRep || bAbs > infRep;
-}
-
-// The following are alternative names for the preceding routines.
-
-COMPILER_RT_ABI enum LE_RESULT
-__eqsf2(fp_t a, fp_t b) {
- return __lesf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT
-__ltsf2(fp_t a, fp_t b) {
- return __lesf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT
-__nesf2(fp_t a, fp_t b) {
- return __lesf2(a, b);
-}
-
-COMPILER_RT_ABI enum GE_RESULT
-__gtsf2(fp_t a, fp_t b) {
- return __gesf2(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI int __aeabi_fcmpun(fp_t a, fp_t b) {
- return __unordsf2(a, b);
-}
-#else
-AEABI_RTABI int __aeabi_fcmpun(fp_t a, fp_t b) COMPILER_RT_ALIAS(__unordsf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/comparetf2.c b/lib/libcompiler_rt/comparetf2.c
deleted file mode 100644
index c0ad8ed0aec..00000000000
--- a/lib/libcompiler_rt/comparetf2.c
+++ /dev/null
@@ -1,138 +0,0 @@
-//===-- lib/comparetf2.c - Quad-precision comparisons -------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// // This file implements the following soft-float comparison routines:
-//
-// __eqtf2 __getf2 __unordtf2
-// __letf2 __gttf2
-// __lttf2
-// __netf2
-//
-// The semantics of the routines grouped in each column are identical, so there
-// is a single implementation for each, and wrappers to provide the other names.
-//
-// The main routines behave as follows:
-//
-// __letf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// 1 if either a or b is NaN
-//
-// __getf2(a,b) returns -1 if a < b
-// 0 if a == b
-// 1 if a > b
-// -1 if either a or b is NaN
-//
-// __unordtf2(a,b) returns 0 if both a and b are numbers
-// 1 if either a or b is NaN
-//
-// Note that __letf2( ) and __getf2( ) are identical except in their handling of
-// NaN values.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-enum LE_RESULT {
- LE_LESS = -1,
- LE_EQUAL = 0,
- LE_GREATER = 1,
- LE_UNORDERED = 1
-};
-
-COMPILER_RT_ABI enum LE_RESULT __letf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- // If either a or b is NaN, they are unordered.
- if (aAbs > infRep || bAbs > infRep) return LE_UNORDERED;
-
- // If a and b are both zeros, they are equal.
- if ((aAbs | bAbs) == 0) return LE_EQUAL;
-
- // If at least one of a and b is positive, we get the same result comparing
- // a and b as signed integers as we would with a floating-point compare.
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
- else {
- // Otherwise, both are negative, so we need to flip the sense of the
- // comparison to get the correct result. (This assumes a twos- or ones-
- // complement integer representation; if integers are represented in a
- // sign-magnitude representation, then this flip is incorrect).
- if (aInt > bInt) return LE_LESS;
- else if (aInt == bInt) return LE_EQUAL;
- else return LE_GREATER;
- }
-}
-
-#if defined(__ELF__)
-// Alias for libgcc compatibility
-FNALIAS(__cmptf2, __letf2);
-#endif
-
-enum GE_RESULT {
- GE_LESS = -1,
- GE_EQUAL = 0,
- GE_GREATER = 1,
- GE_UNORDERED = -1 // Note: different from LE_UNORDERED
-};
-
-COMPILER_RT_ABI enum GE_RESULT __getf2(fp_t a, fp_t b) {
-
- const srep_t aInt = toRep(a);
- const srep_t bInt = toRep(b);
- const rep_t aAbs = aInt & absMask;
- const rep_t bAbs = bInt & absMask;
-
- if (aAbs > infRep || bAbs > infRep) return GE_UNORDERED;
- if ((aAbs | bAbs) == 0) return GE_EQUAL;
- if ((aInt & bInt) >= 0) {
- if (aInt < bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- } else {
- if (aInt > bInt) return GE_LESS;
- else if (aInt == bInt) return GE_EQUAL;
- else return GE_GREATER;
- }
-}
-
-COMPILER_RT_ABI int __unordtf2(fp_t a, fp_t b) {
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
- return aAbs > infRep || bAbs > infRep;
-}
-
-// The following are alternative names for the preceding routines.
-
-COMPILER_RT_ABI enum LE_RESULT __eqtf2(fp_t a, fp_t b) {
- return __letf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT __lttf2(fp_t a, fp_t b) {
- return __letf2(a, b);
-}
-
-COMPILER_RT_ABI enum LE_RESULT __netf2(fp_t a, fp_t b) {
- return __letf2(a, b);
-}
-
-COMPILER_RT_ABI enum GE_RESULT __gttf2(fp_t a, fp_t b) {
- return __getf2(a, b);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/cpu_model.c b/lib/libcompiler_rt/cpu_model.c
deleted file mode 100644
index fb2b899fc70..00000000000
--- a/lib/libcompiler_rt/cpu_model.c
+++ /dev/null
@@ -1,651 +0,0 @@
-//===-- cpu_model.c - Support for __cpu_model builtin ------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is based on LLVM's lib/Support/Host.cpp.
-// It implements the operating system Host concept and builtin
-// __cpu_model for the compiler_rt library, for x86 only.
-//
-//===----------------------------------------------------------------------===//
-
-#if (defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64__) || defined(_M_X64)) && \
- (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER))
-
-#include <assert.h>
-
-#define bool int
-#define true 1
-#define false 0
-
-#ifdef _MSC_VER
-#include <intrin.h>
-#endif
-
-#ifndef __has_attribute
-#define __has_attribute(attr) 0
-#endif
-
-enum VendorSignatures {
- SIG_INTEL = 0x756e6547 /* Genu */,
- SIG_AMD = 0x68747541 /* Auth */
-};
-
-enum ProcessorVendors {
- VENDOR_INTEL = 1,
- VENDOR_AMD,
- VENDOR_OTHER,
- VENDOR_MAX
-};
-
-enum ProcessorTypes {
- INTEL_BONNELL = 1,
- INTEL_CORE2,
- INTEL_COREI7,
- AMDFAM10H,
- AMDFAM15H,
- INTEL_SILVERMONT,
- INTEL_KNL,
- AMD_BTVER1,
- AMD_BTVER2,
- AMDFAM17H,
- INTEL_KNM,
- INTEL_GOLDMONT,
- INTEL_GOLDMONT_PLUS,
- INTEL_TREMONT,
- CPU_TYPE_MAX
-};
-
-enum ProcessorSubtypes {
- INTEL_COREI7_NEHALEM = 1,
- INTEL_COREI7_WESTMERE,
- INTEL_COREI7_SANDYBRIDGE,
- AMDFAM10H_BARCELONA,
- AMDFAM10H_SHANGHAI,
- AMDFAM10H_ISTANBUL,
- AMDFAM15H_BDVER1,
- AMDFAM15H_BDVER2,
- AMDFAM15H_BDVER3,
- AMDFAM15H_BDVER4,
- AMDFAM17H_ZNVER1,
- INTEL_COREI7_IVYBRIDGE,
- INTEL_COREI7_HASWELL,
- INTEL_COREI7_BROADWELL,
- INTEL_COREI7_SKYLAKE,
- INTEL_COREI7_SKYLAKE_AVX512,
- INTEL_COREI7_CANNONLAKE,
- INTEL_COREI7_ICELAKE_CLIENT,
- INTEL_COREI7_ICELAKE_SERVER,
- CPU_SUBTYPE_MAX
-};
-
-enum ProcessorFeatures {
- FEATURE_CMOV = 0,
- FEATURE_MMX,
- FEATURE_POPCNT,
- FEATURE_SSE,
- FEATURE_SSE2,
- FEATURE_SSE3,
- FEATURE_SSSE3,
- FEATURE_SSE4_1,
- FEATURE_SSE4_2,
- FEATURE_AVX,
- FEATURE_AVX2,
- FEATURE_SSE4_A,
- FEATURE_FMA4,
- FEATURE_XOP,
- FEATURE_FMA,
- FEATURE_AVX512F,
- FEATURE_BMI,
- FEATURE_BMI2,
- FEATURE_AES,
- FEATURE_PCLMUL,
- FEATURE_AVX512VL,
- FEATURE_AVX512BW,
- FEATURE_AVX512DQ,
- FEATURE_AVX512CD,
- FEATURE_AVX512ER,
- FEATURE_AVX512PF,
- FEATURE_AVX512VBMI,
- FEATURE_AVX512IFMA,
- FEATURE_AVX5124VNNIW,
- FEATURE_AVX5124FMAPS,
- FEATURE_AVX512VPOPCNTDQ,
- FEATURE_AVX512VBMI2,
- FEATURE_GFNI,
- FEATURE_VPCLMULQDQ,
- FEATURE_AVX512VNNI,
- FEATURE_AVX512BITALG
-};
-
-// The check below for i386 was copied from clang's cpuid.h (__get_cpuid_max).
-// Check motivated by bug reports for OpenSSL crashing on CPUs without CPUID
-// support. Consequently, for i386, the presence of CPUID is checked first
-// via the corresponding eflags bit.
-static bool isCpuIdSupported() {
-#if defined(__GNUC__) || defined(__clang__)
-#if defined(__i386__)
- int __cpuid_supported;
- __asm__(" pushfl\n"
- " popl %%eax\n"
- " movl %%eax,%%ecx\n"
- " xorl $0x00200000,%%eax\n"
- " pushl %%eax\n"
- " popfl\n"
- " pushfl\n"
- " popl %%eax\n"
- " movl $0,%0\n"
- " cmpl %%eax,%%ecx\n"
- " je 1f\n"
- " movl $1,%0\n"
- "1:"
- : "=r"(__cpuid_supported)
- :
- : "eax", "ecx");
- if (!__cpuid_supported)
- return false;
-#endif
- return true;
-#endif
- return true;
-}
-
-// This code is copied from lib/Support/Host.cpp.
-// Changes to either file should be mirrored in the other.
-
-/// getX86CpuIDAndInfo - Execute the specified cpuid and return the 4 values in
-/// the specified arguments. If we can't run cpuid on the host, return true.
-static bool getX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX,
- unsigned *rECX, unsigned *rEDX) {
-#if defined(__GNUC__) || defined(__clang__)
-#if defined(__x86_64__)
- // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually.
- // FIXME: should we save this for Clang?
- __asm__("movq\t%%rbx, %%rsi\n\t"
- "cpuid\n\t"
- "xchgq\t%%rbx, %%rsi\n\t"
- : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
- : "a"(value));
- return false;
-#elif defined(__i386__)
- __asm__("movl\t%%ebx, %%esi\n\t"
- "cpuid\n\t"
- "xchgl\t%%ebx, %%esi\n\t"
- : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
- : "a"(value));
- return false;
-#else
- return true;
-#endif
-#elif defined(_MSC_VER)
- // The MSVC intrinsic is portable across x86 and x64.
- int registers[4];
- __cpuid(registers, value);
- *rEAX = registers[0];
- *rEBX = registers[1];
- *rECX = registers[2];
- *rEDX = registers[3];
- return false;
-#else
- return true;
-#endif
-}
-
-/// getX86CpuIDAndInfoEx - Execute the specified cpuid with subleaf and return
-/// the 4 values in the specified arguments. If we can't run cpuid on the host,
-/// return true.
-static bool getX86CpuIDAndInfoEx(unsigned value, unsigned subleaf,
- unsigned *rEAX, unsigned *rEBX, unsigned *rECX,
- unsigned *rEDX) {
-#if defined(__GNUC__) || defined(__clang__)
-#if defined(__x86_64__)
- // gcc doesn't know cpuid would clobber ebx/rbx. Preserve it manually.
- // FIXME: should we save this for Clang?
- __asm__("movq\t%%rbx, %%rsi\n\t"
- "cpuid\n\t"
- "xchgq\t%%rbx, %%rsi\n\t"
- : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
- : "a"(value), "c"(subleaf));
- return false;
-#elif defined(__i386__)
- __asm__("movl\t%%ebx, %%esi\n\t"
- "cpuid\n\t"
- "xchgl\t%%ebx, %%esi\n\t"
- : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX)
- : "a"(value), "c"(subleaf));
- return false;
-#else
- return true;
-#endif
-#elif defined(_MSC_VER)
- int registers[4];
- __cpuidex(registers, value, subleaf);
- *rEAX = registers[0];
- *rEBX = registers[1];
- *rECX = registers[2];
- *rEDX = registers[3];
- return false;
-#else
- return true;
-#endif
-}
-
-// Read control register 0 (XCR0). Used to detect features such as AVX.
-static bool getX86XCR0(unsigned *rEAX, unsigned *rEDX) {
-#if defined(__GNUC__) || defined(__clang__)
- // Check xgetbv; this uses a .byte sequence instead of the instruction
- // directly because older assemblers do not include support for xgetbv and
- // there is no easy way to conditionally compile based on the assembler used.
- __asm__(".byte 0x0f, 0x01, 0xd0" : "=a"(*rEAX), "=d"(*rEDX) : "c"(0));
- return false;
-#elif defined(_MSC_FULL_VER) && defined(_XCR_XFEATURE_ENABLED_MASK)
- unsigned long long Result = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
- *rEAX = Result;
- *rEDX = Result >> 32;
- return false;
-#else
- return true;
-#endif
-}
-
-static void detectX86FamilyModel(unsigned EAX, unsigned *Family,
- unsigned *Model) {
- *Family = (EAX >> 8) & 0xf; // Bits 8 - 11
- *Model = (EAX >> 4) & 0xf; // Bits 4 - 7
- if (*Family == 6 || *Family == 0xf) {
- if (*Family == 0xf)
- // Examine extended family ID if family ID is F.
- *Family += (EAX >> 20) & 0xff; // Bits 20 - 27
- // Examine extended model ID if family ID is 6 or F.
- *Model += ((EAX >> 16) & 0xf) << 4; // Bits 16 - 19
- }
-}
-
-static void
-getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model,
- unsigned Brand_id, unsigned Features,
- unsigned *Type, unsigned *Subtype) {
- if (Brand_id != 0)
- return;
- switch (Family) {
- case 6:
- switch (Model) {
- case 0x0f: // Intel Core 2 Duo processor, Intel Core 2 Duo mobile
- // processor, Intel Core 2 Quad processor, Intel Core 2 Quad
- // mobile processor, Intel Core 2 Extreme processor, Intel
- // Pentium Dual-Core processor, Intel Xeon processor, model
- // 0Fh. All processors are manufactured using the 65 nm process.
- case 0x16: // Intel Celeron processor model 16h. All processors are
- // manufactured using the 65 nm process
- case 0x17: // Intel Core 2 Extreme processor, Intel Xeon processor, model
- // 17h. All processors are manufactured using the 45 nm process.
- //
- // 45nm: Penryn , Wolfdale, Yorkfield (XE)
- case 0x1d: // Intel Xeon processor MP. All processors are manufactured using
- // the 45 nm process.
- *Type = INTEL_CORE2; // "penryn"
- break;
- case 0x1a: // Intel Core i7 processor and Intel Xeon processor. All
- // processors are manufactured using the 45 nm process.
- case 0x1e: // Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz.
- // As found in a Summer 2010 model iMac.
- case 0x1f:
- case 0x2e: // Nehalem EX
- *Type = INTEL_COREI7; // "nehalem"
- *Subtype = INTEL_COREI7_NEHALEM;
- break;
- case 0x25: // Intel Core i7, laptop version.
- case 0x2c: // Intel Core i7 processor and Intel Xeon processor. All
- // processors are manufactured using the 32 nm process.
- case 0x2f: // Westmere EX
- *Type = INTEL_COREI7; // "westmere"
- *Subtype = INTEL_COREI7_WESTMERE;
- break;
- case 0x2a: // Intel Core i7 processor. All processors are manufactured
- // using the 32 nm process.
- case 0x2d:
- *Type = INTEL_COREI7; //"sandybridge"
- *Subtype = INTEL_COREI7_SANDYBRIDGE;
- break;
- case 0x3a:
- case 0x3e: // Ivy Bridge EP
- *Type = INTEL_COREI7; // "ivybridge"
- *Subtype = INTEL_COREI7_IVYBRIDGE;
- break;
-
- // Haswell:
- case 0x3c:
- case 0x3f:
- case 0x45:
- case 0x46:
- *Type = INTEL_COREI7; // "haswell"
- *Subtype = INTEL_COREI7_HASWELL;
- break;
-
- // Broadwell:
- case 0x3d:
- case 0x47:
- case 0x4f:
- case 0x56:
- *Type = INTEL_COREI7; // "broadwell"
- *Subtype = INTEL_COREI7_BROADWELL;
- break;
-
- // Skylake:
- case 0x4e: // Skylake mobile
- case 0x5e: // Skylake desktop
- case 0x8e: // Kaby Lake mobile
- case 0x9e: // Kaby Lake desktop
- *Type = INTEL_COREI7; // "skylake"
- *Subtype = INTEL_COREI7_SKYLAKE;
- break;
-
- // Skylake Xeon:
- case 0x55:
- *Type = INTEL_COREI7;
- *Subtype = INTEL_COREI7_SKYLAKE_AVX512; // "skylake-avx512"
- break;
-
- // Cannonlake:
- case 0x66:
- *Type = INTEL_COREI7;
- *Subtype = INTEL_COREI7_CANNONLAKE; // "cannonlake"
- break;
-
- case 0x1c: // Most 45 nm Intel Atom processors
- case 0x26: // 45 nm Atom Lincroft
- case 0x27: // 32 nm Atom Medfield
- case 0x35: // 32 nm Atom Midview
- case 0x36: // 32 nm Atom Midview
- *Type = INTEL_BONNELL;
- break; // "bonnell"
-
- // Atom Silvermont codes from the Intel software optimization guide.
- case 0x37:
- case 0x4a:
- case 0x4d:
- case 0x5a:
- case 0x5d:
- case 0x4c: // really airmont
- *Type = INTEL_SILVERMONT;
- break; // "silvermont"
- // Goldmont:
- case 0x5c: // Apollo Lake
- case 0x5f: // Denverton
- *Type = INTEL_GOLDMONT;
- break; // "goldmont"
- case 0x7a:
- *Type = INTEL_GOLDMONT_PLUS;
- break;
-
- case 0x57:
- *Type = INTEL_KNL; // knl
- break;
-
- case 0x85:
- *Type = INTEL_KNM; // knm
- break;
-
- default: // Unknown family 6 CPU.
- break;
- break;
- }
- default:
- break; // Unknown.
- }
-}
-
-static void getAMDProcessorTypeAndSubtype(unsigned Family, unsigned Model,
- unsigned Features, unsigned *Type,
- unsigned *Subtype) {
- // FIXME: this poorly matches the generated SubtargetFeatureKV table. There
- // appears to be no way to generate the wide variety of AMD-specific targets
- // from the information returned from CPUID.
- switch (Family) {
- case 16:
- *Type = AMDFAM10H; // "amdfam10"
- switch (Model) {
- case 2:
- *Subtype = AMDFAM10H_BARCELONA;
- break;
- case 4:
- *Subtype = AMDFAM10H_SHANGHAI;
- break;
- case 8:
- *Subtype = AMDFAM10H_ISTANBUL;
- break;
- }
- break;
- case 20:
- *Type = AMD_BTVER1;
- break; // "btver1";
- case 21:
- *Type = AMDFAM15H;
- if (Model >= 0x60 && Model <= 0x7f) {
- *Subtype = AMDFAM15H_BDVER4;
- break; // "bdver4"; 60h-7Fh: Excavator
- }
- if (Model >= 0x30 && Model <= 0x3f) {
- *Subtype = AMDFAM15H_BDVER3;
- break; // "bdver3"; 30h-3Fh: Steamroller
- }
- if ((Model >= 0x10 && Model <= 0x1f) || Model == 0x02) {
- *Subtype = AMDFAM15H_BDVER2;
- break; // "bdver2"; 02h, 10h-1Fh: Piledriver
- }
- if (Model <= 0x0f) {
- *Subtype = AMDFAM15H_BDVER1;
- break; // "bdver1"; 00h-0Fh: Bulldozer
- }
- break;
- case 22:
- *Type = AMD_BTVER2;
- break; // "btver2"
- case 23:
- *Type = AMDFAM17H;
- *Subtype = AMDFAM17H_ZNVER1;
- break;
- default:
- break; // "generic"
- }
-}
-
-static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
- unsigned *FeaturesOut,
- unsigned *Features2Out) {
- unsigned Features = 0;
- unsigned Features2 = 0;
- unsigned EAX, EBX;
-
-#define setFeature(F) \
- do { \
- if (F < 32) \
- Features |= 1U << (F & 0x1f); \
- else if (F < 64) \
- Features2 |= 1U << ((F - 32) & 0x1f); \
- } while (0)
-
- if ((EDX >> 15) & 1)
- setFeature(FEATURE_CMOV);
- if ((EDX >> 23) & 1)
- setFeature(FEATURE_MMX);
- if ((EDX >> 25) & 1)
- setFeature(FEATURE_SSE);
- if ((EDX >> 26) & 1)
- setFeature(FEATURE_SSE2);
-
- if ((ECX >> 0) & 1)
- setFeature(FEATURE_SSE3);
- if ((ECX >> 1) & 1)
- setFeature(FEATURE_PCLMUL);
- if ((ECX >> 9) & 1)
- setFeature(FEATURE_SSSE3);
- if ((ECX >> 12) & 1)
- setFeature(FEATURE_FMA);
- if ((ECX >> 19) & 1)
- setFeature(FEATURE_SSE4_1);
- if ((ECX >> 20) & 1)
- setFeature(FEATURE_SSE4_2);
- if ((ECX >> 23) & 1)
- setFeature(FEATURE_POPCNT);
- if ((ECX >> 25) & 1)
- setFeature(FEATURE_AES);
-
- // If CPUID indicates support for XSAVE, XRESTORE and AVX, and XGETBV
- // indicates that the AVX registers will be saved and restored on context
- // switch, then we have full AVX support.
- const unsigned AVXBits = (1 << 27) | (1 << 28);
- bool HasAVX = ((ECX & AVXBits) == AVXBits) && !getX86XCR0(&EAX, &EDX) &&
- ((EAX & 0x6) == 0x6);
- bool HasAVX512Save = HasAVX && ((EAX & 0xe0) == 0xe0);
-
- if (HasAVX)
- setFeature(FEATURE_AVX);
-
- bool HasLeaf7 =
- MaxLeaf >= 0x7 && !getX86CpuIDAndInfoEx(0x7, 0x0, &EAX, &EBX, &ECX, &EDX);
-
- if (HasLeaf7 && ((EBX >> 3) & 1))
- setFeature(FEATURE_BMI);
- if (HasLeaf7 && ((EBX >> 5) & 1) && HasAVX)
- setFeature(FEATURE_AVX2);
- if (HasLeaf7 && ((EBX >> 9) & 1))
- setFeature(FEATURE_BMI2);
- if (HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512F);
- if (HasLeaf7 && ((EBX >> 17) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512DQ);
- if (HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512IFMA);
- if (HasLeaf7 && ((EBX >> 26) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512PF);
- if (HasLeaf7 && ((EBX >> 27) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512ER);
- if (HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512CD);
- if (HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512BW);
- if (HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512VL);
-
- if (HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512VBMI);
- if (HasLeaf7 && ((ECX >> 6) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512VBMI2);
- if (HasLeaf7 && ((ECX >> 8) & 1))
- setFeature(FEATURE_GFNI);
- if (HasLeaf7 && ((ECX >> 10) & 1) && HasAVX)
- setFeature(FEATURE_VPCLMULQDQ);
- if (HasLeaf7 && ((ECX >> 11) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512VNNI);
- if (HasLeaf7 && ((ECX >> 12) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512BITALG);
- if (HasLeaf7 && ((ECX >> 14) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX512VPOPCNTDQ);
-
- if (HasLeaf7 && ((EDX >> 2) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX5124VNNIW);
- if (HasLeaf7 && ((EDX >> 3) & 1) && HasAVX512Save)
- setFeature(FEATURE_AVX5124FMAPS);
-
- unsigned MaxExtLevel;
- getX86CpuIDAndInfo(0x80000000, &MaxExtLevel, &EBX, &ECX, &EDX);
-
- bool HasExtLeaf1 = MaxExtLevel >= 0x80000001 &&
- !getX86CpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
- if (HasExtLeaf1 && ((ECX >> 6) & 1))
- setFeature(FEATURE_SSE4_A);
- if (HasExtLeaf1 && ((ECX >> 11) & 1))
- setFeature(FEATURE_XOP);
- if (HasExtLeaf1 && ((ECX >> 16) & 1))
- setFeature(FEATURE_FMA4);
-
- *FeaturesOut = Features;
- *Features2Out = Features2;
-#undef setFeature
-}
-
-#if defined(HAVE_INIT_PRIORITY)
-#define CONSTRUCTOR_ATTRIBUTE __attribute__((__constructor__ 101))
-#elif __has_attribute(__constructor__)
-#define CONSTRUCTOR_ATTRIBUTE __attribute__((__constructor__))
-#else
-// FIXME: For MSVC, we should make a function pointer global in .CRT$X?? so that
-// this runs during initialization.
-#define CONSTRUCTOR_ATTRIBUTE
-#endif
-
-int __cpu_indicator_init(void) CONSTRUCTOR_ATTRIBUTE;
-
-struct __processor_model {
- unsigned int __cpu_vendor;
- unsigned int __cpu_type;
- unsigned int __cpu_subtype;
- unsigned int __cpu_features[1];
-} __cpu_model = {0, 0, 0, {0}};
-unsigned int __cpu_features2;
-
-/* A constructor function that is sets __cpu_model and __cpu_features2 with
- the right values. This needs to run only once. This constructor is
- given the highest priority and it should run before constructors without
- the priority set. However, it still runs after ifunc initializers and
- needs to be called explicitly there. */
-
-int CONSTRUCTOR_ATTRIBUTE
-__cpu_indicator_init(void) {
- unsigned EAX, EBX, ECX, EDX;
- unsigned MaxLeaf = 5;
- unsigned Vendor;
- unsigned Model, Family, Brand_id;
- unsigned Features = 0;
- unsigned Features2 = 0;
-
- /* This function needs to run just once. */
- if (__cpu_model.__cpu_vendor)
- return 0;
-
- if (!isCpuIdSupported())
- return -1;
-
- /* Assume cpuid insn present. Run in level 0 to get vendor id. */
- if (getX86CpuIDAndInfo(0, &MaxLeaf, &Vendor, &ECX, &EDX) || MaxLeaf < 1) {
- __cpu_model.__cpu_vendor = VENDOR_OTHER;
- return -1;
- }
- getX86CpuIDAndInfo(1, &EAX, &EBX, &ECX, &EDX);
- detectX86FamilyModel(EAX, &Family, &Model);
- Brand_id = EBX & 0xff;
-
- /* Find available features. */
- getAvailableFeatures(ECX, EDX, MaxLeaf, &Features, &Features2);
- __cpu_model.__cpu_features[0] = Features;
- __cpu_features2 = Features2;
-
- if (Vendor == SIG_INTEL) {
- /* Get CPU type. */
- getIntelProcessorTypeAndSubtype(Family, Model, Brand_id, Features,
- &(__cpu_model.__cpu_type),
- &(__cpu_model.__cpu_subtype));
- __cpu_model.__cpu_vendor = VENDOR_INTEL;
- } else if (Vendor == SIG_AMD) {
- /* Get CPU type. */
- getAMDProcessorTypeAndSubtype(Family, Model, Features,
- &(__cpu_model.__cpu_type),
- &(__cpu_model.__cpu_subtype));
- __cpu_model.__cpu_vendor = VENDOR_AMD;
- } else
- __cpu_model.__cpu_vendor = VENDOR_OTHER;
-
- assert(__cpu_model.__cpu_vendor < VENDOR_MAX);
- assert(__cpu_model.__cpu_type < CPU_TYPE_MAX);
- assert(__cpu_model.__cpu_subtype < CPU_SUBTYPE_MAX);
-
- return 0;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/ctzdi2.c b/lib/libcompiler_rt/ctzdi2.c
deleted file mode 100644
index ef6d7fea136..00000000000
--- a/lib/libcompiler_rt/ctzdi2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ===-- ctzdi2.c - Implement __ctzdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ctzdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the number of trailing 0-bits */
-
-#if !defined(__clang__) && \
- ((defined(__sparc__) && defined(__arch64__)) || \
- defined(__mips64) || \
- (defined(__riscv) && __SIZEOF_POINTER__ >= 8))
-/* On 64-bit architectures with neither a native clz instruction nor a native
- * ctz instruction, gcc resolves __builtin_ctz to __ctzdi2 rather than
- * __ctzsi2, leading to infinite recursion. */
-#define __builtin_ctz(a) __ctzsi2(a)
-extern si_int __ctzsi2(si_int);
-#endif
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__ctzdi2(di_int a)
-{
- dwords x;
- x.all = a;
- const si_int f = -(x.s.low == 0);
- return __builtin_ctz((x.s.high & f) | (x.s.low & ~f)) +
- (f & ((si_int)(sizeof(si_int) * CHAR_BIT)));
-}
diff --git a/lib/libcompiler_rt/ctzsi2.c b/lib/libcompiler_rt/ctzsi2.c
deleted file mode 100644
index c69486ea445..00000000000
--- a/lib/libcompiler_rt/ctzsi2.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* ===-- ctzsi2.c - Implement __ctzsi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ctzsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the number of trailing 0-bits */
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__ctzsi2(si_int a)
-{
- su_int x = (su_int)a;
- si_int t = ((x & 0x0000FFFF) == 0) << 4; /* if (x has no small bits) t = 16 else 0 */
- x >>= t; /* x = [0 - 0xFFFF] + higher garbage bits */
- su_int r = t; /* r = [0, 16] */
- /* return r + ctz(x) */
- t = ((x & 0x00FF) == 0) << 3;
- x >>= t; /* x = [0 - 0xFF] + higher garbage bits */
- r += t; /* r = [0, 8, 16, 24] */
- /* return r + ctz(x) */
- t = ((x & 0x0F) == 0) << 2;
- x >>= t; /* x = [0 - 0xF] + higher garbage bits */
- r += t; /* r = [0, 4, 8, 12, 16, 20, 24, 28] */
- /* return r + ctz(x) */
- t = ((x & 0x3) == 0) << 1;
- x >>= t;
- x &= 3; /* x = [0 - 3] */
- r += t; /* r = [0 - 30] and is even */
- /* return r + ctz(x) */
-
-/* The branch-less return statement below is equivalent
- * to the following switch statement:
- * switch (x)
- * {
- * case 0:
- * return r + 2;
- * case 2:
- * return r + 1;
- * case 1:
- * case 3:
- * return r;
- * }
- */
- return r + ((2 - (x >> 1)) & -((x & 1) == 0));
-}
diff --git a/lib/libcompiler_rt/ctzti2.c b/lib/libcompiler_rt/ctzti2.c
deleted file mode 100644
index 45de682700c..00000000000
--- a/lib/libcompiler_rt/ctzti2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- ctzti2.c - Implement __ctzti2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ctzti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: the number of trailing 0-bits */
-
-/* Precondition: a != 0 */
-
-COMPILER_RT_ABI si_int
-__ctzti2(ti_int a)
-{
- twords x;
- x.all = a;
- const di_int f = -(x.s.low == 0);
- return __builtin_ctzll((x.s.high & f) | (x.s.low & ~f)) +
- ((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/divdc3.c b/lib/libcompiler_rt/divdc3.c
deleted file mode 100644
index 392d6ecacde..00000000000
--- a/lib/libcompiler_rt/divdc3.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ===-- divdc3.c - Implement __divdc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divdc3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the quotient of (a + ib) / (c + id) */
-
-COMPILER_RT_ABI Dcomplex
-__divdc3(double __a, double __b, double __c, double __d)
-{
- int __ilogbw = 0;
- double __logbw = __compiler_rt_logb(crt_fmax(crt_fabs(__c), crt_fabs(__d)));
- if (crt_isfinite(__logbw))
- {
- __ilogbw = (int)__logbw;
- __c = crt_scalbn(__c, -__ilogbw);
- __d = crt_scalbn(__d, -__ilogbw);
- }
- double __denom = __c * __c + __d * __d;
- Dcomplex z;
- COMPLEX_REAL(z) = crt_scalbn((__a * __c + __b * __d) / __denom, -__ilogbw);
- COMPLEX_IMAGINARY(z) = crt_scalbn((__b * __c - __a * __d) / __denom, -__ilogbw);
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- if ((__denom == 0.0) && (!crt_isnan(__a) || !crt_isnan(__b)))
- {
- COMPLEX_REAL(z) = crt_copysign(CRT_INFINITY, __c) * __a;
- COMPLEX_IMAGINARY(z) = crt_copysign(CRT_INFINITY, __c) * __b;
- }
- else if ((crt_isinf(__a) || crt_isinf(__b)) &&
- crt_isfinite(__c) && crt_isfinite(__d))
- {
- __a = crt_copysign(crt_isinf(__a) ? 1.0 : 0.0, __a);
- __b = crt_copysign(crt_isinf(__b) ? 1.0 : 0.0, __b);
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__b * __c - __a * __d);
- }
- else if (crt_isinf(__logbw) && __logbw > 0.0 &&
- crt_isfinite(__a) && crt_isfinite(__b))
- {
- __c = crt_copysign(crt_isinf(__c) ? 1.0 : 0.0, __c);
- __d = crt_copysign(crt_isinf(__d) ? 1.0 : 0.0, __d);
- COMPLEX_REAL(z) = 0.0 * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = 0.0 * (__b * __c - __a * __d);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/divdf3.c b/lib/libcompiler_rt/divdf3.c
deleted file mode 100644
index 411c82ebb87..00000000000
--- a/lib/libcompiler_rt/divdf3.c
+++ /dev/null
@@ -1,193 +0,0 @@
-//===-- lib/divdf3.c - Double-precision division ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements double-precision soft-float division
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-// For simplicity, this implementation currently flushes denormals to zero.
-// It should be a fairly straightforward exercise to implement gradual
-// underflow with correct rounding.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-COMPILER_RT_ABI fp_t
-__divdf3(fp_t a, fp_t b) {
-
- const unsigned int aExponent = toRep(a) >> significandBits & maxExponent;
- const unsigned int bExponent = toRep(b) >> significandBits & maxExponent;
- const rep_t quotientSign = (toRep(a) ^ toRep(b)) & signBit;
-
- rep_t aSignificand = toRep(a) & significandMask;
- rep_t bSignificand = toRep(b) & significandMask;
- int scale = 0;
-
- // Detect if a or b is zero, denormal, infinity, or NaN.
- if (aExponent-1U >= maxExponent-1U || bExponent-1U >= maxExponent-1U) {
-
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
-
- // NaN / anything = qNaN
- if (aAbs > infRep) return fromRep(toRep(a) | quietBit);
- // anything / NaN = qNaN
- if (bAbs > infRep) return fromRep(toRep(b) | quietBit);
-
- if (aAbs == infRep) {
- // infinity / infinity = NaN
- if (bAbs == infRep) return fromRep(qnanRep);
- // infinity / anything else = +/- infinity
- else return fromRep(aAbs | quotientSign);
- }
-
- // anything else / infinity = +/- 0
- if (bAbs == infRep) return fromRep(quotientSign);
-
- if (!aAbs) {
- // zero / zero = NaN
- if (!bAbs) return fromRep(qnanRep);
- // zero / anything else = +/- zero
- else return fromRep(quotientSign);
- }
- // anything else / zero = +/- infinity
- if (!bAbs) return fromRep(infRep | quotientSign);
-
- // one or both of a or b is denormal, the other (if applicable) is a
- // normal number. Renormalize one or both of a and b, and set scale to
- // include the necessary exponent adjustment.
- if (aAbs < implicitBit) scale += normalize(&aSignificand);
- if (bAbs < implicitBit) scale -= normalize(&bSignificand);
- }
-
- // Or in the implicit significand bit. (If we fell through from the
- // denormal path it was already set by normalize( ), but setting it twice
- // won't hurt anything.)
- aSignificand |= implicitBit;
- bSignificand |= implicitBit;
- int quotientExponent = aExponent - bExponent + scale;
-
- // Align the significand of b as a Q31 fixed-point number in the range
- // [1, 2.0) and get a Q32 approximate reciprocal using a small minimax
- // polynomial approximation: reciprocal = 3/4 + 1/sqrt(2) - b/2. This
- // is accurate to about 3.5 binary digits.
- const uint32_t q31b = bSignificand >> 21;
- uint32_t recip32 = UINT32_C(0x7504f333) - q31b;
-
- // Now refine the reciprocal estimate using a Newton-Raphson iteration:
- //
- // x1 = x0 * (2 - x0 * b)
- //
- // This doubles the number of correct binary digits in the approximation
- // with each iteration, so after three iterations, we have about 28 binary
- // digits of accuracy.
- uint32_t correction32;
- correction32 = -((uint64_t)recip32 * q31b >> 32);
- recip32 = (uint64_t)recip32 * correction32 >> 31;
- correction32 = -((uint64_t)recip32 * q31b >> 32);
- recip32 = (uint64_t)recip32 * correction32 >> 31;
- correction32 = -((uint64_t)recip32 * q31b >> 32);
- recip32 = (uint64_t)recip32 * correction32 >> 31;
-
- // recip32 might have overflowed to exactly zero in the preceding
- // computation if the high word of b is exactly 1.0. This would sabotage
- // the full-width final stage of the computation that follows, so we adjust
- // recip32 downward by one bit.
- recip32--;
-
- // We need to perform one more iteration to get us to 56 binary digits;
- // The last iteration needs to happen with extra precision.
- const uint32_t q63blo = bSignificand << 11;
- uint64_t correction, reciprocal;
- correction = -((uint64_t)recip32*q31b + ((uint64_t)recip32*q63blo >> 32));
- uint32_t cHi = correction >> 32;
- uint32_t cLo = correction;
- reciprocal = (uint64_t)recip32*cHi + ((uint64_t)recip32*cLo >> 32);
-
- // We already adjusted the 32-bit estimate, now we need to adjust the final
- // 64-bit reciprocal estimate downward to ensure that it is strictly smaller
- // than the infinitely precise exact reciprocal. Because the computation
- // of the Newton-Raphson step is truncating at every step, this adjustment
- // is small; most of the work is already done.
- reciprocal -= 2;
-
- // The numerical reciprocal is accurate to within 2^-56, lies in the
- // interval [0.5, 1.0), and is strictly smaller than the true reciprocal
- // of b. Multiplying a by this reciprocal thus gives a numerical q = a/b
- // in Q53 with the following properties:
- //
- // 1. q < a/b
- // 2. q is in the interval [0.5, 2.0)
- // 3. the error in q is bounded away from 2^-53 (actually, we have a
- // couple of bits to spare, but this is all we need).
-
- // We need a 64 x 64 multiply high to compute q, which isn't a basic
- // operation in C, so we need to be a little bit fussy.
- rep_t quotient, quotientLo;
- wideMultiply(aSignificand << 2, reciprocal, &quotient, &quotientLo);
-
- // Two cases: quotient is in [0.5, 1.0) or quotient is in [1.0, 2.0).
- // In either case, we are going to compute a residual of the form
- //
- // r = a - q*b
- //
- // We know from the construction of q that r satisfies:
- //
- // 0 <= r < ulp(q)*b
- //
- // if r is greater than 1/2 ulp(q)*b, then q rounds up. Otherwise, we
- // already have the correct result. The exact halfway case cannot occur.
- // We also take this time to right shift quotient if it falls in the [1,2)
- // range and adjust the exponent accordingly.
- rep_t residual;
- if (quotient < (implicitBit << 1)) {
- residual = (aSignificand << 53) - quotient * bSignificand;
- quotientExponent--;
- } else {
- quotient >>= 1;
- residual = (aSignificand << 52) - quotient * bSignificand;
- }
-
- const int writtenExponent = quotientExponent + exponentBias;
-
- if (writtenExponent >= maxExponent) {
- // If we have overflowed the exponent, return infinity.
- return fromRep(infRep | quotientSign);
- }
-
- else if (writtenExponent < 1) {
- // Flush denormals to zero. In the future, it would be nice to add
- // code to round them correctly.
- return fromRep(quotientSign);
- }
-
- else {
- const bool round = (residual << 1) > bSignificand;
- // Clear the implicit bit
- rep_t absResult = quotient & significandMask;
- // Insert the exponent
- absResult |= (rep_t)writtenExponent << significandBits;
- // Round
- absResult += round;
- // Insert the sign and return
- const double result = fromRep(absResult | quotientSign);
- return result;
- }
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_ddiv(fp_t a, fp_t b) {
- return __divdf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_ddiv(fp_t a, fp_t b) COMPILER_RT_ALIAS(__divdf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/divdi3.c b/lib/libcompiler_rt/divdi3.c
deleted file mode 100644
index b8eebcb2046..00000000000
--- a/lib/libcompiler_rt/divdi3.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- divdi3.c - Implement __divdi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b */
-
-COMPILER_RT_ABI di_int
-__divdi3(di_int a, di_int b)
-{
- const int bits_in_dword_m1 = (int)(sizeof(di_int) * CHAR_BIT) - 1;
- di_int s_a = a >> bits_in_dword_m1; /* s_a = a < 0 ? -1 : 0 */
- di_int s_b = b >> bits_in_dword_m1; /* s_b = b < 0 ? -1 : 0 */
- a = (a ^ s_a) - s_a; /* negate if s_a == -1 */
- b = (b ^ s_b) - s_b; /* negate if s_b == -1 */
- s_a ^= s_b; /*sign of quotient */
- return (__udivmoddi4(a, b, (du_int*)0) ^ s_a) - s_a; /* negate if s_a == -1 */
-}
diff --git a/lib/libcompiler_rt/divmoddi4.c b/lib/libcompiler_rt/divmoddi4.c
deleted file mode 100644
index 0d4df67a63e..00000000000
--- a/lib/libcompiler_rt/divmoddi4.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*===-- divmoddi4.c - Implement __divmoddi4 --------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divmoddi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b, *rem = a % b */
-
-COMPILER_RT_ABI di_int
-__divmoddi4(di_int a, di_int b, di_int* rem)
-{
- di_int d = __divdi3(a,b);
- *rem = a - (d*b);
- return d;
-}
diff --git a/lib/libcompiler_rt/divmodsi4.c b/lib/libcompiler_rt/divmodsi4.c
deleted file mode 100644
index dabe2874397..00000000000
--- a/lib/libcompiler_rt/divmodsi4.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- divmodsi4.c - Implement __divmodsi4 --------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divmodsi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b, *rem = a % b */
-
-COMPILER_RT_ABI si_int
-__divmodsi4(si_int a, si_int b, si_int* rem)
-{
- si_int d = __divsi3(a,b);
- *rem = a - (d*b);
- return d;
-}
-
-
diff --git a/lib/libcompiler_rt/divsc3.c b/lib/libcompiler_rt/divsc3.c
deleted file mode 100644
index 0d18a256c3d..00000000000
--- a/lib/libcompiler_rt/divsc3.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*===-- divsc3.c - Implement __divsc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divsc3 for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the quotient of (a + ib) / (c + id) */
-
-COMPILER_RT_ABI Fcomplex
-__divsc3(float __a, float __b, float __c, float __d)
-{
- int __ilogbw = 0;
- float __logbw =
- __compiler_rt_logbf(crt_fmaxf(crt_fabsf(__c), crt_fabsf(__d)));
- if (crt_isfinite(__logbw))
- {
- __ilogbw = (int)__logbw;
- __c = crt_scalbnf(__c, -__ilogbw);
- __d = crt_scalbnf(__d, -__ilogbw);
- }
- float __denom = __c * __c + __d * __d;
- Fcomplex z;
- COMPLEX_REAL(z) = crt_scalbnf((__a * __c + __b * __d) / __denom, -__ilogbw);
- COMPLEX_IMAGINARY(z) = crt_scalbnf((__b * __c - __a * __d) / __denom, -__ilogbw);
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- if ((__denom == 0) && (!crt_isnan(__a) || !crt_isnan(__b)))
- {
- COMPLEX_REAL(z) = crt_copysignf(CRT_INFINITY, __c) * __a;
- COMPLEX_IMAGINARY(z) = crt_copysignf(CRT_INFINITY, __c) * __b;
- }
- else if ((crt_isinf(__a) || crt_isinf(__b)) &&
- crt_isfinite(__c) && crt_isfinite(__d))
- {
- __a = crt_copysignf(crt_isinf(__a) ? 1 : 0, __a);
- __b = crt_copysignf(crt_isinf(__b) ? 1 : 0, __b);
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__b * __c - __a * __d);
- }
- else if (crt_isinf(__logbw) && __logbw > 0 &&
- crt_isfinite(__a) && crt_isfinite(__b))
- {
- __c = crt_copysignf(crt_isinf(__c) ? 1 : 0, __c);
- __d = crt_copysignf(crt_isinf(__d) ? 1 : 0, __d);
- COMPLEX_REAL(z) = 0 * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = 0 * (__b * __c - __a * __d);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/divsf3.c b/lib/libcompiler_rt/divsf3.c
deleted file mode 100644
index a74917fd1de..00000000000
--- a/lib/libcompiler_rt/divsf3.c
+++ /dev/null
@@ -1,177 +0,0 @@
-//===-- lib/divsf3.c - Single-precision division ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements single-precision soft-float division
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-// For simplicity, this implementation currently flushes denormals to zero.
-// It should be a fairly straightforward exercise to implement gradual
-// underflow with correct rounding.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-COMPILER_RT_ABI fp_t
-__divsf3(fp_t a, fp_t b) {
-
- const unsigned int aExponent = toRep(a) >> significandBits & maxExponent;
- const unsigned int bExponent = toRep(b) >> significandBits & maxExponent;
- const rep_t quotientSign = (toRep(a) ^ toRep(b)) & signBit;
-
- rep_t aSignificand = toRep(a) & significandMask;
- rep_t bSignificand = toRep(b) & significandMask;
- int scale = 0;
-
- // Detect if a or b is zero, denormal, infinity, or NaN.
- if (aExponent-1U >= maxExponent-1U || bExponent-1U >= maxExponent-1U) {
-
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
-
- // NaN / anything = qNaN
- if (aAbs > infRep) return fromRep(toRep(a) | quietBit);
- // anything / NaN = qNaN
- if (bAbs > infRep) return fromRep(toRep(b) | quietBit);
-
- if (aAbs == infRep) {
- // infinity / infinity = NaN
- if (bAbs == infRep) return fromRep(qnanRep);
- // infinity / anything else = +/- infinity
- else return fromRep(aAbs | quotientSign);
- }
-
- // anything else / infinity = +/- 0
- if (bAbs == infRep) return fromRep(quotientSign);
-
- if (!aAbs) {
- // zero / zero = NaN
- if (!bAbs) return fromRep(qnanRep);
- // zero / anything else = +/- zero
- else return fromRep(quotientSign);
- }
- // anything else / zero = +/- infinity
- if (!bAbs) return fromRep(infRep | quotientSign);
-
- // one or both of a or b is denormal, the other (if applicable) is a
- // normal number. Renormalize one or both of a and b, and set scale to
- // include the necessary exponent adjustment.
- if (aAbs < implicitBit) scale += normalize(&aSignificand);
- if (bAbs < implicitBit) scale -= normalize(&bSignificand);
- }
-
- // Or in the implicit significand bit. (If we fell through from the
- // denormal path it was already set by normalize( ), but setting it twice
- // won't hurt anything.)
- aSignificand |= implicitBit;
- bSignificand |= implicitBit;
- int quotientExponent = aExponent - bExponent + scale;
-
- // Align the significand of b as a Q31 fixed-point number in the range
- // [1, 2.0) and get a Q32 approximate reciprocal using a small minimax
- // polynomial approximation: reciprocal = 3/4 + 1/sqrt(2) - b/2. This
- // is accurate to about 3.5 binary digits.
- uint32_t q31b = bSignificand << 8;
- uint32_t reciprocal = UINT32_C(0x7504f333) - q31b;
-
- // Now refine the reciprocal estimate using a Newton-Raphson iteration:
- //
- // x1 = x0 * (2 - x0 * b)
- //
- // This doubles the number of correct binary digits in the approximation
- // with each iteration, so after three iterations, we have about 28 binary
- // digits of accuracy.
- uint32_t correction;
- correction = -((uint64_t)reciprocal * q31b >> 32);
- reciprocal = (uint64_t)reciprocal * correction >> 31;
- correction = -((uint64_t)reciprocal * q31b >> 32);
- reciprocal = (uint64_t)reciprocal * correction >> 31;
- correction = -((uint64_t)reciprocal * q31b >> 32);
- reciprocal = (uint64_t)reciprocal * correction >> 31;
-
- // Exhaustive testing shows that the error in reciprocal after three steps
- // is in the interval [-0x1.f58108p-31, 0x1.d0e48cp-29], in line with our
- // expectations. We bump the reciprocal by a tiny value to force the error
- // to be strictly positive (in the range [0x1.4fdfp-37,0x1.287246p-29], to
- // be specific). This also causes 1/1 to give a sensible approximation
- // instead of zero (due to overflow).
- reciprocal -= 2;
-
- // The numerical reciprocal is accurate to within 2^-28, lies in the
- // interval [0x1.000000eep-1, 0x1.fffffffcp-1], and is strictly smaller
- // than the true reciprocal of b. Multiplying a by this reciprocal thus
- // gives a numerical q = a/b in Q24 with the following properties:
- //
- // 1. q < a/b
- // 2. q is in the interval [0x1.000000eep-1, 0x1.fffffffcp0)
- // 3. the error in q is at most 2^-24 + 2^-27 -- the 2^24 term comes
- // from the fact that we truncate the product, and the 2^27 term
- // is the error in the reciprocal of b scaled by the maximum
- // possible value of a. As a consequence of this error bound,
- // either q or nextafter(q) is the correctly rounded
- rep_t quotient = (uint64_t)reciprocal*(aSignificand << 1) >> 32;
-
- // Two cases: quotient is in [0.5, 1.0) or quotient is in [1.0, 2.0).
- // In either case, we are going to compute a residual of the form
- //
- // r = a - q*b
- //
- // We know from the construction of q that r satisfies:
- //
- // 0 <= r < ulp(q)*b
- //
- // if r is greater than 1/2 ulp(q)*b, then q rounds up. Otherwise, we
- // already have the correct result. The exact halfway case cannot occur.
- // We also take this time to right shift quotient if it falls in the [1,2)
- // range and adjust the exponent accordingly.
- rep_t residual;
- if (quotient < (implicitBit << 1)) {
- residual = (aSignificand << 24) - quotient * bSignificand;
- quotientExponent--;
- } else {
- quotient >>= 1;
- residual = (aSignificand << 23) - quotient * bSignificand;
- }
-
- const int writtenExponent = quotientExponent + exponentBias;
-
- if (writtenExponent >= maxExponent) {
- // If we have overflowed the exponent, return infinity.
- return fromRep(infRep | quotientSign);
- }
-
- else if (writtenExponent < 1) {
- // Flush denormals to zero. In the future, it would be nice to add
- // code to round them correctly.
- return fromRep(quotientSign);
- }
-
- else {
- const bool round = (residual << 1) > bSignificand;
- // Clear the implicit bit
- rep_t absResult = quotient & significandMask;
- // Insert the exponent
- absResult |= (rep_t)writtenExponent << significandBits;
- // Round
- absResult += round;
- // Insert the sign and return
- return fromRep(absResult | quotientSign);
- }
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_fdiv(fp_t a, fp_t b) {
- return __divsf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_fdiv(fp_t a, fp_t b) COMPILER_RT_ALIAS(__divsf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/divsi3.c b/lib/libcompiler_rt/divsi3.c
deleted file mode 100644
index 75aea008ddc..00000000000
--- a/lib/libcompiler_rt/divsi3.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ===-- divsi3.c - Implement __divsi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b */
-
-COMPILER_RT_ABI si_int
-__divsi3(si_int a, si_int b)
-{
- const int bits_in_word_m1 = (int)(sizeof(si_int) * CHAR_BIT) - 1;
- si_int s_a = a >> bits_in_word_m1; /* s_a = a < 0 ? -1 : 0 */
- si_int s_b = b >> bits_in_word_m1; /* s_b = b < 0 ? -1 : 0 */
- a = (a ^ s_a) - s_a; /* negate if s_a == -1 */
- b = (b ^ s_b) - s_b; /* negate if s_b == -1 */
- s_a ^= s_b; /* sign of quotient */
- /*
- * On CPUs without unsigned hardware division support,
- * this calls __udivsi3 (notice the cast to su_int).
- * On CPUs with unsigned hardware division support,
- * this uses the unsigned division instruction.
- */
- return ((su_int)a/(su_int)b ^ s_a) - s_a; /* negate if s_a == -1 */
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI si_int __aeabi_idiv(si_int a, si_int b) COMPILER_RT_ALIAS(__divsi3);
-#endif
diff --git a/lib/libcompiler_rt/divtc3.c b/lib/libcompiler_rt/divtc3.c
deleted file mode 100644
index e5ea00d841e..00000000000
--- a/lib/libcompiler_rt/divtc3.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*===-- divtc3.c - Implement __divtc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divtc3 for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the quotient of (a + ib) / (c + id) */
-
-COMPILER_RT_ABI Lcomplex
-__divtc3(long double __a, long double __b, long double __c, long double __d)
-{
- int __ilogbw = 0;
- long double __logbw =
- __compiler_rt_logbl(crt_fmaxl(crt_fabsl(__c), crt_fabsl(__d)));
- if (crt_isfinite(__logbw))
- {
- __ilogbw = (int)__logbw;
- __c = crt_scalbnl(__c, -__ilogbw);
- __d = crt_scalbnl(__d, -__ilogbw);
- }
- long double __denom = __c * __c + __d * __d;
- Lcomplex z;
- COMPLEX_REAL(z) = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
- COMPLEX_IMAGINARY(z) = crt_scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- if ((__denom == 0.0) && (!crt_isnan(__a) || !crt_isnan(__b)))
- {
- COMPLEX_REAL(z) = crt_copysignl(CRT_INFINITY, __c) * __a;
- COMPLEX_IMAGINARY(z) = crt_copysignl(CRT_INFINITY, __c) * __b;
- }
- else if ((crt_isinf(__a) || crt_isinf(__b)) &&
- crt_isfinite(__c) && crt_isfinite(__d))
- {
- __a = crt_copysignl(crt_isinf(__a) ? 1.0 : 0.0, __a);
- __b = crt_copysignl(crt_isinf(__b) ? 1.0 : 0.0, __b);
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__b * __c - __a * __d);
- }
- else if (crt_isinf(__logbw) && __logbw > 0.0 &&
- crt_isfinite(__a) && crt_isfinite(__b))
- {
- __c = crt_copysignl(crt_isinf(__c) ? 1.0 : 0.0, __c);
- __d = crt_copysignl(crt_isinf(__d) ? 1.0 : 0.0, __d);
- COMPLEX_REAL(z) = 0.0 * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = 0.0 * (__b * __c - __a * __d);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/divtf3.c b/lib/libcompiler_rt/divtf3.c
deleted file mode 100644
index e81dab826bd..00000000000
--- a/lib/libcompiler_rt/divtf3.c
+++ /dev/null
@@ -1,203 +0,0 @@
-//===-- lib/divtf3.c - Quad-precision division --------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements quad-precision soft-float division
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-// For simplicity, this implementation currently flushes denormals to zero.
-// It should be a fairly straightforward exercise to implement gradual
-// underflow with correct rounding.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __divtf3(fp_t a, fp_t b) {
-
- const unsigned int aExponent = toRep(a) >> significandBits & maxExponent;
- const unsigned int bExponent = toRep(b) >> significandBits & maxExponent;
- const rep_t quotientSign = (toRep(a) ^ toRep(b)) & signBit;
-
- rep_t aSignificand = toRep(a) & significandMask;
- rep_t bSignificand = toRep(b) & significandMask;
- int scale = 0;
-
- // Detect if a or b is zero, denormal, infinity, or NaN.
- if (aExponent-1U >= maxExponent-1U || bExponent-1U >= maxExponent-1U) {
-
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
-
- // NaN / anything = qNaN
- if (aAbs > infRep) return fromRep(toRep(a) | quietBit);
- // anything / NaN = qNaN
- if (bAbs > infRep) return fromRep(toRep(b) | quietBit);
-
- if (aAbs == infRep) {
- // infinity / infinity = NaN
- if (bAbs == infRep) return fromRep(qnanRep);
- // infinity / anything else = +/- infinity
- else return fromRep(aAbs | quotientSign);
- }
-
- // anything else / infinity = +/- 0
- if (bAbs == infRep) return fromRep(quotientSign);
-
- if (!aAbs) {
- // zero / zero = NaN
- if (!bAbs) return fromRep(qnanRep);
- // zero / anything else = +/- zero
- else return fromRep(quotientSign);
- }
- // anything else / zero = +/- infinity
- if (!bAbs) return fromRep(infRep | quotientSign);
-
- // one or both of a or b is denormal, the other (if applicable) is a
- // normal number. Renormalize one or both of a and b, and set scale to
- // include the necessary exponent adjustment.
- if (aAbs < implicitBit) scale += normalize(&aSignificand);
- if (bAbs < implicitBit) scale -= normalize(&bSignificand);
- }
-
- // Or in the implicit significand bit. (If we fell through from the
- // denormal path it was already set by normalize( ), but setting it twice
- // won't hurt anything.)
- aSignificand |= implicitBit;
- bSignificand |= implicitBit;
- int quotientExponent = aExponent - bExponent + scale;
-
- // Align the significand of b as a Q63 fixed-point number in the range
- // [1, 2.0) and get a Q64 approximate reciprocal using a small minimax
- // polynomial approximation: reciprocal = 3/4 + 1/sqrt(2) - b/2. This
- // is accurate to about 3.5 binary digits.
- const uint64_t q63b = bSignificand >> 49;
- uint64_t recip64 = UINT64_C(0x7504f333F9DE6484) - q63b;
- // 0x7504f333F9DE6484 / 2^64 + 1 = 3/4 + 1/sqrt(2)
-
- // Now refine the reciprocal estimate using a Newton-Raphson iteration:
- //
- // x1 = x0 * (2 - x0 * b)
- //
- // This doubles the number of correct binary digits in the approximation
- // with each iteration.
- uint64_t correction64;
- correction64 = -((rep_t)recip64 * q63b >> 64);
- recip64 = (rep_t)recip64 * correction64 >> 63;
- correction64 = -((rep_t)recip64 * q63b >> 64);
- recip64 = (rep_t)recip64 * correction64 >> 63;
- correction64 = -((rep_t)recip64 * q63b >> 64);
- recip64 = (rep_t)recip64 * correction64 >> 63;
- correction64 = -((rep_t)recip64 * q63b >> 64);
- recip64 = (rep_t)recip64 * correction64 >> 63;
- correction64 = -((rep_t)recip64 * q63b >> 64);
- recip64 = (rep_t)recip64 * correction64 >> 63;
-
- // recip64 might have overflowed to exactly zero in the preceeding
- // computation if the high word of b is exactly 1.0. This would sabotage
- // the full-width final stage of the computation that follows, so we adjust
- // recip64 downward by one bit.
- recip64--;
-
- // We need to perform one more iteration to get us to 112 binary digits;
- // The last iteration needs to happen with extra precision.
- const uint64_t q127blo = bSignificand << 15;
- rep_t correction, reciprocal;
-
- // NOTE: This operation is equivalent to __multi3, which is not implemented
- // in some architechure
- rep_t r64q63, r64q127, r64cH, r64cL, dummy;
- wideMultiply((rep_t)recip64, (rep_t)q63b, &dummy, &r64q63);
- wideMultiply((rep_t)recip64, (rep_t)q127blo, &dummy, &r64q127);
-
- correction = -(r64q63 + (r64q127 >> 64));
-
- uint64_t cHi = correction >> 64;
- uint64_t cLo = correction;
-
- wideMultiply((rep_t)recip64, (rep_t)cHi, &dummy, &r64cH);
- wideMultiply((rep_t)recip64, (rep_t)cLo, &dummy, &r64cL);
-
- reciprocal = r64cH + (r64cL >> 64);
-
- // We already adjusted the 64-bit estimate, now we need to adjust the final
- // 128-bit reciprocal estimate downward to ensure that it is strictly smaller
- // than the infinitely precise exact reciprocal. Because the computation
- // of the Newton-Raphson step is truncating at every step, this adjustment
- // is small; most of the work is already done.
- reciprocal -= 2;
-
- // The numerical reciprocal is accurate to within 2^-112, lies in the
- // interval [0.5, 1.0), and is strictly smaller than the true reciprocal
- // of b. Multiplying a by this reciprocal thus gives a numerical q = a/b
- // in Q127 with the following properties:
- //
- // 1. q < a/b
- // 2. q is in the interval [0.5, 2.0)
- // 3. the error in q is bounded away from 2^-113 (actually, we have a
- // couple of bits to spare, but this is all we need).
-
- // We need a 128 x 128 multiply high to compute q, which isn't a basic
- // operation in C, so we need to be a little bit fussy.
- rep_t quotient, quotientLo;
- wideMultiply(aSignificand << 2, reciprocal, &quotient, &quotientLo);
-
- // Two cases: quotient is in [0.5, 1.0) or quotient is in [1.0, 2.0).
- // In either case, we are going to compute a residual of the form
- //
- // r = a - q*b
- //
- // We know from the construction of q that r satisfies:
- //
- // 0 <= r < ulp(q)*b
- //
- // if r is greater than 1/2 ulp(q)*b, then q rounds up. Otherwise, we
- // already have the correct result. The exact halfway case cannot occur.
- // We also take this time to right shift quotient if it falls in the [1,2)
- // range and adjust the exponent accordingly.
- rep_t residual;
- rep_t qb;
-
- if (quotient < (implicitBit << 1)) {
- wideMultiply(quotient, bSignificand, &dummy, &qb);
- residual = (aSignificand << 113) - qb;
- quotientExponent--;
- } else {
- quotient >>= 1;
- wideMultiply(quotient, bSignificand, &dummy, &qb);
- residual = (aSignificand << 112) - qb;
- }
-
- const int writtenExponent = quotientExponent + exponentBias;
-
- if (writtenExponent >= maxExponent) {
- // If we have overflowed the exponent, return infinity.
- return fromRep(infRep | quotientSign);
- }
- else if (writtenExponent < 1) {
- // Flush denormals to zero. In the future, it would be nice to add
- // code to round them correctly.
- return fromRep(quotientSign);
- }
- else {
- const bool round = (residual << 1) >= bSignificand;
- // Clear the implicit bit
- rep_t absResult = quotient & significandMask;
- // Insert the exponent
- absResult |= (rep_t)writtenExponent << significandBits;
- // Round
- absResult += round;
- // Insert the sign and return
- const long double result = fromRep(absResult | quotientSign);
- return result;
- }
-}
-
-#endif
diff --git a/lib/libcompiler_rt/divti3.c b/lib/libcompiler_rt/divti3.c
deleted file mode 100644
index c73eae28fe0..00000000000
--- a/lib/libcompiler_rt/divti3.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- divti3.c - Implement __divti3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a / b */
-
-COMPILER_RT_ABI ti_int
-__divti3(ti_int a, ti_int b)
-{
- const int bits_in_tword_m1 = (int)(sizeof(ti_int) * CHAR_BIT) - 1;
- ti_int s_a = a >> bits_in_tword_m1; /* s_a = a < 0 ? -1 : 0 */
- ti_int s_b = b >> bits_in_tword_m1; /* s_b = b < 0 ? -1 : 0 */
- a = (a ^ s_a) - s_a; /* negate if s_a == -1 */
- b = (b ^ s_b) - s_b; /* negate if s_b == -1 */
- s_a ^= s_b; /* sign of quotient */
- return (__udivmodti4(a, b, (tu_int*)0) ^ s_a) - s_a; /* negate if s_a == -1 */
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/divxc3.c b/lib/libcompiler_rt/divxc3.c
deleted file mode 100644
index 6f49280e5f6..00000000000
--- a/lib/libcompiler_rt/divxc3.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ===-- divxc3.c - Implement __divxc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __divxc3 for the compiler_rt library.
- *
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the quotient of (a + ib) / (c + id) */
-
-COMPILER_RT_ABI Lcomplex
-__divxc3(long double __a, long double __b, long double __c, long double __d)
-{
- int __ilogbw = 0;
- long double __logbw = crt_logbl(crt_fmaxl(crt_fabsl(__c), crt_fabsl(__d)));
- if (crt_isfinite(__logbw))
- {
- __ilogbw = (int)__logbw;
- __c = crt_scalbnl(__c, -__ilogbw);
- __d = crt_scalbnl(__d, -__ilogbw);
- }
- long double __denom = __c * __c + __d * __d;
- Lcomplex z;
- COMPLEX_REAL(z) = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
- COMPLEX_IMAGINARY(z) = crt_scalbnl((__b * __c - __a * __d) / __denom, -__ilogbw);
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- if ((__denom == 0) && (!crt_isnan(__a) || !crt_isnan(__b)))
- {
- COMPLEX_REAL(z) = crt_copysignl(CRT_INFINITY, __c) * __a;
- COMPLEX_IMAGINARY(z) = crt_copysignl(CRT_INFINITY, __c) * __b;
- }
- else if ((crt_isinf(__a) || crt_isinf(__b)) &&
- crt_isfinite(__c) && crt_isfinite(__d))
- {
- __a = crt_copysignl(crt_isinf(__a) ? 1 : 0, __a);
- __b = crt_copysignl(crt_isinf(__b) ? 1 : 0, __b);
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__b * __c - __a * __d);
- }
- else if (crt_isinf(__logbw) && __logbw > 0 &&
- crt_isfinite(__a) && crt_isfinite(__b))
- {
- __c = crt_copysignl(crt_isinf(__c) ? 1 : 0, __c);
- __d = crt_copysignl(crt_isinf(__d) ? 1 : 0, __d);
- COMPLEX_REAL(z) = 0 * (__a * __c + __b * __d);
- COMPLEX_IMAGINARY(z) = 0 * (__b * __c - __a * __d);
- }
- }
- return z;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/emutls.c b/lib/libcompiler_rt/emutls.c
deleted file mode 100644
index ef95a1c260c..00000000000
--- a/lib/libcompiler_rt/emutls.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* ===---------- emutls.c - Implements __emutls_get_address ---------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "int_lib.h"
-#include "int_util.h"
-
-#ifdef __BIONIC__
-/* There are 4 pthread key cleanup rounds on Bionic. Delay emutls deallocation
- to round 2. We need to delay deallocation because:
- - Android versions older than M lack __cxa_thread_atexit_impl, so apps
- use a pthread key destructor to call C++ destructors.
- - Apps might use __thread/thread_local variables in pthread destructors.
- We can't wait until the final two rounds, because jemalloc needs two rounds
- after the final malloc/free call to free its thread-specific data (see
- https://reviews.llvm.org/D46978#1107507). */
-#define EMUTLS_SKIP_DESTRUCTOR_ROUNDS 1
-#else
-#define EMUTLS_SKIP_DESTRUCTOR_ROUNDS 0
-#endif
-
-typedef struct emutls_address_array {
- uintptr_t skip_destructor_rounds;
- uintptr_t size; /* number of elements in the 'data' array */
- void* data[];
-} emutls_address_array;
-
-static void emutls_shutdown(emutls_address_array *array);
-
-#ifndef _WIN32
-
-#include <pthread.h>
-
-static pthread_mutex_t emutls_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_key_t emutls_pthread_key;
-static bool emutls_key_created = false;
-
-typedef unsigned int gcc_word __attribute__((mode(word)));
-typedef unsigned int gcc_pointer __attribute__((mode(pointer)));
-
-/* Default is not to use posix_memalign, so systems like Android
- * can use thread local data without heavier POSIX memory allocators.
- */
-#ifndef EMUTLS_USE_POSIX_MEMALIGN
-#define EMUTLS_USE_POSIX_MEMALIGN 0
-#endif
-
-static __inline void *emutls_memalign_alloc(size_t align, size_t size) {
- void *base;
-#if EMUTLS_USE_POSIX_MEMALIGN
- if (posix_memalign(&base, align, size) != 0)
- abort();
-#else
- #define EXTRA_ALIGN_PTR_BYTES (align - 1 + sizeof(void*))
- char* object;
- if ((object = (char*)malloc(EXTRA_ALIGN_PTR_BYTES + size)) == NULL)
- abort();
- base = (void*)(((uintptr_t)(object + EXTRA_ALIGN_PTR_BYTES))
- & ~(uintptr_t)(align - 1));
-
- ((void**)base)[-1] = object;
-#endif
- return base;
-}
-
-static __inline void emutls_memalign_free(void *base) {
-#if EMUTLS_USE_POSIX_MEMALIGN
- free(base);
-#else
- /* The mallocated address is in ((void**)base)[-1] */
- free(((void**)base)[-1]);
-#endif
-}
-
-static __inline void emutls_setspecific(emutls_address_array *value) {
- pthread_setspecific(emutls_pthread_key, (void*) value);
-}
-
-static __inline emutls_address_array* emutls_getspecific() {
- return (emutls_address_array*) pthread_getspecific(emutls_pthread_key);
-}
-
-static void emutls_key_destructor(void* ptr) {
- emutls_address_array *array = (emutls_address_array*)ptr;
- if (array->skip_destructor_rounds > 0) {
- /* emutls is deallocated using a pthread key destructor. These
- * destructors are called in several rounds to accommodate destructor
- * functions that (re)initialize key values with pthread_setspecific.
- * Delay the emutls deallocation to accommodate other end-of-thread
- * cleanup tasks like calling thread_local destructors (e.g. the
- * __cxa_thread_atexit fallback in libc++abi).
- */
- array->skip_destructor_rounds--;
- emutls_setspecific(array);
- } else {
- emutls_shutdown(array);
- free(ptr);
- }
-}
-
-static __inline void emutls_init(void) {
- if (pthread_key_create(&emutls_pthread_key, emutls_key_destructor) != 0)
- abort();
- emutls_key_created = true;
-}
-
-static __inline void emutls_init_once(void) {
- static pthread_once_t once = PTHREAD_ONCE_INIT;
- pthread_once(&once, emutls_init);
-}
-
-static __inline void emutls_lock() {
- pthread_mutex_lock(&emutls_mutex);
-}
-
-static __inline void emutls_unlock() {
- pthread_mutex_unlock(&emutls_mutex);
-}
-
-#else /* _WIN32 */
-
-#include <windows.h>
-#include <malloc.h>
-#include <stdio.h>
-#include <assert.h>
-
-static LPCRITICAL_SECTION emutls_mutex;
-static DWORD emutls_tls_index = TLS_OUT_OF_INDEXES;
-
-typedef uintptr_t gcc_word;
-typedef void * gcc_pointer;
-
-static void win_error(DWORD last_err, const char *hint) {
- char *buffer = NULL;
- if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_MAX_WIDTH_MASK,
- NULL, last_err, 0, (LPSTR)&buffer, 1, NULL)) {
- fprintf(stderr, "Windows error: %s\n", buffer);
- } else {
- fprintf(stderr, "Unkown Windows error: %s\n", hint);
- }
- LocalFree(buffer);
-}
-
-static __inline void win_abort(DWORD last_err, const char *hint) {
- win_error(last_err, hint);
- abort();
-}
-
-static __inline void *emutls_memalign_alloc(size_t align, size_t size) {
- void *base = _aligned_malloc(size, align);
- if (!base)
- win_abort(GetLastError(), "_aligned_malloc");
- return base;
-}
-
-static __inline void emutls_memalign_free(void *base) {
- _aligned_free(base);
-}
-
-static void emutls_exit(void) {
- if (emutls_mutex) {
- DeleteCriticalSection(emutls_mutex);
- _aligned_free(emutls_mutex);
- emutls_mutex = NULL;
- }
- if (emutls_tls_index != TLS_OUT_OF_INDEXES) {
- emutls_shutdown((emutls_address_array*)TlsGetValue(emutls_tls_index));
- TlsFree(emutls_tls_index);
- emutls_tls_index = TLS_OUT_OF_INDEXES;
- }
-}
-
-#pragma warning (push)
-#pragma warning (disable : 4100)
-static BOOL CALLBACK emutls_init(PINIT_ONCE p0, PVOID p1, PVOID *p2) {
- emutls_mutex = (LPCRITICAL_SECTION)_aligned_malloc(sizeof(CRITICAL_SECTION), 16);
- if (!emutls_mutex) {
- win_error(GetLastError(), "_aligned_malloc");
- return FALSE;
- }
- InitializeCriticalSection(emutls_mutex);
-
- emutls_tls_index = TlsAlloc();
- if (emutls_tls_index == TLS_OUT_OF_INDEXES) {
- emutls_exit();
- win_error(GetLastError(), "TlsAlloc");
- return FALSE;
- }
- atexit(&emutls_exit);
- return TRUE;
-}
-
-static __inline void emutls_init_once(void) {
- static INIT_ONCE once;
- InitOnceExecuteOnce(&once, emutls_init, NULL, NULL);
-}
-
-static __inline void emutls_lock() {
- EnterCriticalSection(emutls_mutex);
-}
-
-static __inline void emutls_unlock() {
- LeaveCriticalSection(emutls_mutex);
-}
-
-static __inline void emutls_setspecific(emutls_address_array *value) {
- if (TlsSetValue(emutls_tls_index, (LPVOID) value) == 0)
- win_abort(GetLastError(), "TlsSetValue");
-}
-
-static __inline emutls_address_array* emutls_getspecific() {
- LPVOID value = TlsGetValue(emutls_tls_index);
- if (value == NULL) {
- const DWORD err = GetLastError();
- if (err != ERROR_SUCCESS)
- win_abort(err, "TlsGetValue");
- }
- return (emutls_address_array*) value;
-}
-
-/* Provide atomic load/store functions for emutls_get_index if built with MSVC.
- */
-#if !defined(__ATOMIC_RELEASE)
-#include <intrin.h>
-
-enum { __ATOMIC_ACQUIRE = 2, __ATOMIC_RELEASE = 3 };
-
-static __inline uintptr_t __atomic_load_n(void *ptr, unsigned type) {
- assert(type == __ATOMIC_ACQUIRE);
- // These return the previous value - but since we do an OR with 0,
- // it's equivalent to a plain load.
-#ifdef _WIN64
- return InterlockedOr64(ptr, 0);
-#else
- return InterlockedOr(ptr, 0);
-#endif
-}
-
-static __inline void __atomic_store_n(void *ptr, uintptr_t val, unsigned type) {
- assert(type == __ATOMIC_RELEASE);
- InterlockedExchangePointer((void *volatile *)ptr, (void *)val);
-}
-
-#endif /* __ATOMIC_RELEASE */
-
-#pragma warning (pop)
-
-#endif /* _WIN32 */
-
-static size_t emutls_num_object = 0; /* number of allocated TLS objects */
-
-/* Free the allocated TLS data
- */
-static void emutls_shutdown(emutls_address_array *array) {
- if (array) {
- uintptr_t i;
- for (i = 0; i < array->size; ++i) {
- if (array->data[i])
- emutls_memalign_free(array->data[i]);
- }
- }
-}
-
-/* For every TLS variable xyz,
- * there is one __emutls_control variable named __emutls_v.xyz.
- * If xyz has non-zero initial value, __emutls_v.xyz's "value"
- * will point to __emutls_t.xyz, which has the initial value.
- */
-typedef struct __emutls_control {
- /* Must use gcc_word here, instead of size_t, to match GCC. When
- gcc_word is larger than size_t, the upper extra bits are all
- zeros. We can use variables of size_t to operate on size and
- align. */
- gcc_word size; /* size of the object in bytes */
- gcc_word align; /* alignment of the object in bytes */
- union {
- uintptr_t index; /* data[index-1] is the object address */
- void* address; /* object address, when in single thread env */
- } object;
- void* value; /* null or non-zero initial value for the object */
-} __emutls_control;
-
-/* Emulated TLS objects are always allocated at run-time. */
-static __inline void *emutls_allocate_object(__emutls_control *control) {
- /* Use standard C types, check with gcc's emutls.o. */
- COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(gcc_pointer));
- COMPILE_TIME_ASSERT(sizeof(uintptr_t) == sizeof(void*));
-
- size_t size = control->size;
- size_t align = control->align;
- void* base;
- if (align < sizeof(void*))
- align = sizeof(void*);
- /* Make sure that align is power of 2. */
- if ((align & (align - 1)) != 0)
- abort();
-
- base = emutls_memalign_alloc(align, size);
- if (control->value)
- memcpy(base, control->value, size);
- else
- memset(base, 0, size);
- return base;
-}
-
-
-/* Returns control->object.index; set index if not allocated yet. */
-static __inline uintptr_t emutls_get_index(__emutls_control *control) {
- uintptr_t index = __atomic_load_n(&control->object.index, __ATOMIC_ACQUIRE);
- if (!index) {
- emutls_init_once();
- emutls_lock();
- index = control->object.index;
- if (!index) {
- index = ++emutls_num_object;
- __atomic_store_n(&control->object.index, index, __ATOMIC_RELEASE);
- }
- emutls_unlock();
- }
- return index;
-}
-
-/* Updates newly allocated thread local emutls_address_array. */
-static __inline void emutls_check_array_set_size(emutls_address_array *array,
- uintptr_t size) {
- if (array == NULL)
- abort();
- array->size = size;
- emutls_setspecific(array);
-}
-
-/* Returns the new 'data' array size, number of elements,
- * which must be no smaller than the given index.
- */
-static __inline uintptr_t emutls_new_data_array_size(uintptr_t index) {
- /* Need to allocate emutls_address_array with extra slots
- * to store the header.
- * Round up the emutls_address_array size to multiple of 16.
- */
- uintptr_t header_words = sizeof(emutls_address_array) / sizeof(void *);
- return ((index + header_words + 15) & ~((uintptr_t)15)) - header_words;
-}
-
-/* Returns the size in bytes required for an emutls_address_array with
- * N number of elements for data field.
- */
-static __inline uintptr_t emutls_asize(uintptr_t N) {
- return N * sizeof(void *) + sizeof(emutls_address_array);
-}
-
-/* Returns the thread local emutls_address_array.
- * Extends its size if necessary to hold address at index.
- */
-static __inline emutls_address_array *
-emutls_get_address_array(uintptr_t index) {
- emutls_address_array* array = emutls_getspecific();
- if (array == NULL) {
- uintptr_t new_size = emutls_new_data_array_size(index);
- array = (emutls_address_array*) malloc(emutls_asize(new_size));
- if (array) {
- memset(array->data, 0, new_size * sizeof(void*));
- array->skip_destructor_rounds = EMUTLS_SKIP_DESTRUCTOR_ROUNDS;
- }
- emutls_check_array_set_size(array, new_size);
- } else if (index > array->size) {
- uintptr_t orig_size = array->size;
- uintptr_t new_size = emutls_new_data_array_size(index);
- array = (emutls_address_array*) realloc(array, emutls_asize(new_size));
- if (array)
- memset(array->data + orig_size, 0,
- (new_size - orig_size) * sizeof(void*));
- emutls_check_array_set_size(array, new_size);
- }
- return array;
-}
-
-void* __emutls_get_address(__emutls_control* control) {
- uintptr_t index = emutls_get_index(control);
- emutls_address_array* array = emutls_get_address_array(index--);
- if (array->data[index] == NULL)
- array->data[index] = emutls_allocate_object(control);
- return array->data[index];
-}
-
-#ifdef __BIONIC__
-/* Called by Bionic on dlclose to delete the emutls pthread key. */
-__attribute__((visibility("hidden")))
-void __emutls_unregister_key(void) {
- if (emutls_key_created) {
- pthread_key_delete(emutls_pthread_key);
- emutls_key_created = false;
- }
-}
-#endif
diff --git a/lib/libcompiler_rt/enable_execute_stack.c b/lib/libcompiler_rt/enable_execute_stack.c
deleted file mode 100644
index 327d460b425..00000000000
--- a/lib/libcompiler_rt/enable_execute_stack.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ===-- enable_execute_stack.c - Implement __enable_execute_stack ---------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifndef _WIN32
-#include <sys/mman.h>
-#endif
-
-/* #include "config.h"
- * FIXME: CMake - include when cmake system is ready.
- * Remove #define HAVE_SYSCONF 1 line.
- */
-#define HAVE_SYSCONF 1
-
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#else
-#ifndef __APPLE__
-#include <unistd.h>
-#endif /* __APPLE__ */
-#endif /* _WIN32 */
-
-#if __LP64__
- #define TRAMPOLINE_SIZE 48
-#else
- #define TRAMPOLINE_SIZE 40
-#endif
-
-/*
- * The compiler generates calls to __enable_execute_stack() when creating
- * trampoline functions on the stack for use with nested functions.
- * It is expected to mark the page(s) containing the address
- * and the next 48 bytes as executable. Since the stack is normally rw-
- * that means changing the protection on those page(s) to rwx.
- */
-
-COMPILER_RT_ABI void
-__enable_execute_stack(void* addr)
-{
-
-#if _WIN32
- MEMORY_BASIC_INFORMATION mbi;
- if (!VirtualQuery (addr, &mbi, sizeof(mbi)))
- return; /* We should probably assert here because there is no return value */
- VirtualProtect (mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect);
-#else
-#if __APPLE__
- /* On Darwin, pagesize is always 4096 bytes */
- const uintptr_t pageSize = 4096;
-#elif !defined(HAVE_SYSCONF)
-#error "HAVE_SYSCONF not defined! See enable_execute_stack.c"
-#else
- const uintptr_t pageSize = sysconf(_SC_PAGESIZE);
-#endif /* __APPLE__ */
-
- const uintptr_t pageAlignMask = ~(pageSize-1);
- uintptr_t p = (uintptr_t)addr;
- unsigned char* startPage = (unsigned char*)(p & pageAlignMask);
- unsigned char* endPage = (unsigned char*)((p+TRAMPOLINE_SIZE+pageSize) & pageAlignMask);
- size_t length = endPage - startPage;
- (void) mprotect((void *)startPage, length, PROT_READ | PROT_WRITE | PROT_EXEC);
-#endif
-}
diff --git a/lib/libcompiler_rt/eprintf.c b/lib/libcompiler_rt/eprintf.c
deleted file mode 100644
index 89f34b15457..00000000000
--- a/lib/libcompiler_rt/eprintf.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ===---------- eprintf.c - Implements __eprintf --------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-
-
-#include "int_lib.h"
-#include <stdio.h>
-
-
-/*
- * __eprintf() was used in an old version of <assert.h>.
- * It can eventually go away, but it is needed when linking
- * .o files built with the old <assert.h>.
- *
- * It should never be exported from a dylib, so it is marked
- * visibility hidden.
- */
-#ifndef _WIN32
-__attribute__((visibility("hidden")))
-#endif
-COMPILER_RT_ABI void
-__eprintf(const char* format, const char* assertion_expression,
- const char* line, const char* file)
-{
- fprintf(stderr, format, assertion_expression, line, file);
- fflush(stderr);
- compilerrt_abort();
-}
diff --git a/lib/libcompiler_rt/extenddftf2.c b/lib/libcompiler_rt/extenddftf2.c
deleted file mode 100644
index 86dab8f03a8..00000000000
--- a/lib/libcompiler_rt/extenddftf2.c
+++ /dev/null
@@ -1,23 +0,0 @@
-//===-- lib/extenddftf2.c - double -> quad conversion -------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#define SRC_DOUBLE
-#define DST_QUAD
-#include "fp_extend_impl.inc"
-
-COMPILER_RT_ABI long double __extenddftf2(double a) {
- return __extendXfYf2__(a);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/extendhfsf2.c b/lib/libcompiler_rt/extendhfsf2.c
deleted file mode 100644
index d9c0db84b0c..00000000000
--- a/lib/libcompiler_rt/extendhfsf2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-//===-- lib/extendhfsf2.c - half -> single conversion -------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-
-#define SRC_HALF
-#define DST_SINGLE
-#include "fp_extend_impl.inc"
-
-// Use a forwarding definition and noinline to implement a poor man's alias,
-// as there isn't a good cross-platform way of defining one.
-COMPILER_RT_ABI NOINLINE float __extendhfsf2(uint16_t a) {
- return __extendXfYf2__(a);
-}
-
-COMPILER_RT_ABI float __gnu_h2f_ieee(uint16_t a) {
- return __extendhfsf2(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI float __aeabi_h2f(uint16_t a) {
- return __extendhfsf2(a);
-}
-#else
-AEABI_RTABI float __aeabi_h2f(uint16_t a) COMPILER_RT_ALIAS(__extendhfsf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/extendsfdf2.c b/lib/libcompiler_rt/extendsfdf2.c
deleted file mode 100644
index 3d84529a6c5..00000000000
--- a/lib/libcompiler_rt/extendsfdf2.c
+++ /dev/null
@@ -1,27 +0,0 @@
-//===-- lib/extendsfdf2.c - single -> double conversion -----------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-
-#define SRC_SINGLE
-#define DST_DOUBLE
-#include "fp_extend_impl.inc"
-
-COMPILER_RT_ABI double __extendsfdf2(float a) {
- return __extendXfYf2__(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI double __aeabi_f2d(float a) {
- return __extendsfdf2(a);
-}
-#else
-AEABI_RTABI double __aeabi_f2d(float a) COMPILER_RT_ALIAS(__extendsfdf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/extendsftf2.c b/lib/libcompiler_rt/extendsftf2.c
deleted file mode 100644
index 2eeeba28484..00000000000
--- a/lib/libcompiler_rt/extendsftf2.c
+++ /dev/null
@@ -1,23 +0,0 @@
-//===-- lib/extendsftf2.c - single -> quad conversion -------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#define SRC_SINGLE
-#define DST_QUAD
-#include "fp_extend_impl.inc"
-
-COMPILER_RT_ABI long double __extendsftf2(float a) {
- return __extendXfYf2__(a);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/ffsdi2.c b/lib/libcompiler_rt/ffsdi2.c
deleted file mode 100644
index a5ac9900ff1..00000000000
--- a/lib/libcompiler_rt/ffsdi2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- ffsdi2.c - Implement __ffsdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ffsdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the index of the least significant 1-bit in a, or
- * the value zero if a is zero. The least significant bit is index one.
- */
-
-COMPILER_RT_ABI si_int
-__ffsdi2(di_int a)
-{
- dwords x;
- x.all = a;
- if (x.s.low == 0)
- {
- if (x.s.high == 0)
- return 0;
- return __builtin_ctz(x.s.high) + (1 + sizeof(si_int) * CHAR_BIT);
- }
- return __builtin_ctz(x.s.low) + 1;
-}
diff --git a/lib/libcompiler_rt/ffssi2.c b/lib/libcompiler_rt/ffssi2.c
deleted file mode 100644
index e5180eff5e0..00000000000
--- a/lib/libcompiler_rt/ffssi2.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- ffssi2.c - Implement __ffssi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ffssi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: the index of the least significant 1-bit in a, or
- * the value zero if a is zero. The least significant bit is index one.
- */
-
-COMPILER_RT_ABI si_int
-__ffssi2(si_int a)
-{
- if (a == 0)
- {
- return 0;
- }
- return __builtin_ctz(a) + 1;
-}
diff --git a/lib/libcompiler_rt/ffsti2.c b/lib/libcompiler_rt/ffsti2.c
deleted file mode 100644
index dcdb3bd7f80..00000000000
--- a/lib/libcompiler_rt/ffsti2.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ===-- ffsti2.c - Implement __ffsti2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ffsti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: the index of the least significant 1-bit in a, or
- * the value zero if a is zero. The least significant bit is index one.
- */
-
-COMPILER_RT_ABI si_int
-__ffsti2(ti_int a)
-{
- twords x;
- x.all = a;
- if (x.s.low == 0)
- {
- if (x.s.high == 0)
- return 0;
- return __builtin_ctzll(x.s.high) + (1 + sizeof(di_int) * CHAR_BIT);
- }
- return __builtin_ctzll(x.s.low) + 1;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/fixdfdi.c b/lib/libcompiler_rt/fixdfdi.c
deleted file mode 100644
index 54e312d3c8f..00000000000
--- a/lib/libcompiler_rt/fixdfdi.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ===-- fixdfdi.c - Implement __fixdfdi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; can set the invalid
- * flag as a side-effect of computation.
- */
-
-COMPILER_RT_ABI du_int __fixunsdfdi(double a);
-
-COMPILER_RT_ABI di_int
-__fixdfdi(double a)
-{
- if (a < 0.0) {
- return -__fixunsdfdi(-a);
- }
- return __fixunsdfdi(a);
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no
- * flags to set, and we don't want to code-gen to an unknown soft-float
- * implementation.
- */
-
-typedef di_int fixint_t;
-typedef du_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI di_int
-__fixdfdi(fp_t a) {
- return __fixint(a);
-}
-
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI di_int __aeabi_d2lz(fp_t a) {
- return __fixdfdi(a);
-}
-#else
-AEABI_RTABI di_int __aeabi_d2lz(fp_t a) COMPILER_RT_ALIAS(__fixdfdi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixdfsi.c b/lib/libcompiler_rt/fixdfsi.c
deleted file mode 100644
index 5b958817571..00000000000
--- a/lib/libcompiler_rt/fixdfsi.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ===-- fixdfsi.c - Implement __fixdfsi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-typedef si_int fixint_t;
-typedef su_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI si_int
-__fixdfsi(fp_t a) {
- return __fixint(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI si_int __aeabi_d2iz(fp_t a) {
- return __fixdfsi(a);
-}
-#else
-AEABI_RTABI si_int __aeabi_d2iz(fp_t a) COMPILER_RT_ALIAS(__fixdfsi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixdfti.c b/lib/libcompiler_rt/fixdfti.c
deleted file mode 100644
index aaf225e74f8..00000000000
--- a/lib/libcompiler_rt/fixdfti.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ===-- fixdfti.c - Implement __fixdfti -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-typedef ti_int fixint_t;
-typedef tu_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI ti_int
-__fixdfti(fp_t a) {
- return __fixint(a);
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/fixsfdi.c b/lib/libcompiler_rt/fixsfdi.c
deleted file mode 100644
index 32e87c60889..00000000000
--- a/lib/libcompiler_rt/fixsfdi.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ===-- fixsfdi.c - Implement __fixsfdi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; can set the invalid
- * flag as a side-effect of computation.
- */
-
-COMPILER_RT_ABI du_int __fixunssfdi(float a);
-
-COMPILER_RT_ABI di_int
-__fixsfdi(float a)
-{
- if (a < 0.0f) {
- return -__fixunssfdi(-a);
- }
- return __fixunssfdi(a);
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no
- * flags to set, and we don't want to code-gen to an unknown soft-float
- * implementation.
- */
-
-typedef di_int fixint_t;
-typedef du_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI di_int
-__fixsfdi(fp_t a) {
- return __fixint(a);
-}
-
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI di_int __aeabi_f2lz(fp_t a) {
- return __fixsfdi(a);
-}
-#else
-AEABI_RTABI di_int __aeabi_f2lz(fp_t a) COMPILER_RT_ALIAS(__fixsfdi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixsfsi.c b/lib/libcompiler_rt/fixsfsi.c
deleted file mode 100644
index e94e5f3dcd6..00000000000
--- a/lib/libcompiler_rt/fixsfsi.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ===-- fixsfsi.c - Implement __fixsfsi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-typedef si_int fixint_t;
-typedef su_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI si_int
-__fixsfsi(fp_t a) {
- return __fixint(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI si_int __aeabi_f2iz(fp_t a) {
- return __fixsfsi(a);
-}
-#else
-AEABI_RTABI si_int __aeabi_f2iz(fp_t a) COMPILER_RT_ALIAS(__fixsfsi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixsfti.c b/lib/libcompiler_rt/fixsfti.c
deleted file mode 100644
index 3a159b3e18e..00000000000
--- a/lib/libcompiler_rt/fixsfti.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ===-- fixsfti.c - Implement __fixsfti -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-typedef ti_int fixint_t;
-typedef tu_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI ti_int
-__fixsfti(fp_t a) {
- return __fixint(a);
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/fixtfdi.c b/lib/libcompiler_rt/fixtfdi.c
deleted file mode 100644
index bc9dea1f4f8..00000000000
--- a/lib/libcompiler_rt/fixtfdi.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- fixtfdi.c - Implement __fixtfdi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef di_int fixint_t;
-typedef du_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI di_int
-__fixtfdi(fp_t a) {
- return __fixint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixtfsi.c b/lib/libcompiler_rt/fixtfsi.c
deleted file mode 100644
index feb3de88509..00000000000
--- a/lib/libcompiler_rt/fixtfsi.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- fixtfsi.c - Implement __fixtfsi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef si_int fixint_t;
-typedef su_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI si_int
-__fixtfsi(fp_t a) {
- return __fixint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixtfti.c b/lib/libcompiler_rt/fixtfti.c
deleted file mode 100644
index ee4ada85cb4..00000000000
--- a/lib/libcompiler_rt/fixtfti.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- fixtfti.c - Implement __fixtfti -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef ti_int fixint_t;
-typedef tu_int fixuint_t;
-#include "fp_fixint_impl.inc"
-
-COMPILER_RT_ABI ti_int
-__fixtfti(fp_t a) {
- return __fixint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixunsdfdi.c b/lib/libcompiler_rt/fixunsdfdi.c
deleted file mode 100644
index bfe4dbb2565..00000000000
--- a/lib/libcompiler_rt/fixunsdfdi.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ===-- fixunsdfdi.c - Implement __fixunsdfdi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; can set the invalid
- * flag as a side-effect of computation.
- */
-
-COMPILER_RT_ABI du_int
-__fixunsdfdi(double a)
-{
- if (a <= 0.0) return 0;
- su_int high = a / 4294967296.f; /* a / 0x1p32f; */
- su_int low = a - (double)high * 4294967296.f; /* high * 0x1p32f; */
- return ((du_int)high << 32) | low;
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no
- * flags to set, and we don't want to code-gen to an unknown soft-float
- * implementation.
- */
-
-typedef du_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI du_int
-__fixunsdfdi(fp_t a) {
- return __fixuint(a);
-}
-
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI du_int __aeabi_d2ulz(fp_t a) {
- return __fixunsdfdi(a);
-}
-#else
-AEABI_RTABI du_int __aeabi_d2ulz(fp_t a) COMPILER_RT_ALIAS(__fixunsdfdi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixunsdfsi.c b/lib/libcompiler_rt/fixunsdfsi.c
deleted file mode 100644
index 3c5355beae1..00000000000
--- a/lib/libcompiler_rt/fixunsdfsi.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- fixunsdfsi.c - Implement __fixunsdfsi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-typedef su_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI su_int
-__fixunsdfsi(fp_t a) {
- return __fixuint(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) {
- return __fixunsdfsi(a);
-}
-#else
-AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) COMPILER_RT_ALIAS(__fixunsdfsi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixunsdfti.c b/lib/libcompiler_rt/fixunsdfti.c
deleted file mode 100644
index f8046a02632..00000000000
--- a/lib/libcompiler_rt/fixunsdfti.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- fixunsdfti.c - Implement __fixunsdfti -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-typedef tu_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI tu_int
-__fixunsdfti(fp_t a) {
- return __fixuint(a);
-}
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/fixunssfdi.c b/lib/libcompiler_rt/fixunssfdi.c
deleted file mode 100644
index 080a25bb1e9..00000000000
--- a/lib/libcompiler_rt/fixunssfdi.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ===-- fixunssfdi.c - Implement __fixunssfdi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; can set the invalid
- * flag as a side-effect of computation.
- */
-
-COMPILER_RT_ABI du_int
-__fixunssfdi(float a)
-{
- if (a <= 0.0f) return 0;
- double da = a;
- su_int high = da / 4294967296.f; /* da / 0x1p32f; */
- su_int low = da - (double)high * 4294967296.f; /* high * 0x1p32f; */
- return ((du_int)high << 32) | low;
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no
- * flags to set, and we don't want to code-gen to an unknown soft-float
- * implementation.
- */
-
-typedef du_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI du_int
-__fixunssfdi(fp_t a) {
- return __fixuint(a);
-}
-
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI du_int __aeabi_f2ulz(fp_t a) {
- return __fixunssfdi(a);
-}
-#else
-AEABI_RTABI du_int __aeabi_f2ulz(fp_t a) COMPILER_RT_ALIAS(__fixunssfdi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixunssfsi.c b/lib/libcompiler_rt/fixunssfsi.c
deleted file mode 100644
index eca2916a5c8..00000000000
--- a/lib/libcompiler_rt/fixunssfsi.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- fixunssfsi.c - Implement __fixunssfsi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixunssfsi for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-typedef su_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI su_int
-__fixunssfsi(fp_t a) {
- return __fixuint(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI su_int __aeabi_f2uiz(fp_t a) {
- return __fixunssfsi(a);
-}
-#else
-AEABI_RTABI su_int __aeabi_f2uiz(fp_t a) COMPILER_RT_ALIAS(__fixunssfsi);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/fixunssfti.c b/lib/libcompiler_rt/fixunssfti.c
deleted file mode 100644
index 862d7bd6c7a..00000000000
--- a/lib/libcompiler_rt/fixunssfti.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ===-- fixunssfti.c - Implement __fixunssfti -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixunssfti for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT)
-typedef tu_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI tu_int
-__fixunssfti(fp_t a) {
- return __fixuint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixunstfdi.c b/lib/libcompiler_rt/fixunstfdi.c
deleted file mode 100644
index b2995f65834..00000000000
--- a/lib/libcompiler_rt/fixunstfdi.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ===-- fixunstfdi.c - Implement __fixunstfdi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef du_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI du_int
-__fixunstfdi(fp_t a) {
- return __fixuint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixunstfsi.c b/lib/libcompiler_rt/fixunstfsi.c
deleted file mode 100644
index b5d3f6a7d38..00000000000
--- a/lib/libcompiler_rt/fixunstfsi.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ===-- fixunstfsi.c - Implement __fixunstfsi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef su_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI su_int
-__fixunstfsi(fp_t a) {
- return __fixuint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixunstfti.c b/lib/libcompiler_rt/fixunstfti.c
deleted file mode 100644
index 22ff9dfc033..00000000000
--- a/lib/libcompiler_rt/fixunstfti.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ===-- fixunstfsi.c - Implement __fixunstfsi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-typedef tu_int fixuint_t;
-#include "fp_fixuint_impl.inc"
-
-COMPILER_RT_ABI tu_int
-__fixunstfti(fp_t a) {
- return __fixuint(a);
-}
-#endif
diff --git a/lib/libcompiler_rt/fixunsxfdi.c b/lib/libcompiler_rt/fixunsxfdi.c
deleted file mode 100644
index 075304e78dc..00000000000
--- a/lib/libcompiler_rt/fixunsxfdi.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ===-- fixunsxfdi.c - Implement __fixunsxfdi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixunsxfdi for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: convert a to a unsigned long long, rounding toward zero.
- * Negative values all become zero.
- */
-
-/* Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
- * du_int is a 64 bit integral type
- * value in long double is representable in du_int or is negative
- * (no range checking performed)
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI du_int
-__fixunsxfdi(long double a)
-{
- long_double_bits fb;
- fb.f = a;
- int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
- if (e < 0 || (fb.u.high.s.low & 0x00008000))
- return 0;
- if ((unsigned)e > sizeof(du_int) * CHAR_BIT)
- return ~(du_int)0;
- return fb.u.low.all >> (63 - e);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/fixunsxfsi.c b/lib/libcompiler_rt/fixunsxfsi.c
deleted file mode 100644
index c3c70f743de..00000000000
--- a/lib/libcompiler_rt/fixunsxfsi.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ===-- fixunsxfsi.c - Implement __fixunsxfsi -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixunsxfsi for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: convert a to a unsigned int, rounding toward zero.
- * Negative values all become zero.
- */
-
-/* Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
- * su_int is a 32 bit integral type
- * value in long double is representable in su_int or is negative
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI su_int
-__fixunsxfsi(long double a)
-{
- long_double_bits fb;
- fb.f = a;
- int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
- if (e < 0 || (fb.u.high.s.low & 0x00008000))
- return 0;
- if ((unsigned)e > sizeof(su_int) * CHAR_BIT)
- return ~(su_int)0;
- return fb.u.low.s.high >> (31 - e);
-}
-
-#endif /* !_ARCH_PPC */
diff --git a/lib/libcompiler_rt/fixunsxfti.c b/lib/libcompiler_rt/fixunsxfti.c
deleted file mode 100644
index fb39d00ff5b..00000000000
--- a/lib/libcompiler_rt/fixunsxfti.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ===-- fixunsxfti.c - Implement __fixunsxfti -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixunsxfti for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a unsigned long long, rounding toward zero.
- * Negative values all become zero.
- */
-
-/* Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
- * tu_int is a 128 bit integral type
- * value in long double is representable in tu_int or is negative
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI tu_int
-__fixunsxfti(long double a)
-{
- long_double_bits fb;
- fb.f = a;
- int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
- if (e < 0 || (fb.u.high.s.low & 0x00008000))
- return 0;
- if ((unsigned)e > sizeof(tu_int) * CHAR_BIT)
- return ~(tu_int)0;
- tu_int r = fb.u.low.all;
- if (e > 63)
- r <<= (e - 63);
- else
- r >>= (63 - e);
- return r;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/fixxfdi.c b/lib/libcompiler_rt/fixxfdi.c
deleted file mode 100644
index 011787f9e4b..00000000000
--- a/lib/libcompiler_rt/fixxfdi.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ===-- fixxfdi.c - Implement __fixxfdi -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixxfdi for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: convert a to a signed long long, rounding toward zero. */
-
-/* Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
- * di_int is a 64 bit integral type
- * value in long double is representable in di_int (no range checking performed)
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI di_int
-__fixxfdi(long double a)
-{
- const di_int di_max = (di_int)((~(du_int)0) / 2);
- const di_int di_min = -di_max - 1;
- long_double_bits fb;
- fb.f = a;
- int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
- if (e < 0)
- return 0;
- if ((unsigned)e >= sizeof(di_int) * CHAR_BIT)
- return a > 0 ? di_max : di_min;
- di_int s = -(si_int)((fb.u.high.s.low & 0x00008000) >> 15);
- di_int r = fb.u.low.all;
- r = (du_int)r >> (63 - e);
- return (r ^ s) - s;
-}
-
-#endif /* !_ARCH_PPC */
diff --git a/lib/libcompiler_rt/fixxfti.c b/lib/libcompiler_rt/fixxfti.c
deleted file mode 100644
index 968a4f0d5ee..00000000000
--- a/lib/libcompiler_rt/fixxfti.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ===-- fixxfti.c - Implement __fixxfti -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __fixxfti for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a signed long long, rounding toward zero. */
-
-/* Assumption: long double is an intel 80 bit floating point type padded with 6 bytes
- * ti_int is a 128 bit integral type
- * value in long double is representable in ti_int
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI ti_int
-__fixxfti(long double a)
-{
- const ti_int ti_max = (ti_int)((~(tu_int)0) / 2);
- const ti_int ti_min = -ti_max - 1;
- long_double_bits fb;
- fb.f = a;
- int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
- if (e < 0)
- return 0;
- ti_int s = -(si_int)((fb.u.high.s.low & 0x00008000) >> 15);
- ti_int r = fb.u.low.all;
- if ((unsigned)e >= sizeof(ti_int) * CHAR_BIT)
- return a > 0 ? ti_max : ti_min;
- if (e > 63)
- r <<= (e - 63);
- else
- r >>= (63 - e);
- return (r ^ s) - s;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floatdidf.c b/lib/libcompiler_rt/floatdidf.c
deleted file mode 100644
index 36b856e078d..00000000000
--- a/lib/libcompiler_rt/floatdidf.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*===-- floatdidf.c - Implement __floatdidf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===
- *
- * This file implements __floatdidf for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: convert a to a double, rounding toward even. */
-
-/* Assumption: double is a IEEE 64 bit floating point type
- * di_int is a 64 bit integral type
- */
-
-/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; we'll set the inexact flag
- * as a side-effect of this computation.
- */
-
-COMPILER_RT_ABI double
-__floatdidf(di_int a)
-{
- static const double twop52 = 4503599627370496.0; // 0x1.0p52
- static const double twop32 = 4294967296.0; // 0x1.0p32
-
- union { int64_t x; double d; } low = { .d = twop52 };
-
- const double high = (int32_t)(a >> 32) * twop32;
- low.x |= a & INT64_C(0x00000000ffffffff);
-
- const double result = (high - twop52) + low.d;
- return result;
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no flags to
- * set, and we don't want to code-gen to an unknown soft-float implementation.
- */
-
-COMPILER_RT_ABI double
-__floatdidf(di_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(di_int) * CHAR_BIT;
- const di_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __builtin_clzll(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > DBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit DBL_MANT_DIG-1 bits to the right of 1
- * Q = bit DBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case DBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case DBL_MANT_DIG + 2:
- break;
- default:
- a = ((du_int)a >> (sd - (DBL_MANT_DIG+2))) |
- ((a & ((du_int)(-1) >> ((N + DBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to DBL_MANT_DIG or DBL_MANT_DIG+1 bits */
- if (a & ((du_int)1 << DBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- else
- {
- a <<= (DBL_MANT_DIG - sd);
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- double_bits fb;
- fb.u.s.high = ((su_int)s & 0x80000000) | /* sign */
- ((e + 1023) << 20) | /* exponent */
- ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
- fb.u.s.low = (su_int)a; /* mantissa-low */
- return fb.f;
-}
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI double __aeabi_l2d(di_int a) {
- return __floatdidf(a);
-}
-#else
-AEABI_RTABI double __aeabi_l2d(di_int a) COMPILER_RT_ALIAS(__floatdidf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatdisf.c b/lib/libcompiler_rt/floatdisf.c
deleted file mode 100644
index a2f09eb2ed2..00000000000
--- a/lib/libcompiler_rt/floatdisf.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*===-- floatdisf.c - Implement __floatdisf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===
- *
- * This file implements __floatdisf for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-/* Returns: convert a to a float, rounding toward even.*/
-
-/* Assumption: float is a IEEE 32 bit floating point type
- * di_int is a 64 bit integral type
- */
-
-/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI float
-__floatdisf(di_int a)
-{
- if (a == 0)
- return 0.0F;
- const unsigned N = sizeof(di_int) * CHAR_BIT;
- const di_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __builtin_clzll(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > FLT_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit FLT_MANT_DIG-1 bits to the right of 1
- * Q = bit FLT_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case FLT_MANT_DIG + 1:
- a <<= 1;
- break;
- case FLT_MANT_DIG + 2:
- break;
- default:
- a = ((du_int)a >> (sd - (FLT_MANT_DIG+2))) |
- ((a & ((du_int)(-1) >> ((N + FLT_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to FLT_MANT_DIG or FLT_MANT_DIG+1 bits */
- if (a & ((du_int)1 << FLT_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- else
- {
- a <<= (FLT_MANT_DIG - sd);
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- float_bits fb;
- fb.u = ((su_int)s & 0x80000000) | /* sign */
- ((e + 127) << 23) | /* exponent */
- ((su_int)a & 0x007FFFFF); /* mantissa */
- return fb.f;
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI float __aeabi_l2f(di_int a) {
- return __floatdisf(a);
-}
-#else
-AEABI_RTABI float __aeabi_l2f(di_int a) COMPILER_RT_ALIAS(__floatdisf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatditf.c b/lib/libcompiler_rt/floatditf.c
deleted file mode 100644
index cd51dd8aade..00000000000
--- a/lib/libcompiler_rt/floatditf.c
+++ /dev/null
@@ -1,50 +0,0 @@
-//===-- lib/floatditf.c - integer -> quad-precision conversion ----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements di_int to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatditf(di_int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0)
- return fromRep(0);
-
- // All other cases begin by extracting the sign and absolute value of a
- rep_t sign = 0;
- du_int aAbs = (du_int)a;
- if (a < 0) {
- sign = signBit;
- aAbs = ~(du_int)a + 1U;
- }
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clzll(aAbs);
- rep_t result;
-
- // Shift a into the significand field, rounding if it is a right-shift
- const int shift = significandBits - exponent;
- result = (rep_t)aAbs << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- // Insert the sign bit and return
- return fromRep(result | sign);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floatdixf.c b/lib/libcompiler_rt/floatdixf.c
deleted file mode 100644
index d39e81d7ca7..00000000000
--- a/lib/libcompiler_rt/floatdixf.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ===-- floatdixf.c - Implement __floatdixf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatdixf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: convert a to a long double, rounding toward even. */
-
-/* Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
- * di_int is a 64 bit integral type
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI long double
-__floatdixf(di_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(di_int) * CHAR_BIT;
- const di_int s = a >> (N-1);
- a = (a ^ s) - s;
- int clz = __builtin_clzll(a);
- int e = (N - 1) - clz ; /* exponent */
- long_double_bits fb;
- fb.u.high.s.low = ((su_int)s & 0x00008000) | /* sign */
- (e + 16383); /* exponent */
- fb.u.low.all = a << clz; /* mantissa */
- return fb.f;
-}
-
-#endif /* !_ARCH_PPC */
diff --git a/lib/libcompiler_rt/floatsidf.c b/lib/libcompiler_rt/floatsidf.c
deleted file mode 100644
index fe051123ce7..00000000000
--- a/lib/libcompiler_rt/floatsidf.c
+++ /dev/null
@@ -1,61 +0,0 @@
-//===-- lib/floatsidf.c - integer -> double-precision conversion --*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements integer to double-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI fp_t
-__floatsidf(int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0)
- return fromRep(0);
-
- // All other cases begin by extracting the sign and absolute value of a
- rep_t sign = 0;
- if (a < 0) {
- sign = signBit;
- a = -a;
- }
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit. Extra
- // cast to unsigned int is necessary to get the correct behavior for
- // the input INT_MIN.
- const int shift = significandBits - exponent;
- result = (rep_t)(unsigned int)a << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- // Insert the sign bit and return
- return fromRep(result | sign);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_i2d(int a) {
- return __floatsidf(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_i2d(int a) COMPILER_RT_ALIAS(__floatsidf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatsisf.c b/lib/libcompiler_rt/floatsisf.c
deleted file mode 100644
index bf087ee3c29..00000000000
--- a/lib/libcompiler_rt/floatsisf.c
+++ /dev/null
@@ -1,67 +0,0 @@
-//===-- lib/floatsisf.c - integer -> single-precision conversion --*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements integer to single-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI fp_t
-__floatsisf(int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0)
- return fromRep(0);
-
- // All other cases begin by extracting the sign and absolute value of a
- rep_t sign = 0;
- if (a < 0) {
- sign = signBit;
- a = -a;
- }
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field, rounding if it is a right-shift
- if (exponent <= significandBits) {
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
- } else {
- const int shift = exponent - significandBits;
- result = (rep_t)a >> shift ^ implicitBit;
- rep_t round = (rep_t)a << (typeWidth - shift);
- if (round > signBit) result++;
- if (round == signBit) result += result & 1;
- }
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- // Insert the sign bit and return
- return fromRep(result | sign);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_i2f(int a) {
- return __floatsisf(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_i2f(int a) COMPILER_RT_ALIAS(__floatsisf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatsitf.c b/lib/libcompiler_rt/floatsitf.c
deleted file mode 100644
index f0abca363b5..00000000000
--- a/lib/libcompiler_rt/floatsitf.c
+++ /dev/null
@@ -1,50 +0,0 @@
-//===-- lib/floatsitf.c - integer -> quad-precision conversion ----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements integer to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatsitf(int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0)
- return fromRep(0);
-
- // All other cases begin by extracting the sign and absolute value of a
- rep_t sign = 0;
- unsigned aAbs = (unsigned)a;
- if (a < 0) {
- sign = signBit;
- aAbs = ~(unsigned)a + 1U;
- }
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(aAbs);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit.
- const int shift = significandBits - exponent;
- result = (rep_t)aAbs << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- // Insert the sign bit and return
- return fromRep(result | sign);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floattidf.c b/lib/libcompiler_rt/floattidf.c
deleted file mode 100644
index 2702a3c8a2d..00000000000
--- a/lib/libcompiler_rt/floattidf.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ===-- floattidf.c - Implement __floattidf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floattidf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a double, rounding toward even.*/
-
-/* Assumption: double is a IEEE 64 bit floating point type
- * ti_int is a 128 bit integral type
- */
-
-/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
-
-COMPILER_RT_ABI double
-__floattidf(ti_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(ti_int) * CHAR_BIT;
- const ti_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > DBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit DBL_MANT_DIG-1 bits to the right of 1
- * Q = bit DBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case DBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case DBL_MANT_DIG + 2:
- break;
- default:
- a = ((tu_int)a >> (sd - (DBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + DBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to DBL_MANT_DIG or DBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << DBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- else
- {
- a <<= (DBL_MANT_DIG - sd);
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- double_bits fb;
- fb.u.s.high = ((su_int)s & 0x80000000) | /* sign */
- ((e + 1023) << 20) | /* exponent */
- ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
- fb.u.s.low = (su_int)a; /* mantissa-low */
- return fb.f;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floattisf.c b/lib/libcompiler_rt/floattisf.c
deleted file mode 100644
index f1b585f2c32..00000000000
--- a/lib/libcompiler_rt/floattisf.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ===-- floattisf.c - Implement __floattisf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floattisf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a float, rounding toward even. */
-
-/* Assumption: float is a IEEE 32 bit floating point type
- * ti_int is a 128 bit integral type
- */
-
-/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
-
-COMPILER_RT_ABI float
-__floattisf(ti_int a)
-{
- if (a == 0)
- return 0.0F;
- const unsigned N = sizeof(ti_int) * CHAR_BIT;
- const ti_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > FLT_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit FLT_MANT_DIG-1 bits to the right of 1
- * Q = bit FLT_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case FLT_MANT_DIG + 1:
- a <<= 1;
- break;
- case FLT_MANT_DIG + 2:
- break;
- default:
- a = ((tu_int)a >> (sd - (FLT_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + FLT_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to FLT_MANT_DIG or FLT_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << FLT_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- else
- {
- a <<= (FLT_MANT_DIG - sd);
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- float_bits fb;
- fb.u = ((su_int)s & 0x80000000) | /* sign */
- ((e + 127) << 23) | /* exponent */
- ((su_int)a & 0x007FFFFF); /* mantissa */
- return fb.f;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floattitf.c b/lib/libcompiler_rt/floattitf.c
deleted file mode 100644
index 994fded3947..00000000000
--- a/lib/libcompiler_rt/floattitf.c
+++ /dev/null
@@ -1,82 +0,0 @@
-//===-- lib/floattitf.c - int128 -> quad-precision conversion -----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements ti_int to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-#include "int_lib.h"
-
-/* Returns: convert a ti_int to a fp_t, rounding toward even. */
-
-/* Assumption: fp_t is a IEEE 128 bit floating point type
- * ti_int is a 128 bit integral type
- */
-
-/* seee eeee eeee eeee mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm |
- * mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t
-__floattitf(ti_int a) {
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(ti_int) * CHAR_BIT;
- const ti_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > LDBL_MANT_DIG) {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit LDBL_MANT_DIG-1 bits to the right of 1
- * Q = bit LDBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd) {
- case LDBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case LDBL_MANT_DIG + 2:
- break;
- default:
- a = ((tu_int)a >> (sd - (LDBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + LDBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << LDBL_MANT_DIG)) {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to LDBL_MANT_DIG bits */
- } else {
- a <<= (LDBL_MANT_DIG - sd);
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
-
- long_double_bits fb;
- fb.u.high.all = (s & 0x8000000000000000LL) /* sign */
- | (du_int)(e + 16383) << 48 /* exponent */
- | ((a >> 64) & 0x0000ffffffffffffLL); /* significand */
- fb.u.low.all = (du_int)(a);
- return fb.f;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floattixf.c b/lib/libcompiler_rt/floattixf.c
deleted file mode 100644
index 1203b3a96e7..00000000000
--- a/lib/libcompiler_rt/floattixf.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ===-- floattixf.c - Implement __floattixf -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floattixf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a long double, rounding toward even. */
-
-/* Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
- * ti_int is a 128 bit integral type
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI long double
-__floattixf(ti_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(ti_int) * CHAR_BIT;
- const ti_int s = a >> (N-1);
- a = (a ^ s) - s;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > LDBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit LDBL_MANT_DIG-1 bits to the right of 1
- * Q = bit LDBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case LDBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case LDBL_MANT_DIG + 2:
- break;
- default:
- a = ((tu_int)a >> (sd - (LDBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + LDBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << LDBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
- else
- {
- a <<= (LDBL_MANT_DIG - sd);
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
- long_double_bits fb;
- fb.u.high.s.low = ((su_int)s & 0x8000) | /* sign */
- (e + 16383); /* exponent */
- fb.u.low.all = (du_int)a; /* mantissa */
- return fb.f;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floatundidf.c b/lib/libcompiler_rt/floatundidf.c
deleted file mode 100644
index 8bc2a096324..00000000000
--- a/lib/libcompiler_rt/floatundidf.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* ===-- floatundidf.c - Implement __floatundidf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatundidf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-/* Returns: convert a to a double, rounding toward even. */
-
-/* Assumption: double is a IEEE 64 bit floating point type
- * du_int is a 64 bit integral type
- */
-
-/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
-
-#include "int_lib.h"
-
-#ifndef __SOFT_FP__
-/* Support for systems that have hardware floating-point; we'll set the inexact flag
- * as a side-effect of this computation.
- */
-
-COMPILER_RT_ABI double
-__floatundidf(du_int a)
-{
- static const double twop52 = 4503599627370496.0; // 0x1.0p52
- static const double twop84 = 19342813113834066795298816.0; // 0x1.0p84
- static const double twop84_plus_twop52 = 19342813118337666422669312.0; // 0x1.00000001p84
-
- union { uint64_t x; double d; } high = { .d = twop84 };
- union { uint64_t x; double d; } low = { .d = twop52 };
-
- high.x |= a >> 32;
- low.x |= a & UINT64_C(0x00000000ffffffff);
-
- const double result = (high.d - twop84_plus_twop52) + low.d;
- return result;
-}
-
-#else
-/* Support for systems that don't have hardware floating-point; there are no flags to
- * set, and we don't want to code-gen to an unknown soft-float implementation.
- */
-
-COMPILER_RT_ABI double
-__floatundidf(du_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(du_int) * CHAR_BIT;
- int sd = N - __builtin_clzll(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > DBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit DBL_MANT_DIG-1 bits to the right of 1
- * Q = bit DBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case DBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case DBL_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (DBL_MANT_DIG+2))) |
- ((a & ((du_int)(-1) >> ((N + DBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to DBL_MANT_DIG or DBL_MANT_DIG+1 bits */
- if (a & ((du_int)1 << DBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- else
- {
- a <<= (DBL_MANT_DIG - sd);
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- double_bits fb;
- fb.u.s.high = ((e + 1023) << 20) | /* exponent */
- ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
- fb.u.s.low = (su_int)a; /* mantissa-low */
- return fb.f;
-}
-#endif
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI double __aeabi_ul2d(du_int a) {
- return __floatundidf(a);
-}
-#else
-AEABI_RTABI double __aeabi_ul2d(du_int a) COMPILER_RT_ALIAS(__floatundidf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatundisf.c b/lib/libcompiler_rt/floatundisf.c
deleted file mode 100644
index 844786ea777..00000000000
--- a/lib/libcompiler_rt/floatundisf.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*===-- floatundisf.c - Implement __floatundisf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatundisf for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-/* Returns: convert a to a float, rounding toward even. */
-
-/* Assumption: float is a IEEE 32 bit floating point type
- * du_int is a 64 bit integral type
- */
-
-/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI float
-__floatundisf(du_int a)
-{
- if (a == 0)
- return 0.0F;
- const unsigned N = sizeof(du_int) * CHAR_BIT;
- int sd = N - __builtin_clzll(a); /* number of significant digits */
- int e = sd - 1; /* 8 exponent */
- if (sd > FLT_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit FLT_MANT_DIG-1 bits to the right of 1
- * Q = bit FLT_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case FLT_MANT_DIG + 1:
- a <<= 1;
- break;
- case FLT_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (FLT_MANT_DIG+2))) |
- ((a & ((du_int)(-1) >> ((N + FLT_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to FLT_MANT_DIG or FLT_MANT_DIG+1 bits */
- if (a & ((du_int)1 << FLT_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- else
- {
- a <<= (FLT_MANT_DIG - sd);
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- float_bits fb;
- fb.u = ((e + 127) << 23) | /* exponent */
- ((su_int)a & 0x007FFFFF); /* mantissa */
- return fb.f;
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI float __aeabi_ul2f(du_int a) {
- return __floatundisf(a);
-}
-#else
-AEABI_RTABI float __aeabi_ul2f(du_int a) COMPILER_RT_ALIAS(__floatundisf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatunditf.c b/lib/libcompiler_rt/floatunditf.c
deleted file mode 100644
index 8098e95e82b..00000000000
--- a/lib/libcompiler_rt/floatunditf.c
+++ /dev/null
@@ -1,40 +0,0 @@
-//===-- lib/floatunditf.c - uint -> quad-precision conversion -----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements du_int to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatunditf(du_int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0) return fromRep(0);
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clzll(a);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit.
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- return fromRep(result);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floatundixf.c b/lib/libcompiler_rt/floatundixf.c
deleted file mode 100644
index ca5e06d64dc..00000000000
--- a/lib/libcompiler_rt/floatundixf.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ===-- floatundixf.c - Implement __floatundixf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatundixf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: convert a to a long double, rounding toward even. */
-
-/* Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
- * du_int is a 64 bit integral type
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-COMPILER_RT_ABI long double
-__floatundixf(du_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(du_int) * CHAR_BIT;
- int clz = __builtin_clzll(a);
- int e = (N - 1) - clz ; /* exponent */
- long_double_bits fb;
- fb.u.high.s.low = (e + 16383); /* exponent */
- fb.u.low.all = a << clz; /* mantissa */
- return fb.f;
-}
-
-#endif /* _ARCH_PPC */
diff --git a/lib/libcompiler_rt/floatunsidf.c b/lib/libcompiler_rt/floatunsidf.c
deleted file mode 100644
index 75cf6b9177d..00000000000
--- a/lib/libcompiler_rt/floatunsidf.c
+++ /dev/null
@@ -1,50 +0,0 @@
-//===-- lib/floatunsidf.c - uint -> double-precision conversion ---*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements unsigned integer to double-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI fp_t
-__floatunsidf(unsigned int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0) return fromRep(0);
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit.
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- return fromRep(result);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_ui2d(unsigned int a) {
- return __floatunsidf(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_ui2d(unsigned int a) COMPILER_RT_ALIAS(__floatunsidf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatunsisf.c b/lib/libcompiler_rt/floatunsisf.c
deleted file mode 100644
index 29525ccedbb..00000000000
--- a/lib/libcompiler_rt/floatunsisf.c
+++ /dev/null
@@ -1,58 +0,0 @@
-//===-- lib/floatunsisf.c - uint -> single-precision conversion ---*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements unsigned integer to single-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI fp_t
-__floatunsisf(unsigned int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0) return fromRep(0);
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field, rounding if it is a right-shift
- if (exponent <= significandBits) {
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
- } else {
- const int shift = exponent - significandBits;
- result = (rep_t)a >> shift ^ implicitBit;
- rep_t round = (rep_t)a << (typeWidth - shift);
- if (round > signBit) result++;
- if (round == signBit) result += result & 1;
- }
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- return fromRep(result);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_ui2f(unsigned int a) {
- return __floatunsisf(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_ui2f(unsigned int a) COMPILER_RT_ALIAS(__floatunsisf);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/floatunsitf.c b/lib/libcompiler_rt/floatunsitf.c
deleted file mode 100644
index 1cd1842e709..00000000000
--- a/lib/libcompiler_rt/floatunsitf.c
+++ /dev/null
@@ -1,40 +0,0 @@
-//===-- lib/floatunsitf.c - uint -> quad-precision conversion -----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements unsigned integer to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatunsitf(unsigned int a) {
-
- const int aWidth = sizeof a * CHAR_BIT;
-
- // Handle zero as a special case to protect clz
- if (a == 0) return fromRep(0);
-
- // Exponent of (fp_t)a is the width of abs(a).
- const int exponent = (aWidth - 1) - __builtin_clz(a);
- rep_t result;
-
- // Shift a into the significand field and clear the implicit bit.
- const int shift = significandBits - exponent;
- result = (rep_t)a << shift ^ implicitBit;
-
- // Insert the exponent
- result += (rep_t)(exponent + exponentBias) << significandBits;
- return fromRep(result);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floatuntidf.c b/lib/libcompiler_rt/floatuntidf.c
deleted file mode 100644
index 960265d8077..00000000000
--- a/lib/libcompiler_rt/floatuntidf.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ===-- floatuntidf.c - Implement __floatuntidf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatuntidf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a double, rounding toward even. */
-
-/* Assumption: double is a IEEE 64 bit floating point type
- * tu_int is a 128 bit integral type
- */
-
-/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm */
-
-COMPILER_RT_ABI double
-__floatuntidf(tu_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(tu_int) * CHAR_BIT;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > DBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit DBL_MANT_DIG-1 bits to the right of 1
- * Q = bit DBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case DBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case DBL_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (DBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + DBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to DBL_MANT_DIG or DBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << DBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- else
- {
- a <<= (DBL_MANT_DIG - sd);
- /* a is now rounded to DBL_MANT_DIG bits */
- }
- double_bits fb;
- fb.u.s.high = ((e + 1023) << 20) | /* exponent */
- ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
- fb.u.s.low = (su_int)a; /* mantissa-low */
- return fb.f;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floatuntisf.c b/lib/libcompiler_rt/floatuntisf.c
deleted file mode 100644
index c0dd0275ddb..00000000000
--- a/lib/libcompiler_rt/floatuntisf.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ===-- floatuntisf.c - Implement __floatuntisf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatuntisf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a float, rounding toward even. */
-
-/* Assumption: float is a IEEE 32 bit floating point type
- * tu_int is a 128 bit integral type
- */
-
-/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
-
-COMPILER_RT_ABI float
-__floatuntisf(tu_int a)
-{
- if (a == 0)
- return 0.0F;
- const unsigned N = sizeof(tu_int) * CHAR_BIT;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > FLT_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit FLT_MANT_DIG-1 bits to the right of 1
- * Q = bit FLT_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case FLT_MANT_DIG + 1:
- a <<= 1;
- break;
- case FLT_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (FLT_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + FLT_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to FLT_MANT_DIG or FLT_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << FLT_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- else
- {
- a <<= (FLT_MANT_DIG - sd);
- /* a is now rounded to FLT_MANT_DIG bits */
- }
- float_bits fb;
- fb.u = ((e + 127) << 23) | /* exponent */
- ((su_int)a & 0x007FFFFF); /* mantissa */
- return fb.f;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/floatuntitf.c b/lib/libcompiler_rt/floatuntitf.c
deleted file mode 100644
index e2518c93f23..00000000000
--- a/lib/libcompiler_rt/floatuntitf.c
+++ /dev/null
@@ -1,79 +0,0 @@
-//===-- lib/floatuntitf.c - uint128 -> quad-precision conversion --*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements tu_int to quad-precision conversion for the
-// compiler-rt library in the IEEE-754 default round-to-nearest, ties-to-even
-// mode.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-#include "int_lib.h"
-
-/* Returns: convert a tu_int to a fp_t, rounding toward even. */
-
-/* Assumption: fp_t is a IEEE 128 bit floating point type
- * tu_int is a 128 bit integral type
- */
-
-/* seee eeee eeee eeee mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm |
- * mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t
-__floatuntitf(tu_int a) {
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(tu_int) * CHAR_BIT;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > LDBL_MANT_DIG) {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit LDBL_MANT_DIG-1 bits to the right of 1
- * Q = bit LDBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd) {
- case LDBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case LDBL_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (LDBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + LDBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << LDBL_MANT_DIG)) {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to LDBL_MANT_DIG bits */
- } else {
- a <<= (LDBL_MANT_DIG - sd);
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
-
- long_double_bits fb;
- fb.u.high.all = (du_int)(e + 16383) << 48 /* exponent */
- | ((a >> 64) & 0x0000ffffffffffffLL); /* significand */
- fb.u.low.all = (du_int)(a);
- return fb.f;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/floatuntixf.c b/lib/libcompiler_rt/floatuntixf.c
deleted file mode 100644
index ea81cb1bcda..00000000000
--- a/lib/libcompiler_rt/floatuntixf.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ===-- floatuntixf.c - Implement __floatuntixf ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __floatuntixf for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: convert a to a long double, rounding toward even. */
-
-/* Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
- * tu_int is a 128 bit integral type
- */
-
-/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
- * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
- */
-
-COMPILER_RT_ABI long double
-__floatuntixf(tu_int a)
-{
- if (a == 0)
- return 0.0;
- const unsigned N = sizeof(tu_int) * CHAR_BIT;
- int sd = N - __clzti2(a); /* number of significant digits */
- int e = sd - 1; /* exponent */
- if (sd > LDBL_MANT_DIG)
- {
- /* start: 0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
- * finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
- * 12345678901234567890123456
- * 1 = msb 1 bit
- * P = bit LDBL_MANT_DIG-1 bits to the right of 1
- * Q = bit LDBL_MANT_DIG bits to the right of 1
- * R = "or" of all bits to the right of Q
- */
- switch (sd)
- {
- case LDBL_MANT_DIG + 1:
- a <<= 1;
- break;
- case LDBL_MANT_DIG + 2:
- break;
- default:
- a = (a >> (sd - (LDBL_MANT_DIG+2))) |
- ((a & ((tu_int)(-1) >> ((N + LDBL_MANT_DIG+2) - sd))) != 0);
- };
- /* finish: */
- a |= (a & 4) != 0; /* Or P into R */
- ++a; /* round - this step may add a significant bit */
- a >>= 2; /* dump Q and R */
- /* a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits */
- if (a & ((tu_int)1 << LDBL_MANT_DIG))
- {
- a >>= 1;
- ++e;
- }
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
- else
- {
- a <<= (LDBL_MANT_DIG - sd);
- /* a is now rounded to LDBL_MANT_DIG bits */
- }
- long_double_bits fb;
- fb.u.high.s.low = (e + 16383); /* exponent */
- fb.u.low.all = (du_int)a; /* mantissa */
- return fb.f;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/fp_add_impl.inc b/lib/libcompiler_rt/fp_add_impl.inc
deleted file mode 100644
index b47be1b648e..00000000000
--- a/lib/libcompiler_rt/fp_add_impl.inc
+++ /dev/null
@@ -1,144 +0,0 @@
-//===----- lib/fp_add_impl.inc - floaing point addition -----------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements soft-float addition with the IEEE-754 default rounding
-// (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_lib.h"
-
-static __inline fp_t __addXf3__(fp_t a, fp_t b) {
- rep_t aRep = toRep(a);
- rep_t bRep = toRep(b);
- const rep_t aAbs = aRep & absMask;
- const rep_t bAbs = bRep & absMask;
-
- // Detect if a or b is zero, infinity, or NaN.
- if (aAbs - REP_C(1) >= infRep - REP_C(1) ||
- bAbs - REP_C(1) >= infRep - REP_C(1)) {
- // NaN + anything = qNaN
- if (aAbs > infRep) return fromRep(toRep(a) | quietBit);
- // anything + NaN = qNaN
- if (bAbs > infRep) return fromRep(toRep(b) | quietBit);
-
- if (aAbs == infRep) {
- // +/-infinity + -/+infinity = qNaN
- if ((toRep(a) ^ toRep(b)) == signBit) return fromRep(qnanRep);
- // +/-infinity + anything remaining = +/- infinity
- else return a;
- }
-
- // anything remaining + +/-infinity = +/-infinity
- if (bAbs == infRep) return b;
-
- // zero + anything = anything
- if (!aAbs) {
- // but we need to get the sign right for zero + zero
- if (!bAbs) return fromRep(toRep(a) & toRep(b));
- else return b;
- }
-
- // anything + zero = anything
- if (!bAbs) return a;
- }
-
- // Swap a and b if necessary so that a has the larger absolute value.
- if (bAbs > aAbs) {
- const rep_t temp = aRep;
- aRep = bRep;
- bRep = temp;
- }
-
- // Extract the exponent and significand from the (possibly swapped) a and b.
- int aExponent = aRep >> significandBits & maxExponent;
- int bExponent = bRep >> significandBits & maxExponent;
- rep_t aSignificand = aRep & significandMask;
- rep_t bSignificand = bRep & significandMask;
-
- // Normalize any denormals, and adjust the exponent accordingly.
- if (aExponent == 0) aExponent = normalize(&aSignificand);
- if (bExponent == 0) bExponent = normalize(&bSignificand);
-
- // The sign of the result is the sign of the larger operand, a. If they
- // have opposite signs, we are performing a subtraction; otherwise addition.
- const rep_t resultSign = aRep & signBit;
- const bool subtraction = (aRep ^ bRep) & signBit;
-
- // Shift the significands to give us round, guard and sticky, and or in the
- // implicit significand bit. (If we fell through from the denormal path it
- // was already set by normalize( ), but setting it twice won't hurt
- // anything.)
- aSignificand = (aSignificand | implicitBit) << 3;
- bSignificand = (bSignificand | implicitBit) << 3;
-
- // Shift the significand of b by the difference in exponents, with a sticky
- // bottom bit to get rounding correct.
- const unsigned int align = aExponent - bExponent;
- if (align) {
- if (align < typeWidth) {
- const bool sticky = bSignificand << (typeWidth - align);
- bSignificand = bSignificand >> align | sticky;
- } else {
- bSignificand = 1; // sticky; b is known to be non-zero.
- }
- }
- if (subtraction) {
- aSignificand -= bSignificand;
- // If a == -b, return +zero.
- if (aSignificand == 0) return fromRep(0);
-
- // If partial cancellation occured, we need to left-shift the result
- // and adjust the exponent:
- if (aSignificand < implicitBit << 3) {
- const int shift = rep_clz(aSignificand) - rep_clz(implicitBit << 3);
- aSignificand <<= shift;
- aExponent -= shift;
- }
- }
- else /* addition */ {
- aSignificand += bSignificand;
-
- // If the addition carried up, we need to right-shift the result and
- // adjust the exponent:
- if (aSignificand & implicitBit << 4) {
- const bool sticky = aSignificand & 1;
- aSignificand = aSignificand >> 1 | sticky;
- aExponent += 1;
- }
- }
-
- // If we have overflowed the type, return +/- infinity:
- if (aExponent >= maxExponent) return fromRep(infRep | resultSign);
-
- if (aExponent <= 0) {
- // Result is denormal before rounding; the exponent is zero and we
- // need to shift the significand.
- const int shift = 1 - aExponent;
- const bool sticky = aSignificand << (typeWidth - shift);
- aSignificand = aSignificand >> shift | sticky;
- aExponent = 0;
- }
-
- // Low three bits are round, guard, and sticky.
- const int roundGuardSticky = aSignificand & 0x7;
-
- // Shift the significand into place, and mask off the implicit bit.
- rep_t result = aSignificand >> 3 & significandMask;
-
- // Insert the exponent and sign.
- result |= (rep_t)aExponent << significandBits;
- result |= resultSign;
-
- // Final rounding. The result may overflow to infinity, but that is the
- // correct result in that case.
- if (roundGuardSticky > 0x4) result++;
- if (roundGuardSticky == 0x4) result += result & 1;
- return fromRep(result);
-}
diff --git a/lib/libcompiler_rt/fp_extend.h b/lib/libcompiler_rt/fp_extend.h
deleted file mode 100644
index 6d95a068070..00000000000
--- a/lib/libcompiler_rt/fp_extend.h
+++ /dev/null
@@ -1,89 +0,0 @@
-//===-lib/fp_extend.h - low precision -> high precision conversion -*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Set source and destination setting
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef FP_EXTEND_HEADER
-#define FP_EXTEND_HEADER
-
-#include "int_lib.h"
-
-#if defined SRC_SINGLE
-typedef float src_t;
-typedef uint32_t src_rep_t;
-#define SRC_REP_C UINT32_C
-static const int srcSigBits = 23;
-#define src_rep_t_clz __builtin_clz
-
-#elif defined SRC_DOUBLE
-typedef double src_t;
-typedef uint64_t src_rep_t;
-#define SRC_REP_C UINT64_C
-static const int srcSigBits = 52;
-static __inline int src_rep_t_clz(src_rep_t a) {
-#if defined __LP64__
- return __builtin_clzl(a);
-#else
- if (a & REP_C(0xffffffff00000000))
- return __builtin_clz(a >> 32);
- else
- return 32 + __builtin_clz(a & REP_C(0xffffffff));
-#endif
-}
-
-#elif defined SRC_HALF
-typedef uint16_t src_t;
-typedef uint16_t src_rep_t;
-#define SRC_REP_C UINT16_C
-static const int srcSigBits = 10;
-#define src_rep_t_clz __builtin_clz
-
-#else
-#error Source should be half, single, or double precision!
-#endif //end source precision
-
-#if defined DST_SINGLE
-typedef float dst_t;
-typedef uint32_t dst_rep_t;
-#define DST_REP_C UINT32_C
-static const int dstSigBits = 23;
-
-#elif defined DST_DOUBLE
-typedef double dst_t;
-typedef uint64_t dst_rep_t;
-#define DST_REP_C UINT64_C
-static const int dstSigBits = 52;
-
-#elif defined DST_QUAD
-typedef long double dst_t;
-typedef __uint128_t dst_rep_t;
-#define DST_REP_C (__uint128_t)
-static const int dstSigBits = 112;
-
-#else
-#error Destination should be single, double, or quad precision!
-#endif //end destination precision
-
-// End of specialization parameters. Two helper routines for conversion to and
-// from the representation of floating-point data as integer values follow.
-
-static __inline src_rep_t srcToRep(src_t x) {
- const union { src_t f; src_rep_t i; } rep = {.f = x};
- return rep.i;
-}
-
-static __inline dst_t dstFromRep(dst_rep_t x) {
- const union { dst_t f; dst_rep_t i; } rep = {.i = x};
- return rep.f;
-}
-// End helper routines. Conversion implementation follows.
-
-#endif //FP_EXTEND_HEADER
diff --git a/lib/libcompiler_rt/fp_extend_impl.inc b/lib/libcompiler_rt/fp_extend_impl.inc
deleted file mode 100644
index b785cc7687a..00000000000
--- a/lib/libcompiler_rt/fp_extend_impl.inc
+++ /dev/null
@@ -1,108 +0,0 @@
-//=-lib/fp_extend_impl.inc - low precision -> high precision conversion -*-- -//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements a fairly generic conversion from a narrower to a wider
-// IEEE-754 floating-point type. The constants and types defined following the
-// includes below parameterize the conversion.
-//
-// It does not support types that don't use the usual IEEE-754 interchange
-// formats; specifically, some work would be needed to adapt it to
-// (for example) the Intel 80-bit format or PowerPC double-double format.
-//
-// Note please, however, that this implementation is only intended to support
-// *widening* operations; if you need to convert to a *narrower* floating-point
-// type (e.g. double -> float), then this routine will not do what you want it
-// to.
-//
-// It also requires that integer types at least as large as both formats
-// are available on the target platform; this may pose a problem when trying
-// to add support for quad on some 32-bit systems, for example. You also may
-// run into trouble finding an appropriate CLZ function for wide source types;
-// you will likely need to roll your own on some platforms.
-//
-// Finally, the following assumptions are made:
-//
-// 1. floating-point types and integer types have the same endianness on the
-// target platform
-//
-// 2. quiet NaNs, if supported, are indicated by the leading bit of the
-// significand field being set
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_extend.h"
-
-static __inline dst_t __extendXfYf2__(src_t a) {
- // Various constants whose values follow from the type parameters.
- // Any reasonable optimizer will fold and propagate all of these.
- const int srcBits = sizeof(src_t)*CHAR_BIT;
- const int srcExpBits = srcBits - srcSigBits - 1;
- const int srcInfExp = (1 << srcExpBits) - 1;
- const int srcExpBias = srcInfExp >> 1;
-
- const src_rep_t srcMinNormal = SRC_REP_C(1) << srcSigBits;
- const src_rep_t srcInfinity = (src_rep_t)srcInfExp << srcSigBits;
- const src_rep_t srcSignMask = SRC_REP_C(1) << (srcSigBits + srcExpBits);
- const src_rep_t srcAbsMask = srcSignMask - 1;
- const src_rep_t srcQNaN = SRC_REP_C(1) << (srcSigBits - 1);
- const src_rep_t srcNaNCode = srcQNaN - 1;
-
- const int dstBits = sizeof(dst_t)*CHAR_BIT;
- const int dstExpBits = dstBits - dstSigBits - 1;
- const int dstInfExp = (1 << dstExpBits) - 1;
- const int dstExpBias = dstInfExp >> 1;
-
- const dst_rep_t dstMinNormal = DST_REP_C(1) << dstSigBits;
-
- // Break a into a sign and representation of the absolute value
- const src_rep_t aRep = srcToRep(a);
- const src_rep_t aAbs = aRep & srcAbsMask;
- const src_rep_t sign = aRep & srcSignMask;
- dst_rep_t absResult;
-
- // If sizeof(src_rep_t) < sizeof(int), the subtraction result is promoted
- // to (signed) int. To avoid that, explicitly cast to src_rep_t.
- if ((src_rep_t)(aAbs - srcMinNormal) < srcInfinity - srcMinNormal) {
- // a is a normal number.
- // Extend to the destination type by shifting the significand and
- // exponent into the proper position and rebiasing the exponent.
- absResult = (dst_rep_t)aAbs << (dstSigBits - srcSigBits);
- absResult += (dst_rep_t)(dstExpBias - srcExpBias) << dstSigBits;
- }
-
- else if (aAbs >= srcInfinity) {
- // a is NaN or infinity.
- // Conjure the result by beginning with infinity, then setting the qNaN
- // bit (if needed) and right-aligning the rest of the trailing NaN
- // payload field.
- absResult = (dst_rep_t)dstInfExp << dstSigBits;
- absResult |= (dst_rep_t)(aAbs & srcQNaN) << (dstSigBits - srcSigBits);
- absResult |= (dst_rep_t)(aAbs & srcNaNCode) << (dstSigBits - srcSigBits);
- }
-
- else if (aAbs) {
- // a is denormal.
- // renormalize the significand and clear the leading bit, then insert
- // the correct adjusted exponent in the destination type.
- const int scale = src_rep_t_clz(aAbs) - src_rep_t_clz(srcMinNormal);
- absResult = (dst_rep_t)aAbs << (dstSigBits - srcSigBits + scale);
- absResult ^= dstMinNormal;
- const int resultExponent = dstExpBias - srcExpBias - scale + 1;
- absResult |= (dst_rep_t)resultExponent << dstSigBits;
- }
-
- else {
- // a is zero.
- absResult = 0;
- }
-
- // Apply the signbit to (dst_t)abs(a).
- const dst_rep_t result = absResult | (dst_rep_t)sign << (dstBits - srcBits);
- return dstFromRep(result);
-}
diff --git a/lib/libcompiler_rt/fp_fixint_impl.inc b/lib/libcompiler_rt/fp_fixint_impl.inc
deleted file mode 100644
index da70d4d3930..00000000000
--- a/lib/libcompiler_rt/fp_fixint_impl.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-//===-- lib/fixdfsi.c - Double-precision -> integer conversion ----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements float to integer conversion for the
-// compiler-rt library.
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_lib.h"
-
-static __inline fixint_t __fixint(fp_t a) {
- const fixint_t fixint_max = (fixint_t)((~(fixuint_t)0) / 2);
- const fixint_t fixint_min = -fixint_max - 1;
- // Break a into sign, exponent, significand
- const rep_t aRep = toRep(a);
- const rep_t aAbs = aRep & absMask;
- const fixint_t sign = aRep & signBit ? -1 : 1;
- const int exponent = (aAbs >> significandBits) - exponentBias;
- const rep_t significand = (aAbs & significandMask) | implicitBit;
-
- // If exponent is negative, the result is zero.
- if (exponent < 0)
- return 0;
-
- // If the value is too large for the integer type, saturate.
- if ((unsigned)exponent >= sizeof(fixint_t) * CHAR_BIT)
- return sign == 1 ? fixint_max : fixint_min;
-
- // If 0 <= exponent < significandBits, right shift to get the result.
- // Otherwise, shift left.
- if (exponent < significandBits)
- return sign * (significand >> (significandBits - exponent));
- else
- return sign * ((fixint_t)significand << (exponent - significandBits));
-}
diff --git a/lib/libcompiler_rt/fp_fixuint_impl.inc b/lib/libcompiler_rt/fp_fixuint_impl.inc
deleted file mode 100644
index d68ccf27a79..00000000000
--- a/lib/libcompiler_rt/fp_fixuint_impl.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-//===-- lib/fixdfsi.c - Double-precision -> integer conversion ----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements float to unsigned integer conversion for the
-// compiler-rt library.
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_lib.h"
-
-static __inline fixuint_t __fixuint(fp_t a) {
- // Break a into sign, exponent, significand
- const rep_t aRep = toRep(a);
- const rep_t aAbs = aRep & absMask;
- const int sign = aRep & signBit ? -1 : 1;
- const int exponent = (aAbs >> significandBits) - exponentBias;
- const rep_t significand = (aAbs & significandMask) | implicitBit;
-
- // If either the value or the exponent is negative, the result is zero.
- if (sign == -1 || exponent < 0)
- return 0;
-
- // If the value is too large for the integer type, saturate.
- if ((unsigned)exponent >= sizeof(fixuint_t) * CHAR_BIT)
- return ~(fixuint_t)0;
-
- // If 0 <= exponent < significandBits, right shift to get the result.
- // Otherwise, shift left.
- if (exponent < significandBits)
- return significand >> (significandBits - exponent);
- else
- return (fixuint_t)significand << (exponent - significandBits);
-}
diff --git a/lib/libcompiler_rt/fp_lib.h b/lib/libcompiler_rt/fp_lib.h
deleted file mode 100644
index a0e19ab6a8f..00000000000
--- a/lib/libcompiler_rt/fp_lib.h
+++ /dev/null
@@ -1,327 +0,0 @@
-//===-- lib/fp_lib.h - Floating-point utilities -------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file is a configuration header for soft-float routines in compiler-rt.
-// This file does not provide any part of the compiler-rt interface, but defines
-// many useful constants and utility routines that are used in the
-// implementation of the soft-float routines in compiler-rt.
-//
-// Assumes that float, double and long double correspond to the IEEE-754
-// binary32, binary64 and binary 128 types, respectively, and that integer
-// endianness matches floating point endianness on the target platform.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef FP_LIB_HEADER
-#define FP_LIB_HEADER
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <limits.h>
-#include "int_lib.h"
-#include "int_math.h"
-
-// x86_64 FreeBSD prior v9.3 define fixed-width types incorrectly in
-// 32-bit mode.
-#if defined(__FreeBSD__) && defined(__i386__)
-# include <sys/param.h>
-# if __FreeBSD_version < 903000 // v9.3
-# define uint64_t unsigned long long
-# define int64_t long long
-# undef UINT64_C
-# define UINT64_C(c) (c ## ULL)
-# endif
-#endif
-
-#if defined SINGLE_PRECISION
-
-typedef uint32_t rep_t;
-typedef int32_t srep_t;
-typedef float fp_t;
-#define REP_C UINT32_C
-#define significandBits 23
-
-static __inline int rep_clz(rep_t a) {
- return __builtin_clz(a);
-}
-
-// 32x32 --> 64 bit multiply
-static __inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
- const uint64_t product = (uint64_t)a*b;
- *hi = product >> 32;
- *lo = product;
-}
-COMPILER_RT_ABI fp_t __addsf3(fp_t a, fp_t b);
-
-#elif defined DOUBLE_PRECISION
-
-typedef uint64_t rep_t;
-typedef int64_t srep_t;
-typedef double fp_t;
-#define REP_C UINT64_C
-#define significandBits 52
-
-static __inline int rep_clz(rep_t a) {
-#if defined __LP64__
- return __builtin_clzl(a);
-#else
- if (a & REP_C(0xffffffff00000000))
- return __builtin_clz(a >> 32);
- else
- return 32 + __builtin_clz(a & REP_C(0xffffffff));
-#endif
-}
-
-#define loWord(a) (a & 0xffffffffU)
-#define hiWord(a) (a >> 32)
-
-// 64x64 -> 128 wide multiply for platforms that don't have such an operation;
-// many 64-bit platforms have this operation, but they tend to have hardware
-// floating-point, so we don't bother with a special case for them here.
-static __inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
- // Each of the component 32x32 -> 64 products
- const uint64_t plolo = loWord(a) * loWord(b);
- const uint64_t plohi = loWord(a) * hiWord(b);
- const uint64_t philo = hiWord(a) * loWord(b);
- const uint64_t phihi = hiWord(a) * hiWord(b);
- // Sum terms that contribute to lo in a way that allows us to get the carry
- const uint64_t r0 = loWord(plolo);
- const uint64_t r1 = hiWord(plolo) + loWord(plohi) + loWord(philo);
- *lo = r0 + (r1 << 32);
- // Sum terms contributing to hi with the carry from lo
- *hi = hiWord(plohi) + hiWord(philo) + hiWord(r1) + phihi;
-}
-#undef loWord
-#undef hiWord
-
-COMPILER_RT_ABI fp_t __adddf3(fp_t a, fp_t b);
-
-#elif defined QUAD_PRECISION
-#if __LDBL_MANT_DIG__ == 113
-#define CRT_LDBL_128BIT
-typedef __uint128_t rep_t;
-typedef __int128_t srep_t;
-typedef long double fp_t;
-#define REP_C (__uint128_t)
-// Note: Since there is no explicit way to tell compiler the constant is a
-// 128-bit integer, we let the constant be casted to 128-bit integer
-#define significandBits 112
-
-static __inline int rep_clz(rep_t a) {
- const union
- {
- __uint128_t ll;
-#if _YUGA_BIG_ENDIAN
- struct { uint64_t high, low; } s;
-#else
- struct { uint64_t low, high; } s;
-#endif
- } uu = { .ll = a };
-
- uint64_t word;
- uint64_t add;
-
- if (uu.s.high){
- word = uu.s.high;
- add = 0;
- }
- else{
- word = uu.s.low;
- add = 64;
- }
- return __builtin_clzll(word) + add;
-}
-
-#define Word_LoMask UINT64_C(0x00000000ffffffff)
-#define Word_HiMask UINT64_C(0xffffffff00000000)
-#define Word_FullMask UINT64_C(0xffffffffffffffff)
-#define Word_1(a) (uint64_t)((a >> 96) & Word_LoMask)
-#define Word_2(a) (uint64_t)((a >> 64) & Word_LoMask)
-#define Word_3(a) (uint64_t)((a >> 32) & Word_LoMask)
-#define Word_4(a) (uint64_t)(a & Word_LoMask)
-
-// 128x128 -> 256 wide multiply for platforms that don't have such an operation;
-// many 64-bit platforms have this operation, but they tend to have hardware
-// floating-point, so we don't bother with a special case for them here.
-static __inline void wideMultiply(rep_t a, rep_t b, rep_t *hi, rep_t *lo) {
-
- const uint64_t product11 = Word_1(a) * Word_1(b);
- const uint64_t product12 = Word_1(a) * Word_2(b);
- const uint64_t product13 = Word_1(a) * Word_3(b);
- const uint64_t product14 = Word_1(a) * Word_4(b);
- const uint64_t product21 = Word_2(a) * Word_1(b);
- const uint64_t product22 = Word_2(a) * Word_2(b);
- const uint64_t product23 = Word_2(a) * Word_3(b);
- const uint64_t product24 = Word_2(a) * Word_4(b);
- const uint64_t product31 = Word_3(a) * Word_1(b);
- const uint64_t product32 = Word_3(a) * Word_2(b);
- const uint64_t product33 = Word_3(a) * Word_3(b);
- const uint64_t product34 = Word_3(a) * Word_4(b);
- const uint64_t product41 = Word_4(a) * Word_1(b);
- const uint64_t product42 = Word_4(a) * Word_2(b);
- const uint64_t product43 = Word_4(a) * Word_3(b);
- const uint64_t product44 = Word_4(a) * Word_4(b);
-
- const __uint128_t sum0 = (__uint128_t)product44;
- const __uint128_t sum1 = (__uint128_t)product34 +
- (__uint128_t)product43;
- const __uint128_t sum2 = (__uint128_t)product24 +
- (__uint128_t)product33 +
- (__uint128_t)product42;
- const __uint128_t sum3 = (__uint128_t)product14 +
- (__uint128_t)product23 +
- (__uint128_t)product32 +
- (__uint128_t)product41;
- const __uint128_t sum4 = (__uint128_t)product13 +
- (__uint128_t)product22 +
- (__uint128_t)product31;
- const __uint128_t sum5 = (__uint128_t)product12 +
- (__uint128_t)product21;
- const __uint128_t sum6 = (__uint128_t)product11;
-
- const __uint128_t r0 = (sum0 & Word_FullMask) +
- ((sum1 & Word_LoMask) << 32);
- const __uint128_t r1 = (sum0 >> 64) +
- ((sum1 >> 32) & Word_FullMask) +
- (sum2 & Word_FullMask) +
- ((sum3 << 32) & Word_HiMask);
-
- *lo = r0 + (r1 << 64);
- *hi = (r1 >> 64) +
- (sum1 >> 96) +
- (sum2 >> 64) +
- (sum3 >> 32) +
- sum4 +
- (sum5 << 32) +
- (sum6 << 64);
-}
-#undef Word_1
-#undef Word_2
-#undef Word_3
-#undef Word_4
-#undef Word_HiMask
-#undef Word_LoMask
-#undef Word_FullMask
-#endif // __LDBL_MANT_DIG__ == 113
-#else
-#error SINGLE_PRECISION, DOUBLE_PRECISION or QUAD_PRECISION must be defined.
-#endif
-
-#if defined(SINGLE_PRECISION) || defined(DOUBLE_PRECISION) || defined(CRT_LDBL_128BIT)
-#define typeWidth (sizeof(rep_t)*CHAR_BIT)
-#define exponentBits (typeWidth - significandBits - 1)
-#define maxExponent ((1 << exponentBits) - 1)
-#define exponentBias (maxExponent >> 1)
-
-#define implicitBit (REP_C(1) << significandBits)
-#define significandMask (implicitBit - 1U)
-#define signBit (REP_C(1) << (significandBits + exponentBits))
-#define absMask (signBit - 1U)
-#define exponentMask (absMask ^ significandMask)
-#define oneRep ((rep_t)exponentBias << significandBits)
-#define infRep exponentMask
-#define quietBit (implicitBit >> 1)
-#define qnanRep (exponentMask | quietBit)
-
-static __inline rep_t toRep(fp_t x) {
- const union { fp_t f; rep_t i; } rep = {.f = x};
- return rep.i;
-}
-
-static __inline fp_t fromRep(rep_t x) {
- const union { fp_t f; rep_t i; } rep = {.i = x};
- return rep.f;
-}
-
-static __inline int normalize(rep_t *significand) {
- const int shift = rep_clz(*significand) - rep_clz(implicitBit);
- *significand <<= shift;
- return 1 - shift;
-}
-
-static __inline void wideLeftShift(rep_t *hi, rep_t *lo, int count) {
- *hi = *hi << count | *lo >> (typeWidth - count);
- *lo = *lo << count;
-}
-
-static __inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, unsigned int count) {
- if (count < typeWidth) {
- const bool sticky = *lo << (typeWidth - count);
- *lo = *hi << (typeWidth - count) | *lo >> count | sticky;
- *hi = *hi >> count;
- }
- else if (count < 2*typeWidth) {
- const bool sticky = *hi << (2*typeWidth - count) | *lo;
- *lo = *hi >> (count - typeWidth) | sticky;
- *hi = 0;
- } else {
- const bool sticky = *hi | *lo;
- *lo = sticky;
- *hi = 0;
- }
-}
-
-// Implements logb methods (logb, logbf, logbl) for IEEE-754. This avoids
-// pulling in a libm dependency from compiler-rt, but is not meant to replace
-// it (i.e. code calling logb() should get the one from libm, not this), hence
-// the __compiler_rt prefix.
-static __inline fp_t __compiler_rt_logbX(fp_t x) {
- rep_t rep = toRep(x);
- int exp = (rep & exponentMask) >> significandBits;
-
- // Abnormal cases:
- // 1) +/- inf returns +inf; NaN returns NaN
- // 2) 0.0 returns -inf
- if (exp == maxExponent) {
- if (((rep & signBit) == 0) || (x != x)) {
- return x; // NaN or +inf: return x
- } else {
- return -x; // -inf: return -x
- }
- } else if (x == 0.0) {
- // 0.0: return -inf
- return fromRep(infRep | signBit);
- }
-
- if (exp != 0) {
- // Normal number
- return exp - exponentBias; // Unbias exponent
- } else {
- // Subnormal number; normalize and repeat
- rep &= absMask;
- const int shift = 1 - normalize(&rep);
- exp = (rep & exponentMask) >> significandBits;
- return exp - exponentBias - shift; // Unbias exponent
- }
-}
-#endif
-
-#if defined(SINGLE_PRECISION)
-static __inline fp_t __compiler_rt_logbf(fp_t x) {
- return __compiler_rt_logbX(x);
-}
-#elif defined(DOUBLE_PRECISION)
-static __inline fp_t __compiler_rt_logb(fp_t x) {
- return __compiler_rt_logbX(x);
-}
-#elif defined(QUAD_PRECISION)
- #if defined(CRT_LDBL_128BIT)
-static __inline fp_t __compiler_rt_logbl(fp_t x) {
- return __compiler_rt_logbX(x);
-}
- #else
-// The generic implementation only works for ieee754 floating point. For other
-// floating point types, continue to rely on the libm implementation for now.
-static __inline long double __compiler_rt_logbl(long double x) {
- return crt_logbl(x);
-}
- #endif
-#endif
-
-#endif // FP_LIB_HEADER
diff --git a/lib/libcompiler_rt/fp_mul_impl.inc b/lib/libcompiler_rt/fp_mul_impl.inc
deleted file mode 100644
index b34aa1b8f54..00000000000
--- a/lib/libcompiler_rt/fp_mul_impl.inc
+++ /dev/null
@@ -1,116 +0,0 @@
-//===---- lib/fp_mul_impl.inc - floating point multiplication -----*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements soft-float multiplication with the IEEE-754 default
-// rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_lib.h"
-
-static __inline fp_t __mulXf3__(fp_t a, fp_t b) {
- const unsigned int aExponent = toRep(a) >> significandBits & maxExponent;
- const unsigned int bExponent = toRep(b) >> significandBits & maxExponent;
- const rep_t productSign = (toRep(a) ^ toRep(b)) & signBit;
-
- rep_t aSignificand = toRep(a) & significandMask;
- rep_t bSignificand = toRep(b) & significandMask;
- int scale = 0;
-
- // Detect if a or b is zero, denormal, infinity, or NaN.
- if (aExponent-1U >= maxExponent-1U || bExponent-1U >= maxExponent-1U) {
-
- const rep_t aAbs = toRep(a) & absMask;
- const rep_t bAbs = toRep(b) & absMask;
-
- // NaN * anything = qNaN
- if (aAbs > infRep) return fromRep(toRep(a) | quietBit);
- // anything * NaN = qNaN
- if (bAbs > infRep) return fromRep(toRep(b) | quietBit);
-
- if (aAbs == infRep) {
- // infinity * non-zero = +/- infinity
- if (bAbs) return fromRep(aAbs | productSign);
- // infinity * zero = NaN
- else return fromRep(qnanRep);
- }
-
- if (bAbs == infRep) {
- //? non-zero * infinity = +/- infinity
- if (aAbs) return fromRep(bAbs | productSign);
- // zero * infinity = NaN
- else return fromRep(qnanRep);
- }
-
- // zero * anything = +/- zero
- if (!aAbs) return fromRep(productSign);
- // anything * zero = +/- zero
- if (!bAbs) return fromRep(productSign);
-
- // one or both of a or b is denormal, the other (if applicable) is a
- // normal number. Renormalize one or both of a and b, and set scale to
- // include the necessary exponent adjustment.
- if (aAbs < implicitBit) scale += normalize(&aSignificand);
- if (bAbs < implicitBit) scale += normalize(&bSignificand);
- }
-
- // Or in the implicit significand bit. (If we fell through from the
- // denormal path it was already set by normalize( ), but setting it twice
- // won't hurt anything.)
- aSignificand |= implicitBit;
- bSignificand |= implicitBit;
-
- // Get the significand of a*b. Before multiplying the significands, shift
- // one of them left to left-align it in the field. Thus, the product will
- // have (exponentBits + 2) integral digits, all but two of which must be
- // zero. Normalizing this result is just a conditional left-shift by one
- // and bumping the exponent accordingly.
- rep_t productHi, productLo;
- wideMultiply(aSignificand, bSignificand << exponentBits,
- &productHi, &productLo);
-
- int productExponent = aExponent + bExponent - exponentBias + scale;
-
- // Normalize the significand, adjust exponent if needed.
- if (productHi & implicitBit) productExponent++;
- else wideLeftShift(&productHi, &productLo, 1);
-
- // If we have overflowed the type, return +/- infinity.
- if (productExponent >= maxExponent) return fromRep(infRep | productSign);
-
- if (productExponent <= 0) {
- // Result is denormal before rounding
- //
- // If the result is so small that it just underflows to zero, return
- // a zero of the appropriate sign. Mathematically there is no need to
- // handle this case separately, but we make it a special case to
- // simplify the shift logic.
- const unsigned int shift = REP_C(1) - (unsigned int)productExponent;
- if (shift >= typeWidth) return fromRep(productSign);
-
- // Otherwise, shift the significand of the result so that the round
- // bit is the high bit of productLo.
- wideRightShiftWithSticky(&productHi, &productLo, shift);
- }
- else {
- // Result is normal before rounding; insert the exponent.
- productHi &= significandMask;
- productHi |= (rep_t)productExponent << significandBits;
- }
-
- // Insert the sign of the result:
- productHi |= productSign;
-
- // Final rounding. The final result may overflow to infinity, or underflow
- // to zero, but those are the correct results in those cases. We use the
- // default IEEE-754 round-to-nearest, ties-to-even rounding mode.
- if (productLo > signBit) productHi++;
- if (productLo == signBit) productHi += productHi & 1;
- return fromRep(productHi);
-}
diff --git a/lib/libcompiler_rt/fp_trunc.h b/lib/libcompiler_rt/fp_trunc.h
deleted file mode 100644
index d5e79bb5b86..00000000000
--- a/lib/libcompiler_rt/fp_trunc.h
+++ /dev/null
@@ -1,76 +0,0 @@
-//=== lib/fp_trunc.h - high precision -> low precision conversion *- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Set source and destination precision setting
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef FP_TRUNC_HEADER
-#define FP_TRUNC_HEADER
-
-#include "int_lib.h"
-
-#if defined SRC_SINGLE
-typedef float src_t;
-typedef uint32_t src_rep_t;
-#define SRC_REP_C UINT32_C
-static const int srcSigBits = 23;
-
-#elif defined SRC_DOUBLE
-typedef double src_t;
-typedef uint64_t src_rep_t;
-#define SRC_REP_C UINT64_C
-static const int srcSigBits = 52;
-
-#elif defined SRC_QUAD
-typedef long double src_t;
-typedef __uint128_t src_rep_t;
-#define SRC_REP_C (__uint128_t)
-static const int srcSigBits = 112;
-
-#else
-#error Source should be double precision or quad precision!
-#endif //end source precision
-
-#if defined DST_DOUBLE
-typedef double dst_t;
-typedef uint64_t dst_rep_t;
-#define DST_REP_C UINT64_C
-static const int dstSigBits = 52;
-
-#elif defined DST_SINGLE
-typedef float dst_t;
-typedef uint32_t dst_rep_t;
-#define DST_REP_C UINT32_C
-static const int dstSigBits = 23;
-
-#elif defined DST_HALF
-typedef uint16_t dst_t;
-typedef uint16_t dst_rep_t;
-#define DST_REP_C UINT16_C
-static const int dstSigBits = 10;
-
-#else
-#error Destination should be single precision or double precision!
-#endif //end destination precision
-
-// End of specialization parameters. Two helper routines for conversion to and
-// from the representation of floating-point data as integer values follow.
-
-static __inline src_rep_t srcToRep(src_t x) {
- const union { src_t f; src_rep_t i; } rep = {.f = x};
- return rep.i;
-}
-
-static __inline dst_t dstFromRep(dst_rep_t x) {
- const union { dst_t f; dst_rep_t i; } rep = {.i = x};
- return rep.f;
-}
-
-#endif // FP_TRUNC_HEADER
diff --git a/lib/libcompiler_rt/fp_trunc_impl.inc b/lib/libcompiler_rt/fp_trunc_impl.inc
deleted file mode 100644
index d88ae060913..00000000000
--- a/lib/libcompiler_rt/fp_trunc_impl.inc
+++ /dev/null
@@ -1,135 +0,0 @@
-//= lib/fp_trunc_impl.inc - high precision -> low precision conversion *-*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements a fairly generic conversion from a wider to a narrower
-// IEEE-754 floating-point type in the default (round to nearest, ties to even)
-// rounding mode. The constants and types defined following the includes below
-// parameterize the conversion.
-//
-// This routine can be trivially adapted to support conversions to
-// half-precision or from quad-precision. It does not support types that don't
-// use the usual IEEE-754 interchange formats; specifically, some work would be
-// needed to adapt it to (for example) the Intel 80-bit format or PowerPC
-// double-double format.
-//
-// Note please, however, that this implementation is only intended to support
-// *narrowing* operations; if you need to convert to a *wider* floating-point
-// type (e.g. float -> double), then this routine will not do what you want it
-// to.
-//
-// It also requires that integer types at least as large as both formats
-// are available on the target platform; this may pose a problem when trying
-// to add support for quad on some 32-bit systems, for example.
-//
-// Finally, the following assumptions are made:
-//
-// 1. floating-point types and integer types have the same endianness on the
-// target platform
-//
-// 2. quiet NaNs, if supported, are indicated by the leading bit of the
-// significand field being set
-//
-//===----------------------------------------------------------------------===//
-
-#include "fp_trunc.h"
-
-static __inline dst_t __truncXfYf2__(src_t a) {
- // Various constants whose values follow from the type parameters.
- // Any reasonable optimizer will fold and propagate all of these.
- const int srcBits = sizeof(src_t)*CHAR_BIT;
- const int srcExpBits = srcBits - srcSigBits - 1;
- const int srcInfExp = (1 << srcExpBits) - 1;
- const int srcExpBias = srcInfExp >> 1;
-
- const src_rep_t srcMinNormal = SRC_REP_C(1) << srcSigBits;
- const src_rep_t srcSignificandMask = srcMinNormal - 1;
- const src_rep_t srcInfinity = (src_rep_t)srcInfExp << srcSigBits;
- const src_rep_t srcSignMask = SRC_REP_C(1) << (srcSigBits + srcExpBits);
- const src_rep_t srcAbsMask = srcSignMask - 1;
- const src_rep_t roundMask = (SRC_REP_C(1) << (srcSigBits - dstSigBits)) - 1;
- const src_rep_t halfway = SRC_REP_C(1) << (srcSigBits - dstSigBits - 1);
- const src_rep_t srcQNaN = SRC_REP_C(1) << (srcSigBits - 1);
- const src_rep_t srcNaNCode = srcQNaN - 1;
-
- const int dstBits = sizeof(dst_t)*CHAR_BIT;
- const int dstExpBits = dstBits - dstSigBits - 1;
- const int dstInfExp = (1 << dstExpBits) - 1;
- const int dstExpBias = dstInfExp >> 1;
-
- const int underflowExponent = srcExpBias + 1 - dstExpBias;
- const int overflowExponent = srcExpBias + dstInfExp - dstExpBias;
- const src_rep_t underflow = (src_rep_t)underflowExponent << srcSigBits;
- const src_rep_t overflow = (src_rep_t)overflowExponent << srcSigBits;
-
- const dst_rep_t dstQNaN = DST_REP_C(1) << (dstSigBits - 1);
- const dst_rep_t dstNaNCode = dstQNaN - 1;
-
- // Break a into a sign and representation of the absolute value
- const src_rep_t aRep = srcToRep(a);
- const src_rep_t aAbs = aRep & srcAbsMask;
- const src_rep_t sign = aRep & srcSignMask;
- dst_rep_t absResult;
-
- if (aAbs - underflow < aAbs - overflow) {
- // The exponent of a is within the range of normal numbers in the
- // destination format. We can convert by simply right-shifting with
- // rounding and adjusting the exponent.
- absResult = aAbs >> (srcSigBits - dstSigBits);
- absResult -= (dst_rep_t)(srcExpBias - dstExpBias) << dstSigBits;
-
- const src_rep_t roundBits = aAbs & roundMask;
- // Round to nearest
- if (roundBits > halfway)
- absResult++;
- // Ties to even
- else if (roundBits == halfway)
- absResult += absResult & 1;
- }
- else if (aAbs > srcInfinity) {
- // a is NaN.
- // Conjure the result by beginning with infinity, setting the qNaN
- // bit and inserting the (truncated) trailing NaN field.
- absResult = (dst_rep_t)dstInfExp << dstSigBits;
- absResult |= dstQNaN;
- absResult |= ((aAbs & srcNaNCode) >> (srcSigBits - dstSigBits)) & dstNaNCode;
- }
- else if (aAbs >= overflow) {
- // a overflows to infinity.
- absResult = (dst_rep_t)dstInfExp << dstSigBits;
- }
- else {
- // a underflows on conversion to the destination type or is an exact
- // zero. The result may be a denormal or zero. Extract the exponent
- // to get the shift amount for the denormalization.
- const int aExp = aAbs >> srcSigBits;
- const int shift = srcExpBias - dstExpBias - aExp + 1;
-
- const src_rep_t significand = (aRep & srcSignificandMask) | srcMinNormal;
-
- // Right shift by the denormalization amount with sticky.
- if (shift > srcSigBits) {
- absResult = 0;
- } else {
- const bool sticky = significand << (srcBits - shift);
- src_rep_t denormalizedSignificand = significand >> shift | sticky;
- absResult = denormalizedSignificand >> (srcSigBits - dstSigBits);
- const src_rep_t roundBits = denormalizedSignificand & roundMask;
- // Round to nearest
- if (roundBits > halfway)
- absResult++;
- // Ties to even
- else if (roundBits == halfway)
- absResult += absResult & 1;
- }
- }
-
- // Apply the signbit to (dst_t)abs(a).
- const dst_rep_t result = absResult | sign >> (srcBits - dstBits);
- return dstFromRep(result);
-}
diff --git a/lib/libcompiler_rt/gcc_personality_v0.c b/lib/libcompiler_rt/gcc_personality_v0.c
deleted file mode 100644
index 68581ef1643..00000000000
--- a/lib/libcompiler_rt/gcc_personality_v0.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* ===-- gcc_personality_v0.c - Implement __gcc_personality_v0 -------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- */
-
-#include "int_lib.h"
-
-#include <unwind.h>
-#if defined(__arm__) && !defined(__ARM_DWARF_EH__) && !defined(__USING_SJLJ_EXCEPTIONS__)
-/*
- * When building with older compilers (e.g. clang <3.9), it is possible that we
- * have a version of unwind.h which does not provide the EHABI declarations
- * which are quired for the C personality to conform to the specification. In
- * order to provide forward compatibility for such compilers, we re-declare the
- * necessary interfaces in the helper to permit a standalone compilation of the
- * builtins (which contains the C unwinding personality for historical reasons).
- */
-#include "unwind-ehabi-helpers.h"
-#endif
-
-/*
- * Pointer encodings documented at:
- * http://refspecs.freestandards.org/LSB_1.3.0/gLSB/gLSB/ehframehdr.html
- */
-
-#define DW_EH_PE_omit 0xff /* no data follows */
-
-#define DW_EH_PE_absptr 0x00
-#define DW_EH_PE_uleb128 0x01
-#define DW_EH_PE_udata2 0x02
-#define DW_EH_PE_udata4 0x03
-#define DW_EH_PE_udata8 0x04
-#define DW_EH_PE_sleb128 0x09
-#define DW_EH_PE_sdata2 0x0A
-#define DW_EH_PE_sdata4 0x0B
-#define DW_EH_PE_sdata8 0x0C
-
-#define DW_EH_PE_pcrel 0x10
-#define DW_EH_PE_textrel 0x20
-#define DW_EH_PE_datarel 0x30
-#define DW_EH_PE_funcrel 0x40
-#define DW_EH_PE_aligned 0x50
-#define DW_EH_PE_indirect 0x80 /* gcc extension */
-
-
-
-/* read a uleb128 encoded value and advance pointer */
-static uintptr_t readULEB128(const uint8_t** data)
-{
- uintptr_t result = 0;
- uintptr_t shift = 0;
- unsigned char byte;
- const uint8_t* p = *data;
- do {
- byte = *p++;
- result |= (byte & 0x7f) << shift;
- shift += 7;
- } while (byte & 0x80);
- *data = p;
- return result;
-}
-
-/* read a pointer encoded value and advance pointer */
-static uintptr_t readEncodedPointer(const uint8_t** data, uint8_t encoding)
-{
- const uint8_t* p = *data;
- uintptr_t result = 0;
-
- if ( encoding == DW_EH_PE_omit )
- return 0;
-
- /* first get value */
- switch (encoding & 0x0F) {
- case DW_EH_PE_absptr:
- result = *((const uintptr_t*)p);
- p += sizeof(uintptr_t);
- break;
- case DW_EH_PE_uleb128:
- result = readULEB128(&p);
- break;
- case DW_EH_PE_udata2:
- result = *((const uint16_t*)p);
- p += sizeof(uint16_t);
- break;
- case DW_EH_PE_udata4:
- result = *((const uint32_t*)p);
- p += sizeof(uint32_t);
- break;
- case DW_EH_PE_udata8:
- result = *((const uint64_t*)p);
- p += sizeof(uint64_t);
- break;
- case DW_EH_PE_sdata2:
- result = *((const int16_t*)p);
- p += sizeof(int16_t);
- break;
- case DW_EH_PE_sdata4:
- result = *((const int32_t*)p);
- p += sizeof(int32_t);
- break;
- case DW_EH_PE_sdata8:
- result = *((const int64_t*)p);
- p += sizeof(int64_t);
- break;
- case DW_EH_PE_sleb128:
- default:
- /* not supported */
- compilerrt_abort();
- break;
- }
-
- /* then add relative offset */
- switch ( encoding & 0x70 ) {
- case DW_EH_PE_absptr:
- /* do nothing */
- break;
- case DW_EH_PE_pcrel:
- result += (uintptr_t)(*data);
- break;
- case DW_EH_PE_textrel:
- case DW_EH_PE_datarel:
- case DW_EH_PE_funcrel:
- case DW_EH_PE_aligned:
- default:
- /* not supported */
- compilerrt_abort();
- break;
- }
-
- /* then apply indirection */
- if (encoding & DW_EH_PE_indirect) {
- result = *((const uintptr_t*)result);
- }
-
- *data = p;
- return result;
-}
-
-#if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
- !defined(__ARM_DWARF_EH__)
-#define USING_ARM_EHABI 1
-_Unwind_Reason_Code __gnu_unwind_frame(struct _Unwind_Exception *,
- struct _Unwind_Context *);
-#endif
-
-static inline _Unwind_Reason_Code
-continueUnwind(struct _Unwind_Exception *exceptionObject,
- struct _Unwind_Context *context) {
-#if USING_ARM_EHABI
- /*
- * On ARM EHABI the personality routine is responsible for actually
- * unwinding a single stack frame before returning (ARM EHABI Sec. 6.1).
- */
- if (__gnu_unwind_frame(exceptionObject, context) != _URC_OK)
- return _URC_FAILURE;
-#endif
- return _URC_CONTINUE_UNWIND;
-}
-
-/*
- * The C compiler makes references to __gcc_personality_v0 in
- * the dwarf unwind information for translation units that use
- * __attribute__((cleanup(xx))) on local variables.
- * This personality routine is called by the system unwinder
- * on each frame as the stack is unwound during a C++ exception
- * throw through a C function compiled with -fexceptions.
- */
-#if __USING_SJLJ_EXCEPTIONS__
-/* the setjump-longjump based exceptions personality routine has a
- * different name */
-COMPILER_RT_ABI _Unwind_Reason_Code
-__gcc_personality_sj0(int version, _Unwind_Action actions,
- uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
- struct _Unwind_Context *context)
-#elif USING_ARM_EHABI
-/* The ARM EHABI personality routine has a different signature. */
-COMPILER_RT_ABI _Unwind_Reason_Code __gcc_personality_v0(
- _Unwind_State state, struct _Unwind_Exception *exceptionObject,
- struct _Unwind_Context *context)
-#else
-COMPILER_RT_ABI _Unwind_Reason_Code
-__gcc_personality_v0(int version, _Unwind_Action actions,
- uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
- struct _Unwind_Context *context)
-#endif
-{
- /* Since C does not have catch clauses, there is nothing to do during */
- /* phase 1 (the search phase). */
-#if USING_ARM_EHABI
- /* After resuming from a cleanup we should also continue on to the next
- * frame straight away. */
- if ((state & _US_ACTION_MASK) != _US_UNWIND_FRAME_STARTING)
-#else
- if ( actions & _UA_SEARCH_PHASE )
-#endif
- return continueUnwind(exceptionObject, context);
-
- /* There is nothing to do if there is no LSDA for this frame. */
- const uint8_t* lsda = (uint8_t*)_Unwind_GetLanguageSpecificData(context);
- if ( lsda == (uint8_t*) 0 )
- return continueUnwind(exceptionObject, context);
-
- uintptr_t pc = (uintptr_t)_Unwind_GetIP(context)-1;
- uintptr_t funcStart = (uintptr_t)_Unwind_GetRegionStart(context);
- uintptr_t pcOffset = pc - funcStart;
-
- /* Parse LSDA header. */
- uint8_t lpStartEncoding = *lsda++;
- if (lpStartEncoding != DW_EH_PE_omit) {
- readEncodedPointer(&lsda, lpStartEncoding);
- }
- uint8_t ttypeEncoding = *lsda++;
- if (ttypeEncoding != DW_EH_PE_omit) {
- readULEB128(&lsda);
- }
- /* Walk call-site table looking for range that includes current PC. */
- uint8_t callSiteEncoding = *lsda++;
- uint32_t callSiteTableLength = readULEB128(&lsda);
- const uint8_t* callSiteTableStart = lsda;
- const uint8_t* callSiteTableEnd = callSiteTableStart + callSiteTableLength;
- const uint8_t* p=callSiteTableStart;
- while (p < callSiteTableEnd) {
- uintptr_t start = readEncodedPointer(&p, callSiteEncoding);
- uintptr_t length = readEncodedPointer(&p, callSiteEncoding);
- uintptr_t landingPad = readEncodedPointer(&p, callSiteEncoding);
- readULEB128(&p); /* action value not used for C code */
- if ( landingPad == 0 )
- continue; /* no landing pad for this entry */
- if ( (start <= pcOffset) && (pcOffset < (start+length)) ) {
- /* Found landing pad for the PC.
- * Set Instruction Pointer to so we re-enter function
- * at landing pad. The landing pad is created by the compiler
- * to take two parameters in registers.
- */
- _Unwind_SetGR(context, __builtin_eh_return_data_regno(0),
- (uintptr_t)exceptionObject);
- _Unwind_SetGR(context, __builtin_eh_return_data_regno(1), 0);
- _Unwind_SetIP(context, (funcStart + landingPad));
- return _URC_INSTALL_CONTEXT;
- }
- }
-
- /* No landing pad found, continue unwinding. */
- return continueUnwind(exceptionObject, context);
-}
diff --git a/lib/libcompiler_rt/i386/ashldi3.S b/lib/libcompiler_rt/i386/ashldi3.S
deleted file mode 100644
index 6f05dcf7444..00000000000
--- a/lib/libcompiler_rt/i386/ashldi3.S
+++ /dev/null
@@ -1,61 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __ashldi3(di_int input, int count);
-
-// This routine has some extra memory traffic, loading the 64-bit input via two
-// 32-bit loads, then immediately storing it back to the stack via a single 64-bit
-// store. This is to avoid a write-small, read-large stall.
-// However, if callers of this routine can be safely assumed to store the argument
-// via a 64-bt store, this is unnecessary memory traffic, and should be avoided.
-// It can be turned off by defining the TRUST_CALLERS_USE_64_BIT_STORES macro.
-
-#ifdef __i386__
-#ifdef __SSE2__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__ashldi3)
- movd 12(%esp), %xmm2 // Load count
-#ifndef TRUST_CALLERS_USE_64_BIT_STORES
- movd 4(%esp), %xmm0
- movd 8(%esp), %xmm1
- punpckldq %xmm1, %xmm0 // Load input
-#else
- movq 4(%esp), %xmm0 // Load input
-#endif
- psllq %xmm2, %xmm0 // shift input by count
- movd %xmm0, %eax
- psrlq $32, %xmm0
- movd %xmm0, %edx
- ret
-END_COMPILERRT_FUNCTION(__ashldi3)
-
-#else // Use GPRs instead of SSE2 instructions, if they aren't available.
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__ashldi3)
- movl 12(%esp), %ecx // Load count
- movl 8(%esp), %edx // Load high
- movl 4(%esp), %eax // Load low
-
- testl $0x20, %ecx // If count >= 32
- jnz 1f // goto 1
- shldl %cl, %eax, %edx // left shift high by count
- shll %cl, %eax // left shift low by count
- ret
-
-1: movl %eax, %edx // Move low to high
- xorl %eax, %eax // clear low
- shll %cl, %edx // shift high by count - 32
- ret
-END_COMPILERRT_FUNCTION(__ashldi3)
-
-#endif // __SSE2__
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/ashrdi3.S b/lib/libcompiler_rt/i386/ashrdi3.S
deleted file mode 100644
index 206369f360a..00000000000
--- a/lib/libcompiler_rt/i386/ashrdi3.S
+++ /dev/null
@@ -1,72 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __ashrdi3(di_int input, int count);
-
-#ifdef __i386__
-#ifdef __SSE2__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__ashrdi3)
- movd 12(%esp), %xmm2 // Load count
- movl 8(%esp), %eax
-#ifndef TRUST_CALLERS_USE_64_BIT_STORES
- movd 4(%esp), %xmm0
- movd 8(%esp), %xmm1
- punpckldq %xmm1, %xmm0 // Load input
-#else
- movq 4(%esp), %xmm0 // Load input
-#endif
-
- psrlq %xmm2, %xmm0 // unsigned shift input by count
-
- testl %eax, %eax // check the sign-bit of the input
- jns 1f // early out for positive inputs
-
- // If the input is negative, we need to construct the shifted sign bit
- // to or into the result, as xmm does not have a signed right shift.
- pcmpeqb %xmm1, %xmm1 // -1ULL
- psrlq $58, %xmm1 // 0x3f
- pandn %xmm1, %xmm2 // 63 - count
- pcmpeqb %xmm1, %xmm1 // -1ULL
- psubq %xmm1, %xmm2 // 64 - count
- psllq %xmm2, %xmm1 // -1 << (64 - count) = leading sign bits
- por %xmm1, %xmm0
-
- // Move the result back to the general purpose registers and return
-1: movd %xmm0, %eax
- psrlq $32, %xmm0
- movd %xmm0, %edx
- ret
-END_COMPILERRT_FUNCTION(__ashrdi3)
-
-#else // Use GPRs instead of SSE2 instructions, if they aren't available.
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__ashrdi3)
- movl 12(%esp), %ecx // Load count
- movl 8(%esp), %edx // Load high
- movl 4(%esp), %eax // Load low
-
- testl $0x20, %ecx // If count >= 32
- jnz 1f // goto 1
-
- shrdl %cl, %edx, %eax // right shift low by count
- sarl %cl, %edx // right shift high by count
- ret
-
-1: movl %edx, %eax // Move high to low
- sarl $31, %edx // clear high
- sarl %cl, %eax // shift low by count - 32
- ret
-END_COMPILERRT_FUNCTION(__ashrdi3)
-
-#endif // __SSE2__
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/chkstk.S b/lib/libcompiler_rt/i386/chkstk.S
deleted file mode 100644
index b59974868f2..00000000000
--- a/lib/libcompiler_rt/i386/chkstk.S
+++ /dev/null
@@ -1,34 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// _chkstk routine
-// This routine is windows specific
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__chkstk_ms)
- push %ecx
- push %eax
- cmp $0x1000,%eax
- lea 12(%esp),%ecx
- jb 1f
-2:
- sub $0x1000,%ecx
- test %ecx,(%ecx)
- sub $0x1000,%eax
- cmp $0x1000,%eax
- ja 2b
-1:
- sub %eax,%ecx
- test %ecx,(%ecx)
- pop %eax
- pop %ecx
- ret
-END_COMPILERRT_FUNCTION(__chkstk_ms)
-
-#endif // __i386__
diff --git a/lib/libcompiler_rt/i386/chkstk2.S b/lib/libcompiler_rt/i386/chkstk2.S
deleted file mode 100644
index 7d65bb08892..00000000000
--- a/lib/libcompiler_rt/i386/chkstk2.S
+++ /dev/null
@@ -1,40 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-#ifdef __i386__
-
-// _chkstk (_alloca) routine - probe stack between %esp and (%esp-%eax) in 4k increments,
-// then decrement %esp by %eax. Preserves all registers except %esp and flags.
-// This routine is windows specific
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(_alloca) // _chkstk and _alloca are the same function
-DEFINE_COMPILERRT_FUNCTION(__chkstk)
- push %ecx
- cmp $0x1000,%eax
- lea 8(%esp),%ecx // esp before calling this routine -> ecx
- jb 1f
-2:
- sub $0x1000,%ecx
- test %ecx,(%ecx)
- sub $0x1000,%eax
- cmp $0x1000,%eax
- ja 2b
-1:
- sub %eax,%ecx
- test %ecx,(%ecx)
-
- lea 4(%esp),%eax // load pointer to the return address into eax
- mov %ecx,%esp // install the new top of stack pointer into esp
- mov -4(%eax),%ecx // restore ecx
- push (%eax) // push return address onto the stack
- sub %esp,%eax // restore the original value in eax
- ret
-END_COMPILERRT_FUNCTION(__chkstk)
-END_COMPILERRT_FUNCTION(_alloca)
-
-#endif // __i386__
diff --git a/lib/libcompiler_rt/i386/divdi3.S b/lib/libcompiler_rt/i386/divdi3.S
deleted file mode 100644
index 2fb4bdcad90..00000000000
--- a/lib/libcompiler_rt/i386/divdi3.S
+++ /dev/null
@@ -1,165 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __divdi3(di_int a, di_int b);
-
-// result = a / b.
-// both inputs and the output are 64-bit signed integers.
-// This will do whatever the underlying hardware is set to do on division by zero.
-// No other exceptions are generated, as the divide cannot overflow.
-//
-// This is targeted at 32-bit x86 *only*, as this can be done directly in hardware
-// on x86_64. The performance goal is ~40 cycles per divide, which is faster than
-// currently possible via simulation of integer divides on the x87 unit.
-//
-// Stephen Canon, December 2008
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__divdi3)
-
-/* This is currently implemented by wrapping the unsigned divide up in an absolute
- value, then restoring the correct sign at the end of the computation. This could
- certainly be improved upon. */
-
- pushl %esi
- movl 20(%esp), %edx // high word of b
- movl 16(%esp), %eax // low word of b
- movl %edx, %ecx
- sarl $31, %ecx // (b < 0) ? -1 : 0
- xorl %ecx, %eax
- xorl %ecx, %edx // EDX:EAX = (b < 0) ? not(b) : b
- subl %ecx, %eax
- sbbl %ecx, %edx // EDX:EAX = abs(b)
- movl %edx, 20(%esp)
- movl %eax, 16(%esp) // store abs(b) back to stack
- movl %ecx, %esi // set aside sign of b
-
- movl 12(%esp), %edx // high word of b
- movl 8(%esp), %eax // low word of b
- movl %edx, %ecx
- sarl $31, %ecx // (a < 0) ? -1 : 0
- xorl %ecx, %eax
- xorl %ecx, %edx // EDX:EAX = (a < 0) ? not(a) : a
- subl %ecx, %eax
- sbbl %ecx, %edx // EDX:EAX = abs(a)
- movl %edx, 12(%esp)
- movl %eax, 8(%esp) // store abs(a) back to stack
- xorl %ecx, %esi // sign of result = (sign of a) ^ (sign of b)
-
- pushl %ebx
- movl 24(%esp), %ebx // Find the index i of the leading bit in b.
- bsrl %ebx, %ecx // If the high word of b is zero, jump to
- jz 9f // the code to handle that special case [9].
-
- /* High word of b is known to be non-zero on this branch */
-
- movl 20(%esp), %eax // Construct bhi, containing bits [1+i:32+i] of b
-
- shrl %cl, %eax // Practically, this means that bhi is given by:
- shrl %eax //
- notl %ecx // bhi = (high word of b) << (31 - i) |
- shll %cl, %ebx // (low word of b) >> (1 + i)
- orl %eax, %ebx //
- movl 16(%esp), %edx // Load the high and low words of a, and jump
- movl 12(%esp), %eax // to [1] if the high word is larger than bhi
- cmpl %ebx, %edx // to avoid overflowing the upcoming divide.
- jae 1f
-
- /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- divl %ebx // eax <-- qs, edx <-- r such that ahi:alo = bs*qs + r
-
- pushl %edi
- notl %ecx
- shrl %eax
- shrl %cl, %eax // q = qs >> (1 + i)
- movl %eax, %edi
- mull 24(%esp) // q*blo
- movl 16(%esp), %ebx
- movl 20(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 28(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
- sbbl $0, %edi // decrement q if remainder is negative
- xorl %edx, %edx
- movl %edi, %eax
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %edi // Restore callee-save registers
- popl %ebx
- popl %esi
- retl // Return
-
-
-1: /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- subl %ebx, %edx // subtract bhi from ahi so that divide will not
- divl %ebx // overflow, and find q and r such that
- //
- // ahi:alo = (1:q)*bhi + r
- //
- // Note that q is a number in (31-i).(1+i)
- // fix point.
-
- pushl %edi
- notl %ecx
- shrl %eax
- orl $0x80000000, %eax
- shrl %cl, %eax // q = (1:qs) >> (1 + i)
- movl %eax, %edi
- mull 24(%esp) // q*blo
- movl 16(%esp), %ebx
- movl 20(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 28(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
- sbbl $0, %edi // decrement q if remainder is negative
- xorl %edx, %edx
- movl %edi, %eax
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %edi // Restore callee-save registers
- popl %ebx
- popl %esi
- retl // Return
-
-
-9: /* High word of b is zero on this branch */
-
- movl 16(%esp), %eax // Find qhi and rhi such that
- movl 20(%esp), %ecx //
- xorl %edx, %edx // ahi = qhi*b + rhi with 0 ≤ rhi < b
- divl %ecx //
- movl %eax, %ebx //
- movl 12(%esp), %eax // Find qlo such that
- divl %ecx //
- movl %ebx, %edx // rhi:alo = qlo*b + rlo with 0 ≤ rlo < b
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %ebx // Restore callee-save registers
- popl %esi
- retl // Return
-END_COMPILERRT_FUNCTION(__divdi3)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatdidf.S b/lib/libcompiler_rt/i386/floatdidf.S
deleted file mode 100644
index d75dfe62d6a..00000000000
--- a/lib/libcompiler_rt/i386/floatdidf.S
+++ /dev/null
@@ -1,42 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// double __floatundidf(du_int a);
-
-#ifdef __i386__
-
-CONST_SECTION
-
- .balign 16
-twop52:
- .quad 0x4330000000000000
-
- .balign 16
-twop32:
- .quad 0x41f0000000000000
-
-#define REL_ADDR(_a) (_a)-0b(%eax)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatdidf)
- cvtsi2sd 8(%esp), %xmm1
- movss 4(%esp), %xmm0 // low 32 bits of a
- calll 0f
-0: popl %eax
- mulsd REL_ADDR(twop32), %xmm1 // a_hi as a double (without rounding)
- movsd REL_ADDR(twop52), %xmm2 // 0x1.0p52
- subsd %xmm2, %xmm1 // a_hi - 0x1p52 (no rounding occurs)
- orpd %xmm2, %xmm0 // 0x1p52 + a_lo (no rounding occurs)
- addsd %xmm1, %xmm0 // a_hi + a_lo (round happens here)
- movsd %xmm0, 4(%esp)
- fldl 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatdidf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatdisf.S b/lib/libcompiler_rt/i386/floatdisf.S
deleted file mode 100644
index 0874eaaa9a9..00000000000
--- a/lib/libcompiler_rt/i386/floatdisf.S
+++ /dev/null
@@ -1,35 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// float __floatdisf(di_int a);
-
-// This routine has some extra memory traffic, loading the 64-bit input via two
-// 32-bit loads, then immediately storing it back to the stack via a single 64-bit
-// store. This is to avoid a write-small, read-large stall.
-// However, if callers of this routine can be safely assumed to store the argument
-// via a 64-bt store, this is unnecessary memory traffic, and should be avoided.
-// It can be turned off by defining the TRUST_CALLERS_USE_64_BIT_STORES macro.
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatdisf)
-#ifndef TRUST_CALLERS_USE_64_BIT_STORES
- movd 4(%esp), %xmm0
- movd 8(%esp), %xmm1
- punpckldq %xmm1, %xmm0
- movq %xmm0, 4(%esp)
-#endif
- fildll 4(%esp)
- fstps 4(%esp)
- flds 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatdisf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatdixf.S b/lib/libcompiler_rt/i386/floatdixf.S
deleted file mode 100644
index 1044ef55a1a..00000000000
--- a/lib/libcompiler_rt/i386/floatdixf.S
+++ /dev/null
@@ -1,33 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// float __floatdixf(di_int a);
-
-#ifdef __i386__
-
-// This routine has some extra memory traffic, loading the 64-bit input via two
-// 32-bit loads, then immediately storing it back to the stack via a single 64-bit
-// store. This is to avoid a write-small, read-large stall.
-// However, if callers of this routine can be safely assumed to store the argument
-// via a 64-bt store, this is unnecessary memory traffic, and should be avoided.
-// It can be turned off by defining the TRUST_CALLERS_USE_64_BIT_STORES macro.
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatdixf)
-#ifndef TRUST_CALLERS_USE_64_BIT_STORES
- movd 4(%esp), %xmm0
- movd 8(%esp), %xmm1
- punpckldq %xmm1, %xmm0
- movq %xmm0, 4(%esp)
-#endif
- fildll 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatdixf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatundidf.S b/lib/libcompiler_rt/i386/floatundidf.S
deleted file mode 100644
index fe032348e82..00000000000
--- a/lib/libcompiler_rt/i386/floatundidf.S
+++ /dev/null
@@ -1,55 +0,0 @@
-//===-- floatundidf.S - Implement __floatundidf for i386 ------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements __floatundidf for the compiler_rt library.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// double __floatundidf(du_int a);
-
-#ifdef __i386__
-
-CONST_SECTION
-
- .balign 16
-twop52:
- .quad 0x4330000000000000
-
- .balign 16
-twop84_plus_twop52:
- .quad 0x4530000000100000
-
- .balign 16
-twop84:
- .quad 0x4530000000000000
-
-#define REL_ADDR(_a) (_a)-0b(%eax)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundidf)
- movss 8(%esp), %xmm1 // high 32 bits of a
- movss 4(%esp), %xmm0 // low 32 bits of a
- calll 0f
-0: popl %eax
- orpd REL_ADDR(twop84), %xmm1 // 0x1p84 + a_hi (no rounding occurs)
- subsd REL_ADDR(twop84_plus_twop52), %xmm1 // a_hi - 0x1p52 (no rounding occurs)
- orpd REL_ADDR(twop52), %xmm0 // 0x1p52 + a_lo (no rounding occurs)
- addsd %xmm1, %xmm0 // a_hi + a_lo (round happens here)
- movsd %xmm0, 4(%esp)
- fldl 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatundidf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatundisf.S b/lib/libcompiler_rt/i386/floatundisf.S
deleted file mode 100644
index 16000b57602..00000000000
--- a/lib/libcompiler_rt/i386/floatundisf.S
+++ /dev/null
@@ -1,108 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// float __floatundisf(du_int a);
-
-// Note that there is a hardware instruction, fildll, that does most of what
-// this function needs to do. However, because of our ia32 ABI, it will take
-// a write-small read-large stall, so the software implementation here is
-// actually several cycles faster.
-
-// This is a branch-free implementation. A branchy implementation might be
-// faster for the common case if you know something a priori about the input
-// distribution.
-
-/* branch-free x87 implementation - one cycle slower than without x87.
-
-#ifdef __i386__
-
-CONST_SECTION
-.balign 3
-
- .quad 0x43f0000000000000
-twop64: .quad 0x0000000000000000
-
-#define TWOp64 twop64-0b(%ecx,%eax,8)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundisf)
- movl 8(%esp), %eax
- movd 8(%esp), %xmm1
- movd 4(%esp), %xmm0
- punpckldq %xmm1, %xmm0
- calll 0f
-0: popl %ecx
- sarl $31, %eax
- movq %xmm0, 4(%esp)
- fildll 4(%esp)
- faddl TWOp64
- fstps 4(%esp)
- flds 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatundisf)
-
-#endif // __i386__
-
-*/
-
-/* branch-free, x87-free implementation - faster at the expense of code size */
-
-#ifdef __i386__
-
-CONST_SECTION
-
- .balign 16
-twop52:
- .quad 0x4330000000000000
- .quad 0x0000000000000fff
-
- .balign 16
-sticky:
- .quad 0x0000000000000000
- .long 0x00000012
-
- .balign 16
-twelve:
- .long 0x00000000
-
-#define TWOp52 twop52-0b(%ecx)
-#define STICKY sticky-0b(%ecx,%eax,8)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundisf)
- movl 8(%esp), %eax
- movd 8(%esp), %xmm1
- movd 4(%esp), %xmm0
- punpckldq %xmm1, %xmm0
-
- calll 0f
-0: popl %ecx
- shrl %eax // high 31 bits of input as sint32
- addl $0x7ff80000, %eax
- sarl $31, %eax // (big input) ? -1 : 0
- movsd STICKY, %xmm1 // (big input) ? 0xfff : 0
- movl $12, %edx
- andl %eax, %edx // (big input) ? 12 : 0
- movd %edx, %xmm3
- andpd %xmm0, %xmm1 // (big input) ? input & 0xfff : 0
- movsd TWOp52, %xmm2 // 0x1.0p52
- psrlq %xmm3, %xmm0 // (big input) ? input >> 12 : input
- orpd %xmm2, %xmm1 // 0x1.0p52 + ((big input) ? input & 0xfff : input)
- orpd %xmm1, %xmm0 // 0x1.0p52 + ((big input) ? (input >> 12 | input & 0xfff) : input)
- subsd %xmm2, %xmm0 // (double)((big input) ? (input >> 12 | input & 0xfff) : input)
- cvtsd2ss %xmm0, %xmm0 // (float)((big input) ? (input >> 12 | input & 0xfff) : input)
- pslld $23, %xmm3
- paddd %xmm3, %xmm0 // (float)input
- movd %xmm0, 4(%esp)
- flds 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatundisf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/floatundixf.S b/lib/libcompiler_rt/i386/floatundixf.S
deleted file mode 100644
index c935670cb52..00000000000
--- a/lib/libcompiler_rt/i386/floatundixf.S
+++ /dev/null
@@ -1,46 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// long double __floatundixf(du_int a);16
-
-#ifdef __i386__
-
-CONST_SECTION
-
- .balign 16
-twop52:
- .quad 0x4330000000000000
-
- .balign 16
-twop84_plus_twop52_neg:
- .quad 0xc530000000100000
-
- .balign 16
-twop84:
- .quad 0x4530000000000000
-
-#define REL_ADDR(_a) (_a)-0b(%eax)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundixf)
- calll 0f
-0: popl %eax
- movss 8(%esp), %xmm0 // hi 32 bits of input
- movss 4(%esp), %xmm1 // lo 32 bits of input
- orpd REL_ADDR(twop84), %xmm0 // 2^84 + hi (as a double)
- orpd REL_ADDR(twop52), %xmm1 // 2^52 + lo (as a double)
- addsd REL_ADDR(twop84_plus_twop52_neg), %xmm0 // hi - 2^52 (no rounding occurs)
- movsd %xmm1, 4(%esp)
- fldl 4(%esp)
- movsd %xmm0, 4(%esp)
- faddl 4(%esp)
- ret
-END_COMPILERRT_FUNCTION(__floatundixf)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/lshrdi3.S b/lib/libcompiler_rt/i386/lshrdi3.S
deleted file mode 100644
index 53e95cf7652..00000000000
--- a/lib/libcompiler_rt/i386/lshrdi3.S
+++ /dev/null
@@ -1,62 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __lshrdi3(di_int input, int count);
-
-// This routine has some extra memory traffic, loading the 64-bit input via two
-// 32-bit loads, then immediately storing it back to the stack via a single 64-bit
-// store. This is to avoid a write-small, read-large stall.
-// However, if callers of this routine can be safely assumed to store the argument
-// via a 64-bt store, this is unnecessary memory traffic, and should be avoided.
-// It can be turned off by defining the TRUST_CALLERS_USE_64_BIT_STORES macro.
-
-#ifdef __i386__
-#ifdef __SSE2__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__lshrdi3)
- movd 12(%esp), %xmm2 // Load count
-#ifndef TRUST_CALLERS_USE_64_BIT_STORES
- movd 4(%esp), %xmm0
- movd 8(%esp), %xmm1
- punpckldq %xmm1, %xmm0 // Load input
-#else
- movq 4(%esp), %xmm0 // Load input
-#endif
- psrlq %xmm2, %xmm0 // shift input by count
- movd %xmm0, %eax
- psrlq $32, %xmm0
- movd %xmm0, %edx
- ret
-END_COMPILERRT_FUNCTION(__lshrdi3)
-
-#else // Use GPRs instead of SSE2 instructions, if they aren't available.
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__lshrdi3)
- movl 12(%esp), %ecx // Load count
- movl 8(%esp), %edx // Load high
- movl 4(%esp), %eax // Load low
-
- testl $0x20, %ecx // If count >= 32
- jnz 1f // goto 1
-
- shrdl %cl, %edx, %eax // right shift low by count
- shrl %cl, %edx // right shift high by count
- ret
-
-1: movl %edx, %eax // Move high to low
- xorl %edx, %edx // clear high
- shrl %cl, %eax // shift low by count - 32
- ret
-END_COMPILERRT_FUNCTION(__lshrdi3)
-
-#endif // __SSE2__
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/moddi3.S b/lib/libcompiler_rt/i386/moddi3.S
deleted file mode 100644
index a5bf9ce8ea0..00000000000
--- a/lib/libcompiler_rt/i386/moddi3.S
+++ /dev/null
@@ -1,169 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __moddi3(di_int a, di_int b);
-
-// result = remainder of a / b.
-// both inputs and the output are 64-bit signed integers.
-// This will do whatever the underlying hardware is set to do on division by zero.
-// No other exceptions are generated, as the divide cannot overflow.
-//
-// This is targeted at 32-bit x86 *only*, as this can be done directly in hardware
-// on x86_64. The performance goal is ~40 cycles per divide, which is faster than
-// currently possible via simulation of integer divides on the x87 unit.
-//
-
-// Stephen Canon, December 2008
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__moddi3)
-
-/* This is currently implemented by wrapping the unsigned modulus up in an absolute
- value. This could certainly be improved upon. */
-
- pushl %esi
- movl 20(%esp), %edx // high word of b
- movl 16(%esp), %eax // low word of b
- movl %edx, %ecx
- sarl $31, %ecx // (b < 0) ? -1 : 0
- xorl %ecx, %eax
- xorl %ecx, %edx // EDX:EAX = (b < 0) ? not(b) : b
- subl %ecx, %eax
- sbbl %ecx, %edx // EDX:EAX = abs(b)
- movl %edx, 20(%esp)
- movl %eax, 16(%esp) // store abs(b) back to stack
-
- movl 12(%esp), %edx // high word of b
- movl 8(%esp), %eax // low word of b
- movl %edx, %ecx
- sarl $31, %ecx // (a < 0) ? -1 : 0
- xorl %ecx, %eax
- xorl %ecx, %edx // EDX:EAX = (a < 0) ? not(a) : a
- subl %ecx, %eax
- sbbl %ecx, %edx // EDX:EAX = abs(a)
- movl %edx, 12(%esp)
- movl %eax, 8(%esp) // store abs(a) back to stack
- movl %ecx, %esi // set aside sign of a
-
- pushl %ebx
- movl 24(%esp), %ebx // Find the index i of the leading bit in b.
- bsrl %ebx, %ecx // If the high word of b is zero, jump to
- jz 9f // the code to handle that special case [9].
-
- /* High word of b is known to be non-zero on this branch */
-
- movl 20(%esp), %eax // Construct bhi, containing bits [1+i:32+i] of b
-
- shrl %cl, %eax // Practically, this means that bhi is given by:
- shrl %eax //
- notl %ecx // bhi = (high word of b) << (31 - i) |
- shll %cl, %ebx // (low word of b) >> (1 + i)
- orl %eax, %ebx //
- movl 16(%esp), %edx // Load the high and low words of a, and jump
- movl 12(%esp), %eax // to [2] if the high word is larger than bhi
- cmpl %ebx, %edx // to avoid overflowing the upcoming divide.
- jae 2f
-
- /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- divl %ebx // eax <-- qs, edx <-- r such that ahi:alo = bs*qs + r
-
- pushl %edi
- notl %ecx
- shrl %eax
- shrl %cl, %eax // q = qs >> (1 + i)
- movl %eax, %edi
- mull 24(%esp) // q*blo
- movl 16(%esp), %ebx
- movl 20(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 28(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
-
- jnc 1f // if positive, this is the result.
- addl 24(%esp), %ebx // otherwise
- adcl 28(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
-1: movl %ebx, %eax
- movl %ecx, %edx
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %edi // Restore callee-save registers
- popl %ebx
- popl %esi
- retl // Return
-
-2: /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- subl %ebx, %edx // subtract bhi from ahi so that divide will not
- divl %ebx // overflow, and find q and r such that
- //
- // ahi:alo = (1:q)*bhi + r
- //
- // Note that q is a number in (31-i).(1+i)
- // fix point.
-
- pushl %edi
- notl %ecx
- shrl %eax
- orl $0x80000000, %eax
- shrl %cl, %eax // q = (1:qs) >> (1 + i)
- movl %eax, %edi
- mull 24(%esp) // q*blo
- movl 16(%esp), %ebx
- movl 20(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 28(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
-
- jnc 3f // if positive, this is the result.
- addl 24(%esp), %ebx // otherwise
- adcl 28(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
-3: movl %ebx, %eax
- movl %ecx, %edx
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %edi // Restore callee-save registers
- popl %ebx
- popl %esi
- retl // Return
-
-9: /* High word of b is zero on this branch */
-
- movl 16(%esp), %eax // Find qhi and rhi such that
- movl 20(%esp), %ecx //
- xorl %edx, %edx // ahi = qhi*b + rhi with 0 ≤ rhi < b
- divl %ecx //
- movl %eax, %ebx //
- movl 12(%esp), %eax // Find rlo such that
- divl %ecx //
- movl %edx, %eax // rhi:alo = qlo*b + rlo with 0 ≤ rlo < b
- popl %ebx //
- xorl %edx, %edx // and return 0:rlo
-
- addl %esi, %eax // Restore correct sign to result
- adcl %esi, %edx
- xorl %esi, %eax
- xorl %esi, %edx
- popl %esi
- retl // Return
-END_COMPILERRT_FUNCTION(__moddi3)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/muldi3.S b/lib/libcompiler_rt/i386/muldi3.S
deleted file mode 100644
index 12394606421..00000000000
--- a/lib/libcompiler_rt/i386/muldi3.S
+++ /dev/null
@@ -1,33 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// di_int __muldi3(di_int a, di_int b);
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__muldi3)
- pushl %ebx
- movl 16(%esp), %eax // b.lo
- movl 12(%esp), %ecx // a.hi
- imull %eax, %ecx // b.lo * a.hi
-
- movl 8(%esp), %edx // a.lo
- movl 20(%esp), %ebx // b.hi
- imull %edx, %ebx // a.lo * b.hi
-
- mull %edx // EDX:EAX = a.lo * b.lo
- addl %ecx, %ebx // EBX = (a.lo*b.hi + a.hi*b.lo)
- addl %ebx, %edx
-
- popl %ebx
- retl
-END_COMPILERRT_FUNCTION(__muldi3)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/udivdi3.S b/lib/libcompiler_rt/i386/udivdi3.S
deleted file mode 100644
index 727613639b1..00000000000
--- a/lib/libcompiler_rt/i386/udivdi3.S
+++ /dev/null
@@ -1,118 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// du_int __udivdi3(du_int a, du_int b);
-
-// result = a / b.
-// both inputs and the output are 64-bit unsigned integers.
-// This will do whatever the underlying hardware is set to do on division by zero.
-// No other exceptions are generated, as the divide cannot overflow.
-//
-// This is targeted at 32-bit x86 *only*, as this can be done directly in hardware
-// on x86_64. The performance goal is ~40 cycles per divide, which is faster than
-// currently possible via simulation of integer divides on the x87 unit.
-//
-// Stephen Canon, December 2008
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__udivdi3)
-
- pushl %ebx
- movl 20(%esp), %ebx // Find the index i of the leading bit in b.
- bsrl %ebx, %ecx // If the high word of b is zero, jump to
- jz 9f // the code to handle that special case [9].
-
- /* High word of b is known to be non-zero on this branch */
-
- movl 16(%esp), %eax // Construct bhi, containing bits [1+i:32+i] of b
-
- shrl %cl, %eax // Practically, this means that bhi is given by:
- shrl %eax //
- notl %ecx // bhi = (high word of b) << (31 - i) |
- shll %cl, %ebx // (low word of b) >> (1 + i)
- orl %eax, %ebx //
- movl 12(%esp), %edx // Load the high and low words of a, and jump
- movl 8(%esp), %eax // to [1] if the high word is larger than bhi
- cmpl %ebx, %edx // to avoid overflowing the upcoming divide.
- jae 1f
-
- /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- divl %ebx // eax <-- qs, edx <-- r such that ahi:alo = bs*qs + r
-
- pushl %edi
- notl %ecx
- shrl %eax
- shrl %cl, %eax // q = qs >> (1 + i)
- movl %eax, %edi
- mull 20(%esp) // q*blo
- movl 12(%esp), %ebx
- movl 16(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 24(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
- sbbl $0, %edi // decrement q if remainder is negative
- xorl %edx, %edx
- movl %edi, %eax
- popl %edi
- popl %ebx
- retl
-
-
-1: /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- subl %ebx, %edx // subtract bhi from ahi so that divide will not
- divl %ebx // overflow, and find q and r such that
- //
- // ahi:alo = (1:q)*bhi + r
- //
- // Note that q is a number in (31-i).(1+i)
- // fix point.
-
- pushl %edi
- notl %ecx
- shrl %eax
- orl $0x80000000, %eax
- shrl %cl, %eax // q = (1:qs) >> (1 + i)
- movl %eax, %edi
- mull 20(%esp) // q*blo
- movl 12(%esp), %ebx
- movl 16(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 24(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
- sbbl $0, %edi // decrement q if remainder is negative
- xorl %edx, %edx
- movl %edi, %eax
- popl %edi
- popl %ebx
- retl
-
-
-9: /* High word of b is zero on this branch */
-
- movl 12(%esp), %eax // Find qhi and rhi such that
- movl 16(%esp), %ecx //
- xorl %edx, %edx // ahi = qhi*b + rhi with 0 ≤ rhi < b
- divl %ecx //
- movl %eax, %ebx //
- movl 8(%esp), %eax // Find qlo such that
- divl %ecx //
- movl %ebx, %edx // rhi:alo = qlo*b + rlo with 0 ≤ rlo < b
- popl %ebx //
- retl // and return qhi:qlo
-END_COMPILERRT_FUNCTION(__udivdi3)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/i386/umoddi3.S b/lib/libcompiler_rt/i386/umoddi3.S
deleted file mode 100644
index 763e821946c..00000000000
--- a/lib/libcompiler_rt/i386/umoddi3.S
+++ /dev/null
@@ -1,129 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// du_int __umoddi3(du_int a, du_int b);
-
-// result = remainder of a / b.
-// both inputs and the output are 64-bit unsigned integers.
-// This will do whatever the underlying hardware is set to do on division by zero.
-// No other exceptions are generated, as the divide cannot overflow.
-//
-// This is targeted at 32-bit x86 *only*, as this can be done directly in hardware
-// on x86_64. The performance goal is ~40 cycles per divide, which is faster than
-// currently possible via simulation of integer divides on the x87 unit.
-//
-
-// Stephen Canon, December 2008
-
-#ifdef __i386__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__umoddi3)
-
- pushl %ebx
- movl 20(%esp), %ebx // Find the index i of the leading bit in b.
- bsrl %ebx, %ecx // If the high word of b is zero, jump to
- jz 9f // the code to handle that special case [9].
-
- /* High word of b is known to be non-zero on this branch */
-
- movl 16(%esp), %eax // Construct bhi, containing bits [1+i:32+i] of b
-
- shrl %cl, %eax // Practically, this means that bhi is given by:
- shrl %eax //
- notl %ecx // bhi = (high word of b) << (31 - i) |
- shll %cl, %ebx // (low word of b) >> (1 + i)
- orl %eax, %ebx //
- movl 12(%esp), %edx // Load the high and low words of a, and jump
- movl 8(%esp), %eax // to [2] if the high word is larger than bhi
- cmpl %ebx, %edx // to avoid overflowing the upcoming divide.
- jae 2f
-
- /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- divl %ebx // eax <-- qs, edx <-- r such that ahi:alo = bs*qs + r
-
- pushl %edi
- notl %ecx
- shrl %eax
- shrl %cl, %eax // q = qs >> (1 + i)
- movl %eax, %edi
- mull 20(%esp) // q*blo
- movl 12(%esp), %ebx
- movl 16(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 24(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
-
- jnc 1f // if positive, this is the result.
- addl 20(%esp), %ebx // otherwise
- adcl 24(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
-1: movl %ebx, %eax
- movl %ecx, %edx
-
- popl %edi
- popl %ebx
- retl
-
-
-2: /* High word of a is greater than or equal to (b >> (1 + i)) on this branch */
-
- subl %ebx, %edx // subtract bhi from ahi so that divide will not
- divl %ebx // overflow, and find q and r such that
- //
- // ahi:alo = (1:q)*bhi + r
- //
- // Note that q is a number in (31-i).(1+i)
- // fix point.
-
- pushl %edi
- notl %ecx
- shrl %eax
- orl $0x80000000, %eax
- shrl %cl, %eax // q = (1:qs) >> (1 + i)
- movl %eax, %edi
- mull 20(%esp) // q*blo
- movl 12(%esp), %ebx
- movl 16(%esp), %ecx // ECX:EBX = a
- subl %eax, %ebx
- sbbl %edx, %ecx // ECX:EBX = a - q*blo
- movl 24(%esp), %eax
- imull %edi, %eax // q*bhi
- subl %eax, %ecx // ECX:EBX = a - q*b
-
- jnc 3f // if positive, this is the result.
- addl 20(%esp), %ebx // otherwise
- adcl 24(%esp), %ecx // ECX:EBX = a - (q-1)*b = result
-3: movl %ebx, %eax
- movl %ecx, %edx
-
- popl %edi
- popl %ebx
- retl
-
-
-
-9: /* High word of b is zero on this branch */
-
- movl 12(%esp), %eax // Find qhi and rhi such that
- movl 16(%esp), %ecx //
- xorl %edx, %edx // ahi = qhi*b + rhi with 0 ≤ rhi < b
- divl %ecx //
- movl %eax, %ebx //
- movl 8(%esp), %eax // Find rlo such that
- divl %ecx //
- movl %edx, %eax // rhi:alo = qlo*b + rlo with 0 ≤ rlo < b
- popl %ebx //
- xorl %edx, %edx // and return 0:rlo
- retl //
-END_COMPILERRT_FUNCTION(__umoddi3)
-
-#endif // __i386__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/int_endianness.h b/lib/libcompiler_rt/int_endianness.h
deleted file mode 100644
index e2586c56bac..00000000000
--- a/lib/libcompiler_rt/int_endianness.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ===-- int_endianness.h - configuration header for compiler-rt ------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file is a configuration header for compiler-rt.
- * This file is not part of the interface of this library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#ifndef INT_ENDIANNESS_H
-#define INT_ENDIANNESS_H
-
-#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
- defined(__ORDER_LITTLE_ENDIAN__)
-
-/* Clang and GCC provide built-in endianness definitions. */
-#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#endif /* __BYTE_ORDER__ */
-
-#else /* Compilers other than Clang or GCC. */
-
-#if defined(__SVR4) && defined(__sun)
-#include <sys/byteorder.h>
-
-#if defined(_BIG_ENDIAN)
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#elif defined(_LITTLE_ENDIAN)
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#else /* !_LITTLE_ENDIAN */
-#error "unknown endianness"
-#endif /* !_LITTLE_ENDIAN */
-
-#endif /* Solaris and AuroraUX. */
-
-/* .. */
-
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
- defined(__minix)
-#include <sys/endian.h>
-
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#elif _BYTE_ORDER == _LITTLE_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#endif /* _BYTE_ORDER */
-
-#endif /* *BSD */
-
-#if defined(__OpenBSD__)
-#include <machine/endian.h>
-
-#if _BYTE_ORDER == _BIG_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#elif _BYTE_ORDER == _LITTLE_ENDIAN
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#endif /* _BYTE_ORDER */
-
-#endif /* OpenBSD */
-
-/* .. */
-
-/* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the
- * compiler (at least with GCC) */
-#if defined(__APPLE__) || defined(__ellcc__ )
-
-#ifdef __BIG_ENDIAN__
-#if __BIG_ENDIAN__
-#define _YUGA_LITTLE_ENDIAN 0
-#define _YUGA_BIG_ENDIAN 1
-#endif
-#endif /* __BIG_ENDIAN__ */
-
-#ifdef __LITTLE_ENDIAN__
-#if __LITTLE_ENDIAN__
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-#endif
-#endif /* __LITTLE_ENDIAN__ */
-
-#endif /* Mac OSX */
-
-/* .. */
-
-#if defined(_WIN32)
-
-#define _YUGA_LITTLE_ENDIAN 1
-#define _YUGA_BIG_ENDIAN 0
-
-#endif /* Windows */
-
-#endif /* Clang or GCC. */
-
-/* . */
-
-#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
-#error Unable to determine endian
-#endif /* Check we found an endianness correctly. */
-
-#endif /* INT_ENDIANNESS_H */
diff --git a/lib/libcompiler_rt/int_lib.h b/lib/libcompiler_rt/int_lib.h
deleted file mode 100644
index fe8a3bdedc0..00000000000
--- a/lib/libcompiler_rt/int_lib.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* ===-- int_lib.h - configuration header for compiler-rt -----------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file is a configuration header for compiler-rt.
- * This file is not part of the interface of this library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#ifndef INT_LIB_H
-#define INT_LIB_H
-
-/* Assumption: Signed integral is 2's complement. */
-/* Assumption: Right shift of signed negative is arithmetic shift. */
-/* Assumption: Endianness is little or big (not mixed). */
-
-#if defined(__ELF__)
-#define FNALIAS(alias_name, original_name) \
- void alias_name() __attribute__((__alias__(#original_name)))
-#define COMPILER_RT_ALIAS(aliasee) __attribute__((__alias__(#aliasee)))
-#else
-#define FNALIAS(alias, name) _Pragma("GCC error(\"alias unsupported on this file format\")")
-#define COMPILER_RT_ALIAS(aliasee) _Pragma("GCC error(\"alias unsupported on this file format\")")
-#endif
-
-/* ABI macro definitions */
-
-#if __ARM_EABI__
-# ifdef COMPILER_RT_ARMHF_TARGET
-# define COMPILER_RT_ABI
-# else
-# define COMPILER_RT_ABI __attribute__((__pcs__("aapcs")))
-# endif
-#else
-# define COMPILER_RT_ABI
-#endif
-
-#define AEABI_RTABI __attribute__((__pcs__("aapcs")))
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define ALWAYS_INLINE __forceinline
-#define NOINLINE __declspec(noinline)
-#define NORETURN __declspec(noreturn)
-#define UNUSED
-#else
-#define ALWAYS_INLINE __attribute__((always_inline))
-#define NOINLINE __attribute__((noinline))
-#define NORETURN __attribute__((noreturn))
-#define UNUSED __attribute__((unused))
-#endif
-
-#if defined(__NetBSD__) && (defined(_KERNEL) || defined(_STANDALONE))
-/*
- * Kernel and boot environment can't use normal headers,
- * so use the equivalent system headers.
- */
-# include <machine/limits.h>
-# include <sys/stdint.h>
-# include <sys/types.h>
-#else
-/* Include the standard compiler builtin headers we use functionality from. */
-# include <limits.h>
-# include <stdint.h>
-# include <stdbool.h>
-# include <float.h>
-#endif
-
-/* Include the commonly used internal type definitions. */
-#include "int_types.h"
-
-/* Include internal utility function declarations. */
-#include "int_util.h"
-
-COMPILER_RT_ABI si_int __paritysi2(si_int a);
-COMPILER_RT_ABI si_int __paritydi2(di_int a);
-
-COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
-COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b);
-COMPILER_RT_ABI su_int __udivsi3(su_int n, su_int d);
-
-COMPILER_RT_ABI su_int __udivmodsi4(su_int a, su_int b, su_int* rem);
-COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int* rem);
-#ifdef CRT_HAS_128BIT
-COMPILER_RT_ABI si_int __clzti2(ti_int a);
-COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
-#endif
-
-/* Definitions for builtins unavailable on MSVC */
-#if defined(_MSC_VER) && !defined(__clang__)
-#include <intrin.h>
-
-uint32_t __inline __builtin_ctz(uint32_t value) {
- unsigned long trailing_zero = 0;
- if (_BitScanForward(&trailing_zero, value))
- return trailing_zero;
- return 32;
-}
-
-uint32_t __inline __builtin_clz(uint32_t value) {
- unsigned long leading_zero = 0;
- if (_BitScanReverse(&leading_zero, value))
- return 31 - leading_zero;
- return 32;
-}
-
-#if defined(_M_ARM) || defined(_M_X64)
-uint32_t __inline __builtin_clzll(uint64_t value) {
- unsigned long leading_zero = 0;
- if (_BitScanReverse64(&leading_zero, value))
- return 63 - leading_zero;
- return 64;
-}
-#else
-uint32_t __inline __builtin_clzll(uint64_t value) {
- if (value == 0)
- return 64;
- uint32_t msh = (uint32_t)(value >> 32);
- uint32_t lsh = (uint32_t)(value & 0xFFFFFFFF);
- if (msh != 0)
- return __builtin_clz(msh);
- return 32 + __builtin_clz(lsh);
-}
-#endif
-
-#define __builtin_clzl __builtin_clzll
-#endif /* defined(_MSC_VER) && !defined(__clang__) */
-
-#endif /* INT_LIB_H */
diff --git a/lib/libcompiler_rt/int_math.h b/lib/libcompiler_rt/int_math.h
deleted file mode 100644
index aa3d0721a8a..00000000000
--- a/lib/libcompiler_rt/int_math.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ===-- int_math.h - internal math inlines ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===-----------------------------------------------------------------------===
- *
- * This file is not part of the interface of this library.
- *
- * This file defines substitutes for the libm functions used in some of the
- * compiler-rt implementations, defined in such a way that there is not a direct
- * dependency on libm or math.h. Instead, we use the compiler builtin versions
- * where available. This reduces our dependencies on the system SDK by foisting
- * the responsibility onto the compiler.
- *
- * ===-----------------------------------------------------------------------===
- */
-
-#ifndef INT_MATH_H
-#define INT_MATH_H
-
-#ifndef __has_builtin
-# define __has_builtin(x) 0
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#include <math.h>
-#include <stdlib.h>
-#include <ymath.h>
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define CRT_INFINITY INFINITY
-#else
-#define CRT_INFINITY __builtin_huge_valf()
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_isfinite(x) _finite((x))
-#define crt_isinf(x) !_finite((x))
-#define crt_isnan(x) _isnan((x))
-#else
-/* Define crt_isfinite in terms of the builtin if available, otherwise provide
- * an alternate version in terms of our other functions. This supports some
- * versions of GCC which didn't have __builtin_isfinite.
- */
-#if __has_builtin(__builtin_isfinite)
-# define crt_isfinite(x) __builtin_isfinite((x))
-#elif defined(__GNUC__)
-# define crt_isfinite(x) \
- __extension__(({ \
- __typeof((x)) x_ = (x); \
- !crt_isinf(x_) && !crt_isnan(x_); \
- }))
-#else
-# error "Do not know how to check for infinity"
-#endif /* __has_builtin(__builtin_isfinite) */
-#define crt_isinf(x) __builtin_isinf((x))
-#define crt_isnan(x) __builtin_isnan((x))
-#endif /* _MSC_VER */
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_copysign(x, y) copysign((x), (y))
-#define crt_copysignf(x, y) copysignf((x), (y))
-#define crt_copysignl(x, y) copysignl((x), (y))
-#else
-#define crt_copysign(x, y) __builtin_copysign((x), (y))
-#define crt_copysignf(x, y) __builtin_copysignf((x), (y))
-#define crt_copysignl(x, y) __builtin_copysignl((x), (y))
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_fabs(x) fabs((x))
-#define crt_fabsf(x) fabsf((x))
-#define crt_fabsl(x) fabs((x))
-#else
-#define crt_fabs(x) __builtin_fabs((x))
-#define crt_fabsf(x) __builtin_fabsf((x))
-#define crt_fabsl(x) __builtin_fabsl((x))
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_fmax(x, y) __max((x), (y))
-#define crt_fmaxf(x, y) __max((x), (y))
-#define crt_fmaxl(x, y) __max((x), (y))
-#else
-#define crt_fmax(x, y) __builtin_fmax((x), (y))
-#define crt_fmaxf(x, y) __builtin_fmaxf((x), (y))
-#define crt_fmaxl(x, y) __builtin_fmaxl((x), (y))
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_logbl(x) logbl((x))
-#else
-#define crt_logbl(x) __builtin_logbl((x))
-#endif
-
-#if defined(_MSC_VER) && !defined(__clang__)
-#define crt_scalbn(x, y) scalbn((x), (y))
-#define crt_scalbnf(x, y) scalbnf((x), (y))
-#define crt_scalbnl(x, y) scalbnl((x), (y))
-#else
-#define crt_scalbn(x, y) __builtin_scalbn((x), (y))
-#define crt_scalbnf(x, y) __builtin_scalbnf((x), (y))
-#define crt_scalbnl(x, y) __builtin_scalbnl((x), (y))
-#endif
-
-#endif /* INT_MATH_H */
diff --git a/lib/libcompiler_rt/int_types.h b/lib/libcompiler_rt/int_types.h
deleted file mode 100644
index 9f8da56cb77..00000000000
--- a/lib/libcompiler_rt/int_types.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* ===-- int_lib.h - configuration header for compiler-rt -----------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file is not part of the interface of this library.
- *
- * This file defines various standard types, most importantly a number of unions
- * used to access parts of larger types.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#ifndef INT_TYPES_H
-#define INT_TYPES_H
-
-#include "int_endianness.h"
-
-/* si_int is defined in Linux sysroot's asm-generic/siginfo.h */
-#ifdef si_int
-#undef si_int
-#endif
-typedef int si_int;
-typedef unsigned su_int;
-
-typedef long long di_int;
-typedef unsigned long long du_int;
-
-typedef union
-{
- di_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- su_int low;
- si_int high;
-#else
- si_int high;
- su_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} dwords;
-
-typedef union
-{
- du_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- su_int low;
- su_int high;
-#else
- su_int high;
- su_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} udwords;
-
-#if defined(__LP64__) || defined(__wasm__) || defined(__mips64) || \
- defined(__riscv) || defined(_WIN64)
-#define CRT_HAS_128BIT
-#endif
-
-/* MSVC doesn't have a working 128bit integer type. Users should really compile
- * compiler-rt with clang, but if they happen to be doing a standalone build for
- * asan or something else, disable the 128 bit parts so things sort of work.
- */
-#if defined(_MSC_VER) && !defined(__clang__)
-#undef CRT_HAS_128BIT
-#endif
-
-#ifdef CRT_HAS_128BIT
-typedef int ti_int __attribute__ ((mode (TI)));
-typedef unsigned tu_int __attribute__ ((mode (TI)));
-
-typedef union
-{
- ti_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- du_int low;
- di_int high;
-#else
- di_int high;
- du_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} twords;
-
-typedef union
-{
- tu_int all;
- struct
- {
-#if _YUGA_LITTLE_ENDIAN
- du_int low;
- du_int high;
-#else
- du_int high;
- du_int low;
-#endif /* _YUGA_LITTLE_ENDIAN */
- }s;
-} utwords;
-
-static __inline ti_int make_ti(di_int h, di_int l) {
- twords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
-}
-
-static __inline tu_int make_tu(du_int h, du_int l) {
- utwords r;
- r.s.high = h;
- r.s.low = l;
- return r.all;
-}
-
-#endif /* CRT_HAS_128BIT */
-
-typedef union
-{
- su_int u;
- float f;
-} float_bits;
-
-typedef union
-{
- udwords u;
- double f;
-} double_bits;
-
-typedef struct
-{
-#if _YUGA_LITTLE_ENDIAN
- udwords low;
- udwords high;
-#else
- udwords high;
- udwords low;
-#endif /* _YUGA_LITTLE_ENDIAN */
-} uqwords;
-
-/* Check if the target supports 80 bit extended precision long doubles.
- * Notably, on x86 Windows, MSVC only provides a 64-bit long double, but GCC
- * still makes it 80 bits. Clang will match whatever compiler it is trying to
- * be compatible with.
- */
-#if ((defined(__i386__) || defined(__x86_64__)) && !defined(_MSC_VER)) || \
- defined(__m68k__) || defined(__ia64__)
-#define HAS_80_BIT_LONG_DOUBLE 1
-#else
-#define HAS_80_BIT_LONG_DOUBLE 0
-#endif
-
-typedef union
-{
- uqwords u;
- long double f;
-} long_double_bits;
-
-#if __STDC_VERSION__ >= 199901L
-typedef float _Complex Fcomplex;
-typedef double _Complex Dcomplex;
-typedef long double _Complex Lcomplex;
-
-#define COMPLEX_REAL(x) __real__(x)
-#define COMPLEX_IMAGINARY(x) __imag__(x)
-#else
-typedef struct { float real, imaginary; } Fcomplex;
-
-typedef struct { double real, imaginary; } Dcomplex;
-
-typedef struct { long double real, imaginary; } Lcomplex;
-
-#define COMPLEX_REAL(x) (x).real
-#define COMPLEX_IMAGINARY(x) (x).imaginary
-#endif
-#endif /* INT_TYPES_H */
-
diff --git a/lib/libcompiler_rt/int_util.c b/lib/libcompiler_rt/int_util.c
deleted file mode 100644
index 752f2015580..00000000000
--- a/lib/libcompiler_rt/int_util.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* ===-- int_util.c - Implement internal utilities --------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-#include "int_util.h"
-
-/* NOTE: The definitions in this file are declared weak because we clients to be
- * able to arbitrarily package individual functions into separate .a files. If
- * we did not declare these weak, some link situations might end up seeing
- * duplicate strong definitions of the same symbol.
- *
- * We can't use this solution for kernel use (which may not support weak), but
- * currently expect that when built for kernel use all the functionality is
- * packaged into a single library.
- */
-
-#ifdef KERNEL_USE
-
-NORETURN extern void panic(const char *, ...);
-#ifndef _WIN32
-__attribute__((visibility("hidden")))
-#endif
-void __compilerrt_abort_impl(const char *file, int line, const char *function) {
- panic("%s:%d: abort in %s", file, line, function);
-}
-
-#elif __APPLE__
-
-/* from libSystem.dylib */
-NORETURN extern void __assert_rtn(const char *func, const char *file, int line,
- const char *message);
-
-#ifndef _WIN32
-__attribute__((weak))
-__attribute__((visibility("hidden")))
-#endif
-void __compilerrt_abort_impl(const char *file, int line, const char *function) {
- __assert_rtn(function, file, line, "libcompiler_rt abort");
-}
-
-#elif __Fuchsia__
-
-#ifndef _WIN32
-__attribute__((weak))
-__attribute__((visibility("hidden")))
-#endif
-void __compilerrt_abort_impl(const char *file, int line, const char *function) {
- __builtin_trap();
-}
-
-#else
-
-/* Get the system definition of abort() */
-#include <stdlib.h>
-
-#ifndef _WIN32
-__attribute__((weak))
-__attribute__((visibility("hidden")))
-#endif
-void __compilerrt_abort_impl(const char *file, int line, const char *function) {
- abort();
-}
-
-#endif
diff --git a/lib/libcompiler_rt/int_util.h b/lib/libcompiler_rt/int_util.h
deleted file mode 100644
index c3c87381ad8..00000000000
--- a/lib/libcompiler_rt/int_util.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- int_util.h - internal utility functions ----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===-----------------------------------------------------------------------===
- *
- * This file is not part of the interface of this library.
- *
- * This file defines non-inline utilities which are available for use in the
- * library. The function definitions themselves are all contained in int_util.c
- * which will always be compiled into any compiler-rt library.
- *
- * ===-----------------------------------------------------------------------===
- */
-
-#ifndef INT_UTIL_H
-#define INT_UTIL_H
-
-/** \brief Trigger a program abort (or panic for kernel code). */
-#define compilerrt_abort() __compilerrt_abort_impl(__FILE__, __LINE__, __func__)
-
-NORETURN void __compilerrt_abort_impl(const char *file, int line,
- const char *function);
-
-#define COMPILE_TIME_ASSERT(expr) COMPILE_TIME_ASSERT1(expr, __COUNTER__)
-#define COMPILE_TIME_ASSERT1(expr, cnt) COMPILE_TIME_ASSERT2(expr, cnt)
-#define COMPILE_TIME_ASSERT2(expr, cnt) \
- typedef char ct_assert_##cnt[(expr) ? 1 : -1] UNUSED
-
-#endif /* INT_UTIL_H */
diff --git a/lib/libcompiler_rt/lshrdi3.c b/lib/libcompiler_rt/lshrdi3.c
deleted file mode 100644
index 67b2a766834..00000000000
--- a/lib/libcompiler_rt/lshrdi3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ===-- lshrdi3.c - Implement __lshrdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __lshrdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: logical a >> b */
-
-/* Precondition: 0 <= b < bits_in_dword */
-
-COMPILER_RT_ABI di_int
-__lshrdi3(di_int a, si_int b)
-{
- const int bits_in_word = (int)(sizeof(si_int) * CHAR_BIT);
- udwords input;
- udwords result;
- input.all = a;
- if (b & bits_in_word) /* bits_in_word <= b < bits_in_dword */
- {
- result.s.high = 0;
- result.s.low = input.s.high >> (b - bits_in_word);
- }
- else /* 0 <= b < bits_in_word */
- {
- if (b == 0)
- return a;
- result.s.high = input.s.high >> b;
- result.s.low = (input.s.high << (bits_in_word - b)) | (input.s.low >> b);
- }
- return result.all;
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI di_int __aeabi_llsr(di_int a, si_int b) COMPILER_RT_ALIAS(__lshrdi3);
-#endif
diff --git a/lib/libcompiler_rt/lshrti3.c b/lib/libcompiler_rt/lshrti3.c
deleted file mode 100644
index e4170ff84a5..00000000000
--- a/lib/libcompiler_rt/lshrti3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ===-- lshrti3.c - Implement __lshrti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __lshrti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: logical a >> b */
-
-/* Precondition: 0 <= b < bits_in_tword */
-
-COMPILER_RT_ABI ti_int
-__lshrti3(ti_int a, si_int b)
-{
- const int bits_in_dword = (int)(sizeof(di_int) * CHAR_BIT);
- utwords input;
- utwords result;
- input.all = a;
- if (b & bits_in_dword) /* bits_in_dword <= b < bits_in_tword */
- {
- result.s.high = 0;
- result.s.low = input.s.high >> (b - bits_in_dword);
- }
- else /* 0 <= b < bits_in_dword */
- {
- if (b == 0)
- return a;
- result.s.high = input.s.high >> b;
- result.s.low = (input.s.high << (bits_in_dword - b)) | (input.s.low >> b);
- }
- return result.all;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/macho_embedded/CMakeLists.txt b/lib/libcompiler_rt/macho_embedded/CMakeLists.txt
deleted file mode 100644
index 266e4221524..00000000000
--- a/lib/libcompiler_rt/macho_embedded/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-file(GLOB filter_files ${CMAKE_CURRENT_SOURCE_DIR}/*.txt)
-foreach(filter_file ${filter_files})
- set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${filter_file})
-endforeach()
diff --git a/lib/libcompiler_rt/macho_embedded/arm.txt b/lib/libcompiler_rt/macho_embedded/arm.txt
deleted file mode 100644
index 4b1683a6bae..00000000000
--- a/lib/libcompiler_rt/macho_embedded/arm.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-aeabi_cdcmpeq
-aeabi_cdrcmple
-aeabi_cfcmpeq
-aeabi_cfrcmple
-aeabi_dcmpeq
-aeabi_dcmpge
-aeabi_dcmpgt
-aeabi_dcmple
-aeabi_dcmplt
-aeabi_drsub
-aeabi_fcmpeq
-aeabi_fcmpge
-aeabi_fcmpgt
-aeabi_fcmple
-aeabi_fcmplt
-aeabi_frsub
diff --git a/lib/libcompiler_rt/macho_embedded/common.txt b/lib/libcompiler_rt/macho_embedded/common.txt
deleted file mode 100644
index 6ac85a771fc..00000000000
--- a/lib/libcompiler_rt/macho_embedded/common.txt
+++ /dev/null
@@ -1,92 +0,0 @@
-absvdi2
-absvsi2
-addvdi3
-addvsi3
-ashldi3
-ashrdi3
-clzdi2
-clzsi2
-cmpdi2
-ctzdi2
-ctzsi2
-divdc3
-divdi3
-divsc3
-divmodsi4
-udivmodsi4
-do_global_dtors
-ffsdi2
-fixdfdi
-fixsfdi
-fixunsdfdi
-fixunsdfsi
-fixunssfdi
-fixunssfsi
-floatdidf
-floatdisf
-floatundidf
-floatundisf
-gcc_bcmp
-lshrdi3
-moddi3
-muldc3
-muldi3
-mulsc3
-mulvdi3
-mulvsi3
-negdi2
-negvdi2
-negvsi2
-paritydi2
-paritysi2
-popcountdi2
-popcountsi2
-powidf2
-powisf2
-subvdi3
-subvsi3
-ucmpdi2
-udiv_w_sdiv
-udivdi3
-udivmoddi4
-umoddi3
-adddf3
-addsf3
-cmpdf2
-cmpsf2
-div0
-divdf3
-divsf3
-divsi3
-extendsfdf2
-extendhfsf2
-ffssi2
-fixdfsi
-fixsfsi
-floatsidf
-floatsisf
-floatunsidf
-floatunsisf
-comparedf2
-comparesf2
-modsi3
-muldf3
-mulsf3
-negdf2
-negsf2
-subdf3
-subsf3
-truncdfhf2
-truncdfsf2
-truncsfhf2
-udivsi3
-umodsi3
-unorddf2
-unordsf2
-atomic_flag_clear
-atomic_flag_clear_explicit
-atomic_flag_test_and_set
-atomic_flag_test_and_set_explicit
-atomic_signal_fence
-atomic_thread_fence
-int_util
diff --git a/lib/libcompiler_rt/macho_embedded/i386.txt b/lib/libcompiler_rt/macho_embedded/i386.txt
deleted file mode 100644
index b92e44bb35a..00000000000
--- a/lib/libcompiler_rt/macho_embedded/i386.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-i686.get_pc_thunk.eax
-i686.get_pc_thunk.ebp
-i686.get_pc_thunk.ebx
-i686.get_pc_thunk.ecx
-i686.get_pc_thunk.edi
-i686.get_pc_thunk.edx
-i686.get_pc_thunk.esi
diff --git a/lib/libcompiler_rt/macho_embedded/thumb2-64.txt b/lib/libcompiler_rt/macho_embedded/thumb2-64.txt
deleted file mode 100644
index 1c72fb1c3c6..00000000000
--- a/lib/libcompiler_rt/macho_embedded/thumb2-64.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-sync_fetch_and_add_8
-sync_fetch_and_sub_8
-sync_fetch_and_and_8
-sync_fetch_and_or_8
-sync_fetch_and_xor_8
-sync_fetch_and_nand_8
-sync_fetch_and_max_8
-sync_fetch_and_umax_8
-sync_fetch_and_min_8
-sync_fetch_and_umin_8
diff --git a/lib/libcompiler_rt/macho_embedded/thumb2.txt b/lib/libcompiler_rt/macho_embedded/thumb2.txt
deleted file mode 100644
index 6add5ecd2dc..00000000000
--- a/lib/libcompiler_rt/macho_embedded/thumb2.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-switch16
-switch32
-switch8
-switchu8
-sync_fetch_and_add_4
-sync_fetch_and_sub_4
-sync_fetch_and_and_4
-sync_fetch_and_or_4
-sync_fetch_and_xor_4
-sync_fetch_and_nand_4
-sync_fetch_and_max_4
-sync_fetch_and_umax_4
-sync_fetch_and_min_4
-sync_fetch_and_umin_4
diff --git a/lib/libcompiler_rt/mingw_fixfloat.c b/lib/libcompiler_rt/mingw_fixfloat.c
deleted file mode 100644
index c462e0dbf65..00000000000
--- a/lib/libcompiler_rt/mingw_fixfloat.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- mingw_fixfloat.c - Wrap int/float conversions for arm/windows -----===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-COMPILER_RT_ABI di_int __fixdfdi(double a);
-COMPILER_RT_ABI di_int __fixsfdi(float a);
-COMPILER_RT_ABI du_int __fixunsdfdi(double a);
-COMPILER_RT_ABI du_int __fixunssfdi(float a);
-COMPILER_RT_ABI double __floatdidf(di_int a);
-COMPILER_RT_ABI float __floatdisf(di_int a);
-COMPILER_RT_ABI double __floatundidf(du_int a);
-COMPILER_RT_ABI float __floatundisf(du_int a);
-
-COMPILER_RT_ABI di_int __dtoi64(double a) { return __fixdfdi(a); }
-
-COMPILER_RT_ABI di_int __stoi64(float a) { return __fixsfdi(a); }
-
-COMPILER_RT_ABI du_int __dtou64(double a) { return __fixunsdfdi(a); }
-
-COMPILER_RT_ABI du_int __stou64(float a) { return __fixunssfdi(a); }
-
-COMPILER_RT_ABI double __i64tod(di_int a) { return __floatdidf(a); }
-
-COMPILER_RT_ABI float __i64tos(di_int a) { return __floatdisf(a); }
-
-COMPILER_RT_ABI double __u64tod(du_int a) { return __floatundidf(a); }
-
-COMPILER_RT_ABI float __u64tos(du_int a) { return __floatundisf(a); }
diff --git a/lib/libcompiler_rt/moddi3.c b/lib/libcompiler_rt/moddi3.c
deleted file mode 100644
index a04279e3875..00000000000
--- a/lib/libcompiler_rt/moddi3.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*===-- moddi3.c - Implement __moddi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __moddi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a % b */
-
-COMPILER_RT_ABI di_int
-__moddi3(di_int a, di_int b)
-{
- const int bits_in_dword_m1 = (int)(sizeof(di_int) * CHAR_BIT) - 1;
- di_int s = b >> bits_in_dword_m1; /* s = b < 0 ? -1 : 0 */
- b = (b ^ s) - s; /* negate if s == -1 */
- s = a >> bits_in_dword_m1; /* s = a < 0 ? -1 : 0 */
- a = (a ^ s) - s; /* negate if s == -1 */
- du_int r;
- __udivmoddi4(a, b, &r);
- return ((di_int)r ^ s) - s; /* negate if s == -1 */
-}
diff --git a/lib/libcompiler_rt/modsi3.c b/lib/libcompiler_rt/modsi3.c
deleted file mode 100644
index 86c73ce1377..00000000000
--- a/lib/libcompiler_rt/modsi3.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- modsi3.c - Implement __modsi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __modsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a % b */
-
-COMPILER_RT_ABI si_int
-__modsi3(si_int a, si_int b)
-{
- return a - __divsi3(a, b) * b;
-}
diff --git a/lib/libcompiler_rt/modti3.c b/lib/libcompiler_rt/modti3.c
deleted file mode 100644
index d505c07ac16..00000000000
--- a/lib/libcompiler_rt/modti3.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ===-- modti3.c - Implement __modti3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __modti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/*Returns: a % b */
-
-COMPILER_RT_ABI ti_int
-__modti3(ti_int a, ti_int b)
-{
- const int bits_in_tword_m1 = (int)(sizeof(ti_int) * CHAR_BIT) - 1;
- ti_int s = b >> bits_in_tword_m1; /* s = b < 0 ? -1 : 0 */
- b = (b ^ s) - s; /* negate if s == -1 */
- s = a >> bits_in_tword_m1; /* s = a < 0 ? -1 : 0 */
- a = (a ^ s) - s; /* negate if s == -1 */
- tu_int r;
- __udivmodti4(a, b, &r);
- return ((ti_int)r ^ s) - s; /* negate if s == -1 */
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/muldc3.c b/lib/libcompiler_rt/muldc3.c
deleted file mode 100644
index 16d8e98390a..00000000000
--- a/lib/libcompiler_rt/muldc3.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ===-- muldc3.c - Implement __muldc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __muldc3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the product of a + ib and c + id */
-
-COMPILER_RT_ABI Dcomplex
-__muldc3(double __a, double __b, double __c, double __d)
-{
- double __ac = __a * __c;
- double __bd = __b * __d;
- double __ad = __a * __d;
- double __bc = __b * __c;
- Dcomplex z;
- COMPLEX_REAL(z) = __ac - __bd;
- COMPLEX_IMAGINARY(z) = __ad + __bc;
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- int __recalc = 0;
- if (crt_isinf(__a) || crt_isinf(__b))
- {
- __a = crt_copysign(crt_isinf(__a) ? 1 : 0, __a);
- __b = crt_copysign(crt_isinf(__b) ? 1 : 0, __b);
- if (crt_isnan(__c))
- __c = crt_copysign(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysign(0, __d);
- __recalc = 1;
- }
- if (crt_isinf(__c) || crt_isinf(__d))
- {
- __c = crt_copysign(crt_isinf(__c) ? 1 : 0, __c);
- __d = crt_copysign(crt_isinf(__d) ? 1 : 0, __d);
- if (crt_isnan(__a))
- __a = crt_copysign(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysign(0, __b);
- __recalc = 1;
- }
- if (!__recalc && (crt_isinf(__ac) || crt_isinf(__bd) ||
- crt_isinf(__ad) || crt_isinf(__bc)))
- {
- if (crt_isnan(__a))
- __a = crt_copysign(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysign(0, __b);
- if (crt_isnan(__c))
- __c = crt_copysign(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysign(0, __d);
- __recalc = 1;
- }
- if (__recalc)
- {
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c - __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__a * __d + __b * __c);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/muldf3.c b/lib/libcompiler_rt/muldf3.c
deleted file mode 100644
index 1bb103e38c1..00000000000
--- a/lib/libcompiler_rt/muldf3.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/muldf3.c - Double-precision multiplication ------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements double-precision soft-float multiplication
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_mul_impl.inc"
-
-COMPILER_RT_ABI fp_t __muldf3(fp_t a, fp_t b) {
- return __mulXf3__(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_dmul(fp_t a, fp_t b) {
- return __muldf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_dmul(fp_t a, fp_t b) COMPILER_RT_ALIAS(__muldf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/muldi3.c b/lib/libcompiler_rt/muldi3.c
deleted file mode 100644
index a187315e916..00000000000
--- a/lib/libcompiler_rt/muldi3.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ===-- muldi3.c - Implement __muldi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __muldi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a * b */
-
-static
-di_int
-__muldsi3(su_int a, su_int b)
-{
- dwords r;
- const int bits_in_word_2 = (int)(sizeof(si_int) * CHAR_BIT) / 2;
- const su_int lower_mask = (su_int)~0 >> bits_in_word_2;
- r.s.low = (a & lower_mask) * (b & lower_mask);
- su_int t = r.s.low >> bits_in_word_2;
- r.s.low &= lower_mask;
- t += (a >> bits_in_word_2) * (b & lower_mask);
- r.s.low += (t & lower_mask) << bits_in_word_2;
- r.s.high = t >> bits_in_word_2;
- t = r.s.low >> bits_in_word_2;
- r.s.low &= lower_mask;
- t += (b >> bits_in_word_2) * (a & lower_mask);
- r.s.low += (t & lower_mask) << bits_in_word_2;
- r.s.high += t >> bits_in_word_2;
- r.s.high += (a >> bits_in_word_2) * (b >> bits_in_word_2);
- return r.all;
-}
-
-/* Returns: a * b */
-
-COMPILER_RT_ABI di_int
-__muldi3(di_int a, di_int b)
-{
- dwords x;
- x.all = a;
- dwords y;
- y.all = b;
- dwords r;
- r.all = __muldsi3(x.s.low, y.s.low);
- r.s.high += x.s.high * y.s.low + x.s.low * y.s.high;
- return r.all;
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI di_int __aeabi_lmul(di_int a, di_int b) COMPILER_RT_ALIAS(__muldi3);
-#endif
diff --git a/lib/libcompiler_rt/mulodi4.c b/lib/libcompiler_rt/mulodi4.c
deleted file mode 100644
index d2fd7db2bcd..00000000000
--- a/lib/libcompiler_rt/mulodi4.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*===-- mulodi4.c - Implement __mulodi4 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulodi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a * b */
-
-/* Effects: sets *overflow to 1 if a * b overflows */
-
-COMPILER_RT_ABI di_int
-__mulodi4(di_int a, di_int b, int* overflow)
-{
- const int N = (int)(sizeof(di_int) * CHAR_BIT);
- const di_int MIN = (di_int)1 << (N-1);
- const di_int MAX = ~MIN;
- *overflow = 0;
- di_int result = a * b;
- if (a == MIN)
- {
- if (b != 0 && b != 1)
- *overflow = 1;
- return result;
- }
- if (b == MIN)
- {
- if (a != 0 && a != 1)
- *overflow = 1;
- return result;
- }
- di_int sa = a >> (N - 1);
- di_int abs_a = (a ^ sa) - sa;
- di_int sb = b >> (N - 1);
- di_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return result;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- *overflow = 1;
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- *overflow = 1;
- }
- return result;
-}
diff --git a/lib/libcompiler_rt/mulosi4.c b/lib/libcompiler_rt/mulosi4.c
deleted file mode 100644
index 422528085c4..00000000000
--- a/lib/libcompiler_rt/mulosi4.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*===-- mulosi4.c - Implement __mulosi4 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulosi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a * b */
-
-/* Effects: sets *overflow to 1 if a * b overflows */
-
-COMPILER_RT_ABI si_int
-__mulosi4(si_int a, si_int b, int* overflow)
-{
- const int N = (int)(sizeof(si_int) * CHAR_BIT);
- const si_int MIN = (si_int)1 << (N-1);
- const si_int MAX = ~MIN;
- *overflow = 0;
- si_int result = a * b;
- if (a == MIN)
- {
- if (b != 0 && b != 1)
- *overflow = 1;
- return result;
- }
- if (b == MIN)
- {
- if (a != 0 && a != 1)
- *overflow = 1;
- return result;
- }
- si_int sa = a >> (N - 1);
- si_int abs_a = (a ^ sa) - sa;
- si_int sb = b >> (N - 1);
- si_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return result;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- *overflow = 1;
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- *overflow = 1;
- }
- return result;
-}
diff --git a/lib/libcompiler_rt/muloti4.c b/lib/libcompiler_rt/muloti4.c
deleted file mode 100644
index 16b21892032..00000000000
--- a/lib/libcompiler_rt/muloti4.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*===-- muloti4.c - Implement __muloti4 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __muloti4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a * b */
-
-/* Effects: sets *overflow to 1 if a * b overflows */
-
-COMPILER_RT_ABI ti_int
-__muloti4(ti_int a, ti_int b, int* overflow)
-{
- const int N = (int)(sizeof(ti_int) * CHAR_BIT);
- const ti_int MIN = (ti_int)1 << (N-1);
- const ti_int MAX = ~MIN;
- *overflow = 0;
- ti_int result = a * b;
- if (a == MIN)
- {
- if (b != 0 && b != 1)
- *overflow = 1;
- return result;
- }
- if (b == MIN)
- {
- if (a != 0 && a != 1)
- *overflow = 1;
- return result;
- }
- ti_int sa = a >> (N - 1);
- ti_int abs_a = (a ^ sa) - sa;
- ti_int sb = b >> (N - 1);
- ti_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return result;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- *overflow = 1;
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- *overflow = 1;
- }
- return result;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/mulsc3.c b/lib/libcompiler_rt/mulsc3.c
deleted file mode 100644
index c89cfd247a1..00000000000
--- a/lib/libcompiler_rt/mulsc3.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ===-- mulsc3.c - Implement __mulsc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulsc3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the product of a + ib and c + id */
-
-COMPILER_RT_ABI Fcomplex
-__mulsc3(float __a, float __b, float __c, float __d)
-{
- float __ac = __a * __c;
- float __bd = __b * __d;
- float __ad = __a * __d;
- float __bc = __b * __c;
- Fcomplex z;
- COMPLEX_REAL(z) = __ac - __bd;
- COMPLEX_IMAGINARY(z) = __ad + __bc;
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- int __recalc = 0;
- if (crt_isinf(__a) || crt_isinf(__b))
- {
- __a = crt_copysignf(crt_isinf(__a) ? 1 : 0, __a);
- __b = crt_copysignf(crt_isinf(__b) ? 1 : 0, __b);
- if (crt_isnan(__c))
- __c = crt_copysignf(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysignf(0, __d);
- __recalc = 1;
- }
- if (crt_isinf(__c) || crt_isinf(__d))
- {
- __c = crt_copysignf(crt_isinf(__c) ? 1 : 0, __c);
- __d = crt_copysignf(crt_isinf(__d) ? 1 : 0, __d);
- if (crt_isnan(__a))
- __a = crt_copysignf(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysignf(0, __b);
- __recalc = 1;
- }
- if (!__recalc && (crt_isinf(__ac) || crt_isinf(__bd) ||
- crt_isinf(__ad) || crt_isinf(__bc)))
- {
- if (crt_isnan(__a))
- __a = crt_copysignf(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysignf(0, __b);
- if (crt_isnan(__c))
- __c = crt_copysignf(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysignf(0, __d);
- __recalc = 1;
- }
- if (__recalc)
- {
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c - __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__a * __d + __b * __c);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/mulsf3.c b/lib/libcompiler_rt/mulsf3.c
deleted file mode 100644
index 1e2cf3e717c..00000000000
--- a/lib/libcompiler_rt/mulsf3.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/mulsf3.c - Single-precision multiplication ------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements single-precision soft-float multiplication
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_mul_impl.inc"
-
-COMPILER_RT_ABI fp_t __mulsf3(fp_t a, fp_t b) {
- return __mulXf3__(a, b);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_fmul(fp_t a, fp_t b) {
- return __mulsf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_fmul(fp_t a, fp_t b) COMPILER_RT_ALIAS(__mulsf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/multc3.c b/lib/libcompiler_rt/multc3.c
deleted file mode 100644
index 0518bc2569f..00000000000
--- a/lib/libcompiler_rt/multc3.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ===-- multc3.c - Implement __multc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __multc3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the product of a + ib and c + id */
-
-COMPILER_RT_ABI long double _Complex
-__multc3(long double a, long double b, long double c, long double d)
-{
- long double ac = a * c;
- long double bd = b * d;
- long double ad = a * d;
- long double bc = b * c;
- long double _Complex z;
- __real__ z = ac - bd;
- __imag__ z = ad + bc;
- if (crt_isnan(__real__ z) && crt_isnan(__imag__ z)) {
- int recalc = 0;
- if (crt_isinf(a) || crt_isinf(b)) {
- a = crt_copysignl(crt_isinf(a) ? 1 : 0, a);
- b = crt_copysignl(crt_isinf(b) ? 1 : 0, b);
- if (crt_isnan(c))
- c = crt_copysignl(0, c);
- if (crt_isnan(d))
- d = crt_copysignl(0, d);
- recalc = 1;
- }
- if (crt_isinf(c) || crt_isinf(d)) {
- c = crt_copysignl(crt_isinf(c) ? 1 : 0, c);
- d = crt_copysignl(crt_isinf(d) ? 1 : 0, d);
- if (crt_isnan(a))
- a = crt_copysignl(0, a);
- if (crt_isnan(b))
- b = crt_copysignl(0, b);
- recalc = 1;
- }
- if (!recalc && (crt_isinf(ac) || crt_isinf(bd) ||
- crt_isinf(ad) || crt_isinf(bc))) {
- if (crt_isnan(a))
- a = crt_copysignl(0, a);
- if (crt_isnan(b))
- b = crt_copysignl(0, b);
- if (crt_isnan(c))
- c = crt_copysignl(0, c);
- if (crt_isnan(d))
- d = crt_copysignl(0, d);
- recalc = 1;
- }
- if (recalc) {
- __real__ z = CRT_INFINITY * (a * c - b * d);
- __imag__ z = CRT_INFINITY * (a * d + b * c);
- }
- }
- return z;
-}
diff --git a/lib/libcompiler_rt/multf3.c b/lib/libcompiler_rt/multf3.c
deleted file mode 100644
index 0b915923ea0..00000000000
--- a/lib/libcompiler_rt/multf3.c
+++ /dev/null
@@ -1,25 +0,0 @@
-//===-- lib/multf3.c - Quad-precision multiplication --------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements quad-precision soft-float multiplication
-// with the IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#include "fp_mul_impl.inc"
-
-COMPILER_RT_ABI fp_t __multf3(fp_t a, fp_t b) {
- return __mulXf3__(a, b);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/multi3.c b/lib/libcompiler_rt/multi3.c
deleted file mode 100644
index e0d52d430b6..00000000000
--- a/lib/libcompiler_rt/multi3.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ===-- multi3.c - Implement __multi3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
-
- * This file implements __multi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a * b */
-
-static
-ti_int
-__mulddi3(du_int a, du_int b)
-{
- twords r;
- const int bits_in_dword_2 = (int)(sizeof(di_int) * CHAR_BIT) / 2;
- const du_int lower_mask = (du_int)~0 >> bits_in_dword_2;
- r.s.low = (a & lower_mask) * (b & lower_mask);
- du_int t = r.s.low >> bits_in_dword_2;
- r.s.low &= lower_mask;
- t += (a >> bits_in_dword_2) * (b & lower_mask);
- r.s.low += (t & lower_mask) << bits_in_dword_2;
- r.s.high = t >> bits_in_dword_2;
- t = r.s.low >> bits_in_dword_2;
- r.s.low &= lower_mask;
- t += (b >> bits_in_dword_2) * (a & lower_mask);
- r.s.low += (t & lower_mask) << bits_in_dword_2;
- r.s.high += t >> bits_in_dword_2;
- r.s.high += (a >> bits_in_dword_2) * (b >> bits_in_dword_2);
- return r.all;
-}
-
-/* Returns: a * b */
-
-COMPILER_RT_ABI ti_int
-__multi3(ti_int a, ti_int b)
-{
- twords x;
- x.all = a;
- twords y;
- y.all = b;
- twords r;
- r.all = __mulddi3(x.s.low, y.s.low);
- r.s.high += x.s.high * y.s.low + x.s.low * y.s.high;
- return r.all;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/mulvdi3.c b/lib/libcompiler_rt/mulvdi3.c
deleted file mode 100644
index e63249e0a04..00000000000
--- a/lib/libcompiler_rt/mulvdi3.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*===-- mulvdi3.c - Implement __mulvdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulvdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a * b */
-
-/* Effects: aborts if a * b overflows */
-
-COMPILER_RT_ABI di_int
-__mulvdi3(di_int a, di_int b)
-{
- const int N = (int)(sizeof(di_int) * CHAR_BIT);
- const di_int MIN = (di_int)1 << (N-1);
- const di_int MAX = ~MIN;
- if (a == MIN)
- {
- if (b == 0 || b == 1)
- return a * b;
- compilerrt_abort();
- }
- if (b == MIN)
- {
- if (a == 0 || a == 1)
- return a * b;
- compilerrt_abort();
- }
- di_int sa = a >> (N - 1);
- di_int abs_a = (a ^ sa) - sa;
- di_int sb = b >> (N - 1);
- di_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return a * b;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- compilerrt_abort();
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- compilerrt_abort();
- }
- return a * b;
-}
diff --git a/lib/libcompiler_rt/mulvsi3.c b/lib/libcompiler_rt/mulvsi3.c
deleted file mode 100644
index 74ea4f2da22..00000000000
--- a/lib/libcompiler_rt/mulvsi3.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ===-- mulvsi3.c - Implement __mulvsi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulvsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a * b */
-
-/* Effects: aborts if a * b overflows */
-
-COMPILER_RT_ABI si_int
-__mulvsi3(si_int a, si_int b)
-{
- const int N = (int)(sizeof(si_int) * CHAR_BIT);
- const si_int MIN = (si_int)1 << (N-1);
- const si_int MAX = ~MIN;
- if (a == MIN)
- {
- if (b == 0 || b == 1)
- return a * b;
- compilerrt_abort();
- }
- if (b == MIN)
- {
- if (a == 0 || a == 1)
- return a * b;
- compilerrt_abort();
- }
- si_int sa = a >> (N - 1);
- si_int abs_a = (a ^ sa) - sa;
- si_int sb = b >> (N - 1);
- si_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return a * b;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- compilerrt_abort();
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- compilerrt_abort();
- }
- return a * b;
-}
diff --git a/lib/libcompiler_rt/mulvti3.c b/lib/libcompiler_rt/mulvti3.c
deleted file mode 100644
index f4c7d1612ba..00000000000
--- a/lib/libcompiler_rt/mulvti3.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ===-- mulvti3.c - Implement __mulvti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulvti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a * b */
-
-/* Effects: aborts if a * b overflows */
-
-COMPILER_RT_ABI ti_int
-__mulvti3(ti_int a, ti_int b)
-{
- const int N = (int)(sizeof(ti_int) * CHAR_BIT);
- const ti_int MIN = (ti_int)1 << (N-1);
- const ti_int MAX = ~MIN;
- if (a == MIN)
- {
- if (b == 0 || b == 1)
- return a * b;
- compilerrt_abort();
- }
- if (b == MIN)
- {
- if (a == 0 || a == 1)
- return a * b;
- compilerrt_abort();
- }
- ti_int sa = a >> (N - 1);
- ti_int abs_a = (a ^ sa) - sa;
- ti_int sb = b >> (N - 1);
- ti_int abs_b = (b ^ sb) - sb;
- if (abs_a < 2 || abs_b < 2)
- return a * b;
- if (sa == sb)
- {
- if (abs_a > MAX / abs_b)
- compilerrt_abort();
- }
- else
- {
- if (abs_a > MIN / -abs_b)
- compilerrt_abort();
- }
- return a * b;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/mulxc3.c b/lib/libcompiler_rt/mulxc3.c
deleted file mode 100644
index ba322169182..00000000000
--- a/lib/libcompiler_rt/mulxc3.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* ===-- mulxc3.c - Implement __mulxc3 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __mulxc3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-#include "int_math.h"
-
-/* Returns: the product of a + ib and c + id */
-
-COMPILER_RT_ABI Lcomplex
-__mulxc3(long double __a, long double __b, long double __c, long double __d)
-{
- long double __ac = __a * __c;
- long double __bd = __b * __d;
- long double __ad = __a * __d;
- long double __bc = __b * __c;
- Lcomplex z;
- COMPLEX_REAL(z) = __ac - __bd;
- COMPLEX_IMAGINARY(z) = __ad + __bc;
- if (crt_isnan(COMPLEX_REAL(z)) && crt_isnan(COMPLEX_IMAGINARY(z)))
- {
- int __recalc = 0;
- if (crt_isinf(__a) || crt_isinf(__b))
- {
- __a = crt_copysignl(crt_isinf(__a) ? 1 : 0, __a);
- __b = crt_copysignl(crt_isinf(__b) ? 1 : 0, __b);
- if (crt_isnan(__c))
- __c = crt_copysignl(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysignl(0, __d);
- __recalc = 1;
- }
- if (crt_isinf(__c) || crt_isinf(__d))
- {
- __c = crt_copysignl(crt_isinf(__c) ? 1 : 0, __c);
- __d = crt_copysignl(crt_isinf(__d) ? 1 : 0, __d);
- if (crt_isnan(__a))
- __a = crt_copysignl(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysignl(0, __b);
- __recalc = 1;
- }
- if (!__recalc && (crt_isinf(__ac) || crt_isinf(__bd) ||
- crt_isinf(__ad) || crt_isinf(__bc)))
- {
- if (crt_isnan(__a))
- __a = crt_copysignl(0, __a);
- if (crt_isnan(__b))
- __b = crt_copysignl(0, __b);
- if (crt_isnan(__c))
- __c = crt_copysignl(0, __c);
- if (crt_isnan(__d))
- __d = crt_copysignl(0, __d);
- __recalc = 1;
- }
- if (__recalc)
- {
- COMPLEX_REAL(z) = CRT_INFINITY * (__a * __c - __b * __d);
- COMPLEX_IMAGINARY(z) = CRT_INFINITY * (__a * __d + __b * __c);
- }
- }
- return z;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/negdf2.c b/lib/libcompiler_rt/negdf2.c
deleted file mode 100644
index f0bfaad2474..00000000000
--- a/lib/libcompiler_rt/negdf2.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/negdf2.c - double-precision negation ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements double-precision soft-float negation.
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-COMPILER_RT_ABI fp_t
-__negdf2(fp_t a) {
- return fromRep(toRep(a) ^ signBit);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_dneg(fp_t a) {
- return __negdf2(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_dneg(fp_t a) COMPILER_RT_ALIAS(__negdf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/negdi2.c b/lib/libcompiler_rt/negdi2.c
deleted file mode 100644
index 3d49ba2899d..00000000000
--- a/lib/libcompiler_rt/negdi2.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ===-- negdi2.c - Implement __negdi2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __negdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: -a */
-
-COMPILER_RT_ABI di_int
-__negdi2(di_int a)
-{
- /* Note: this routine is here for API compatibility; any sane compiler
- * should expand it inline.
- */
- return -a;
-}
diff --git a/lib/libcompiler_rt/negsf2.c b/lib/libcompiler_rt/negsf2.c
deleted file mode 100644
index 05c97d4d5a1..00000000000
--- a/lib/libcompiler_rt/negsf2.c
+++ /dev/null
@@ -1,30 +0,0 @@
-//===-- lib/negsf2.c - single-precision negation ------------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements single-precision soft-float negation.
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-COMPILER_RT_ABI fp_t
-__negsf2(fp_t a) {
- return fromRep(toRep(a) ^ signBit);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_fneg(fp_t a) {
- return __negsf2(a);
-}
-#else
-AEABI_RTABI fp_t __aeabi_fneg(fp_t a) COMPILER_RT_ALIAS(__negsf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/negti2.c b/lib/libcompiler_rt/negti2.c
deleted file mode 100644
index 9b00b303f85..00000000000
--- a/lib/libcompiler_rt/negti2.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ===-- negti2.c - Implement __negti2 -------------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __negti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: -a */
-
-COMPILER_RT_ABI ti_int
-__negti2(ti_int a)
-{
- /* Note: this routine is here for API compatibility; any sane compiler
- * should expand it inline.
- */
- return -a;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/negvdi2.c b/lib/libcompiler_rt/negvdi2.c
deleted file mode 100644
index e336ecf28f0..00000000000
--- a/lib/libcompiler_rt/negvdi2.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ===-- negvdi2.c - Implement __negvdi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __negvdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: -a */
-
-/* Effects: aborts if -a overflows */
-
-COMPILER_RT_ABI di_int
-__negvdi2(di_int a)
-{
- const di_int MIN = (di_int)1 << ((int)(sizeof(di_int) * CHAR_BIT)-1);
- if (a == MIN)
- compilerrt_abort();
- return -a;
-}
diff --git a/lib/libcompiler_rt/negvsi2.c b/lib/libcompiler_rt/negvsi2.c
deleted file mode 100644
index b9e93fef06c..00000000000
--- a/lib/libcompiler_rt/negvsi2.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ===-- negvsi2.c - Implement __negvsi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __negvsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: -a */
-
-/* Effects: aborts if -a overflows */
-
-COMPILER_RT_ABI si_int
-__negvsi2(si_int a)
-{
- const si_int MIN = (si_int)1 << ((int)(sizeof(si_int) * CHAR_BIT)-1);
- if (a == MIN)
- compilerrt_abort();
- return -a;
-}
diff --git a/lib/libcompiler_rt/negvti2.c b/lib/libcompiler_rt/negvti2.c
deleted file mode 100644
index 85f9f7d19d9..00000000000
--- a/lib/libcompiler_rt/negvti2.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*===-- negvti2.c - Implement __negvti2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- *===----------------------------------------------------------------------===
- *
- *This file implements __negvti2 for the compiler_rt library.
- *
- *===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: -a */
-
-/* Effects: aborts if -a overflows */
-
-COMPILER_RT_ABI ti_int
-__negvti2(ti_int a)
-{
- const ti_int MIN = (ti_int)1 << ((int)(sizeof(ti_int) * CHAR_BIT)-1);
- if (a == MIN)
- compilerrt_abort();
- return -a;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/paritydi2.c b/lib/libcompiler_rt/paritydi2.c
deleted file mode 100644
index 8ea5ab4214e..00000000000
--- a/lib/libcompiler_rt/paritydi2.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ===-- paritydi2.c - Implement __paritydi2 -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __paritydi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: 1 if number of bits is odd else returns 0 */
-
-COMPILER_RT_ABI si_int
-__paritydi2(di_int a)
-{
- dwords x;
- x.all = a;
- return __paritysi2(x.s.high ^ x.s.low);
-}
diff --git a/lib/libcompiler_rt/paritysi2.c b/lib/libcompiler_rt/paritysi2.c
deleted file mode 100644
index 59998466384..00000000000
--- a/lib/libcompiler_rt/paritysi2.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ===-- paritysi2.c - Implement __paritysi2 -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __paritysi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: 1 if number of bits is odd else returns 0 */
-
-COMPILER_RT_ABI si_int
-__paritysi2(si_int a)
-{
- su_int x = (su_int)a;
- x ^= x >> 16;
- x ^= x >> 8;
- x ^= x >> 4;
- return (0x6996 >> (x & 0xF)) & 1;
-}
diff --git a/lib/libcompiler_rt/parityti2.c b/lib/libcompiler_rt/parityti2.c
deleted file mode 100644
index 5a4fe492486..00000000000
--- a/lib/libcompiler_rt/parityti2.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- parityti2.c - Implement __parityti2 -------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __parityti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: 1 if number of bits is odd else returns 0 */
-
-COMPILER_RT_ABI si_int
-__parityti2(ti_int a)
-{
- twords x;
- x.all = a;
- return __paritydi2(x.s.high ^ x.s.low);
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/popcountdi2.c b/lib/libcompiler_rt/popcountdi2.c
deleted file mode 100644
index 5e8a62f075e..00000000000
--- a/lib/libcompiler_rt/popcountdi2.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- popcountdi2.c - Implement __popcountdi2 ----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __popcountdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: count of 1 bits */
-
-COMPILER_RT_ABI si_int
-__popcountdi2(di_int a)
-{
- du_int x2 = (du_int)a;
- x2 = x2 - ((x2 >> 1) & 0x5555555555555555uLL);
- /* Every 2 bits holds the sum of every pair of bits (32) */
- x2 = ((x2 >> 2) & 0x3333333333333333uLL) + (x2 & 0x3333333333333333uLL);
- /* Every 4 bits holds the sum of every 4-set of bits (3 significant bits) (16) */
- x2 = (x2 + (x2 >> 4)) & 0x0F0F0F0F0F0F0F0FuLL;
- /* Every 8 bits holds the sum of every 8-set of bits (4 significant bits) (8) */
- su_int x = (su_int)(x2 + (x2 >> 32));
- /* The lower 32 bits hold four 16 bit sums (5 significant bits). */
- /* Upper 32 bits are garbage */
- x = x + (x >> 16);
- /* The lower 16 bits hold two 32 bit sums (6 significant bits). */
- /* Upper 16 bits are garbage */
- return (x + (x >> 8)) & 0x0000007F; /* (7 significant bits) */
-}
diff --git a/lib/libcompiler_rt/popcountsi2.c b/lib/libcompiler_rt/popcountsi2.c
deleted file mode 100644
index 44544ff4989..00000000000
--- a/lib/libcompiler_rt/popcountsi2.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ===-- popcountsi2.c - Implement __popcountsi2 ---------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __popcountsi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: count of 1 bits */
-
-COMPILER_RT_ABI si_int
-__popcountsi2(si_int a)
-{
- su_int x = (su_int)a;
- x = x - ((x >> 1) & 0x55555555);
- /* Every 2 bits holds the sum of every pair of bits */
- x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
- /* Every 4 bits holds the sum of every 4-set of bits (3 significant bits) */
- x = (x + (x >> 4)) & 0x0F0F0F0F;
- /* Every 8 bits holds the sum of every 8-set of bits (4 significant bits) */
- x = (x + (x >> 16));
- /* The lower 16 bits hold two 8 bit sums (5 significant bits).*/
- /* Upper 16 bits are garbage */
- return (x + (x >> 8)) & 0x0000003F; /* (6 significant bits) */
-}
diff --git a/lib/libcompiler_rt/popcountti2.c b/lib/libcompiler_rt/popcountti2.c
deleted file mode 100644
index 7451bbb286b..00000000000
--- a/lib/libcompiler_rt/popcountti2.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ===-- popcountti2.c - Implement __popcountti2 ----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __popcountti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: count of 1 bits */
-
-COMPILER_RT_ABI si_int
-__popcountti2(ti_int a)
-{
- tu_int x3 = (tu_int)a;
- x3 = x3 - ((x3 >> 1) & (((tu_int)0x5555555555555555uLL << 64) |
- 0x5555555555555555uLL));
- /* Every 2 bits holds the sum of every pair of bits (64) */
- x3 = ((x3 >> 2) & (((tu_int)0x3333333333333333uLL << 64) | 0x3333333333333333uLL))
- + (x3 & (((tu_int)0x3333333333333333uLL << 64) | 0x3333333333333333uLL));
- /* Every 4 bits holds the sum of every 4-set of bits (3 significant bits) (32) */
- x3 = (x3 + (x3 >> 4))
- & (((tu_int)0x0F0F0F0F0F0F0F0FuLL << 64) | 0x0F0F0F0F0F0F0F0FuLL);
- /* Every 8 bits holds the sum of every 8-set of bits (4 significant bits) (16) */
- du_int x2 = (du_int)(x3 + (x3 >> 64));
- /* Every 8 bits holds the sum of every 8-set of bits (5 significant bits) (8) */
- su_int x = (su_int)(x2 + (x2 >> 32));
- /* Every 8 bits holds the sum of every 8-set of bits (6 significant bits) (4) */
- x = x + (x >> 16);
- /* Every 8 bits holds the sum of every 8-set of bits (7 significant bits) (2) */
- /* Upper 16 bits are garbage */
- return (x + (x >> 8)) & 0xFF; /* (8 significant bits) */
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/powidf2.c b/lib/libcompiler_rt/powidf2.c
deleted file mode 100644
index ac13b172b04..00000000000
--- a/lib/libcompiler_rt/powidf2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ===-- powidf2.cpp - Implement __powidf2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __powidf2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a ^ b */
-
-COMPILER_RT_ABI double
-__powidf2(double a, si_int b)
-{
- const int recip = b < 0;
- double r = 1;
- while (1)
- {
- if (b & 1)
- r *= a;
- b /= 2;
- if (b == 0)
- break;
- a *= a;
- }
- return recip ? 1/r : r;
-}
diff --git a/lib/libcompiler_rt/powisf2.c b/lib/libcompiler_rt/powisf2.c
deleted file mode 100644
index 0c400ec6dd6..00000000000
--- a/lib/libcompiler_rt/powisf2.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*===-- powisf2.cpp - Implement __powisf2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __powisf2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a ^ b */
-
-COMPILER_RT_ABI float
-__powisf2(float a, si_int b)
-{
- const int recip = b < 0;
- float r = 1;
- while (1)
- {
- if (b & 1)
- r *= a;
- b /= 2;
- if (b == 0)
- break;
- a *= a;
- }
- return recip ? 1/r : r;
-}
diff --git a/lib/libcompiler_rt/powitf2.c b/lib/libcompiler_rt/powitf2.c
deleted file mode 100644
index 172f29f58f2..00000000000
--- a/lib/libcompiler_rt/powitf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ===-- powitf2.cpp - Implement __powitf2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __powitf2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#if _ARCH_PPC
-
-/* Returns: a ^ b */
-
-COMPILER_RT_ABI long double
-__powitf2(long double a, si_int b)
-{
- const int recip = b < 0;
- long double r = 1;
- while (1)
- {
- if (b & 1)
- r *= a;
- b /= 2;
- if (b == 0)
- break;
- a *= a;
- }
- return recip ? 1/r : r;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/powixf2.c b/lib/libcompiler_rt/powixf2.c
deleted file mode 100644
index 0fd96e503e7..00000000000
--- a/lib/libcompiler_rt/powixf2.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ===-- powixf2.cpp - Implement __powixf2 ---------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __powixf2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#if !_ARCH_PPC
-
-#include "int_lib.h"
-
-/* Returns: a ^ b */
-
-COMPILER_RT_ABI long double
-__powixf2(long double a, si_int b)
-{
- const int recip = b < 0;
- long double r = 1;
- while (1)
- {
- if (b & 1)
- r *= a;
- b /= 2;
- if (b == 0)
- break;
- a *= a;
- }
- return recip ? 1/r : r;
-}
-
-#endif
diff --git a/lib/libcompiler_rt/ppc/DD.h b/lib/libcompiler_rt/ppc/DD.h
deleted file mode 100644
index 3e5f9e58c13..00000000000
--- a/lib/libcompiler_rt/ppc/DD.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef COMPILERRT_DD_HEADER
-#define COMPILERRT_DD_HEADER
-
-#include "../int_lib.h"
-
-typedef union {
- long double ld;
- struct {
- double hi;
- double lo;
- }s;
-} DD;
-
-typedef union {
- double d;
- uint64_t x;
-} doublebits;
-
-#define LOWORDER(xy,xHi,xLo,yHi,yLo) \
- (((((xHi)*(yHi) - (xy)) + (xHi)*(yLo)) + (xLo)*(yHi)) + (xLo)*(yLo))
-
-static __inline ALWAYS_INLINE double local_fabs(double x) {
- doublebits result = {.d = x};
- result.x &= UINT64_C(0x7fffffffffffffff);
- return result.d;
-}
-
-static __inline ALWAYS_INLINE double high26bits(double x) {
- doublebits result = {.d = x};
- result.x &= UINT64_C(0xfffffffff8000000);
- return result.d;
-}
-
-static __inline ALWAYS_INLINE int different_sign(double x, double y) {
- doublebits xsignbit = {.d = x}, ysignbit = {.d = y};
- int result = (int)(xsignbit.x >> 63) ^ (int)(ysignbit.x >> 63);
- return result;
-}
-
-long double __gcc_qadd(long double, long double);
-long double __gcc_qsub(long double, long double);
-long double __gcc_qmul(long double, long double);
-long double __gcc_qdiv(long double, long double);
-
-#endif /* COMPILERRT_DD_HEADER */
diff --git a/lib/libcompiler_rt/ppc/atomic_lock_free.c b/lib/libcompiler_rt/ppc/atomic_lock_free.c
deleted file mode 100644
index 6a781a3069b..00000000000
--- a/lib/libcompiler_rt/ppc/atomic_lock_free.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Public domain. */
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#pragma redefine_extname __atomic_is_lock_free_c __atomic_is_lock_free
-
-bool
-__atomic_is_lock_free_c(size_t size, void *ptr)
-{
- switch (size) {
- case 1:
- return true;
- case 2:
- return (((uintptr_t)ptr & 1) == 0);
- case 4:
- return (((uintptr_t)ptr & 3) == 0);
- }
-
- return false;
-}
diff --git a/lib/libcompiler_rt/ppc/divtc3.c b/lib/libcompiler_rt/ppc/divtc3.c
deleted file mode 100644
index ef532b84114..00000000000
--- a/lib/libcompiler_rt/ppc/divtc3.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-#include "DD.h"
-#include "../int_math.h"
-// Use DOUBLE_PRECISION because the soft-fp method we use is logb (on the upper
-// half of the long doubles), even though this file defines complex division for
-// 128-bit floats.
-#define DOUBLE_PRECISION
-#include "../fp_lib.h"
-
-#if !defined(CRT_INFINITY) && defined(HUGE_VAL)
-#define CRT_INFINITY HUGE_VAL
-#endif /* CRT_INFINITY */
-
-#define makeFinite(x) { \
- (x).s.hi = crt_copysign(crt_isinf((x).s.hi) ? 1.0 : 0.0, (x).s.hi); \
- (x).s.lo = 0.0; \
- }
-
-long double _Complex
-__divtc3(long double a, long double b, long double c, long double d)
-{
- DD cDD = { .ld = c };
- DD dDD = { .ld = d };
-
- int ilogbw = 0;
- const double logbw = __compiler_rt_logb(
- crt_fmax(crt_fabs(cDD.s.hi), crt_fabs(dDD.s.hi)));
-
- if (crt_isfinite(logbw))
- {
- ilogbw = (int)logbw;
-
- cDD.s.hi = crt_scalbn(cDD.s.hi, -ilogbw);
- cDD.s.lo = crt_scalbn(cDD.s.lo, -ilogbw);
- dDD.s.hi = crt_scalbn(dDD.s.hi, -ilogbw);
- dDD.s.lo = crt_scalbn(dDD.s.lo, -ilogbw);
- }
-
- const long double denom = __gcc_qadd(__gcc_qmul(cDD.ld, cDD.ld), __gcc_qmul(dDD.ld, dDD.ld));
- const long double realNumerator = __gcc_qadd(__gcc_qmul(a,cDD.ld), __gcc_qmul(b,dDD.ld));
- const long double imagNumerator = __gcc_qsub(__gcc_qmul(b,cDD.ld), __gcc_qmul(a,dDD.ld));
-
- DD real = { .ld = __gcc_qdiv(realNumerator, denom) };
- DD imag = { .ld = __gcc_qdiv(imagNumerator, denom) };
-
- real.s.hi = crt_scalbn(real.s.hi, -ilogbw);
- real.s.lo = crt_scalbn(real.s.lo, -ilogbw);
- imag.s.hi = crt_scalbn(imag.s.hi, -ilogbw);
- imag.s.lo = crt_scalbn(imag.s.lo, -ilogbw);
-
- if (crt_isnan(real.s.hi) && crt_isnan(imag.s.hi))
- {
- DD aDD = { .ld = a };
- DD bDD = { .ld = b };
- DD rDD = { .ld = denom };
-
- if ((rDD.s.hi == 0.0) && (!crt_isnan(aDD.s.hi) ||
- !crt_isnan(bDD.s.hi)))
- {
- real.s.hi = crt_copysign(CRT_INFINITY,cDD.s.hi) * aDD.s.hi;
- real.s.lo = 0.0;
- imag.s.hi = crt_copysign(CRT_INFINITY,cDD.s.hi) * bDD.s.hi;
- imag.s.lo = 0.0;
- }
-
- else if ((crt_isinf(aDD.s.hi) || crt_isinf(bDD.s.hi)) &&
- crt_isfinite(cDD.s.hi) && crt_isfinite(dDD.s.hi))
- {
- makeFinite(aDD);
- makeFinite(bDD);
- real.s.hi = CRT_INFINITY * (aDD.s.hi*cDD.s.hi + bDD.s.hi*dDD.s.hi);
- real.s.lo = 0.0;
- imag.s.hi = CRT_INFINITY * (bDD.s.hi*cDD.s.hi - aDD.s.hi*dDD.s.hi);
- imag.s.lo = 0.0;
- }
-
- else if ((crt_isinf(cDD.s.hi) || crt_isinf(dDD.s.hi)) &&
- crt_isfinite(aDD.s.hi) && crt_isfinite(bDD.s.hi))
- {
- makeFinite(cDD);
- makeFinite(dDD);
- real.s.hi = crt_copysign(0.0,(aDD.s.hi*cDD.s.hi + bDD.s.hi*dDD.s.hi));
- real.s.lo = 0.0;
- imag.s.hi = crt_copysign(0.0,(bDD.s.hi*cDD.s.hi - aDD.s.hi*dDD.s.hi));
- imag.s.lo = 0.0;
- }
- }
-
- long double _Complex z;
- __real__ z = real.ld;
- __imag__ z = imag.ld;
-
- return z;
-}
diff --git a/lib/libcompiler_rt/ppc/fixtfdi.c b/lib/libcompiler_rt/ppc/fixtfdi.c
deleted file mode 100644
index 2c7c0f8e279..00000000000
--- a/lib/libcompiler_rt/ppc/fixtfdi.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* int64_t __fixunstfdi(long double x);
- * This file implements the PowerPC 128-bit double-double -> int64_t conversion
- */
-
-#include "DD.h"
-#include "../int_math.h"
-
-uint64_t __fixtfdi(long double input)
-{
- const DD x = { .ld = input };
- const doublebits hibits = { .d = x.s.hi };
-
- const uint32_t absHighWord = (uint32_t)(hibits.x >> 32) & UINT32_C(0x7fffffff);
- const uint32_t absHighWordMinusOne = absHighWord - UINT32_C(0x3ff00000);
-
- /* If (1.0 - tiny) <= input < 0x1.0p63: */
- if (UINT32_C(0x03f00000) > absHighWordMinusOne)
- {
- /* Do an unsigned conversion of the absolute value, then restore the sign. */
- const int unbiasedHeadExponent = absHighWordMinusOne >> 20;
-
- int64_t result = hibits.x & INT64_C(0x000fffffffffffff); /* mantissa(hi) */
- result |= INT64_C(0x0010000000000000); /* matissa(hi) with implicit bit */
- result <<= 10; /* mantissa(hi) with one zero preceding bit. */
-
- const int64_t hiNegationMask = ((int64_t)(hibits.x)) >> 63;
-
- /* If the tail is non-zero, we need to patch in the tail bits. */
- if (0.0 != x.s.lo)
- {
- const doublebits lobits = { .d = x.s.lo };
- int64_t tailMantissa = lobits.x & INT64_C(0x000fffffffffffff);
- tailMantissa |= INT64_C(0x0010000000000000);
-
- /* At this point we have the mantissa of |tail| */
- /* We need to negate it if head and tail have different signs. */
- const int64_t loNegationMask = ((int64_t)(lobits.x)) >> 63;
- const int64_t negationMask = loNegationMask ^ hiNegationMask;
- tailMantissa = (tailMantissa ^ negationMask) - negationMask;
-
- /* Now we have the mantissa of tail as a signed 2s-complement integer */
-
- const int biasedTailExponent = (int)(lobits.x >> 52) & 0x7ff;
-
- /* Shift the tail mantissa into the right position, accounting for the
- * bias of 10 that we shifted the head mantissa by.
- */
- tailMantissa >>= (unbiasedHeadExponent - (biasedTailExponent - (1023 - 10)));
-
- result += tailMantissa;
- }
-
- result >>= (62 - unbiasedHeadExponent);
-
- /* Restore the sign of the result and return */
- result = (result ^ hiNegationMask) - hiNegationMask;
- return result;
-
- }
-
- /* Edge cases handled here: */
-
- /* |x| < 1, result is zero. */
- if (1.0 > crt_fabs(x.s.hi))
- return INT64_C(0);
-
- /* x very close to INT64_MIN, care must be taken to see which side we are on. */
- if (x.s.hi == -0x1.0p63) {
-
- int64_t result = INT64_MIN;
-
- if (0.0 < x.s.lo)
- {
- /* If the tail is positive, the correct result is something other than INT64_MIN.
- * we'll need to figure out what it is.
- */
-
- const doublebits lobits = { .d = x.s.lo };
- int64_t tailMantissa = lobits.x & INT64_C(0x000fffffffffffff);
- tailMantissa |= INT64_C(0x0010000000000000);
-
- /* Now we negate the tailMantissa */
- tailMantissa = (tailMantissa ^ INT64_C(-1)) + INT64_C(1);
-
- /* And shift it by the appropriate amount */
- const int biasedTailExponent = (int)(lobits.x >> 52) & 0x7ff;
- tailMantissa >>= 1075 - biasedTailExponent;
-
- result -= tailMantissa;
- }
-
- return result;
- }
-
- /* Signed overflows, infinities, and NaNs */
- if (x.s.hi > 0.0)
- return INT64_MAX;
- else
- return INT64_MIN;
-}
diff --git a/lib/libcompiler_rt/ppc/fixunstfdi.c b/lib/libcompiler_rt/ppc/fixunstfdi.c
deleted file mode 100644
index 5e6e2cedf6a..00000000000
--- a/lib/libcompiler_rt/ppc/fixunstfdi.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* uint64_t __fixunstfdi(long double x); */
-/* This file implements the PowerPC 128-bit double-double -> uint64_t conversion */
-
-#include "DD.h"
-
-uint64_t __fixunstfdi(long double input)
-{
- const DD x = { .ld = input };
- const doublebits hibits = { .d = x.s.hi };
-
- const uint32_t highWordMinusOne = (uint32_t)(hibits.x >> 32) - UINT32_C(0x3ff00000);
-
- /* If (1.0 - tiny) <= input < 0x1.0p64: */
- if (UINT32_C(0x04000000) > highWordMinusOne)
- {
- const int unbiasedHeadExponent = highWordMinusOne >> 20;
-
- uint64_t result = hibits.x & UINT64_C(0x000fffffffffffff); /* mantissa(hi) */
- result |= UINT64_C(0x0010000000000000); /* matissa(hi) with implicit bit */
- result <<= 11; /* mantissa(hi) left aligned in the int64 field. */
-
- /* If the tail is non-zero, we need to patch in the tail bits. */
- if (0.0 != x.s.lo)
- {
- const doublebits lobits = { .d = x.s.lo };
- int64_t tailMantissa = lobits.x & INT64_C(0x000fffffffffffff);
- tailMantissa |= INT64_C(0x0010000000000000);
-
- /* At this point we have the mantissa of |tail| */
-
- const int64_t negationMask = ((int64_t)(lobits.x)) >> 63;
- tailMantissa = (tailMantissa ^ negationMask) - negationMask;
-
- /* Now we have the mantissa of tail as a signed 2s-complement integer */
-
- const int biasedTailExponent = (int)(lobits.x >> 52) & 0x7ff;
-
- /* Shift the tail mantissa into the right position, accounting for the
- * bias of 11 that we shifted the head mantissa by.
- */
- tailMantissa >>= (unbiasedHeadExponent - (biasedTailExponent - (1023 - 11)));
-
- result += tailMantissa;
- }
-
- result >>= (63 - unbiasedHeadExponent);
- return result;
- }
-
- /* Edge cases are handled here, with saturation. */
- if (1.0 > x.s.hi)
- return UINT64_C(0);
- else
- return UINT64_MAX;
-}
diff --git a/lib/libcompiler_rt/ppc/fixunstfti.c b/lib/libcompiler_rt/ppc/fixunstfti.c
deleted file mode 100644
index fa21084cb57..00000000000
--- a/lib/libcompiler_rt/ppc/fixunstfti.c
+++ /dev/null
@@ -1,106 +0,0 @@
-//===-- lib/builtins/ppc/fixunstfti.c - Convert long double->int128 *-C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements converting the 128bit IBM/PowerPC long double (double-
-// double) data type to an unsigned 128 bit integer.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../int_math.h"
-#define BIAS 1023
-
-/* Convert long double into an unsigned 128-bit integer. */
-__uint128_t __fixunstfti(long double input) {
-
- /* If we are trying to convert a NaN, return the NaN bit pattern. */
- if (crt_isnan(input)) {
- return ((__uint128_t)0x7FF8000000000000ll) << 64 |
- (__uint128_t)0x0000000000000000ll;
- }
-
- __uint128_t result, hiResult, loResult;
- int hiExponent, loExponent, shift;
- /* The long double representation, with the high and low portions of
- * the long double, and the corresponding bit patterns of each double. */
- union {
- long double ld;
- double d[2]; /* [0] is the high double, [1] is the low double. */
- unsigned long long ull[2]; /* High and low doubles as 64-bit integers. */
- } ldUnion;
-
- /* If the long double is less than 1.0 or negative,
- * return 0.0. */
- if (input < 1.0)
- return 0.0;
-
- /* Retrieve the 64-bit patterns of high and low doubles.
- * Compute the unbiased exponent of both high and low doubles by
- * removing the signs, isolating the exponent, and subtracting
- * the bias from it. */
- ldUnion.ld = input;
- hiExponent = ((ldUnion.ull[0] & 0x7FFFFFFFFFFFFFFFll) >> 52) - BIAS;
- loExponent = ((ldUnion.ull[1] & 0x7FFFFFFFFFFFFFFFll) >> 52) - BIAS;
-
- /* Convert each double into int64; they will be added to the int128 result.
- * CASE 1: High or low double fits in int64
- * - Convert the each double normally into int64.
- *
- * CASE 2: High or low double does not fit in int64
- * - Scale the double to fit within a 64-bit integer
- * - Calculate the shift (amount to scale the double by in the int128)
- * - Clear all the bits of the exponent (with 0x800FFFFFFFFFFFFF)
- * - Add BIAS+53 (0x4350000000000000) to exponent to correct the value
- * - Scale (move) the double to the correct place in the int128
- * (Move it by 2^53 places)
- *
- * Note: If the high double is assumed to be positive, an unsigned conversion
- * from long double to 64-bit integer is needed. The low double can be either
- * positive or negative, so a signed conversion is needed to retain the result
- * of the low double and to ensure it does not simply get converted to 0. */
-
- /* CASE 1 - High double fits in int64. */
- if (hiExponent < 63) {
- hiResult = (unsigned long long)ldUnion.d[0];
- } else if (hiExponent < 128) {
- /* CASE 2 - High double does not fit in int64, scale and convert it. */
- shift = hiExponent - 54;
- ldUnion.ull[0] &= 0x800FFFFFFFFFFFFFll;
- ldUnion.ull[0] |= 0x4350000000000000ll;
- hiResult = (unsigned long long)ldUnion.d[0];
- hiResult <<= shift;
- } else {
- /* Detect cases for overflow. When the exponent of the high
- * double is greater than 128 bits and when the long double
- * input is positive, return the max 128-bit integer.
- * For negative inputs with exponents > 128, return 1, like gcc. */
- if (ldUnion.d[0] > 0) {
- return ((__uint128_t)0xFFFFFFFFFFFFFFFFll) << 64 |
- (__uint128_t)0xFFFFFFFFFFFFFFFFll;
- } else {
- return ((__uint128_t)0x0000000000000000ll) << 64 |
- (__uint128_t)0x0000000000000001ll;
- }
- }
-
- /* CASE 1 - Low double fits in int64. */
- if (loExponent < 63) {
- loResult = (long long)ldUnion.d[1];
- } else {
- /* CASE 2 - Low double does not fit in int64, scale and convert it. */
- shift = loExponent - 54;
- ldUnion.ull[1] &= 0x800FFFFFFFFFFFFFll;
- ldUnion.ull[1] |= 0x4350000000000000ll;
- loResult = (long long)ldUnion.d[1];
- loResult <<= shift;
- }
-
- /* Add the high and low doublewords together to form a 128 bit integer. */
- result = loResult + hiResult;
- return result;
-}
diff --git a/lib/libcompiler_rt/ppc/floatditf.c b/lib/libcompiler_rt/ppc/floatditf.c
deleted file mode 100644
index beabdd01742..00000000000
--- a/lib/libcompiler_rt/ppc/floatditf.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __floatditf(long long x); */
-/* This file implements the PowerPC long long -> long double conversion */
-
-#include "DD.h"
-
-long double __floatditf(int64_t a) {
-
- static const double twop32 = 0x1.0p32;
- static const double twop52 = 0x1.0p52;
-
- doublebits low = { .d = twop52 };
- low.x |= a & UINT64_C(0x00000000ffffffff); /* 0x1.0p52 + low 32 bits of a. */
-
- const double high_addend = (double)((int32_t)(a >> 32))*twop32 - twop52;
-
- /* At this point, we have two double precision numbers
- * high_addend and low.d, and we wish to return their sum
- * as a canonicalized long double:
- */
-
- /* This implementation sets the inexact flag spuriously.
- * This could be avoided, but at some substantial cost.
- */
-
- DD result;
-
- result.s.hi = high_addend + low.d;
- result.s.lo = (high_addend - result.s.hi) + low.d;
-
- return result.ld;
-
-}
diff --git a/lib/libcompiler_rt/ppc/floattitf.c b/lib/libcompiler_rt/ppc/floattitf.c
deleted file mode 100644
index b8e297b6b8d..00000000000
--- a/lib/libcompiler_rt/ppc/floattitf.c
+++ /dev/null
@@ -1,48 +0,0 @@
-//===-- lib/builtins/ppc/floattitf.c - Convert int128->long double -*-C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements converting a signed 128 bit integer to a 128bit IBM /
-// PowerPC long double (double-double) value.
-//
-//===----------------------------------------------------------------------===//
-
-#include <stdint.h>
-
-/* Conversions from signed and unsigned 64-bit int to long double. */
-long double __floatditf(int64_t);
-long double __floatunditf(uint64_t);
-
-/* Convert a signed 128-bit integer to long double.
- * This uses the following property: Let hi and lo be 64-bits each,
- * and let signed_val_k() and unsigned_val_k() be the value of the
- * argument interpreted as a signed or unsigned k-bit integer. Then,
- *
- * signed_val_128(hi,lo) = signed_val_64(hi) * 2^64 + unsigned_val_64(lo)
- * = (long double)hi * 2^64 + (long double)lo,
- *
- * where (long double)hi and (long double)lo are signed and
- * unsigned 64-bit integer to long double conversions, respectively.
- */
-long double __floattitf(__int128_t arg) {
- /* Split the int128 argument into 64-bit high and low int64 parts. */
- int64_t ArgHiPart = (int64_t)(arg >> 64);
- uint64_t ArgLoPart = (uint64_t)arg;
-
- /* Convert each 64-bit part into long double. The high part
- * must be a signed conversion and the low part an unsigned conversion
- * to ensure the correct result. */
- long double ConvertedHiPart = __floatditf(ArgHiPart);
- long double ConvertedLoPart = __floatunditf(ArgLoPart);
-
- /* The low bit of ArgHiPart corresponds to the 2^64 bit in arg.
- * Multiply the high part by 2^64 to undo the right shift by 64-bits
- * done in the splitting. Then, add to the low part to obtain the
- * final result. */
- return ((ConvertedHiPart * 0x1.0p64) + ConvertedLoPart);
-}
diff --git a/lib/libcompiler_rt/ppc/floatunditf.c b/lib/libcompiler_rt/ppc/floatunditf.c
deleted file mode 100644
index b12e1e738fd..00000000000
--- a/lib/libcompiler_rt/ppc/floatunditf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __floatunditf(unsigned long long x); */
-/* This file implements the PowerPC unsigned long long -> long double conversion */
-
-#include "DD.h"
-
-long double __floatunditf(uint64_t a) {
-
- /* Begins with an exact copy of the code from __floatundidf */
-
- static const double twop52 = 0x1.0p52;
- static const double twop84 = 0x1.0p84;
- static const double twop84_plus_twop52 = 0x1.00000001p84;
-
- doublebits high = { .d = twop84 };
- doublebits low = { .d = twop52 };
-
- high.x |= a >> 32; /* 0x1.0p84 + high 32 bits of a */
- low.x |= a & UINT64_C(0x00000000ffffffff); /* 0x1.0p52 + low 32 bits of a */
-
- const double high_addend = high.d - twop84_plus_twop52;
-
- /* At this point, we have two double precision numbers
- * high_addend and low.d, and we wish to return their sum
- * as a canonicalized long double:
- */
-
- /* This implementation sets the inexact flag spuriously. */
- /* This could be avoided, but at some substantial cost. */
-
- DD result;
-
- result.s.hi = high_addend + low.d;
- result.s.lo = (high_addend - result.s.hi) + low.d;
-
- return result.ld;
-
-}
diff --git a/lib/libcompiler_rt/ppc/gcc_qadd.c b/lib/libcompiler_rt/ppc/gcc_qadd.c
deleted file mode 100644
index 32e16e9d1d1..00000000000
--- a/lib/libcompiler_rt/ppc/gcc_qadd.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __gcc_qadd(long double x, long double y);
- * This file implements the PowerPC 128-bit double-double add operation.
- * This implementation is shamelessly cribbed from Apple's DDRT, circa 1993(!)
- */
-
-#include "DD.h"
-
-long double __gcc_qadd(long double x, long double y)
-{
- static const uint32_t infinityHi = UINT32_C(0x7ff00000);
-
- DD dst = { .ld = x }, src = { .ld = y };
-
- register double A = dst.s.hi, a = dst.s.lo,
- B = src.s.hi, b = src.s.lo;
-
- /* If both operands are zero: */
- if ((A == 0.0) && (B == 0.0)) {
- dst.s.hi = A + B;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- /* If either operand is NaN or infinity: */
- const doublebits abits = { .d = A };
- const doublebits bbits = { .d = B };
- if ((((uint32_t)(abits.x >> 32) & infinityHi) == infinityHi) ||
- (((uint32_t)(bbits.x >> 32) & infinityHi) == infinityHi)) {
- dst.s.hi = A + B;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- /* If the computation overflows: */
- /* This may be playing things a little bit fast and loose, but it will do for a start. */
- const double testForOverflow = A + (B + (a + b));
- const doublebits testbits = { .d = testForOverflow };
- if (((uint32_t)(testbits.x >> 32) & infinityHi) == infinityHi) {
- dst.s.hi = testForOverflow;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- double H, h;
- double T, t;
- double W, w;
- double Y;
-
- H = B + (A - (A + B));
- T = b + (a - (a + b));
- h = A + (B - (A + B));
- t = a + (b - (a + b));
-
- if (local_fabs(A) <= local_fabs(B))
- w = (a + b) + h;
- else
- w = (a + b) + H;
-
- W = (A + B) + w;
- Y = (A + B) - W;
- Y += w;
-
- if (local_fabs(a) <= local_fabs(b))
- w = t + Y;
- else
- w = T + Y;
-
- dst.s.hi = Y = W + w;
- dst.s.lo = (W - Y) + w;
-
- return dst.ld;
-}
diff --git a/lib/libcompiler_rt/ppc/gcc_qdiv.c b/lib/libcompiler_rt/ppc/gcc_qdiv.c
deleted file mode 100644
index 70aa00b6440..00000000000
--- a/lib/libcompiler_rt/ppc/gcc_qdiv.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __gcc_qdiv(long double x, long double y);
- * This file implements the PowerPC 128-bit double-double division operation.
- * This implementation is shamelessly cribbed from Apple's DDRT, circa 1993(!)
- */
-
-#include "DD.h"
-
-long double __gcc_qdiv(long double a, long double b)
-{
- static const uint32_t infinityHi = UINT32_C(0x7ff00000);
- DD dst = { .ld = a }, src = { .ld = b };
-
- register double x = dst.s.hi, x1 = dst.s.lo,
- y = src.s.hi, y1 = src.s.lo;
-
- double yHi, yLo, qHi, qLo;
- double yq, tmp, q;
-
- q = x / y;
-
- /* Detect special cases */
- if (q == 0.0) {
- dst.s.hi = q;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- const doublebits qBits = { .d = q };
- if (((uint32_t)(qBits.x >> 32) & infinityHi) == infinityHi) {
- dst.s.hi = q;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- yHi = high26bits(y);
- qHi = high26bits(q);
-
- yq = y * q;
- yLo = y - yHi;
- qLo = q - qHi;
-
- tmp = LOWORDER(yq, yHi, yLo, qHi, qLo);
- tmp = (x - yq) - tmp;
- tmp = ((tmp + x1) - y1 * q) / y;
- x = q + tmp;
-
- dst.s.lo = (q - x) + tmp;
- dst.s.hi = x;
-
- return dst.ld;
-}
diff --git a/lib/libcompiler_rt/ppc/gcc_qmul.c b/lib/libcompiler_rt/ppc/gcc_qmul.c
deleted file mode 100644
index fb4c5164ccb..00000000000
--- a/lib/libcompiler_rt/ppc/gcc_qmul.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __gcc_qmul(long double x, long double y);
- * This file implements the PowerPC 128-bit double-double multiply operation.
- * This implementation is shamelessly cribbed from Apple's DDRT, circa 1993(!)
- */
-
-#include "DD.h"
-
-long double __gcc_qmul(long double x, long double y)
-{
- static const uint32_t infinityHi = UINT32_C(0x7ff00000);
- DD dst = { .ld = x }, src = { .ld = y };
-
- register double A = dst.s.hi, a = dst.s.lo,
- B = src.s.hi, b = src.s.lo;
-
- double aHi, aLo, bHi, bLo;
- double ab, tmp, tau;
-
- ab = A * B;
-
- /* Detect special cases */
- if (ab == 0.0) {
- dst.s.hi = ab;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- const doublebits abBits = { .d = ab };
- if (((uint32_t)(abBits.x >> 32) & infinityHi) == infinityHi) {
- dst.s.hi = ab;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- /* Generic cases handled here. */
- aHi = high26bits(A);
- bHi = high26bits(B);
- aLo = A - aHi;
- bLo = B - bHi;
-
- tmp = LOWORDER(ab, aHi, aLo, bHi, bLo);
- tmp += (A * b + a * B);
- tau = ab + tmp;
-
- dst.s.lo = (ab - tau) + tmp;
- dst.s.hi = tau;
-
- return dst.ld;
-}
diff --git a/lib/libcompiler_rt/ppc/gcc_qsub.c b/lib/libcompiler_rt/ppc/gcc_qsub.c
deleted file mode 100644
index c092e24dbda..00000000000
--- a/lib/libcompiler_rt/ppc/gcc_qsub.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __gcc_qsub(long double x, long double y);
- * This file implements the PowerPC 128-bit double-double add operation.
- * This implementation is shamelessly cribbed from Apple's DDRT, circa 1993(!)
- */
-
-#include "DD.h"
-
-long double __gcc_qsub(long double x, long double y)
-{
- static const uint32_t infinityHi = UINT32_C(0x7ff00000);
-
- DD dst = { .ld = x }, src = { .ld = y };
-
- register double A = dst.s.hi, a = dst.s.lo,
- B = -src.s.hi, b = -src.s.lo;
-
- /* If both operands are zero: */
- if ((A == 0.0) && (B == 0.0)) {
- dst.s.hi = A + B;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- /* If either operand is NaN or infinity: */
- const doublebits abits = { .d = A };
- const doublebits bbits = { .d = B };
- if ((((uint32_t)(abits.x >> 32) & infinityHi) == infinityHi) ||
- (((uint32_t)(bbits.x >> 32) & infinityHi) == infinityHi)) {
- dst.s.hi = A + B;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- /* If the computation overflows: */
- /* This may be playing things a little bit fast and loose, but it will do for a start. */
- const double testForOverflow = A + (B + (a + b));
- const doublebits testbits = { .d = testForOverflow };
- if (((uint32_t)(testbits.x >> 32) & infinityHi) == infinityHi) {
- dst.s.hi = testForOverflow;
- dst.s.lo = 0.0;
- return dst.ld;
- }
-
- double H, h;
- double T, t;
- double W, w;
- double Y;
-
- H = B + (A - (A + B));
- T = b + (a - (a + b));
- h = A + (B - (A + B));
- t = a + (b - (a + b));
-
- if (local_fabs(A) <= local_fabs(B))
- w = (a + b) + h;
- else
- w = (a + b) + H;
-
- W = (A + B) + w;
- Y = (A + B) - W;
- Y += w;
-
- if (local_fabs(a) <= local_fabs(b))
- w = t + Y;
- else
- w = T + Y;
-
- dst.s.hi = Y = W + w;
- dst.s.lo = (W - Y) + w;
-
- return dst.ld;
-}
diff --git a/lib/libcompiler_rt/ppc/multc3.c b/lib/libcompiler_rt/ppc/multc3.c
deleted file mode 100644
index 9dd79c975dd..00000000000
--- a/lib/libcompiler_rt/ppc/multc3.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-#include "DD.h"
-#include "../int_math.h"
-
-#define makeFinite(x) { \
- (x).s.hi = crt_copysign(crt_isinf((x).s.hi) ? 1.0 : 0.0, (x).s.hi); \
- (x).s.lo = 0.0; \
- }
-
-#define zeroNaN(x) { \
- if (crt_isnan((x).s.hi)) { \
- (x).s.hi = crt_copysign(0.0, (x).s.hi); \
- (x).s.lo = 0.0; \
- } \
- }
-
-long double _Complex
-__multc3(long double a, long double b, long double c, long double d)
-{
- long double ac = __gcc_qmul(a,c);
- long double bd = __gcc_qmul(b,d);
- long double ad = __gcc_qmul(a,d);
- long double bc = __gcc_qmul(b,c);
-
- DD real = { .ld = __gcc_qsub(ac,bd) };
- DD imag = { .ld = __gcc_qadd(ad,bc) };
-
- if (crt_isnan(real.s.hi) && crt_isnan(imag.s.hi))
- {
- int recalc = 0;
-
- DD aDD = { .ld = a };
- DD bDD = { .ld = b };
- DD cDD = { .ld = c };
- DD dDD = { .ld = d };
-
- if (crt_isinf(aDD.s.hi) || crt_isinf(bDD.s.hi))
- {
- makeFinite(aDD);
- makeFinite(bDD);
- zeroNaN(cDD);
- zeroNaN(dDD);
- recalc = 1;
- }
-
- if (crt_isinf(cDD.s.hi) || crt_isinf(dDD.s.hi))
- {
- makeFinite(cDD);
- makeFinite(dDD);
- zeroNaN(aDD);
- zeroNaN(bDD);
- recalc = 1;
- }
-
- if (!recalc)
- {
- DD acDD = { .ld = ac };
- DD bdDD = { .ld = bd };
- DD adDD = { .ld = ad };
- DD bcDD = { .ld = bc };
-
- if (crt_isinf(acDD.s.hi) || crt_isinf(bdDD.s.hi) ||
- crt_isinf(adDD.s.hi) || crt_isinf(bcDD.s.hi))
- {
- zeroNaN(aDD);
- zeroNaN(bDD);
- zeroNaN(cDD);
- zeroNaN(dDD);
- recalc = 1;
- }
- }
-
- if (recalc)
- {
- real.s.hi = CRT_INFINITY * (aDD.s.hi*cDD.s.hi - bDD.s.hi*dDD.s.hi);
- real.s.lo = 0.0;
- imag.s.hi = CRT_INFINITY * (aDD.s.hi*dDD.s.hi + bDD.s.hi*cDD.s.hi);
- imag.s.lo = 0.0;
- }
- }
-
- long double _Complex z;
- __real__ z = real.ld;
- __imag__ z = imag.ld;
-
- return z;
-}
diff --git a/lib/libcompiler_rt/ppc/restFP.S b/lib/libcompiler_rt/ppc/restFP.S
deleted file mode 100644
index 507e756e18b..00000000000
--- a/lib/libcompiler_rt/ppc/restFP.S
+++ /dev/null
@@ -1,46 +0,0 @@
-//===-- restFP.S - Implement restFP ---------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// Helper function used by compiler to restore ppc floating point registers at
-// the end of the function epilog. This function returns to the address
-// in the LR slot. So a function epilog must branch (b) not branch and link
-// (bl) to this function.
-// If the compiler wants to restore f27..f31, it does a "b restFP+52"
-//
-// This function should never be exported by a shared library. Each linkage
-// unit carries its own copy of this function.
-//
-DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(restFP)
- lfd f14,-144(r1)
- lfd f15,-136(r1)
- lfd f16,-128(r1)
- lfd f17,-120(r1)
- lfd f18,-112(r1)
- lfd f19,-104(r1)
- lfd f20,-96(r1)
- lfd f21,-88(r1)
- lfd f22,-80(r1)
- lfd f23,-72(r1)
- lfd f24,-64(r1)
- lfd f25,-56(r1)
- lfd f26,-48(r1)
- lfd f27,-40(r1)
- lfd f28,-32(r1)
- lfd f29,-24(r1)
- lfd f30,-16(r1)
- lfd f31,-8(r1)
- lwz r0,8(r1)
- mtlr r0
- blr
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/ppc/saveFP.S b/lib/libcompiler_rt/ppc/saveFP.S
deleted file mode 100644
index 20b06fff53d..00000000000
--- a/lib/libcompiler_rt/ppc/saveFP.S
+++ /dev/null
@@ -1,43 +0,0 @@
-//===-- saveFP.S - Implement saveFP ---------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-//
-// Helper function used by compiler to save ppc floating point registers in
-// function prologs. This routines also saves r0 in the LR slot.
-// If the compiler wants to save f27..f31, it does a "bl saveFP+52"
-//
-// This function should never be exported by a shared library. Each linkage
-// unit carries its own copy of this function.
-//
-DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(saveFP)
- stfd f14,-144(r1)
- stfd f15,-136(r1)
- stfd f16,-128(r1)
- stfd f17,-120(r1)
- stfd f18,-112(r1)
- stfd f19,-104(r1)
- stfd f20,-96(r1)
- stfd f21,-88(r1)
- stfd f22,-80(r1)
- stfd f23,-72(r1)
- stfd f24,-64(r1)
- stfd f25,-56(r1)
- stfd f26,-48(r1)
- stfd f27,-40(r1)
- stfd f28,-32(r1)
- stfd f29,-24(r1)
- stfd f30,-16(r1)
- stfd f31,-8(r1)
- stw r0,8(r1)
- blr
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/riscv/mulsi3.S b/lib/libcompiler_rt/riscv/mulsi3.S
deleted file mode 100644
index a58d237040b..00000000000
--- a/lib/libcompiler_rt/riscv/mulsi3.S
+++ /dev/null
@@ -1,28 +0,0 @@
-//===--- mulsi3.S - Integer multiplication routines routines ---===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#if !defined(__riscv_mul) && __riscv_xlen == 32
- .text
- .align 2
-
- .globl __mulsi3
- .type __mulsi3, @function
-__mulsi3:
- mv a2, a0
- mv a0, zero
-.L1:
- andi a3, a1, 1
- beqz a3, .L2
- add a0, a0, a2
-.L2:
- srli a1, a1, 1
- slli a2, a2, 1
- bnez a1, .L1
- ret
-#endif
diff --git a/lib/libcompiler_rt/subdf3.c b/lib/libcompiler_rt/subdf3.c
deleted file mode 100644
index a892fa603cf..00000000000
--- a/lib/libcompiler_rt/subdf3.c
+++ /dev/null
@@ -1,32 +0,0 @@
-//===-- lib/adddf3.c - Double-precision subtraction ---------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements double-precision soft-float subtraction with the
-// IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define DOUBLE_PRECISION
-#include "fp_lib.h"
-
-// Subtraction; flip the sign bit of b and add.
-COMPILER_RT_ABI fp_t
-__subdf3(fp_t a, fp_t b) {
- return __adddf3(a, fromRep(toRep(b) ^ signBit));
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_dsub(fp_t a, fp_t b) {
- return __subdf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_dsub(fp_t a, fp_t b) COMPILER_RT_ALIAS(__subdf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/subsf3.c b/lib/libcompiler_rt/subsf3.c
deleted file mode 100644
index 4b2786177dc..00000000000
--- a/lib/libcompiler_rt/subsf3.c
+++ /dev/null
@@ -1,32 +0,0 @@
-//===-- lib/subsf3.c - Single-precision subtraction ---------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements single-precision soft-float subtraction with the
-// IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define SINGLE_PRECISION
-#include "fp_lib.h"
-
-// Subtraction; flip the sign bit of b and add.
-COMPILER_RT_ABI fp_t
-__subsf3(fp_t a, fp_t b) {
- return __addsf3(a, fromRep(toRep(b) ^ signBit));
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI fp_t __aeabi_fsub(fp_t a, fp_t b) {
- return __subsf3(a, b);
-}
-#else
-AEABI_RTABI fp_t __aeabi_fsub(fp_t a, fp_t b) COMPILER_RT_ALIAS(__subsf3);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/subtf3.c b/lib/libcompiler_rt/subtf3.c
deleted file mode 100644
index 609b816f41e..00000000000
--- a/lib/libcompiler_rt/subtf3.c
+++ /dev/null
@@ -1,27 +0,0 @@
-//===-- lib/subtf3.c - Quad-precision subtraction -----------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements quad-precision soft-float subtraction with the
-// IEEE-754 default rounding (to nearest, ties to even).
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __addtf3(fp_t a, fp_t b);
-
-// Subtraction; flip the sign bit of b and add.
-COMPILER_RT_ABI fp_t
-__subtf3(fp_t a, fp_t b) {
- return __addtf3(a, fromRep(toRep(b) ^ signBit));
-}
-
-#endif
diff --git a/lib/libcompiler_rt/subvdi3.c b/lib/libcompiler_rt/subvdi3.c
deleted file mode 100644
index 71fc70ffa92..00000000000
--- a/lib/libcompiler_rt/subvdi3.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- subvdi3.c - Implement __subvdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __subvdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a - b */
-
-/* Effects: aborts if a - b overflows */
-
-COMPILER_RT_ABI di_int
-__subvdi3(di_int a, di_int b)
-{
- di_int s = (du_int) a - (du_int) b;
- if (b >= 0)
- {
- if (s > a)
- compilerrt_abort();
- }
- else
- {
- if (s <= a)
- compilerrt_abort();
- }
- return s;
-}
diff --git a/lib/libcompiler_rt/subvsi3.c b/lib/libcompiler_rt/subvsi3.c
deleted file mode 100644
index e6c0fb688c9..00000000000
--- a/lib/libcompiler_rt/subvsi3.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ===-- subvsi3.c - Implement __subvsi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __subvsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a - b */
-
-/* Effects: aborts if a - b overflows */
-
-COMPILER_RT_ABI si_int
-__subvsi3(si_int a, si_int b)
-{
- si_int s = (su_int) a - (su_int) b;
- if (b >= 0)
- {
- if (s > a)
- compilerrt_abort();
- }
- else
- {
- if (s <= a)
- compilerrt_abort();
- }
- return s;
-}
diff --git a/lib/libcompiler_rt/subvti3.c b/lib/libcompiler_rt/subvti3.c
deleted file mode 100644
index a6804d2d7b9..00000000000
--- a/lib/libcompiler_rt/subvti3.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ===-- subvti3.c - Implement __subvti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __subvti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a - b */
-
-/* Effects: aborts if a - b overflows */
-
-COMPILER_RT_ABI ti_int
-__subvti3(ti_int a, ti_int b)
-{
- ti_int s = (tu_int) a - (tu_int) b;
- if (b >= 0)
- {
- if (s > a)
- compilerrt_abort();
- }
- else
- {
- if (s <= a)
- compilerrt_abort();
- }
- return s;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/trampoline_setup.c b/lib/libcompiler_rt/trampoline_setup.c
deleted file mode 100644
index 25b627ab765..00000000000
--- a/lib/libcompiler_rt/trampoline_setup.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ===----- trampoline_setup.c - Implement __trampoline_setup -------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-extern void __clear_cache(void* start, void* end);
-
-/*
- * The ppc compiler generates calls to __trampoline_setup() when creating
- * trampoline functions on the stack for use with nested functions.
- * This function creates a custom 40-byte trampoline function on the stack
- * which loads r11 with a pointer to the outer function's locals
- * and then jumps to the target nested function.
- */
-
-#if __ppc__ && !defined(__powerpc64__)
-COMPILER_RT_ABI void
-__trampoline_setup(uint32_t* trampOnStack, int trampSizeAllocated,
- const void* realFunc, void* localsPtr)
-{
- /* should never happen, but if compiler did not allocate */
- /* enough space on stack for the trampoline, abort */
- if ( trampSizeAllocated < 40 )
- compilerrt_abort();
-
- /* create trampoline */
- trampOnStack[0] = 0x7c0802a6; /* mflr r0 */
- trampOnStack[1] = 0x4800000d; /* bl Lbase */
- trampOnStack[2] = (uint32_t)realFunc;
- trampOnStack[3] = (uint32_t)localsPtr;
- trampOnStack[4] = 0x7d6802a6; /* Lbase: mflr r11 */
- trampOnStack[5] = 0x818b0000; /* lwz r12,0(r11) */
- trampOnStack[6] = 0x7c0803a6; /* mtlr r0 */
- trampOnStack[7] = 0x7d8903a6; /* mtctr r12 */
- trampOnStack[8] = 0x816b0004; /* lwz r11,4(r11) */
- trampOnStack[9] = 0x4e800420; /* bctr */
-
- /* clear instruction cache */
- __clear_cache(trampOnStack, &trampOnStack[10]);
-}
-#endif /* __ppc__ && !defined(__powerpc64__) */
diff --git a/lib/libcompiler_rt/truncdfhf2.c b/lib/libcompiler_rt/truncdfhf2.c
deleted file mode 100644
index 8354a41b8b6..00000000000
--- a/lib/libcompiler_rt/truncdfhf2.c
+++ /dev/null
@@ -1,26 +0,0 @@
-//===-- lib/truncdfhf2.c - double -> half conversion --------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define SRC_DOUBLE
-#define DST_HALF
-#include "fp_trunc_impl.inc"
-
-COMPILER_RT_ABI uint16_t __truncdfhf2(double a) {
- return __truncXfYf2__(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI uint16_t __aeabi_d2h(double a) {
- return __truncdfhf2(a);
-}
-#else
-AEABI_RTABI uint16_t __aeabi_d2h(double a) COMPILER_RT_ALIAS(__truncdfhf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/truncdfsf2.c b/lib/libcompiler_rt/truncdfsf2.c
deleted file mode 100644
index 195d3e0656e..00000000000
--- a/lib/libcompiler_rt/truncdfsf2.c
+++ /dev/null
@@ -1,26 +0,0 @@
-//===-- lib/truncdfsf2.c - double -> single conversion ------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define SRC_DOUBLE
-#define DST_SINGLE
-#include "fp_trunc_impl.inc"
-
-COMPILER_RT_ABI float __truncdfsf2(double a) {
- return __truncXfYf2__(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI float __aeabi_d2f(double a) {
- return __truncdfsf2(a);
-}
-#else
-AEABI_RTABI float __aeabi_d2f(double a) COMPILER_RT_ALIAS(__truncdfsf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/truncsfhf2.c b/lib/libcompiler_rt/truncsfhf2.c
deleted file mode 100644
index 9c84ab4f938..00000000000
--- a/lib/libcompiler_rt/truncsfhf2.c
+++ /dev/null
@@ -1,32 +0,0 @@
-//===-- lib/truncsfhf2.c - single -> half conversion --------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define SRC_SINGLE
-#define DST_HALF
-#include "fp_trunc_impl.inc"
-
-// Use a forwarding definition and noinline to implement a poor man's alias,
-// as there isn't a good cross-platform way of defining one.
-COMPILER_RT_ABI NOINLINE uint16_t __truncsfhf2(float a) {
- return __truncXfYf2__(a);
-}
-
-COMPILER_RT_ABI uint16_t __gnu_f2h_ieee(float a) {
- return __truncsfhf2(a);
-}
-
-#if defined(__ARM_EABI__)
-#if defined(COMPILER_RT_ARMHF_TARGET)
-AEABI_RTABI uint16_t __aeabi_f2h(float a) {
- return __truncsfhf2(a);
-}
-#else
-AEABI_RTABI uint16_t __aeabi_f2h(float a) COMPILER_RT_ALIAS(__truncsfhf2);
-#endif
-#endif
diff --git a/lib/libcompiler_rt/trunctfdf2.c b/lib/libcompiler_rt/trunctfdf2.c
deleted file mode 100644
index 741a71b33c5..00000000000
--- a/lib/libcompiler_rt/trunctfdf2.c
+++ /dev/null
@@ -1,22 +0,0 @@
-//===-- lib/truncdfsf2.c - quad -> double conversion --------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#define SRC_QUAD
-#define DST_DOUBLE
-#include "fp_trunc_impl.inc"
-
-COMPILER_RT_ABI double __trunctfdf2(long double a) {
- return __truncXfYf2__(a);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/trunctfsf2.c b/lib/libcompiler_rt/trunctfsf2.c
deleted file mode 100644
index de96c1decf6..00000000000
--- a/lib/libcompiler_rt/trunctfsf2.c
+++ /dev/null
@@ -1,22 +0,0 @@
-//===-- lib/trunctfsf2.c - quad -> single conversion --------------*- C -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#define QUAD_PRECISION
-#include "fp_lib.h"
-
-#if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-#define SRC_QUAD
-#define DST_SINGLE
-#include "fp_trunc_impl.inc"
-
-COMPILER_RT_ABI float __trunctfsf2(long double a) {
- return __truncXfYf2__(a);
-}
-
-#endif
diff --git a/lib/libcompiler_rt/ucmpdi2.c b/lib/libcompiler_rt/ucmpdi2.c
deleted file mode 100644
index 40af23613b1..00000000000
--- a/lib/libcompiler_rt/ucmpdi2.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ===-- ucmpdi2.c - Implement __ucmpdi2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ucmpdi2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: if (a < b) returns 0
- * if (a == b) returns 1
- * if (a > b) returns 2
- */
-
-COMPILER_RT_ABI si_int
-__ucmpdi2(du_int a, du_int b)
-{
- udwords x;
- x.all = a;
- udwords y;
- y.all = b;
- if (x.s.high < y.s.high)
- return 0;
- if (x.s.high > y.s.high)
- return 2;
- if (x.s.low < y.s.low)
- return 0;
- if (x.s.low > y.s.low)
- return 2;
- return 1;
-}
-
-#ifdef __ARM_EABI__
-/* Returns: if (a < b) returns -1
-* if (a == b) returns 0
-* if (a > b) returns 1
-*/
-COMPILER_RT_ABI si_int
-__aeabi_ulcmp(di_int a, di_int b)
-{
- return __ucmpdi2(a, b) - 1;
-}
-#endif
-
diff --git a/lib/libcompiler_rt/ucmpti2.c b/lib/libcompiler_rt/ucmpti2.c
deleted file mode 100644
index bda8083bb2a..00000000000
--- a/lib/libcompiler_rt/ucmpti2.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ===-- ucmpti2.c - Implement __ucmpti2 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __ucmpti2 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: if (a < b) returns 0
- * if (a == b) returns 1
- * if (a > b) returns 2
- */
-
-COMPILER_RT_ABI si_int
-__ucmpti2(tu_int a, tu_int b)
-{
- utwords x;
- x.all = a;
- utwords y;
- y.all = b;
- if (x.s.high < y.s.high)
- return 0;
- if (x.s.high > y.s.high)
- return 2;
- if (x.s.low < y.s.low)
- return 0;
- if (x.s.low > y.s.low)
- return 2;
- return 1;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/udivdi3.c b/lib/libcompiler_rt/udivdi3.c
deleted file mode 100644
index dc68e154b10..00000000000
--- a/lib/libcompiler_rt/udivdi3.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- udivdi3.c - Implement __udivdi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivdi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b */
-
-COMPILER_RT_ABI du_int
-__udivdi3(du_int a, du_int b)
-{
- return __udivmoddi4(a, b, 0);
-}
diff --git a/lib/libcompiler_rt/udivmoddi4.c b/lib/libcompiler_rt/udivmoddi4.c
deleted file mode 100644
index 0c8b4ff4647..00000000000
--- a/lib/libcompiler_rt/udivmoddi4.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/* ===-- udivmoddi4.c - Implement __udivmoddi4 -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivmoddi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Effects: if rem != 0, *rem = a % b
- * Returns: a / b
- */
-
-/* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
-
-COMPILER_RT_ABI du_int
-__udivmoddi4(du_int a, du_int b, du_int* rem)
-{
- const unsigned n_uword_bits = sizeof(su_int) * CHAR_BIT;
- const unsigned n_udword_bits = sizeof(du_int) * CHAR_BIT;
- udwords n;
- n.all = a;
- udwords d;
- d.all = b;
- udwords q;
- udwords r;
- unsigned sr;
- /* special cases, X is unknown, K != 0 */
- if (n.s.high == 0)
- {
- if (d.s.high == 0)
- {
- /* 0 X
- * ---
- * 0 X
- */
- if (rem)
- *rem = n.s.low % d.s.low;
- return n.s.low / d.s.low;
- }
- /* 0 X
- * ---
- * K X
- */
- if (rem)
- *rem = n.s.low;
- return 0;
- }
- /* n.s.high != 0 */
- if (d.s.low == 0)
- {
- if (d.s.high == 0)
- {
- /* K X
- * ---
- * 0 0
- */
- if (rem)
- *rem = n.s.high % d.s.low;
- return n.s.high / d.s.low;
- }
- /* d.s.high != 0 */
- if (n.s.low == 0)
- {
- /* K 0
- * ---
- * K 0
- */
- if (rem)
- {
- r.s.high = n.s.high % d.s.high;
- r.s.low = 0;
- *rem = r.all;
- }
- return n.s.high / d.s.high;
- }
- /* K K
- * ---
- * K 0
- */
- if ((d.s.high & (d.s.high - 1)) == 0) /* if d is a power of 2 */
- {
- if (rem)
- {
- r.s.low = n.s.low;
- r.s.high = n.s.high & (d.s.high - 1);
- *rem = r.all;
- }
- return n.s.high >> __builtin_ctz(d.s.high);
- }
- /* K K
- * ---
- * K 0
- */
- sr = __builtin_clz(d.s.high) - __builtin_clz(n.s.high);
- /* 0 <= sr <= n_uword_bits - 2 or sr large */
- if (sr > n_uword_bits - 2)
- {
- if (rem)
- *rem = n.all;
- return 0;
- }
- ++sr;
- /* 1 <= sr <= n_uword_bits - 1 */
- /* q.all = n.all << (n_udword_bits - sr); */
- q.s.low = 0;
- q.s.high = n.s.low << (n_uword_bits - sr);
- /* r.all = n.all >> sr; */
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
- }
- else /* d.s.low != 0 */
- {
- if (d.s.high == 0)
- {
- /* K X
- * ---
- * 0 K
- */
- if ((d.s.low & (d.s.low - 1)) == 0) /* if d is a power of 2 */
- {
- if (rem)
- *rem = n.s.low & (d.s.low - 1);
- if (d.s.low == 1)
- return n.all;
- sr = __builtin_ctz(d.s.low);
- q.s.high = n.s.high >> sr;
- q.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
- return q.all;
- }
- /* K X
- * ---
- * 0 K
- */
- sr = 1 + n_uword_bits + __builtin_clz(d.s.low) - __builtin_clz(n.s.high);
- /* 2 <= sr <= n_udword_bits - 1
- * q.all = n.all << (n_udword_bits - sr);
- * r.all = n.all >> sr;
- */
- if (sr == n_uword_bits)
- {
- q.s.low = 0;
- q.s.high = n.s.low;
- r.s.high = 0;
- r.s.low = n.s.high;
- }
- else if (sr < n_uword_bits) // 2 <= sr <= n_uword_bits - 1
- {
- q.s.low = 0;
- q.s.high = n.s.low << (n_uword_bits - sr);
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
- }
- else // n_uword_bits + 1 <= sr <= n_udword_bits - 1
- {
- q.s.low = n.s.low << (n_udword_bits - sr);
- q.s.high = (n.s.high << (n_udword_bits - sr)) |
- (n.s.low >> (sr - n_uword_bits));
- r.s.high = 0;
- r.s.low = n.s.high >> (sr - n_uword_bits);
- }
- }
- else
- {
- /* K X
- * ---
- * K K
- */
- sr = __builtin_clz(d.s.high) - __builtin_clz(n.s.high);
- /* 0 <= sr <= n_uword_bits - 1 or sr large */
- if (sr > n_uword_bits - 1)
- {
- if (rem)
- *rem = n.all;
- return 0;
- }
- ++sr;
- /* 1 <= sr <= n_uword_bits */
- /* q.all = n.all << (n_udword_bits - sr); */
- q.s.low = 0;
- if (sr == n_uword_bits)
- {
- q.s.high = n.s.low;
- r.s.high = 0;
- r.s.low = n.s.high;
- }
- else
- {
- q.s.high = n.s.low << (n_uword_bits - sr);
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
- }
- }
- }
- /* Not a special case
- * q and r are initialized with:
- * q.all = n.all << (n_udword_bits - sr);
- * r.all = n.all >> sr;
- * 1 <= sr <= n_udword_bits - 1
- */
- su_int carry = 0;
- for (; sr > 0; --sr)
- {
- /* r:q = ((r:q) << 1) | carry */
- r.s.high = (r.s.high << 1) | (r.s.low >> (n_uword_bits - 1));
- r.s.low = (r.s.low << 1) | (q.s.high >> (n_uword_bits - 1));
- q.s.high = (q.s.high << 1) | (q.s.low >> (n_uword_bits - 1));
- q.s.low = (q.s.low << 1) | carry;
- /* carry = 0;
- * if (r.all >= d.all)
- * {
- * r.all -= d.all;
- * carry = 1;
- * }
- */
- const di_int s = (di_int)(d.all - r.all - 1) >> (n_udword_bits - 1);
- carry = s & 1;
- r.all -= d.all & s;
- }
- q.all = (q.all << 1) | carry;
- if (rem)
- *rem = r.all;
- return q.all;
-}
diff --git a/lib/libcompiler_rt/udivmodsi4.c b/lib/libcompiler_rt/udivmodsi4.c
deleted file mode 100644
index 789c4b5061e..00000000000
--- a/lib/libcompiler_rt/udivmodsi4.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*===-- udivmodsi4.c - Implement __udivmodsi4 ------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivmodsi4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b, *rem = a % b */
-
-COMPILER_RT_ABI su_int
-__udivmodsi4(su_int a, su_int b, su_int* rem)
-{
- si_int d = __udivsi3(a,b);
- *rem = a - (d*b);
- return d;
-}
-
-
diff --git a/lib/libcompiler_rt/udivmodti4.c b/lib/libcompiler_rt/udivmodti4.c
deleted file mode 100644
index 803168849c6..00000000000
--- a/lib/libcompiler_rt/udivmodti4.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ===-- udivmodti4.c - Implement __udivmodti4 -----------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivmodti4 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Effects: if rem != 0, *rem = a % b
- * Returns: a / b
- */
-
-/* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
-
-COMPILER_RT_ABI tu_int
-__udivmodti4(tu_int a, tu_int b, tu_int* rem)
-{
- const unsigned n_udword_bits = sizeof(du_int) * CHAR_BIT;
- const unsigned n_utword_bits = sizeof(tu_int) * CHAR_BIT;
- utwords n;
- n.all = a;
- utwords d;
- d.all = b;
- utwords q;
- utwords r;
- unsigned sr;
- /* special cases, X is unknown, K != 0 */
- if (n.s.high == 0)
- {
- if (d.s.high == 0)
- {
- /* 0 X
- * ---
- * 0 X
- */
- if (rem)
- *rem = n.s.low % d.s.low;
- return n.s.low / d.s.low;
- }
- /* 0 X
- * ---
- * K X
- */
- if (rem)
- *rem = n.s.low;
- return 0;
- }
- /* n.s.high != 0 */
- if (d.s.low == 0)
- {
- if (d.s.high == 0)
- {
- /* K X
- * ---
- * 0 0
- */
- if (rem)
- *rem = n.s.high % d.s.low;
- return n.s.high / d.s.low;
- }
- /* d.s.high != 0 */
- if (n.s.low == 0)
- {
- /* K 0
- * ---
- * K 0
- */
- if (rem)
- {
- r.s.high = n.s.high % d.s.high;
- r.s.low = 0;
- *rem = r.all;
- }
- return n.s.high / d.s.high;
- }
- /* K K
- * ---
- * K 0
- */
- if ((d.s.high & (d.s.high - 1)) == 0) /* if d is a power of 2 */
- {
- if (rem)
- {
- r.s.low = n.s.low;
- r.s.high = n.s.high & (d.s.high - 1);
- *rem = r.all;
- }
- return n.s.high >> __builtin_ctzll(d.s.high);
- }
- /* K K
- * ---
- * K 0
- */
- sr = __builtin_clzll(d.s.high) - __builtin_clzll(n.s.high);
- /* 0 <= sr <= n_udword_bits - 2 or sr large */
- if (sr > n_udword_bits - 2)
- {
- if (rem)
- *rem = n.all;
- return 0;
- }
- ++sr;
- /* 1 <= sr <= n_udword_bits - 1 */
- /* q.all = n.all << (n_utword_bits - sr); */
- q.s.low = 0;
- q.s.high = n.s.low << (n_udword_bits - sr);
- /* r.all = n.all >> sr; */
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_udword_bits - sr)) | (n.s.low >> sr);
- }
- else /* d.s.low != 0 */
- {
- if (d.s.high == 0)
- {
- /* K X
- * ---
- * 0 K
- */
- if ((d.s.low & (d.s.low - 1)) == 0) /* if d is a power of 2 */
- {
- if (rem)
- *rem = n.s.low & (d.s.low - 1);
- if (d.s.low == 1)
- return n.all;
- sr = __builtin_ctzll(d.s.low);
- q.s.high = n.s.high >> sr;
- q.s.low = (n.s.high << (n_udword_bits - sr)) | (n.s.low >> sr);
- return q.all;
- }
- /* K X
- * ---
- * 0 K
- */
- sr = 1 + n_udword_bits + __builtin_clzll(d.s.low)
- - __builtin_clzll(n.s.high);
- /* 2 <= sr <= n_utword_bits - 1
- * q.all = n.all << (n_utword_bits - sr);
- * r.all = n.all >> sr;
- */
- if (sr == n_udword_bits)
- {
- q.s.low = 0;
- q.s.high = n.s.low;
- r.s.high = 0;
- r.s.low = n.s.high;
- }
- else if (sr < n_udword_bits) // 2 <= sr <= n_udword_bits - 1
- {
- q.s.low = 0;
- q.s.high = n.s.low << (n_udword_bits - sr);
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_udword_bits - sr)) | (n.s.low >> sr);
- }
- else // n_udword_bits + 1 <= sr <= n_utword_bits - 1
- {
- q.s.low = n.s.low << (n_utword_bits - sr);
- q.s.high = (n.s.high << (n_utword_bits - sr)) |
- (n.s.low >> (sr - n_udword_bits));
- r.s.high = 0;
- r.s.low = n.s.high >> (sr - n_udword_bits);
- }
- }
- else
- {
- /* K X
- * ---
- * K K
- */
- sr = __builtin_clzll(d.s.high) - __builtin_clzll(n.s.high);
- /*0 <= sr <= n_udword_bits - 1 or sr large */
- if (sr > n_udword_bits - 1)
- {
- if (rem)
- *rem = n.all;
- return 0;
- }
- ++sr;
- /* 1 <= sr <= n_udword_bits
- * q.all = n.all << (n_utword_bits - sr);
- * r.all = n.all >> sr;
- */
- q.s.low = 0;
- if (sr == n_udword_bits)
- {
- q.s.high = n.s.low;
- r.s.high = 0;
- r.s.low = n.s.high;
- }
- else
- {
- r.s.high = n.s.high >> sr;
- r.s.low = (n.s.high << (n_udword_bits - sr)) | (n.s.low >> sr);
- q.s.high = n.s.low << (n_udword_bits - sr);
- }
- }
- }
- /* Not a special case
- * q and r are initialized with:
- * q.all = n.all << (n_utword_bits - sr);
- * r.all = n.all >> sr;
- * 1 <= sr <= n_utword_bits - 1
- */
- su_int carry = 0;
- for (; sr > 0; --sr)
- {
- /* r:q = ((r:q) << 1) | carry */
- r.s.high = (r.s.high << 1) | (r.s.low >> (n_udword_bits - 1));
- r.s.low = (r.s.low << 1) | (q.s.high >> (n_udword_bits - 1));
- q.s.high = (q.s.high << 1) | (q.s.low >> (n_udword_bits - 1));
- q.s.low = (q.s.low << 1) | carry;
- /* carry = 0;
- * if (r.all >= d.all)
- * {
- * r.all -= d.all;
- * carry = 1;
- * }
- */
- const ti_int s = (ti_int)(d.all - r.all - 1) >> (n_utword_bits - 1);
- carry = s & 1;
- r.all -= d.all & s;
- }
- q.all = (q.all << 1) | carry;
- if (rem)
- *rem = r.all;
- return q.all;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/udivsi3.c b/lib/libcompiler_rt/udivsi3.c
deleted file mode 100644
index bb720f8c382..00000000000
--- a/lib/libcompiler_rt/udivsi3.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ===-- udivsi3.c - Implement __udivsi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a / b */
-
-/* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
-
-/* This function should not call __divsi3! */
-COMPILER_RT_ABI su_int
-__udivsi3(su_int n, su_int d)
-{
- const unsigned n_uword_bits = sizeof(su_int) * CHAR_BIT;
- su_int q;
- su_int r;
- unsigned sr;
- /* special cases */
- if (d == 0)
- return 0; /* ?! */
- if (n == 0)
- return 0;
- sr = __builtin_clz(d) - __builtin_clz(n);
- /* 0 <= sr <= n_uword_bits - 1 or sr large */
- if (sr > n_uword_bits - 1) /* d > r */
- return 0;
- if (sr == n_uword_bits - 1) /* d == 1 */
- return n;
- ++sr;
- /* 1 <= sr <= n_uword_bits - 1 */
- /* Not a special case */
- q = n << (n_uword_bits - sr);
- r = n >> sr;
- su_int carry = 0;
- for (; sr > 0; --sr)
- {
- /* r:q = ((r:q) << 1) | carry */
- r = (r << 1) | (q >> (n_uword_bits - 1));
- q = (q << 1) | carry;
- /* carry = 0;
- * if (r.all >= d.all)
- * {
- * r.all -= d.all;
- * carry = 1;
- * }
- */
- const si_int s = (si_int)(d - r - 1) >> (n_uword_bits - 1);
- carry = s & 1;
- r -= d & s;
- }
- q = (q << 1) | carry;
- return q;
-}
-
-#if defined(__ARM_EABI__)
-AEABI_RTABI su_int __aeabi_uidiv(su_int n, su_int d) COMPILER_RT_ALIAS(__udivsi3);
-#endif
diff --git a/lib/libcompiler_rt/udivti3.c b/lib/libcompiler_rt/udivti3.c
deleted file mode 100644
index ec94673e25b..00000000000
--- a/lib/libcompiler_rt/udivti3.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ===-- udivti3.c - Implement __udivti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __udivti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a / b */
-
-COMPILER_RT_ABI tu_int
-__udivti3(tu_int a, tu_int b)
-{
- return __udivmodti4(a, b, 0);
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/umoddi3.c b/lib/libcompiler_rt/umoddi3.c
deleted file mode 100644
index d513f080a1e..00000000000
--- a/lib/libcompiler_rt/umoddi3.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ===-- umoddi3.c - Implement __umoddi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __umoddi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a % b */
-
-COMPILER_RT_ABI du_int
-__umoddi3(du_int a, du_int b)
-{
- du_int r;
- __udivmoddi4(a, b, &r);
- return r;
-}
diff --git a/lib/libcompiler_rt/umodsi3.c b/lib/libcompiler_rt/umodsi3.c
deleted file mode 100644
index d5fda4a6af1..00000000000
--- a/lib/libcompiler_rt/umodsi3.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ===-- umodsi3.c - Implement __umodsi3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __umodsi3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-/* Returns: a % b */
-
-COMPILER_RT_ABI su_int
-__umodsi3(su_int a, su_int b)
-{
- return a - __udivsi3(a, b) * b;
-}
diff --git a/lib/libcompiler_rt/umodti3.c b/lib/libcompiler_rt/umodti3.c
deleted file mode 100644
index 6d1ca7a8cf6..00000000000
--- a/lib/libcompiler_rt/umodti3.c
+++ /dev/null
@@ -1,29 +0,0 @@
-/* ===-- umodti3.c - Implement __umodti3 -----------------------------------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===----------------------------------------------------------------------===
- *
- * This file implements __umodti3 for the compiler_rt library.
- *
- * ===----------------------------------------------------------------------===
- */
-
-#include "int_lib.h"
-
-#ifdef CRT_HAS_128BIT
-
-/* Returns: a % b */
-
-COMPILER_RT_ABI tu_int
-__umodti3(tu_int a, tu_int b)
-{
- tu_int r;
- __udivmodti4(a, b, &r);
- return r;
-}
-
-#endif /* CRT_HAS_128BIT */
diff --git a/lib/libcompiler_rt/unwind-ehabi-helpers.h b/lib/libcompiler_rt/unwind-ehabi-helpers.h
deleted file mode 100644
index ccb0765975a..00000000000
--- a/lib/libcompiler_rt/unwind-ehabi-helpers.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ===-- arm-ehabi-helpers.h - Supplementary ARM EHABI declarations --------===
- *
- * The LLVM Compiler Infrastructure
- *
- * This file is dual licensed under the MIT and the University of Illinois Open
- * Source Licenses. See LICENSE.TXT for details.
- *
- * ===--------------------------------------------------------------------=== */
-
-#ifndef UNWIND_EHABI_HELPERS_H
-#define UNWIND_EHABI_HELPERS_H
-
-#include <stdint.h>
-/* NOTE: see reasoning for this inclusion below */
-#include <unwind.h>
-
-#if !defined(__ARM_EABI_UNWINDER__)
-
-/*
- * NOTE: _URC_OK, _URC_FAILURE must be present as preprocessor tokens. This
- * allows for a substitution of a constant which can be cast into the
- * appropriate enumerated type. This header is expected to always be included
- * AFTER unwind.h (which is why it is forcefully included above). This ensures
- * that we do not overwrite the token for the enumeration. Subsequent uses of
- * the token would be clean to rewrite with constant values.
- *
- * The typedef redeclaration should be safe. Due to the protection granted to
- * us by the `__ARM_EABI_UNWINDER__` above, we are guaranteed that we are in a
- * header not vended by gcc. The HP unwinder (being an itanium unwinder) does
- * not support EHABI, and the GNU unwinder, derived from the HP unwinder, also
- * does not support EHABI as of the introduction of this header. As such, we
- * are fairly certain that we are in the LLVM case. Here, _Unwind_State is a
- * typedef, and so we can get away with a redeclaration.
- *
- * Guarded redefinitions of the needed unwind state prevent the redefinition of
- * those states.
- */
-
-#define _URC_OK 0
-#define _URC_FAILURE 9
-
-typedef uint32_t _Unwind_State;
-
-#if !defined(_US_UNWIND_FRAME_STARTING)
-#define _US_UNWIND_FRAME_STARTING ((_Unwind_State)1)
-#endif
-
-#if !defined(_US_ACTION_MASK)
-#define _US_ACTION_MASK ((_Unwind_State)3)
-#endif
-
-#endif
-
-#endif
-
diff --git a/lib/libcompiler_rt/x86_64/chkstk.S b/lib/libcompiler_rt/x86_64/chkstk.S
deleted file mode 100644
index 4149ac63d9d..00000000000
--- a/lib/libcompiler_rt/x86_64/chkstk.S
+++ /dev/null
@@ -1,39 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// _chkstk routine
-// This routine is windows specific
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-// Notes from r227519
-// MSVC x64s __chkstk and cygmings ___chkstk_ms do not adjust %rsp
-// themselves. It also does not clobber %rax so we can reuse it when
-// adjusting %rsp.
-
-#ifdef __x86_64__
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(___chkstk_ms)
- push %rcx
- push %rax
- cmp $0x1000,%rax
- lea 24(%rsp),%rcx
- jb 1f
-2:
- sub $0x1000,%rcx
- test %rcx,(%rcx)
- sub $0x1000,%rax
- cmp $0x1000,%rax
- ja 2b
-1:
- sub %rax,%rcx
- test %rcx,(%rcx)
- pop %rax
- pop %rcx
- ret
-END_COMPILERRT_FUNCTION(___chkstk_ms)
-
-#endif // __x86_64__
diff --git a/lib/libcompiler_rt/x86_64/chkstk2.S b/lib/libcompiler_rt/x86_64/chkstk2.S
deleted file mode 100644
index ac1eb920e0e..00000000000
--- a/lib/libcompiler_rt/x86_64/chkstk2.S
+++ /dev/null
@@ -1,42 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-#ifdef __x86_64__
-
-// _chkstk (_alloca) routine - probe stack between %rsp and (%rsp-%rax) in 4k increments,
-// then decrement %rsp by %rax. Preserves all registers except %rsp and flags.
-// This routine is windows specific
-// http://msdn.microsoft.com/en-us/library/ms648426.aspx
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__alloca)
- mov %rcx,%rax // x64 _alloca is a normal function with parameter in rcx
- // fallthrough
-DEFINE_COMPILERRT_FUNCTION(___chkstk)
- push %rcx
- cmp $0x1000,%rax
- lea 16(%rsp),%rcx // rsp before calling this routine -> rcx
- jb 1f
-2:
- sub $0x1000,%rcx
- test %rcx,(%rcx)
- sub $0x1000,%rax
- cmp $0x1000,%rax
- ja 2b
-1:
- sub %rax,%rcx
- test %rcx,(%rcx)
-
- lea 8(%rsp),%rax // load pointer to the return address into rax
- mov %rcx,%rsp // install the new top of stack pointer into rsp
- mov -8(%rax),%rcx // restore rcx
- push (%rax) // push return address onto the stack
- sub %rsp,%rax // restore the original value in rax
- ret
-END_COMPILERRT_FUNCTION(___chkstk)
-END_COMPILERRT_FUNCTION(__alloca)
-
-#endif // __x86_64__
diff --git a/lib/libcompiler_rt/x86_64/floatdidf.c b/lib/libcompiler_rt/x86_64/floatdidf.c
deleted file mode 100644
index dead0ed42c6..00000000000
--- a/lib/libcompiler_rt/x86_64/floatdidf.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* double __floatdidf(di_int a); */
-
-#if defined(__x86_64__) || defined(_M_X64)
-
-#include "../int_lib.h"
-
-double __floatdidf(int64_t a)
-{
- return (double)a;
-}
-
-#endif /* __x86_64__ */
diff --git a/lib/libcompiler_rt/x86_64/floatdisf.c b/lib/libcompiler_rt/x86_64/floatdisf.c
deleted file mode 100644
index 99d5621c632..00000000000
--- a/lib/libcompiler_rt/x86_64/floatdisf.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-#if defined(__x86_64__) || defined(_M_X64)
-
-#include "../int_lib.h"
-
-float __floatdisf(int64_t a)
-{
- return (float)a;
-}
-
-#endif /* __x86_64__ */
diff --git a/lib/libcompiler_rt/x86_64/floatdixf.c b/lib/libcompiler_rt/x86_64/floatdixf.c
deleted file mode 100644
index c01193a82b5..00000000000
--- a/lib/libcompiler_rt/x86_64/floatdixf.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* This file is distributed under the University of Illinois Open Source
- * License. See LICENSE.TXT for details.
- */
-
-/* long double __floatdixf(di_int a); */
-
-#ifdef __x86_64__
-
-#include "../int_lib.h"
-
-long double __floatdixf(int64_t a)
-{
- return (long double)a;
-}
-
-#endif /* __i386__ */
diff --git a/lib/libcompiler_rt/x86_64/floatundidf.S b/lib/libcompiler_rt/x86_64/floatundidf.S
deleted file mode 100644
index 094a68dc3cd..00000000000
--- a/lib/libcompiler_rt/x86_64/floatundidf.S
+++ /dev/null
@@ -1,52 +0,0 @@
-//===-- floatundidf.S - Implement __floatundidf for x86_64 ----------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements __floatundidf for the compiler_rt library.
-//
-//===----------------------------------------------------------------------===//
-
-#include "../assembly.h"
-
-// double __floatundidf(du_int a);
-
-#ifdef __x86_64__
-
-CONST_SECTION
-
- .balign 16
-twop52:
- .quad 0x4330000000000000
-
- .balign 16
-twop84_plus_twop52:
- .quad 0x4530000000100000
-
- .balign 16
-twop84:
- .quad 0x4530000000000000
-
-#define REL_ADDR(_a) (_a)(%rip)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundidf)
- movd %edi, %xmm0 // low 32 bits of a
- shrq $32, %rdi // high 32 bits of a
- orq REL_ADDR(twop84), %rdi // 0x1p84 + a_hi (no rounding occurs)
- orpd REL_ADDR(twop52), %xmm0 // 0x1p52 + a_lo (no rounding occurs)
- movd %rdi, %xmm1
- subsd REL_ADDR(twop84_plus_twop52), %xmm1 // a_hi - 0x1p52 (no rounding occurs)
- addsd %xmm1, %xmm0 // a_hi + a_lo (round happens here)
- ret
-END_COMPILERRT_FUNCTION(__floatundidf)
-
-#endif // __x86_64__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/x86_64/floatundisf.S b/lib/libcompiler_rt/x86_64/floatundisf.S
deleted file mode 100644
index 7c9f75e188e..00000000000
--- a/lib/libcompiler_rt/x86_64/floatundisf.S
+++ /dev/null
@@ -1,38 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// float __floatundisf(du_int a);
-
-#ifdef __x86_64__
-
-CONST_SECTION
-
- .balign 16
-two:
- .single 2.0
-
-#define REL_ADDR(_a) (_a)(%rip)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundisf)
- movq $1, %rsi
- testq %rdi, %rdi
- js 1f
- cvtsi2ssq %rdi, %xmm0
- ret
-
-1: andq %rdi, %rsi
- shrq %rdi
- orq %rsi, %rdi
- cvtsi2ssq %rdi, %xmm0
- mulss REL_ADDR(two), %xmm0
- ret
-END_COMPILERRT_FUNCTION(__floatundisf)
-
-#endif // __x86_64__
-
-NO_EXEC_STACK_DIRECTIVE
-
diff --git a/lib/libcompiler_rt/x86_64/floatundixf.S b/lib/libcompiler_rt/x86_64/floatundixf.S
deleted file mode 100644
index 28a096b7137..00000000000
--- a/lib/libcompiler_rt/x86_64/floatundixf.S
+++ /dev/null
@@ -1,71 +0,0 @@
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-
-#include "../assembly.h"
-
-// long double __floatundixf(du_int a);
-
-#ifdef __x86_64__
-
-CONST_SECTION
-
- .balign 16
-twop64:
- .quad 0x43f0000000000000
-
-#define REL_ADDR(_a) (_a)(%rip)
-
- .text
-
- .balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundixf)
- movq %rdi, -8(%rsp)
- fildq -8(%rsp)
- test %rdi, %rdi
- js 1f
- ret
-1: faddl REL_ADDR(twop64)
- ret
-END_COMPILERRT_FUNCTION(__floatundixf)
-
-#endif // __x86_64__
-
-
-/* Branch-free implementation is ever so slightly slower, but more beautiful.
- It is likely superior for inlining, so I kept it around for future reference.
-
-#ifdef __x86_64__
-
-CONST_SECTION
-
- .balign 4
-twop52:
- .quad 0x4330000000000000
-twop84_plus_twop52_neg:
- .quad 0xc530000000100000
-twop84:
- .quad 0x4530000000000000
-
-#define REL_ADDR(_a) (_a)(%rip)
-
-.text
-.balign 4
-DEFINE_COMPILERRT_FUNCTION(__floatundixf)
- movl %edi, %esi // low 32 bits of input
- shrq $32, %rdi // hi 32 bits of input
- orq REL_ADDR(twop84), %rdi // 2^84 + hi (as a double)
- orq REL_ADDR(twop52), %rsi // 2^52 + lo (as a double)
- movq %rdi, -8(%rsp)
- movq %rsi, -16(%rsp)
- fldl REL_ADDR(twop84_plus_twop52_neg)
- faddl -8(%rsp) // hi - 2^52 (as double extended, no rounding occurs)
- faddl -16(%rsp) // hi + lo (as double extended)
- ret
-END_COMPILERRT_FUNCTION(__floatundixf)
-
-#endif // __x86_64__
-
-*/
-
-NO_EXEC_STACK_DIRECTIVE
-