[cfe-commits] r169674 - in /cfe/trunk: lib/Basic/Targets.cpp test/Driver/mips-long-double.c
David Chisnall
csdavec at swan.ac.uk
Sat Dec 8 01:06:09 PST 2012
Author: theraven
Date: Sat Dec 8 03:06:08 2012
New Revision: 169674
URL: http://llvm.org/viewvc/llvm-project?rev=169674&view=rev
Log:
long double should be 64 bits on FreeBSD/MIPS64. It possibly should be on
Linux too, as I think we inherited it from there. The ABI spec says 128-bit,
although I think SGI's compiler on IRIX may be the only thing ever to support
this.
Added:
cfe/trunk/test/Driver/mips-long-double.c
Modified:
cfe/trunk/lib/Basic/Targets.cpp
Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=169674&r1=169673&r2=169674&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Sat Dec 8 03:06:08 2012
@@ -4222,6 +4222,10 @@
PointerWidth = PointerAlign = 64;
LongDoubleWidth = LongDoubleAlign = 128;
LongDoubleFormat = &llvm::APFloat::IEEEquad;
+ if (getTriple().getOS() == llvm::Triple::FreeBSD) {
+ LongDoubleWidth = LongDoubleAlign = 64;
+ LongDoubleFormat = &llvm::APFloat::IEEEdouble;
+ }
SuitableAlign = 128;
}
virtual bool setABI(const std::string &Name) {
Added: cfe/trunk/test/Driver/mips-long-double.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-long-double.c?rev=169674&view=auto
==============================================================================
--- cfe/trunk/test/Driver/mips-long-double.c (added)
+++ cfe/trunk/test/Driver/mips-long-double.c Sat Dec 8 03:06:08 2012
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple mips64-unknown-freebsd -std=c11 -verify %s
+// RUN: %clang_cc1 -triple mips-unknown-freebsd -std=c11 -verify %s
+// RUN: %clang_cc1 -triple mips-unknown-linux-std=c11 -verify %s
+// RUN: %clang_cc1 -triple mips64-unknown-linux-std=c11 -verify %s
+// expected-no-diagnostics
+
+#ifdef _ABI64
+# ifdef __FreeBSD__
+_Static_assert(sizeof(long double) == 8, "sizeof long double is wrong");
+_Static_assert(_Alignof(long double) == 8, "alignof long double is wrong");
+# else
+_Static_assert(sizeof(long double) == 16, "sizeof long double is wrong");
+_Static_assert(_Alignof(long double) == 16, "alignof long double is wrong");
+# endif
+#else
+_Static_assert(sizeof(long double) == 8, "sizeof long double is wrong");
+_Static_assert(_Alignof(long double) == 8, "alignof long double is wrong");
+#endif
+
More information about the cfe-commits
mailing list