mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
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.
llvm-svn: 140217
This commit is contained in:
parent
9b721ff19e
commit
fbec62c99e
@ -82,8 +82,6 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
|
||||
Ctx, DisAsm, IP);
|
||||
assert(DC && "Allocation failure!");
|
||||
|
||||
IP->setCommentStream(DC->CommentStream);
|
||||
|
||||
return DC;
|
||||
}
|
||||
|
||||
|
@ -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";
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user