summaryrefslogtreecommitdiff
path: root/lib/Basic
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-07-15 07:25:11 +0000
committerFangrui Song <maskray@google.com>2019-07-15 07:25:11 +0000
commita9bc6dd02c0309a30caf6d8c0ab4565e072d688a (patch)
tree5874cfe446f5313bcf3f053061630f5fae9c116b /lib/Basic
parent5d6543acf18dbc4e9595c191caa9c0de36505adc (diff)
downloadclang-a9bc6dd02c0309a30caf6d8c0ab4565e072d688a.tar.gz
[PowerPC] Support -mabi=ieeelongdouble and -mabi=ibmlongdouble
gcc PowerPC supports 3 representations of long double: * -mlong-double-64 long double has the same representation of double but is mangled as `e`. In clang, this is the default on AIX, FreeBSD and Linux musl. * -mlong-double-128 2 possible 128-bit floating point representations: + -mabi=ibmlongdouble IBM extended double format. Mangled as `g` In clang, this is the default on Linux glibc. + -mabi=ieeelongdouble IEEE 754 quadruple-precision format. Mangled as `u9__ieee128` (`U10__float128` before gcc 8.2) This is currently unavailable. This patch adds -mabi=ibmlongdouble and -mabi=ieeelongdouble, and thus makes the IEEE 754 quadruple-precision long double available for languages supported by clang. Reviewed By: hfinkel Differential Revision: https://reviews.llvm.org/D64283 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@366044 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic')
-rw-r--r--lib/Basic/Targets/PPC.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/Basic/Targets/PPC.cpp b/lib/Basic/Targets/PPC.cpp
index bd0ae60038..2a773d9992 100644
--- a/lib/Basic/Targets/PPC.cpp
+++ b/lib/Basic/Targets/PPC.cpp
@@ -466,7 +466,9 @@ void PPCTargetInfo::adjust(LangOptions &Opts) {
Opts.AltiVec = 1;
TargetInfo::adjust(Opts);
if (LongDoubleFormat != &llvm::APFloat::IEEEdouble())
- LongDoubleFormat = &llvm::APFloat::PPCDoubleDouble();
+ LongDoubleFormat = Opts.PPCIEEELongDouble
+ ? &llvm::APFloat::IEEEquad()
+ : &llvm::APFloat::PPCDoubleDouble();
}
ArrayRef<Builtin::Info> PPCTargetInfo::getTargetBuiltins() const {