From 70a5cca8e7353e2e3bd16b7e6a47a35695803d5d Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Sat, 8 Sep 2012 08:08:27 +0000 Subject: [PATCH] Provide some ACLE C defines. This should fix PR13796 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163464 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index fa1948e4bb..1d5ee0c614 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -2988,6 +2988,7 @@ public: StringRef(getCPUDefineSuffix(CPU)).startswith("7")) .Default(false); } + // FIXME: Should we actually have some table instead of these switches? static const char *getCPUDefineSuffix(StringRef Name) { return llvm::StringSwitch(Name) .Cases("arm8", "arm810", "4") @@ -3005,11 +3006,16 @@ public: .Cases("arm1136jf-s", "mpcorenovfp", "mpcore", "6K") .Cases("arm1156t2-s", "arm1156t2f-s", "6T2") .Cases("cortex-a8", "cortex-a9", "7A") - .Case("cortex-m3", "7M") - .Case("cortex-m4", "7M") + .Cases("cortex-m3", "cortex-m4", "7M") .Case("cortex-m0", "6M") .Default(0); } + static const char *getCPUProfile(StringRef Name) { + return llvm::StringSwitch(Name) + .Cases("cortex-a8", "cortex-a9", "A") + .Cases("cortex-m3", "cortex-m4", "cortex-m0", "M") + .Default(0); + } virtual bool setCPU(const std::string &Name) { if (!getCPUDefineSuffix(Name)) return false; @@ -3030,7 +3036,11 @@ public: StringRef CPUArch = getCPUDefineSuffix(CPU); Builder.defineMacro("__ARM_ARCH_" + CPUArch + "__"); - + Builder.defineMacro("__ARM_ARCH", CPUArch.substr(0, 1)); + StringRef CPUProfile = getCPUProfile(CPU); + if (!CPUProfile.empty()) + Builder.defineMacro("__ARM_ARCH_PROFILE", CPUProfile); + // Subtarget options. // FIXME: It's more complicated than this and we don't really support @@ -3038,8 +3048,13 @@ public: if ('5' <= CPUArch[0] && CPUArch[0] <= '7') Builder.defineMacro("__THUMB_INTERWORK__"); - if (ABI == "aapcs" || ABI == "aapcs-linux") + if (ABI == "aapcs" || ABI == "aapcs-linux") { Builder.defineMacro("__ARM_EABI__"); + Builder.defineMacro("__ARM_PCS", "1"); + + if (!SoftFloat && !SoftFloatABI) + Builder.defineMacro("__ARM_PCS_VFP", "1"); + } if (SoftFloat) Builder.defineMacro("__SOFTFP__"); -- 2.40.0