Index: compiler-rt/lib/builtins/int_types.h =================================================================== --- compiler-rt/lib/builtins/int_types.h +++ compiler-rt/lib/builtins/int_types.h @@ -137,6 +137,16 @@ #endif /* _YUGA_LITTLE_ENDIAN */ } uqwords; +/* Indicate if we have an Intel style extended 80 bit long double. Notably, on + * Windows, MSVC makes long double 64 bits, but GCC still makes it 80 bits. + * Clang will match whatever compiler it is pretending to be. + */ +#if (defined(__i386__) || defined(__x86_64__)) && !defined(_MSC_VER) +#define HAS_80_BIT_LONG_DOUBLE 1 +#else +#define HAS_80_BIT_LONG_DOUBLE 0 +#endif + typedef union { uqwords u; Index: compiler-rt/test/builtins/Unit/fixxfdi_test.c =================================================================== --- compiler-rt/test/builtins/Unit/fixxfdi_test.c +++ compiler-rt/test/builtins/Unit/fixxfdi_test.c @@ -26,7 +26,7 @@ // 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 __sfixxfdi(long double a); +COMPILER_RT_ABI di_int __fixxfdi(long double a); int test__fixxfdi(long double a, di_int expected) {