mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
chore(compiler-rt): update compiler-rt source files
Update the compiler-rt source files to the tip of llvm-project [1]. [1] https://github.com/llvm/llvm-project/commit/ab97b89d03a7 Signed-off-by: Manish Pandey <manish.pandey2@arm.com> Change-Id: Ia72b25423896a530bf5bb68ff067184b2314e2be
This commit is contained in:
parent
fd39217a74
commit
cdd6089db0
4 changed files with 92 additions and 6 deletions
|
@ -18,8 +18,8 @@ COMPILER_RT_ABI di_int __divmoddi4(di_int a, di_int b, di_int *rem) {
|
|||
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
|
||||
a = (du_int)(a ^ s_a) - s_a; // negate if s_a == -1
|
||||
b = (du_int)(b ^ s_b) - s_b; // negate if s_b == -1
|
||||
s_b ^= s_a; // sign of quotient
|
||||
du_int r;
|
||||
di_int q = (__udivmoddi4(a, b, &r) ^ s_b) - s_b; // negate if s_b == -1
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
#define SYMBOL_NAME(name) XSTR(__USER_LABEL_PREFIX__) #name
|
||||
|
||||
#if defined(__ELF__) || defined(__MINGW32__) || defined(__wasm__) || \
|
||||
defined(_AIX)
|
||||
defined(_AIX) || defined(__CYGWIN__)
|
||||
#define COMPILER_RT_ALIAS(name, aliasname) \
|
||||
COMPILER_RT_ABI __typeof(name) aliasname __attribute__((__alias__(#name)));
|
||||
#elif defined(__APPLE__)
|
||||
|
|
|
@ -65,6 +65,11 @@
|
|||
#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))
|
||||
#if __has_builtin(__builtin_copysignf128)
|
||||
#define crt_copysignf128(x, y) __builtin_copysignf128((x), (y))
|
||||
#elif __has_builtin(__builtin_copysignq) || (defined(__GNUC__) && __GNUC__ >= 7)
|
||||
#define crt_copysignf128(x, y) __builtin_copysignq((x), (y))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
|
@ -75,6 +80,11 @@
|
|||
#define crt_fabs(x) __builtin_fabs((x))
|
||||
#define crt_fabsf(x) __builtin_fabsf((x))
|
||||
#define crt_fabsl(x) __builtin_fabsl((x))
|
||||
#if __has_builtin(__builtin_fabsf128)
|
||||
#define crt_fabsf128(x) __builtin_fabsf128((x))
|
||||
#elif __has_builtin(__builtin_fabsq) || (defined(__GNUC__) && __GNUC__ >= 7)
|
||||
#define crt_fabsf128(x) __builtin_fabsq((x))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
|
|
|
@ -165,16 +165,80 @@ typedef struct {
|
|||
#define HAS_80_BIT_LONG_DOUBLE 0
|
||||
#endif
|
||||
|
||||
#if CRT_HAS_FLOATING_POINT
|
||||
#if HAS_80_BIT_LONG_DOUBLE
|
||||
typedef long double xf_float;
|
||||
typedef union {
|
||||
uqwords u;
|
||||
long double f;
|
||||
} long_double_bits;
|
||||
xf_float f;
|
||||
} xf_bits;
|
||||
#endif
|
||||
|
||||
#ifdef __powerpc64__
|
||||
// From https://gcc.gnu.org/wiki/Ieee128PowerPC:
|
||||
// PowerPC64 uses the following suffixes:
|
||||
// IFmode: IBM extended double
|
||||
// KFmode: IEEE 128-bit floating point
|
||||
// TFmode: Matches the default for long double. With -mabi=ieeelongdouble,
|
||||
// it is IEEE 128-bit, with -mabi=ibmlongdouble IBM extended double
|
||||
// Since compiler-rt only implements the tf set of libcalls, we use long double
|
||||
// for the tf_float typedef.
|
||||
typedef long double tf_float;
|
||||
#define CRT_LDBL_128BIT
|
||||
#define CRT_HAS_F128
|
||||
#if __LDBL_MANT_DIG__ == 113 && !defined(__LONG_DOUBLE_IBM128__)
|
||||
#define CRT_HAS_IEEE_TF
|
||||
#define CRT_LDBL_IEEE_F128
|
||||
#endif
|
||||
#define TF_C(x) x##L
|
||||
#elif __LDBL_MANT_DIG__ == 113
|
||||
// Use long double instead of __float128 if it matches the IEEE 128-bit format.
|
||||
#define CRT_LDBL_128BIT
|
||||
#define CRT_HAS_F128
|
||||
#define CRT_HAS_IEEE_TF
|
||||
#define CRT_LDBL_IEEE_F128
|
||||
typedef long double tf_float;
|
||||
#define TF_C(x) x##L
|
||||
#elif defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
|
||||
#define CRT_HAS___FLOAT128_KEYWORD
|
||||
#define CRT_HAS_F128
|
||||
// NB: we assume the __float128 type uses IEEE representation.
|
||||
#define CRT_HAS_IEEE_TF
|
||||
typedef __float128 tf_float;
|
||||
#define TF_C(x) x##Q
|
||||
#endif
|
||||
|
||||
#ifdef CRT_HAS_F128
|
||||
typedef union {
|
||||
uqwords u;
|
||||
tf_float f;
|
||||
} tf_bits;
|
||||
#endif
|
||||
|
||||
// __(u)int128_t is currently needed to compile the *tf builtins as we would
|
||||
// otherwise need to manually expand the bit manipulation on two 64-bit value.
|
||||
#if defined(CRT_HAS_128BIT) && defined(CRT_HAS_F128)
|
||||
#define CRT_HAS_TF_MODE
|
||||
#endif
|
||||
|
||||
#if CRT_HAS_FLOATING_POINT
|
||||
#if __STDC_VERSION__ >= 199901L
|
||||
typedef float _Complex Fcomplex;
|
||||
typedef double _Complex Dcomplex;
|
||||
typedef long double _Complex Lcomplex;
|
||||
#if defined(CRT_LDBL_128BIT)
|
||||
typedef Lcomplex Qcomplex;
|
||||
#define CRT_HAS_NATIVE_COMPLEX_F128
|
||||
#elif defined(CRT_HAS___FLOAT128_KEYWORD)
|
||||
#if defined(__clang_major__) && __clang_major__ > 10
|
||||
// Clang prior to 11 did not support __float128 _Complex.
|
||||
typedef __float128 _Complex Qcomplex;
|
||||
#define CRT_HAS_NATIVE_COMPLEX_F128
|
||||
#elif defined(__GNUC__) && __GNUC__ >= 7
|
||||
// GCC does not allow __float128 _Complex, but accepts _Float128 _Complex.
|
||||
typedef _Float128 _Complex Qcomplex;
|
||||
#define CRT_HAS_NATIVE_COMPLEX_F128
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define COMPLEX_REAL(x) __real__(x)
|
||||
#define COMPLEX_IMAGINARY(x) __imag__(x)
|
||||
|
@ -194,5 +258,17 @@ typedef struct {
|
|||
#define COMPLEX_REAL(x) (x).real
|
||||
#define COMPLEX_IMAGINARY(x) (x).imaginary
|
||||
#endif
|
||||
|
||||
#ifdef CRT_HAS_NATIVE_COMPLEX_F128
|
||||
#define COMPLEXTF_REAL(x) __real__(x)
|
||||
#define COMPLEXTF_IMAGINARY(x) __imag__(x)
|
||||
#elif defined(CRT_HAS_F128)
|
||||
typedef struct {
|
||||
tf_float real, imaginary;
|
||||
} Qcomplex;
|
||||
#define COMPLEXTF_REAL(x) (x).real
|
||||
#define COMPLEXTF_IMAGINARY(x) (x).imaginary
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif // INT_TYPES_H
|
||||
|
|
Loading…
Add table
Reference in a new issue