a1f8ad145e
applied to our copy of llvm/clang. These can be applied in alphabetical order to a pristine llvm/clang 3.4 release source tree, to result in the same version used in FreeBSD. This is intended to clearly document all the changes until now, which mostly consist of cherry pickings from the respective upstream trunks, plus a number of hand-written FreeBSD-specific ones. Hopefully those can eventually be cleaned up and sent upstream too. MFC after: 1 week X-MFC-With: r263313
38 lines
1.3 KiB
Diff
38 lines
1.3 KiB
Diff
Pull in r199399 from upstream clang trunk (by Jakob Stoklund Olesen):
|
|
|
|
SPARCv9 implements long double as an IEEE quad.
|
|
|
|
Introduced here: http://svn.freebsd.org/changeset/base/262262
|
|
|
|
Index: tools/clang/test/CodeGen/sparcv9-abi.c
|
|
===================================================================
|
|
--- tools/clang/test/CodeGen/sparcv9-abi.c
|
|
+++ tools/clang/test/CodeGen/sparcv9-abi.c
|
|
@@ -18,6 +18,9 @@ long long f_int_3(long long x) { return x; }
|
|
// CHECK-LABEL: define signext i8 @f_int_4(i8 signext %x)
|
|
char f_int_4(char x) { return x; }
|
|
|
|
+// CHECK-LABEL: define fp128 @f_ld(fp128 %x)
|
|
+long double f_ld(long double x) { return x; }
|
|
+
|
|
// Small structs are passed in registers.
|
|
struct small {
|
|
int *a, *b;
|
|
Index: tools/clang/lib/Basic/Targets.cpp
|
|
===================================================================
|
|
--- tools/clang/lib/Basic/Targets.cpp
|
|
+++ tools/clang/lib/Basic/Targets.cpp
|
|
@@ -4529,6 +4529,12 @@ class SparcV9TargetInfo : public SparcTargetInfo {
|
|
UIntMaxType = UnsignedLong;
|
|
}
|
|
Int64Type = IntMaxType;
|
|
+
|
|
+ // The SPARCv8 System V ABI has long double 128-bits in size, but 64-bit
|
|
+ // aligned. The SPARCv9 SCD 2.4.1 says 16-byte aligned.
|
|
+ LongDoubleWidth = 128;
|
|
+ LongDoubleAlign = 128;
|
|
+ LongDoubleFormat = &llvm::APFloat::IEEEquad;
|
|
}
|
|
|
|
virtual void getTargetDefines(const LangOptions &Opts,
|