diff options
| author | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2018-03-13 22:11:06 +0000 |
|---|---|---|
| committer | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2018-03-13 22:11:06 +0000 |
| commit | a7463df6e256b870be797aff0046faeba2bfe83c (patch) | |
| tree | edb1c8e26a40f467b3564c8b23a78429d7d4bc7c /clang/lib/Basic | |
| parent | cc060e921b7ee742bae6d961f01ca76183a4c1ea (diff) | |
| download | bcm5719-llvm-a7463df6e256b870be797aff0046faeba2bfe83c.tar.gz bcm5719-llvm-a7463df6e256b870be797aff0046faeba2bfe83c.zip | |
[ARM] ACLE FP16 feature test macros
This is a partial recommit of r327189 that was reverted
due to test issues. I.e., this recommits minimal functional
change, the FP16 feature test macros, and adds tests that
were missing in the original commit.
llvm-svn: 327455
Diffstat (limited to 'clang/lib/Basic')
| -rw-r--r-- | clang/lib/Basic/Targets/ARM.cpp | 12 | ||||
| -rw-r--r-- | clang/lib/Basic/Targets/ARM.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets/ARM.cpp b/clang/lib/Basic/Targets/ARM.cpp index 3f2d31d4db7..1e781424bf9 100644 --- a/clang/lib/Basic/Targets/ARM.cpp +++ b/clang/lib/Basic/Targets/ARM.cpp @@ -379,6 +379,7 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, Unaligned = 1; SoftFloat = SoftFloatABI = false; HWDiv = 0; + HasFullFP16 = 0; // This does not diagnose illegal cases like having both // "+vfpv2" and "+vfpv3" or having "+neon" and "+fp-only-sp". @@ -419,6 +420,8 @@ bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, Unaligned = 0; } else if (Feature == "+fp16") { HW_FP |= HW_FP_HP; + } else if (Feature == "+fullfp16") { + HasFullFP16 = 1; } } HW_FP &= ~HW_FP_remove; @@ -710,6 +713,15 @@ void ARMTargetInfo::getTargetDefines(const LangOptions &Opts, if (Opts.UnsafeFPMath) Builder.defineMacro("__ARM_FP_FAST", "1"); + // Armv8.2-A FP16 vector intrinsic + if ((FPU & NeonFPU) && HasFullFP16) + Builder.defineMacro("__ARM_FEATURE_FP16_VECTOR_ARITHMETIC", "1"); + + // Armv8.2-A FP16 scalar intrinsics + if (HasFullFP16) + Builder.defineMacro("__ARM_FEATURE_FP16_SCALAR_ARITHMETIC", "1"); + + switch (ArchKind) { default: break; diff --git a/clang/lib/Basic/Targets/ARM.h b/clang/lib/Basic/Targets/ARM.h index af197fd9c95..1a768f618a9 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 HasFullFP16 : 1; enum { LDREX_B = (1 << 0), /// byte (8-bit) |

