summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-07-28 17:18:57 +0000
committerOwen Anderson <resistor@mac.com>2011-07-28 17:18:57 +0000
commitb0e689939890a990a7d6bcad102487826389cf5d (patch)
tree3f56d182373ceac3181320df52493bf08359a526 /llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
parent8b3184e540945583ccd761e0924ae80eff323118 (diff)
downloadbcm5719-llvm-b0e689939890a990a7d6bcad102487826389cf5d.tar.gz
bcm5719-llvm-b0e689939890a990a7d6bcad102487826389cf5d.zip
Revert r136295. It broke nightly testers because some parts of codegen weren't aware of the changes to operand ordering. I hope to revive this sometime in the future, but it's not strictly necessary for now.
llvm-svn: 136362
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp')
-rw-r--r--llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
index e8c2102c3d6..1f3920bd8cf 100644
--- a/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
+++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
@@ -1460,7 +1460,7 @@ static bool DisassembleLdStMiscFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
&& "Invalid arguments");
// Operand 0 of a pre- and post-indexed store is the address base writeback.
- if (isPrePost) {
+ if (isPrePost && isStore) {
assert(OpInfo[OpIdx].RegClass == ARM::GPRRegClassID &&
"Reg operand expected");
MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID,
@@ -1485,6 +1485,15 @@ static bool DisassembleLdStMiscFrm(MCInst &MI, unsigned Opcode, uint32_t insn,
++OpIdx;
}
+ // After dst of a pre- and post-indexed load is the address base writeback.
+ if (isPrePost && !isStore) {
+ assert(OpInfo[OpIdx].RegClass == ARM::GPRRegClassID &&
+ "Reg operand expected");
+ MI.addOperand(MCOperand::CreateReg(getRegisterEnum(B, ARM::GPRRegClassID,
+ decodeRn(insn))));
+ ++OpIdx;
+ }
+
// Disassemble the base operand.
if (OpIdx >= NumOps)
return false;
OpenPOWER on IntegriCloud