summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
authorAlexandros Lamprineas <alexandros.lamprineas@arm.com>2015-11-29 10:43:59 +0000
committerAlexandros Lamprineas <alexandros.lamprineas@arm.com>2015-11-29 10:43:59 +0000
commit502592c1d4b4ed0ae203daaad63e6cb8e668d6d1 (patch)
tree1f9a6e9ea6f1cd76058283723f2f56804e0df638 /clang/lib/Basic/Targets.cpp
parente14261a4c9ae32f783185fa1b3b6d9d2793e15db (diff)
downloadbcm5719-llvm-502592c1d4b4ed0ae203daaad63e6cb8e668d6d1.tar.gz
bcm5719-llvm-502592c1d4b4ed0ae203daaad63e6cb8e668d6d1.zip
ARM v8.1a adds Advanced SIMD instructions for Rounding Double Multiply
Add/Subtract. The following instructions are added to AArch32 instruction set: - VQRDMLAH: Vector Saturating Rounding Doubling Multiply Accumulate Returning High Half - VQRDMLSH: Vector Saturating Rounding Doubling Multiply Subtract Returning High Half The following instructions are added to AArch64 instruction set: - SQRDMLAH: Signed Saturating Rounding Doubling Multiply Accumulate Returning High Half - SQRDMLSH: Signed Saturating Rounding Doubling Multiply Subtract Returning High Half This patch adds intrinsic and ACLE macro support for these instructions, as well as corresponding tests. Differential Revision: http://reviews.llvm.org/D14982 llvm-svn: 254250
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r--clang/lib/Basic/Targets.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 4833379b356..59bdf51d082 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -4869,6 +4869,9 @@ public:
if (Opts.UnsafeFPMath)
Builder.defineMacro("__ARM_FP_FAST", "1");
+
+ if (ArchKind == llvm::ARM::AK_ARMV8_1A)
+ Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
}
ArrayRef<Builtin::Info> getTargetBuiltins() const override {
@@ -5250,6 +5253,7 @@ class AArch64TargetInfo : public TargetInfo {
unsigned CRC;
unsigned Crypto;
unsigned Unaligned;
+ unsigned V8_1A;
static const Builtin::Info BuiltinInfo[];
@@ -5372,6 +5376,9 @@ public:
if (Unaligned)
Builder.defineMacro("__ARM_FEATURE_UNALIGNED", "1");
+ if (V8_1A)
+ Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
+
// All of the __sync_(bool|val)_compare_and_swap_(1|2|4|8) builtins work.
Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
@@ -5397,6 +5404,7 @@ public:
CRC = 0;
Crypto = 0;
Unaligned = 1;
+ V8_1A = 0;
for (const auto &Feature : Features) {
if (Feature == "+neon")
@@ -5407,6 +5415,8 @@ public:
Crypto = 1;
if (Feature == "+strict-align")
Unaligned = 0;
+ if (Feature == "+v8.1a")
+ V8_1A = 1;
}
setDataLayoutString();
OpenPOWER on IntegriCloud