aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp')
-rw-r--r--contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp b/contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp
index 88537989a051..cb3fd12c48dd 100644
--- a/contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp
+++ b/contrib/llvm-project/clang/lib/Basic/Targets/LoongArch.cpp
@@ -200,7 +200,24 @@ void LoongArchTargetInfo::getTargetDefines(const LangOptions &Opts,
// Define __loongarch_arch.
StringRef ArchName = getCPU();
- Builder.defineMacro("__loongarch_arch", Twine('"') + ArchName + Twine('"'));
+ if (ArchName == "loongarch64") {
+ if (HasFeatureLSX) {
+ // TODO: As more features of the V1.1 ISA are supported, a unified "v1.1"
+ // arch feature set will be used to include all sub-features belonging to
+ // the V1.1 ISA version.
+ if (HasFeatureFrecipe)
+ Builder.defineMacro("__loongarch_arch",
+ Twine('"') + "la64v1.1" + Twine('"'));
+ else
+ Builder.defineMacro("__loongarch_arch",
+ Twine('"') + "la64v1.0" + Twine('"'));
+ } else {
+ Builder.defineMacro("__loongarch_arch",
+ Twine('"') + ArchName + Twine('"'));
+ }
+ } else {
+ Builder.defineMacro("__loongarch_arch", Twine('"') + ArchName + Twine('"'));
+ }
// Define __loongarch_tune.
StringRef TuneCPU = getTargetOpts().TuneCPU;
@@ -208,10 +225,16 @@ void LoongArchTargetInfo::getTargetDefines(const LangOptions &Opts,
TuneCPU = ArchName;
Builder.defineMacro("__loongarch_tune", Twine('"') + TuneCPU + Twine('"'));
- if (HasFeatureLSX)
+ if (HasFeatureLASX) {
+ Builder.defineMacro("__loongarch_simd_width", "256");
Builder.defineMacro("__loongarch_sx", Twine(1));
- if (HasFeatureLASX)
Builder.defineMacro("__loongarch_asx", Twine(1));
+ } else if (HasFeatureLSX) {
+ Builder.defineMacro("__loongarch_simd_width", "128");
+ Builder.defineMacro("__loongarch_sx", Twine(1));
+ }
+ if (HasFeatureFrecipe)
+ Builder.defineMacro("__loongarch_frecipe", Twine(1));
StringRef ABI = getABI();
if (ABI == "lp64d" || ABI == "lp64f" || ABI == "lp64s")
@@ -285,6 +308,10 @@ bool LoongArchTargetInfo::handleTargetFeatures(
HasFeatureLSX = true;
else if (Feature == "+lasx")
HasFeatureLASX = true;
+ else if (Feature == "-ual")
+ HasUnalignedAccess = false;
+ else if (Feature == "+frecipe")
+ HasFeatureFrecipe = true;
}
return true;
}