aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/ARM/AsmParser/ARMAsmParser.cpp10
-rw-r--r--test/MC/ARM/reg-list.s8
2 files changed, 13 insertions, 5 deletions
diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index b51e351172..b672bc4ce4 100644
--- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -583,15 +583,15 @@ ParseRegisterList(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
SmallVectorImpl<std::pair<unsigned, SMLoc> >::const_iterator
RI = Registers.begin(), RE = Registers.end();
- DenseMap<unsigned, bool> RegMap;
- RegMap[RI->first] = true;
-
- unsigned HighRegNum = RI->first;
+ unsigned HighRegNum = getARMRegisterNumbering(RI->first);
bool EmittedWarning = false;
+ DenseMap<unsigned, bool> RegMap;
+ RegMap[HighRegNum] = true;
+
for (++RI; RI != RE; ++RI) {
const std::pair<unsigned, SMLoc> &RegInfo = *RI;
- unsigned Reg = RegInfo.first;
+ unsigned Reg = getARMRegisterNumbering(RegInfo.first);
if (RegMap[Reg]) {
Error(RegInfo.second, "register duplicated in register list");
diff --git a/test/MC/ARM/reg-list.s b/test/MC/ARM/reg-list.s
new file mode 100644
index 0000000000..4dd392e837
--- /dev/null
+++ b/test/MC/ARM/reg-list.s
@@ -0,0 +1,8 @@
+@ RUN: llvm-mc -triple thumb-apple-darwin10 -show-encoding < %s 2> %t | FileCheck %s
+@ RUN: FileCheck --check-prefix=CHECK-WARNINGS < %t %s
+
+ push {r7, lr}
+@ CHECK-WARNINGS: register not in ascending order in register list
+
+ push {lr, r7}
+@ CHECK: push {lr, r7}