[compiler-rt] 15b37e1 - [builtins] Omit 80-bit builtins on Android and MSVC
Ryan Prichard via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 15:11:37 PDT 2020
Author: Ryan Prichard
Date: 2020-07-16T15:11:26-07:00
New Revision: 15b37e1cfa5f09af376a47a1bc67d67bb5c7848b
URL: https://github.com/llvm/llvm-project/commit/15b37e1cfa5f09af376a47a1bc67d67bb5c7848b
DIFF: https://github.com/llvm/llvm-project/commit/15b37e1cfa5f09af376a47a1bc67d67bb5c7848b.diff
LOG: [builtins] Omit 80-bit builtins on Android and MSVC
long double is a 64-bit double-precision type on:
- MSVC (32- and 64-bit x86)
- Android (32-bit x86)
long double is a 128-bit quad-precision type on x86_64 Android.
The assembly variants of the 80-bit builtins are correct, but some of
the builtins are implemented in C and require that long double be the
80-bit type passed via an x87 register.
Reviewed By: compnerd
Differential Revision: https://reviews.llvm.org/D82153
Added:
Modified:
compiler-rt/lib/builtins/CMakeLists.txt
Removed:
################################################################################
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt
index 3a66dd9c3fb3..f93023416c47 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -161,6 +161,8 @@ set(GENERIC_SOURCES
umodti3.c
)
+# TODO: Several "tf" files (and divtc3.c, but not multc3.c) are in
+# GENERIC_SOURCES instead of here.
set(GENERIC_TF_SOURCES
addtf3.c
comparetf2.c
@@ -234,9 +236,19 @@ if (NOT FUCHSIA)
)
endif()
-# These sources work on all x86 variants, but only x86 variants.
-set(x86_ARCH_SOURCES
- cpu_model.c
+# These files are used on 32-bit and 64-bit x86.
+set(x86_ARCH_SOURCES cpu_model.c)
+
+if (NOT MSVC)
+ set(x86_ARCH_SOURCES
+ ${x86_ARCH_SOURCES}
+ i386/fp_mode.c
+ )
+endif ()
+
+# Implement extended-precision builtins, assuming long double is 80 bits.
+# long double is not 80 bits on Android or MSVC.
+set(x86_80_BIT_SOURCES
divxc3.c
fixxfdi.c
fixxfti.c
@@ -251,13 +263,6 @@ set(x86_ARCH_SOURCES
powixf2.c
)
-if (NOT MSVC)
- set(x86_ARCH_SOURCES
- ${x86_ARCH_SOURCES}
- i386/fp_mode.c
- )
-endif ()
-
if (NOT MSVC)
set(x86_64_SOURCES
${GENERIC_SOURCES}
@@ -265,12 +270,19 @@ if (NOT MSVC)
${x86_ARCH_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
)
+ if (NOT ANDROID)
+ set(x86_64_SOURCES
+ ${x86_64_SOURCES}
+ ${x86_80_BIT_SOURCES}
+ x86_64/floatdixf.c
+ x86_64/floatundixf.S
+ )
+ endif()
+
# Darwin x86_64 Haswell
set(x86_64h_SOURCES ${x86_64_SOURCES})
@@ -290,10 +302,8 @@ if (NOT MSVC)
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
@@ -301,6 +311,15 @@ if (NOT MSVC)
i386/umoddi3.S
)
+ if (NOT ANDROID)
+ set(i386_SOURCES
+ ${i386_SOURCES}
+ ${x86_80_BIT_SOURCES}
+ i386/floatdixf.S
+ i386/floatundixf.S
+ )
+ endif()
+
if (WIN32)
set(i386_SOURCES
${i386_SOURCES}
@@ -317,7 +336,6 @@ else () # MSVC
${x86_ARCH_SOURCES}
x86_64/floatdidf.c
x86_64/floatdisf.c
- x86_64/floatdixf.c
)
set(i386_SOURCES ${GENERIC_SOURCES} ${x86_ARCH_SOURCES})
endif () # if (NOT MSVC)
More information about the llvm-commits
mailing list