mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-25 14:32:53 +00:00
44dcfd3625
with the newer, cleaner model. It uses the IAPrinter class to hold the information that is needed to match an instruction with its alias. This also takes into account the available features of the platform. There is one bit of ugliness. The way the logic determines if a pattern is unique is O(N**2), which is gross. But in reality, the number of items it's checking against isn't large. So while it's N**2, it shouldn't be a massive time sink. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129110 91177308-0d34-0410-b5e6-96231b3b80d8
97 lines
3.0 KiB
C++
97 lines
3.0 KiB
C++
//===-- X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -----===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This class prints an X86 MCInst to intel style .s file syntax.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef X86_INTEL_INST_PRINTER_H
|
|
#define X86_INTEL_INST_PRINTER_H
|
|
|
|
#include "llvm/MC/MCInstPrinter.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
namespace llvm {
|
|
|
|
class MCOperand;
|
|
class TargetMachine;
|
|
|
|
class X86IntelInstPrinter : public MCInstPrinter {
|
|
public:
|
|
X86IntelInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI)
|
|
: MCInstPrinter(MAI) {}
|
|
|
|
virtual void printInst(const MCInst *MI, raw_ostream &OS);
|
|
virtual StringRef getOpcodeName(unsigned Opcode) const;
|
|
|
|
// Autogenerated by tblgen.
|
|
void printInstruction(const MCInst *MI, raw_ostream &O);
|
|
static const char *getRegisterName(unsigned RegNo);
|
|
static const char *getInstructionName(unsigned Opcode);
|
|
|
|
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);
|
|
void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &O);
|
|
void print_pcrel_imm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
|
|
void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "OPAQUE PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
|
|
void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "BYTE PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "WORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "DWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "QWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "XMMWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "YMMWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "DWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "QWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "XWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "XMMWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
|
|
O << "YMMWORD PTR ";
|
|
printMemReference(MI, OpNo, O);
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|