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) { | 
