diff options
Diffstat (limited to 'clang/lib/Basic/Targets/Hexagon.cpp')
-rw-r--r-- | clang/lib/Basic/Targets/Hexagon.cpp | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/clang/lib/Basic/Targets/Hexagon.cpp b/clang/lib/Basic/Targets/Hexagon.cpp index fcb94b93d69df..205601c359d04 100644 --- a/clang/lib/Basic/Targets/Hexagon.cpp +++ b/clang/lib/Basic/Targets/Hexagon.cpp @@ -24,6 +24,11 @@ void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__qdsp6__", "1"); Builder.defineMacro("__hexagon__", "1"); + Builder.defineMacro("__ELF__"); + + // The macro __HVXDBL__ is deprecated. + bool DefineHvxDbl = false; + if (CPU == "hexagonv5") { Builder.defineMacro("__HEXAGON_V5__"); Builder.defineMacro("__HEXAGON_ARCH__", "5"); @@ -37,19 +42,29 @@ void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__QDSP6_V55__"); Builder.defineMacro("__QDSP6_ARCH__", "55"); } else if (CPU == "hexagonv60") { + DefineHvxDbl = true; Builder.defineMacro("__HEXAGON_V60__"); Builder.defineMacro("__HEXAGON_ARCH__", "60"); Builder.defineMacro("__QDSP6_V60__"); Builder.defineMacro("__QDSP6_ARCH__", "60"); } else if (CPU == "hexagonv62") { + DefineHvxDbl = true; Builder.defineMacro("__HEXAGON_V62__"); Builder.defineMacro("__HEXAGON_ARCH__", "62"); } else if (CPU == "hexagonv65") { + DefineHvxDbl = true; Builder.defineMacro("__HEXAGON_V65__"); Builder.defineMacro("__HEXAGON_ARCH__", "65"); } else if (CPU == "hexagonv66") { + DefineHvxDbl = true; Builder.defineMacro("__HEXAGON_V66__"); Builder.defineMacro("__HEXAGON_ARCH__", "66"); + } else if (CPU == "hexagonv67") { + Builder.defineMacro("__HEXAGON_V67__"); + Builder.defineMacro("__HEXAGON_ARCH__", "67"); + } else if (CPU == "hexagonv67t") { + Builder.defineMacro("__HEXAGON_V67T__"); + Builder.defineMacro("__HEXAGON_ARCH__", "67"); } if (hasFeature("hvx-length64b")) { @@ -62,14 +77,29 @@ void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts, Builder.defineMacro("__HVX__"); Builder.defineMacro("__HVX_ARCH__", HVXVersion); Builder.defineMacro("__HVX_LENGTH__", "128"); - // FIXME: This macro is deprecated. - Builder.defineMacro("__HVXDBL__"); + if (DefineHvxDbl) + Builder.defineMacro("__HVXDBL__"); + } + + if (hasFeature("audio")) { + Builder.defineMacro("__HEXAGON_AUDIO__"); } + + std::string NumPhySlots = isTinyCore() ? "3" : "4"; + Builder.defineMacro("__HEXAGON_PHYSICAL_SLOTS__", NumPhySlots); } bool HexagonTargetInfo::initFeatureMap( llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const { + if (isTinyCore()) + Features["audio"] = true; + + StringRef CPUFeature = CPU; + CPUFeature.consume_front("hexagon"); + CPUFeature.consume_back("t"); + Features[CPUFeature] = true; + Features["long-calls"] = false; return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); @@ -91,6 +121,8 @@ bool HexagonTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, UseLongCalls = true; else if (F == "-long-calls") UseLongCalls = false; + else if (F == "+audio") + HasAudio = true; } return true; } @@ -125,6 +157,8 @@ const Builtin::Info HexagonTargetInfo::BuiltinInfo[] = { {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, nullptr}, #define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) \ {#ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr}, +#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ + {#ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE}, #include "clang/Basic/BuiltinsHexagon.def" }; @@ -139,6 +173,7 @@ bool HexagonTargetInfo::hasFeature(StringRef Feature) const { .Case("hvx-length64b", HasHVX64B) .Case("hvx-length128b", HasHVX128B) .Case("long-calls", UseLongCalls) + .Case("audio", HasAudio) .Default(false); } @@ -148,9 +183,10 @@ struct CPUSuffix { }; static constexpr CPUSuffix Suffixes[] = { - {{"hexagonv5"}, {"5"}}, {{"hexagonv55"}, {"55"}}, - {{"hexagonv60"}, {"60"}}, {{"hexagonv62"}, {"62"}}, - {{"hexagonv65"}, {"65"}}, {{"hexagonv66"}, {"66"}}, + {{"hexagonv5"}, {"5"}}, {{"hexagonv55"}, {"55"}}, + {{"hexagonv60"}, {"60"}}, {{"hexagonv62"}, {"62"}}, + {{"hexagonv65"}, {"65"}}, {{"hexagonv66"}, {"66"}}, + {{"hexagonv67"}, {"67"}}, {{"hexagonv67t"}, {"67t"}}, }; const char *HexagonTargetInfo::getHexagonCPUSuffix(StringRef Name) { |