From ca8c70b9536bf351ee92395dae6f99a59c011a3d Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Fri, 5 Aug 2011 15:48:21 +0000 Subject: [PATCH] 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 --- lib/Target/ARM/ARMInstrInfo.td | 2 +- lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp | 9 +++++++++ lib/Target/ARM/InstPrinter/ARMInstPrinter.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 1ef9dbc1f81..99584d4445f 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -645,7 +645,7 @@ def PostIdxRegAsmOperand : AsmOperandClass { } def postidx_reg : Operand { 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 37359cec7fa..7972b27290f 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 ac78d028359..8b94ec5f05d 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);