summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2014-01-16 16:43:19 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2014-01-16 16:43:19 +0000
commit497332c05f2b46a0603e373022f3587c6d860dfd (patch)
tree0f996d78192f4e296107140f67ad0a591b2d895e
parent5a1a81841a11c9fdfc1b72faa2ffc20245bcbf78 (diff)
downloadbcm5719-llvm-497332c05f2b46a0603e373022f3587c6d860dfd.tar.gz
bcm5719-llvm-497332c05f2b46a0603e373022f3587c6d860dfd.zip
SPARCv9 implements long double as an IEEE quad.
llvm-svn: 199399
-rw-r--r--clang/lib/Basic/Targets.cpp6
-rw-r--r--clang/test/CodeGen/sparcv9-abi.c3
2 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 629b540a14e..65864cd1d03 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -4532,6 +4532,12 @@ public:
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,
diff --git a/clang/test/CodeGen/sparcv9-abi.c b/clang/test/CodeGen/sparcv9-abi.c
index 4ba4be852fe..d4fff81ab6e 100644
--- a/clang/test/CodeGen/sparcv9-abi.c
+++ b/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;
OpenPOWER on IntegriCloud