Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,137 @@
absvdi2
absvsi2
absvti2
adddf3
addsf3
addtf3
addvdi3
addvsi3
addvti3
apple_versioning
ashldi3
ashlti3
ashrdi3
ashrti3
atomic_flag_clear
atomic_flag_clear_explicit
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
atomic_signal_fence
atomic_thread_fence
clear_cache
clzdi2
clzsi2
clzti2
cmpdi2
cmpti2
comparedf2
comparesf2
ctzdi2
ctzsi2
ctzti2
divdc3
divdf3
divdi3
divmoddi4
divmodsi4
divsc3
divsf3
divsi3
divtf3
divti3
divxc3
enable_execute_stack
extendhfsf2
extendsfdf2
ffsdi2
ffsti2
fixdfdi
fixdfsi
fixdfti
fixsfdi
fixsfsi
fixsfti
fixunsdfdi
fixunsdfsi
fixunsdfti
fixunssfdi
fixunssfsi
fixunssfti
fixunsxfdi
fixunsxfsi
fixunsxfti
fixxfdi
fixxfti
floatdidf
floatdisf
floatdixf
floatsidf
floatsisf
floattidf
floattisf
floattixf
floatunsidf
floatunsisf
floatuntidf
floatuntisf
floatuntixf
gcc_personality_v0
gnu_f2h_ieee
gnu_h2f_ieee
lshrdi3
lshrti3
moddi3
modsi3
modti3
muldc3
muldf3
muldi3
mulodi4
mulosi4
muloti4
mulsc3
mulsf3
multf3
multi3
mulvdi3
mulvsi3
mulvti3
mulxc3
negdf2
negdi2
negsf2
negti2
negvdi2
negvsi2
negvti2
paritydi2
paritysi2
parityti2
popcountdi2
popcountsi2
popcountti2
powidf2
powisf2
powitf2
powixf2
subdf3
subsf3
subtf3
subvdi3
subvsi3
subvti3
trampoline_setup
truncdfhf2
truncdfsf2
truncsfhf2
ucmpdi2
ucmpti2
udivdi3
udivmoddi4
udivmodsi4
udivmodti4
udivsi3
udivti3
umoddi3
umodsi3
umodti3

View File

@ -0,0 +1,4 @@
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()

View File

@ -0,0 +1,11 @@
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.

View File

@ -0,0 +1,57 @@
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

View File

@ -0,0 +1,57 @@
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

View File

@ -0,0 +1 @@
apple_versioning

View File

@ -0,0 +1,120 @@
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

View File

@ -0,0 +1,120 @@
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

View File

@ -0,0 +1,16 @@
clzti2
divti3
fixdfti
fixsfti
fixunsdfti
floattidf
floattisf
floatuntidf
floatuntisf
gcc_personality_v0
modti3
powidf2
powisf2
udivmodti4
udivti3
umodti3

View File

@ -0,0 +1,82 @@
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

View File

@ -0,0 +1,12 @@
addtf3
divtf3
multf3
powitf2
subtf3
trampoline_setup
addtf3
divtf3
multf3
powitf2
subtf3
trampoline_setup

View File

@ -0,0 +1 @@
apple_versioning

View File

@ -0,0 +1,35 @@
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

View File

@ -0,0 +1,7 @@
apple_versioning
addtf3
divtf3
multf3
powitf2
subtf3
trampoline_setup

View File

@ -0,0 +1,346 @@
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.

View File

@ -0,0 +1,34 @@
// 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__

View File

@ -0,0 +1,29 @@
/*===-- 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;
}

View File

@ -0,0 +1,29 @@
/* ===-- 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;
}

View File

@ -0,0 +1,34 @@
/* ===-- 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 */

Some files were not shown because too many files have changed in this diff Show More