summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
authorDaniel Sanders <daniel.sanders@imgtec.com>2015-03-30 13:47:23 +0000
committerDaniel Sanders <daniel.sanders@imgtec.com>2015-03-30 13:47:23 +0000
commit48fa39e4a1ad5e9670482530fba50ae288076e84 (patch)
tree00d5aa8865600882db556ab75632d021bcf1b185 /clang/lib/Basic/Targets.cpp
parentb8d76fb7ca255e7885d754a4df8c4715a4aa7a3f (diff)
downloadbcm5719-llvm-48fa39e4a1ad5e9670482530fba50ae288076e84.tar.gz
bcm5719-llvm-48fa39e4a1ad5e9670482530fba50ae288076e84.zip
[mips] Add support for 'ZC' inline assembly memory constraint.
Summary: Also add tests for 'R' and 'm'. Reviewers: atanasyan Reviewed By: atanasyan Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D8449 llvm-svn: 233542
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r--clang/lib/Basic/Targets.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index c8fa0cce25f..7cb6480c2c7 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -5857,7 +5857,28 @@ public:
case 'R': // An address that can be used in a non-macro load or store
Info.setAllowsMemory();
return true;
+ case 'Z':
+ if (Name[1] == 'C') { // An address usable by ll, and sc.
+ Info.setAllowsMemory();
+ Name++; // Skip over 'Z'.
+ return true;
+ }
+ return false;
+ }
+ }
+
+ std::string convertConstraint(const char *&Constraint) const override {
+ std::string R;
+ switch (*Constraint) {
+ case 'Z': // Two-character constraint; add "^" hint for later parsing.
+ if (Constraint[1] == 'C') {
+ R = std::string("^") + std::string(Constraint, 2);
+ Constraint++;
+ return R;
+ }
+ break;
}
+ return TargetInfo::convertConstraint(Constraint);
}
const char *getClobbers() const override {
OpenPOWER on IntegriCloud