summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-05-14 00:44:24 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-05-14 00:44:24 +0000
commit92dbc3183fe26688973e308f988482f3638b77d4 (patch)
tree92dd996aedf58cdbc38dd6a8daa64dc56ea27314 /clang/lib/Basic
parentca8ca55b5212672d4aaebd815835fc22de4be115 (diff)
downloadbcm5719-llvm-92dbc3183fe26688973e308f988482f3638b77d4.tar.gz
bcm5719-llvm-92dbc3183fe26688973e308f988482f3638b77d4.zip
Use atomic instructions on linux thumb v7.
This matches gcc's behaviour. The patch also explicitly parses the version so that this keeps working when we add support for v8. llvm-svn: 181750
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/Targets.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 841ca62ab6e..a622a11aa5a 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -3536,9 +3536,23 @@ class ARMTargetInfo : public TargetInfo {
if (T.getOS() != llvm::Triple::Linux)
return false;
StringRef ArchName = T.getArchName();
- if (ArchName.startswith("armv6") || ArchName.startswith("armv7"))
- return true;
- return false;
+ if (T.getArch() == llvm::Triple::arm) {
+ if (!ArchName.startswith("armv"))
+ return false;
+ StringRef VersionStr = ArchName.substr(4);
+ unsigned Version;
+ if (VersionStr.getAsInteger(10, Version))
+ return false;
+ return Version >= 6;
+ }
+ assert(T.getArch() == llvm::Triple::thumb);
+ if (!ArchName.startswith("thumbv"))
+ return false;
+ StringRef VersionStr = ArchName.substr(6);
+ unsigned Version;
+ if (VersionStr.getAsInteger(10, Version))
+ return false;
+ return Version >= 7;
}
public:
OpenPOWER on IntegriCloud