Skip to content

Commit 0af8ccd

Browse files
committed
[builtins] Avoid using long double in generic sources
Use of long double can be error-prone since it could be one of 80-bit extended precision float, IEEE 128-bit float, or IBM 128-bit float. Instead use an explicit xf_float typedef for the remaining cases where long double is being used in the implementation. This patch does not touch the PPC specializations which still use long double.
1 parent d2ce3e9 commit 0af8ccd

22 files changed

+48
-48
lines changed

compiler-rt/lib/builtins/divxc3.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@
1717

1818
// Returns: the quotient of (a + ib) / (c + id)
1919

20-
COMPILER_RT_ABI Lcomplex __divxc3(long double __a, long double __b,
21-
long double __c, long double __d) {
20+
COMPILER_RT_ABI Lcomplex __divxc3(xf_float __a, xf_float __b, xf_float __c,
21+
xf_float __d) {
2222
int __ilogbw = 0;
23-
long double __logbw = crt_logbl(crt_fmaxl(crt_fabsl(__c), crt_fabsl(__d)));
23+
xf_float __logbw = crt_logbl(crt_fmaxl(crt_fabsl(__c), crt_fabsl(__d)));
2424
if (crt_isfinite(__logbw)) {
2525
__ilogbw = (int)__logbw;
2626
__c = crt_scalbnl(__c, -__ilogbw);
2727
__d = crt_scalbnl(__d, -__ilogbw);
2828
}
29-
long double __denom = __c * __c + __d * __d;
29+
xf_float __denom = __c * __c + __d * __d;
3030
Lcomplex z;
3131
COMPLEX_REAL(z) = crt_scalbnl((__a * __c + __b * __d) / __denom, -__ilogbw);
3232
COMPLEX_IMAGINARY(z) =

compiler-rt/lib/builtins/extendxftf2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#define DST_QUAD
1818
#include "fp_extend_impl.inc"
1919

20-
COMPILER_RT_ABI tf_float __extendxftf2(long double a) {
20+
COMPILER_RT_ABI tf_float __extendxftf2(xf_float a) {
2121
return __extendXfYf2__(a);
2222
}
2323

compiler-rt/lib/builtins/fixunsxfdi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
#pragma warning(disable : 4700)
3333
#endif
3434

35-
COMPILER_RT_ABI du_int __fixunsxfdi(long double a) {
36-
long_double_bits fb;
35+
COMPILER_RT_ABI du_int __fixunsxfdi(xf_float a) {
36+
xf_bits fb;
3737
fb.f = a;
3838
int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
3939
if (e < 0 || (fb.u.high.s.low & 0x00008000))

compiler-rt/lib/builtins/fixunsxfsi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
#pragma warning(disable : 4700)
3333
#endif
3434

35-
COMPILER_RT_ABI su_int __fixunsxfsi(long double a) {
36-
long_double_bits fb;
35+
COMPILER_RT_ABI su_int __fixunsxfsi(xf_float a) {
36+
xf_bits fb;
3737
fb.f = a;
3838
int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
3939
if (e < 0 || (fb.u.high.s.low & 0x00008000))

compiler-rt/lib/builtins/fixunsxfti.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
// eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm
2626
// mmmm mmmm mmmm
2727

28-
COMPILER_RT_ABI tu_int __fixunsxfti(long double a) {
29-
long_double_bits fb;
28+
COMPILER_RT_ABI tu_int __fixunsxfti(xf_float a) {
29+
xf_bits fb;
3030
fb.f = a;
3131
int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
3232
if (e < 0 || (fb.u.high.s.low & 0x00008000))

compiler-rt/lib/builtins/fixxfdi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
#pragma warning(disable : 4700)
3232
#endif
3333

34-
COMPILER_RT_ABI di_int __fixxfdi(long double a) {
34+
COMPILER_RT_ABI di_int __fixxfdi(xf_float a) {
3535
const di_int di_max = (di_int)((~(du_int)0) / 2);
3636
const di_int di_min = -di_max - 1;
37-
long_double_bits fb;
37+
xf_bits fb;
3838
fb.f = a;
3939
int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
4040
if (e < 0)

compiler-rt/lib/builtins/fixxfti.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
// eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm
2525
// mmmm mmmm mmmm
2626

27-
COMPILER_RT_ABI ti_int __fixxfti(long double a) {
27+
COMPILER_RT_ABI ti_int __fixxfti(xf_float a) {
2828
const ti_int ti_max = (ti_int)((~(tu_int)0) / 2);
2929
const ti_int ti_min = -ti_max - 1;
30-
long_double_bits fb;
30+
xf_bits fb;
3131
fb.f = a;
3232
int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
3333
if (e < 0)

compiler-rt/lib/builtins/floatdixf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@
2323
// eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm
2424
// mmmm mmmm mmmm
2525

26-
COMPILER_RT_ABI long double __floatdixf(di_int a) {
26+
COMPILER_RT_ABI xf_float __floatdixf(di_int a) {
2727
if (a == 0)
2828
return 0.0;
2929
const unsigned N = sizeof(di_int) * CHAR_BIT;
3030
const di_int s = a >> (N - 1);
3131
a = (a ^ s) - s;
3232
int clz = __builtin_clzll(a);
3333
int e = (N - 1) - clz; // exponent
34-
long_double_bits fb;
34+
xf_bits fb;
3535
fb.u.high.s.low = ((su_int)s & 0x00008000) | // sign
3636
(e + 16383); // exponent
3737
fb.u.low.all = a << clz; // mantissa

compiler-rt/lib/builtins/floattixf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
// eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm
2424
// mmmm mmmm mmmm
2525

26-
COMPILER_RT_ABI long double __floattixf(ti_int a) {
26+
COMPILER_RT_ABI xf_float __floattixf(ti_int a) {
2727
if (a == 0)
2828
return 0.0;
2929
const unsigned N = sizeof(ti_int) * CHAR_BIT;
@@ -63,7 +63,7 @@ COMPILER_RT_ABI long double __floattixf(ti_int a) {
6363
a <<= (LDBL_MANT_DIG - sd);
6464
// a is now rounded to LDBL_MANT_DIG bits
6565
}
66-
long_double_bits fb;
66+
xf_bits fb;
6767
fb.u.high.s.low = ((su_int)s & 0x8000) | // sign
6868
(e + 16383); // exponent
6969
fb.u.low.all = (du_int)a; // mantissa

compiler-rt/lib/builtins/floatundixf.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
// gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee
2323
// eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm
2424
// mmmm mmmm mmmm
25-
COMPILER_RT_ABI long double __floatundixf(du_int a) {
25+
COMPILER_RT_ABI xf_float __floatundixf(du_int a) {
2626
if (a == 0)
2727
return 0.0;
2828
const unsigned N = sizeof(du_int) * CHAR_BIT;
2929
int clz = __builtin_clzll(a);
3030
int e = (N - 1) - clz; // exponent
31-
long_double_bits fb;
31+
xf_bits fb;
3232
fb.u.high.s.low = (e + 16383); // exponent
3333
fb.u.low.all = a << clz; // mantissa
3434
return fb.f;

0 commit comments

Comments
 (0)