1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
The trouble as in ARMAsmParser, in ParseInstruction method. It assumes that ARM::R12 + 1 == ARM::SP.
It is wrong, since ARM::<Register> codes are generated by tablegen and actually could be any random numbers.

llvm-svn: 205524
This commit is contained in:
Stepan Dyatkovskiy 2014-04-03 11:29:15 +00:00
parent e6ece696a8
commit d535cd7ed5
2 changed files with 18 additions and 4 deletions

View File

@ -5408,11 +5408,16 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
Operands.size() == 4) {
ARMOperand *Op = static_cast<ARMOperand *>(Operands[2]);
assert(Op->isReg() && "expected register argument");
assert(MRI->getMatchingSuperReg(Op->getReg(), ARM::gsub_0,
&MRI->getRegClass(ARM::GPRPairRegClassID))
&& "expected register pair");
unsigned SuperReg = MRI->getMatchingSuperReg(
Op->getReg(), ARM::gsub_0, &MRI->getRegClass(ARM::GPRPairRegClassID));
assert(SuperReg && "expected register pair");
unsigned PairedReg = MRI->getSubReg(SuperReg, ARM::gsub_1);
Operands.insert(Operands.begin() + 3,
ARMOperand::CreateReg(Op->getReg() + 1, Op->getStartLoc(),
ARMOperand::CreateReg(PairedReg, Op->getStartLoc(),
Op->getEndLoc()));
}

View File

@ -0,0 +1,9 @@
// PR19320
// RUN: llvm-mc -triple=armv7-linux-gnueabi -show-encoding < %s | FileCheck %s
.text
// CHECK: ldrd r12, sp, [r0, #32] @ encoding: [0xd0,0xc2,0xc0,0xe1]
ldrd r12, [r0, #32]
// CHECK: strd r12, sp, [r0, #32] @ encoding: [0xf0,0xc2,0xc0,0xe1]
strd r12, [r0, #32]