diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2018-04-27 13:56:02 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2018-04-27 13:56:02 +0000 |
commit | 39ee9de64cad4c18c6ece33529385fca6370fa87 (patch) | |
tree | 94f1b689c8f2a58f99d28a13a0244eec03ac9cbd /clang/lib/Basic | |
parent | f3fea0f11f5bc7852e28b50d8accf528febed0c3 (diff) | |
download | bcm5719-llvm-39ee9de64cad4c18c6ece33529385fca6370fa87.tar.gz bcm5719-llvm-39ee9de64cad4c18c6ece33529385fca6370fa87.zip |
[ARM] Add __ARM_FEATURE_DOTPROD pre-defined macro
This adds a pre-defined macro to test if the compiler has support for the
v8.2-A dot rpoduct intrinsics in AArch32 mode.
The AAcrh64 equivalent has already been added by rL330229.
The ACLE spec which describes this macro hasn't been published yet, but this is
based on the final internal draft, and GCC has already implemented this.
Differential revision: https://reviews.llvm.org/D46108
llvm-svn: 331038
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r-- | clang/lib/Basic/Targets/ARM.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Basic/Targets/ARM.h | 1 |
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets/ARM.cpp b/clang/lib/Basic/Targets/ARM.cpp index 0c8a7df54b6..efed9b096d5 100644 --- a/clang/lib/Basic/Targets/ARM.cpp +++ b/clang/lib/Basic/Targets/ARM.cpp @@ -390,6 +390,7 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, Unaligned = 1; SoftFloat = SoftFloatABI = false; HWDiv = 0; + DotProd = 0; // This does not diagnose illegal cases like having both // "+vfpv2" and "+vfpv3" or having "+neon" and "+fp-only-sp". @@ -432,6 +433,8 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, HW_FP |= HW_FP_HP; } else if (Feature == "+fullfp16") { HasLegalHalfType = true; + } else if (Feature == "+dotprod") { + DotProd = true; } } HW_FP &= ~HW_FP_remove; @@ -731,6 +734,9 @@ void ARMTargetInfo::getTargetDefines(const LangOptions &Opts, if (HasLegalHalfType) Builder.defineMacro("__ARM_FEATURE_FP16_SCALAR_ARITHMETIC", "1"); + // Armv8.2-A dot product intrinsics + if (DotProd) + Builder.defineMacro("__ARM_FEATURE_DOTPROD", "1"); switch (ArchKind) { default: diff --git a/clang/lib/Basic/Targets/ARM.h b/clang/lib/Basic/Targets/ARM.h index af197fd9c95..4e8e514d418 100644 --- a/clang/lib/Basic/Targets/ARM.h +++ b/clang/lib/Basic/Targets/ARM.h @@ -69,6 +69,7 @@ class LLVM_LIBRARY_VISIBILITY ARMTargetInfo : public TargetInfo { unsigned Crypto : 1; unsigned DSP : 1; unsigned Unaligned : 1; + unsigned DotProd : 1; enum { LDREX_B = (1 << 0), /// byte (8-bit) |