From e1d4a8813427b76c5f59cf5b70a9df734b7e9284 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Tue, 23 Oct 2012 22:52:52 +0000 Subject: Make branch heavy code for generating marked up disassembly simpler and easier to read by adding a couple helper functions. Suggestion by Chandler Carruth and seconded by Meador Inge! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166515 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp | 446 ++++++++------------------ 1 file changed, 142 insertions(+), 304 deletions(-) (limited to 'lib/Target/ARM/InstPrinter') diff --git a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp index 64f32f0416..7eac5ee5fa 100644 --- a/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp +++ b/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp @@ -47,7 +47,7 @@ static void printRegImmShift(raw_ostream &O, ARM_AM::ShiftOpc ShOpc, assert (!(ShOpc == ARM_AM::ror && !ShImm) && "Cannot have ror #0"); O << getShiftOpcStr(ShOpc); - if (ShOpc != ARM_AM::rrx){ + if (ShOpc != ARM_AM::rrx) { O << " "; if (UseMarkup) O << ""; + OS << markup(""); } void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O, @@ -143,12 +141,10 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O, return; } - O << ", "; - if (UseMarkup) - O << ""; + O << ", " + << markup(""); printAnnotation(O, Annot); return; } @@ -267,11 +263,9 @@ void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, unsigned Reg = Op.getReg(); printRegName(O, Reg); } else if (Op.isImm()) { - if (UseMarkup) - O << ""; + O << markup(""); } else { assert(Op.isExpr() && "unknown operand kind in printOperand"); // If a symbolic branch target was added as a constant expression then print @@ -295,18 +289,9 @@ void ARMInstPrinter::printT2LdrLabelOperand(const MCInst *MI, unsigned OpNum, if (MO1.isExpr()) O << *MO1.getExpr(); else if (MO1.isImm()) { - if (UseMarkup) - O << ""; - O << "]"; - if (UseMarkup) - O << ">"; + O << markup("]>", "]"); } else llvm_unreachable("Unknown LDR label operand?"); @@ -359,25 +344,19 @@ void ARMInstPrinter::printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, const MCOperand &MO2 = MI->getOperand(Op+1); const MCOperand &MO3 = MI->getOperand(Op+2); - if (UseMarkup) - O << ""; + O << ", " + << markup(""); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); return; } @@ -387,45 +366,29 @@ void ARMInstPrinter::printAM2PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, printRegImmShift(O, ARM_AM::getAM2ShiftOpc(MO3.getImm()), ARM_AM::getAM2Offset(MO3.getImm()), UseMarkup); - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printAddrModeTBB(const MCInst *MI, unsigned Op, raw_ostream &O) { const MCOperand &MO1 = MI->getOperand(Op); const MCOperand &MO2 = MI->getOperand(Op+1); - if (UseMarkup) - O << ""; + O << "]" << markup(">"); } void ARMInstPrinter::printAddrModeTBH(const MCInst *MI, unsigned Op, raw_ostream &O) { const MCOperand &MO1 = MI->getOperand(Op); const MCOperand &MO2 = MI->getOperand(Op+1); - if (UseMarkup) - O << ""; - O << "]"; - if (UseMarkup) - O << ">"; + O << ", lsl " << markup("") << "]" << markup(">"); } void ARMInstPrinter::printAddrMode2Operand(const MCInst *MI, unsigned Op, @@ -455,13 +418,10 @@ void ARMInstPrinter::printAddrMode2OffsetOperand(const MCInst *MI, if (!MO1.getReg()) { unsigned ImmOffs = ARM_AM::getAM2Offset(MO2.getImm()); - if (UseMarkup) - O << ""; + O << markup(""); return; } @@ -482,13 +442,9 @@ void ARMInstPrinter::printAM3PostIndexOp(const MCInst *MI, unsigned Op, const MCOperand &MO2 = MI->getOperand(Op+1); const MCOperand &MO3 = MI->getOperand(Op+2); - if (UseMarkup) - O << ""; + O << "], " << markup(">"); if (MO2.getReg()) { O << (char)ARM_AM::getAM3Op(MO3.getImm()); @@ -497,13 +453,11 @@ void ARMInstPrinter::printAM3PostIndexOp(const MCInst *MI, unsigned Op, } unsigned ImmOffs = ARM_AM::getAM3Offset(MO3.getImm()); - if (UseMarkup) - O << ""; + << ImmOffs + << markup(">"); } void ARMInstPrinter::printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, @@ -512,18 +466,13 @@ void ARMInstPrinter::printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, const MCOperand &MO2 = MI->getOperand(Op+1); const MCOperand &MO3 = MI->getOperand(Op+2); - if (UseMarkup) - O << ""; + O << ']' << markup(">"); return; } @@ -532,18 +481,14 @@ void ARMInstPrinter::printAM3PreOrOffsetIndexOp(const MCInst *MI, unsigned Op, ARM_AM::AddrOpc op = ARM_AM::getAM3Op(MO3.getImm()); if (ImmOffs || (op == ARM_AM::sub)) { - O << ", "; - if (UseMarkup) - O << ""; + << ImmOffs + << markup(">"); } - O << ']'; - if (UseMarkup) - O << ">"; + O << ']' << markup(">"); } void ARMInstPrinter::printAddrMode3Operand(const MCInst *MI, unsigned Op, @@ -577,13 +522,9 @@ void ARMInstPrinter::printAddrMode3OffsetOperand(const MCInst *MI, } unsigned ImmOffs = ARM_AM::getAM3Offset(MO2.getImm()); - if (UseMarkup) - O << ""; + O << markup(""); } void ARMInstPrinter::printPostIdxImm8Operand(const MCInst *MI, @@ -591,11 +532,9 @@ void ARMInstPrinter::printPostIdxImm8Operand(const MCInst *MI, raw_ostream &O) { const MCOperand &MO = MI->getOperand(OpNum); unsigned Imm = MO.getImm(); - if (UseMarkup) - O << ""; + O << markup(""); } void ARMInstPrinter::printPostIdxRegOperand(const MCInst *MI, unsigned OpNum, @@ -612,11 +551,9 @@ void ARMInstPrinter::printPostIdxImm8s4Operand(const MCInst *MI, raw_ostream &O) { const MCOperand &MO = MI->getOperand(OpNum); unsigned Imm = MO.getImm(); - if (UseMarkup) - O << ""; + O << markup(""); } @@ -637,26 +574,20 @@ void ARMInstPrinter::printAddrMode5Operand(const MCInst *MI, unsigned OpNum, return; } - if (UseMarkup) - O << ""; + << ImmOffs * 4 + << markup(">"); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printAddrMode6Operand(const MCInst *MI, unsigned OpNum, @@ -664,29 +595,21 @@ void ARMInstPrinter::printAddrMode6Operand(const MCInst *MI, unsigned OpNum, const MCOperand &MO1 = MI->getOperand(OpNum); const MCOperand &MO2 = MI->getOperand(OpNum+1); - if (UseMarkup) - O << ""; + O << "]" << markup(">"); } void ARMInstPrinter::printAddrMode7Operand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { const MCOperand &MO1 = MI->getOperand(OpNum); - if (UseMarkup) - O << ""; + O << "]" << markup(">"); } void ARMInstPrinter::printAddrMode6OffsetOperand(const MCInst *MI, @@ -709,17 +632,9 @@ void ARMInstPrinter::printBitfieldInvMaskImmOperand(const MCInst *MI, int32_t lsb = CountTrailingZeros_32(v); int32_t width = (32 - CountLeadingZeros_32 (v)) - lsb; assert(MO.isImm() && "Not a valid bf_inv_mask_imm value!"); - if (UseMarkup) - O << ""; - O << ", "; - if (UseMarkup) - O << ""; + O << markup("") + << ", " + << markup(""); } void ARMInstPrinter::printMemBOption(const MCInst *MI, unsigned OpNum, @@ -734,20 +649,16 @@ void ARMInstPrinter::printShiftImmOperand(const MCInst *MI, unsigned OpNum, bool isASR = (ShiftOp & (1 << 5)) != 0; unsigned Amt = ShiftOp & 0x1f; if (isASR) { - O << ", asr "; - if (UseMarkup) - O << ""; + O << ", asr " + << markup(""); } else if (Amt) { - O << ", lsl "; - if (UseMarkup) - O << ""; + O << ", lsl " + << markup(""); } } @@ -757,12 +668,7 @@ void ARMInstPrinter::printPKHLSLShiftImm(const MCInst *MI, unsigned OpNum, if (Imm == 0) return; assert(Imm > 0 && Imm < 32 && "Invalid PKH shift immediate value!"); - O << ", lsl "; - if (UseMarkup) - O << ""; + O << ", lsl " << markup(""); } void ARMInstPrinter::printPKHASRShiftImm(const MCInst *MI, unsigned OpNum, @@ -772,12 +678,7 @@ void ARMInstPrinter::printPKHASRShiftImm(const MCInst *MI, unsigned OpNum, if (Imm == 0) Imm = 32; assert(Imm > 0 && Imm <= 32 && "Invalid PKH shift immediate value!"); - O << ", asr "; - if (UseMarkup) - O << ""; + O << ", asr " << markup(""); } void ARMInstPrinter::printRegisterList(const MCInst *MI, unsigned OpNum, @@ -959,35 +860,29 @@ void ARMInstPrinter::printAdrLabelOperand(const MCInst *MI, unsigned OpNum, int32_t OffImm = (int32_t)MO.getImm(); - if (UseMarkup) - O << ""; + O << markup(">"); } void ARMInstPrinter::printThumbS4ImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { - if (UseMarkup) - O << "getOperand(OpNum).getImm() * 4; - if (UseMarkup) - O << ">"; + O << markup("getOperand(OpNum).getImm() * 4 + << markup(">"); } void ARMInstPrinter::printThumbSRImm(const MCInst *MI, unsigned OpNum, raw_ostream &O) { unsigned Imm = MI->getOperand(OpNum).getImm(); - if (UseMarkup) - O << ""; + O << markup(""); } void ARMInstPrinter::printThumbITMask(const MCInst *MI, unsigned OpNum, @@ -1017,17 +912,13 @@ void ARMInstPrinter::printThumbAddrModeRROperand(const MCInst *MI, unsigned Op, return; } - if (UseMarkup) - O << ""; + O << "]" << markup(">"); } void ARMInstPrinter::printThumbAddrModeImm5SOperand(const MCInst *MI, @@ -1042,21 +933,15 @@ void ARMInstPrinter::printThumbAddrModeImm5SOperand(const MCInst *MI, return; } - if (UseMarkup) - O << ""; + O << ", " + << markup(""); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printThumbAddrModeImm5S1Operand(const MCInst *MI, @@ -1110,9 +995,7 @@ void ARMInstPrinter::printAddrModeImm12Operand(const MCInst *MI, unsigned OpNum, return; } - if (UseMarkup) - O << ""; + O << ", " + << markup(""); } else if (OffImm > 0) { - O << ", "; - if (UseMarkup) - O << ""; + O << ", " + << markup(""); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printT2AddrModeImm8Operand(const MCInst *MI, @@ -1147,9 +1024,7 @@ void ARMInstPrinter::printT2AddrModeImm8Operand(const MCInst *MI, const MCOperand &MO1 = MI->getOperand(OpNum); const MCOperand &MO2 = MI->getOperand(OpNum+1); - if (UseMarkup) - O << ""; - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printT2AddrModeImm8s4Operand(const MCInst *MI, @@ -1182,9 +1055,7 @@ void ARMInstPrinter::printT2AddrModeImm8s4Operand(const MCInst *MI, return; } - if (UseMarkup) - O << ""; - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printT2AddrModeImm0_1020s4Operand(const MCInst *MI, @@ -1215,21 +1084,15 @@ void ARMInstPrinter::printT2AddrModeImm0_1020s4Operand(const MCInst *MI, const MCOperand &MO1 = MI->getOperand(OpNum); const MCOperand &MO2 = MI->getOperand(OpNum+1); - if (UseMarkup) - O << ""; + O << ", " + << markup(""); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printT2AddrModeImm8OffsetOperand(const MCInst *MI, @@ -1237,15 +1100,12 @@ void ARMInstPrinter::printT2AddrModeImm8OffsetOperand(const MCInst *MI, raw_ostream &O) { const MCOperand &MO1 = MI->getOperand(OpNum); int32_t OffImm = (int32_t)MO1.getImm(); - O << ", "; - if (UseMarkup) - O << ""; + O << markup(">"); } void ARMInstPrinter::printT2AddrModeImm8s4OffsetOperand(const MCInst *MI, @@ -1278,9 +1138,7 @@ void ARMInstPrinter::printT2AddrModeSoRegOperand(const MCInst *MI, const MCOperand &MO2 = MI->getOperand(OpNum+1); const MCOperand &MO3 = MI->getOperand(OpNum+2); - if (UseMarkup) - O << ""; + O << ", lsl " + << markup(""); } - O << "]"; - if (UseMarkup) - O << ">"; + O << "]" << markup(">"); } void ARMInstPrinter::printFPImmOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { const MCOperand &MO = MI->getOperand(OpNum); - if (UseMarkup) - O << ""; + O << markup(""); } void ARMInstPrinter::printNEONModImmOperand(const MCInst *MI, unsigned OpNum, @@ -1317,22 +1169,18 @@ void ARMInstPrinter::printNEONModImmOperand(const MCInst *MI, unsigned OpNum, unsigned EncodedImm = MI->getOperand(OpNum).getImm(); unsigned EltBits; uint64_t Val = ARM_AM::decodeNEONModImm(EncodedImm, EltBits); - if (UseMarkup) - O << ""; + O << markup(">"); } void ARMInstPrinter::printImmPlusOneOperand(const MCInst *MI, unsigned OpNum, raw_ostream &O) { unsigned Imm = MI->getOperand(OpNum).getImm(); - if (UseMarkup) - O << ""; + O << markup(""); } void ARMInstPrinter::printRotImmOperand(const MCInst *MI, unsigned OpNum, @@ -1340,45 +1188,35 @@ void ARMInstPrinter::printRotImmOperand(const MCInst *MI, unsigned OpNum, unsigned Imm = MI->getOperand(OpNum).getImm(); if (Imm == 0) return; - O << ", ror "; - if (UseMarkup) - O << ""; + O << markup(">"); } void ARMInstPrinter::printFBits16(const MCInst *MI, unsigned OpNum, raw_ostream &O) { - if (UseMarkup) - O << "getOperand(OpNum).getImm(); - if (UseMarkup) - O << ">"; + O << markup("getOperand(OpNum).getImm() + << markup(">"); } void ARMInstPrinter::printFBits32(const MCInst *MI, unsigned OpNum, raw_ostream &O) { - if (UseMarkup) - O << "getOperand(OpNum).getImm(); - if (UseMarkup) - O << ">"; + O << markup("getOperand(OpNum).getImm() + << markup(">"); } void ARMInstPrinter::printVectorIndex(const MCInst *MI, unsigned OpNum, raw_ostream &O) { - if (UseMarkup) - O << "getOperand(OpNum).getImm() << "]"; - if (UseMarkup) - O << ">"; } void ARMInstPrinter::printVectorListOne(const MCInst *MI, unsigned OpNum, -- cgit v1.2.3