mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-25 05:10:56 +00:00
Add ability for MCInstPrinters to add comments for instructions.
Enhance the x86 backend to show the hex values of immediates in comments when they are large. For example: movl $1072693248, 4(%esp) ## imm = 0x3FF00000 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95728 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
51898d7a89
commit
5d672cfab0
@ -16,7 +16,7 @@ namespace llvm {
|
||||
|
||||
// Private constants, do not use.
|
||||
//
|
||||
// This is currently layed out so that the MCFixup fields can be efficiently
|
||||
// This is currently laid out so that the MCFixup fields can be efficiently
|
||||
// accessed, while keeping the offset field large enought that the assembler
|
||||
// backend can reasonably use the MCFixup representation for an entire fragment
|
||||
// (splitting any overly large fragments).
|
||||
|
@ -20,12 +20,22 @@ class MCAsmInfo;
|
||||
/// that converts an MCInst to valid target assembly syntax.
|
||||
class MCInstPrinter {
|
||||
protected:
|
||||
/// O - The main stream to emit instruction text to.
|
||||
raw_ostream &O;
|
||||
|
||||
/// CommentStream - a stream that comments can be emitted to if desired.
|
||||
/// Each comment must end with a newline. This will be null if verbose
|
||||
/// assembly emission is disable.
|
||||
raw_ostream *CommentStream;
|
||||
const MCAsmInfo &MAI;
|
||||
public:
|
||||
MCInstPrinter(raw_ostream &o, const MCAsmInfo &mai) : O(o), MAI(mai) {}
|
||||
MCInstPrinter(raw_ostream &o, const MCAsmInfo &mai)
|
||||
: O(o), CommentStream(0), MAI(mai) {}
|
||||
|
||||
virtual ~MCInstPrinter();
|
||||
|
||||
/// setCommentStream - Specify a stream to emit comments to.
|
||||
void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
|
||||
|
||||
/// printInst - Print the specified MCInst to the current raw_ostream.
|
||||
///
|
||||
|
@ -48,7 +48,10 @@ public:
|
||||
: MCStreamer(Context), OS(os), MAI(mai), InstPrinter(printer),
|
||||
Emitter(emitter), CommentStream(CommentToEmit),
|
||||
IsLittleEndian(isLittleEndian), IsVerboseAsm(isVerboseAsm),
|
||||
ShowFixups(showFixups), ShowInst(showInst) {}
|
||||
ShowFixups(showFixups), ShowInst(showInst) {
|
||||
if (InstPrinter && IsVerboseAsm)
|
||||
InstPrinter->setCommentStream(CommentStream);
|
||||
}
|
||||
~MCAsmStreamer() {}
|
||||
|
||||
bool isLittleEndian() const { return IsLittleEndian; }
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "X86GenInstrNames.inc"
|
||||
using namespace llvm;
|
||||
@ -65,6 +66,10 @@ void X86ATTInstPrinter::printOperand(const MCInst *MI, unsigned OpNo) {
|
||||
O << '%' << getRegisterName(Op.getReg());
|
||||
} else if (Op.isImm()) {
|
||||
O << '$' << Op.getImm();
|
||||
|
||||
if (CommentStream && (Op.getImm() > 255 || Op.getImm() < -256))
|
||||
*CommentStream << format("imm = 0x%X\n", Op.getImm());
|
||||
|
||||
} else {
|
||||
assert(Op.isExpr() && "unknown operand kind in printOperand");
|
||||
O << '$' << *Op.getExpr();
|
||||
|
Loading…
x
Reference in New Issue
Block a user