diff options
author | Jim Grosbach <grosbach@apple.com> | 2011-08-05 15:48:21 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2011-08-05 15:48:21 +0000 |
commit | ca8c70b9536bf351ee92395dae6f99a59c011a3d (patch) | |
tree | f3c01daa6046ad1af853641910d823053ad0fa72 /lib | |
parent | 9a45008e917b8c1aef01ab717f0df254cdf1af44 (diff) |
ARM use a dedicated printer for postidx_reg operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136968 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 2 | ||||
-rw-r--r-- | lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp | 9 | ||||
-rw-r--r-- | lib/Target/ARM/InstPrinter/ARMInstPrinter.h | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 1ef9dbc1f8..99584d4445 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -645,7 +645,7 @@ def PostIdxRegAsmOperand : AsmOperandClass { } def postidx_reg : Operand<i32> { let EncoderMethod = "getPostIdxRegOpValue"; - let PrintMethod = "printAddrMode3OffsetOperand"; + let PrintMethod = "printPostIdxRegOperand"; let ParserMatchClass = PostIdxRegAsmOperand; let MIOperandInfo = (ops GPR, i32imm); } diff --git a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp index 37359cec7f..7972b27290 100644 --- a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp +++ b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp @@ -382,6 +382,15 @@ void ARMInstPrinter::printPostIdxImm8Operand(const MCInst *MI, O << '#' << ((Imm & 256) ? "" : "-") << (Imm & 0xff); } +void ARMInstPrinter::printPostIdxRegOperand(const MCInst *MI, unsigned OpNum, + raw_ostream &O) { + const MCOperand &MO1 = MI->getOperand(OpNum); + const MCOperand &MO2 = MI->getOperand(OpNum+1); + + O << getAddrOpcStr(ARM_AM::getAM3Op(MO2.getImm())) + << getRegisterName(MO1.getReg()); +} + void ARMInstPrinter::printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { diff --git a/lib/Target/ARM/InstPrinter/ARMInstPrinter.h b/lib/Target/ARM/InstPrinter/ARMInstPrinter.h index ac78d02835..8b94ec5f05 100644 --- a/lib/Target/ARM/InstPrinter/ARMInstPrinter.h +++ b/lib/Target/ARM/InstPrinter/ARMInstPrinter.h @@ -55,6 +55,7 @@ public: void printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op,raw_ostream &O); void printPostIdxImm8Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); + void printPostIdxRegOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O); void printPostIdxImm8s4Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O); |