In the disassembler C API, be careful not to confuse the comment streamer that the disassembler outputs annotations on with the streamer that the InstPrinter will print them on.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140217 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson 2011-09-21 00:25:23 +00:00
parent eeef9e8180
commit 317eaf1993
9 changed files with 28 additions and 24 deletions

View File

@ -82,8 +82,6 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
Ctx, DisAsm, IP);
assert(DC && "Allocation failure!");
IP->setCommentStream(DC->CommentStream);
return DC;
}

View File

@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/MC/MCInstPrinter.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
@ -26,5 +27,10 @@ void MCInstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const {
}
void MCInstPrinter::printAnnotation(raw_ostream &OS, StringRef Annot) {
if (!Annot.empty()) OS << Annot << "\n";
if (!Annot.empty()) {
if (CommentStream)
(*CommentStream) << Annot << "\n";
else
OS << " " << MAI.getCommentString() << " " << Annot << "\n";
}
}

View File

@ -72,7 +72,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << ", " << getRegisterName(MO2.getReg());
assert(ARM_AM::getSORegOffset(MO3.getImm()) == 0);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -90,12 +90,12 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
<< ", " << getRegisterName(MO1.getReg());
if (ARM_AM::getSORegShOp(MO2.getImm()) == ARM_AM::rrx) {
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
O << ", #" << translateShiftImm(ARM_AM::getSORegOffset(MO2.getImm()));
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -109,7 +109,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << ".w";
O << '\t';
printRegisterList(MI, 4, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
if (Opcode == ARM::STR_PRE_IMM && MI->getOperand(2).getReg() == ARM::SP &&
@ -117,7 +117,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << '\t' << "push";
printPredicateOperand(MI, 4, O);
O << "\t{" << getRegisterName(MI->getOperand(1).getReg()) << "}";
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -130,7 +130,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << ".w";
O << '\t';
printRegisterList(MI, 4, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
if (Opcode == ARM::LDR_POST_IMM && MI->getOperand(2).getReg() == ARM::SP &&
@ -138,7 +138,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << '\t' << "pop";
printPredicateOperand(MI, 5, O);
O << "\t{" << getRegisterName(MI->getOperand(0).getReg()) << "}";
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -150,7 +150,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
printPredicateOperand(MI, 2, O);
O << '\t';
printRegisterList(MI, 4, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -161,7 +161,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
printPredicateOperand(MI, 2, O);
O << '\t';
printRegisterList(MI, 4, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -180,7 +180,7 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
if (Writeback) O << "!";
O << ", ";
printRegisterList(MI, 3, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -189,12 +189,12 @@ void ARMInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
MI->getOperand(1).getReg() == ARM::R8) {
O << "\tnop";
printPredicateOperand(MI, 2, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
printInstruction(MI, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
}
void ARMInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,

View File

@ -28,7 +28,7 @@ using namespace llvm;
void MBlazeInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
StringRef Annot) {
printInstruction(MI, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
}
void MBlazeInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,

View File

@ -28,7 +28,7 @@ using namespace llvm;
void MSP430InstPrinter::printInst(const MCInst *MI, raw_ostream &O,
StringRef Annot) {
printInstruction(MI, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
}
void MSP430InstPrinter::printPCRelImmOperand(const MCInst *MI, unsigned OpNo,

View File

@ -72,7 +72,7 @@ void MipsInstPrinter::printRegName(raw_ostream &OS, unsigned RegNo) const {
void MipsInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
StringRef Annot) {
printInstruction(MI, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
}
void MipsInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,

View File

@ -52,7 +52,7 @@ void PPCInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
printOperand(MI, 1, O);
O << ", " << (unsigned int)SH;
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
}
@ -63,7 +63,7 @@ void PPCInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
printOperand(MI, 0, O);
O << ", ";
printOperand(MI, 1, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
@ -77,13 +77,13 @@ void PPCInstPrinter::printInst(const MCInst *MI, raw_ostream &O,
O << ", ";
printOperand(MI, 1, O);
O << ", " << (unsigned int)SH;
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
return;
}
}
printInstruction(MI, O);
if (CommentStream) printAnnotation(*CommentStream, Annot);
if (CommentStream) printAnnotation(O, Annot);
}

View File

@ -47,7 +47,7 @@ void X86ATTInstPrinter::printInst(const MCInst *MI, raw_ostream &OS,
// If verbose assembly is enabled, we can print some informative comments.
if (CommentStream) {
printAnnotation(*CommentStream, Annot);
printAnnotation(OS, Annot);
EmitAnyX86InstComments(MI, *CommentStream, getRegisterName);
}
}

View File

@ -38,7 +38,7 @@ void X86IntelInstPrinter::printInst(const MCInst *MI, raw_ostream &OS,
// If verbose assembly is enabled, we can print some informative comments.
if (CommentStream) {
printAnnotation(*CommentStream, Annot);
printAnnotation(OS, Annot);
EmitAnyX86InstComments(MI, *CommentStream, getRegisterName);
}
}