140 lines · c
1//= X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -*- C++ -*-=//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This class prints an X86 MCInst to Intel style .s file syntax.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_X86_MCTARGETDESC_X86INTELINSTPRINTER_H14#define LLVM_LIB_TARGET_X86_MCTARGETDESC_X86INTELINSTPRINTER_H15 16#include "X86InstPrinterCommon.h"17#include "llvm/Support/raw_ostream.h"18 19namespace llvm {20 21class X86IntelInstPrinter final : public X86InstPrinterCommon {22public:23 X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,24 const MCRegisterInfo &MRI)25 : X86InstPrinterCommon(MAI, MII, MRI) {}26 27 void printRegName(raw_ostream &OS, MCRegister Reg) override;28 void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,29 const MCSubtargetInfo &STI, raw_ostream &OS) override;30 bool printVecCompareInstr(const MCInst *MI, raw_ostream &OS);31 32 // Autogenerated by tblgen, returns true if we successfully printed an33 // alias.34 bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS);35 void printCustomAliasOperand(const MCInst *MI, uint64_t Address,36 unsigned OpIdx, unsigned PrintMethodIdx,37 raw_ostream &O);38 39 // Autogenerated by tblgen.40 std::pair<const char *, uint64_t>41 getMnemonic(const MCInst &MI) const override;42 void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O);43 static const char *getRegisterName(MCRegister Reg);44 45 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) override;46 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);47 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);48 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);49 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);50 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O);51 void printSTiRegOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);52 53 void printbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {54 O << "byte ptr ";55 printMemReference(MI, OpNo, O);56 }57 void printwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {58 O << "word ptr ";59 printMemReference(MI, OpNo, O);60 }61 void printdwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {62 O << "dword ptr ";63 printMemReference(MI, OpNo, O);64 }65 void printqwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {66 O << "qword ptr ";67 printMemReference(MI, OpNo, O);68 }69 void printxmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {70 O << "xmmword ptr ";71 printMemReference(MI, OpNo, O);72 }73 void printymmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {74 O << "ymmword ptr ";75 printMemReference(MI, OpNo, O);76 }77 void printzmmwordmem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {78 O << "zmmword ptr ";79 printMemReference(MI, OpNo, O);80 }81 void printtbytemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {82 O << "tbyte ptr ";83 printMemReference(MI, OpNo, O);84 }85 86 87 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {88 O << "byte ptr ";89 printSrcIdx(MI, OpNo, O);90 }91 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {92 O << "word ptr ";93 printSrcIdx(MI, OpNo, O);94 }95 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {96 O << "dword ptr ";97 printSrcIdx(MI, OpNo, O);98 }99 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {100 O << "qword ptr ";101 printSrcIdx(MI, OpNo, O);102 }103 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {104 O << "byte ptr ";105 printDstIdx(MI, OpNo, O);106 }107 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {108 O << "word ptr ";109 printDstIdx(MI, OpNo, O);110 }111 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {112 O << "dword ptr ";113 printDstIdx(MI, OpNo, O);114 }115 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {116 O << "qword ptr ";117 printDstIdx(MI, OpNo, O);118 }119 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {120 O << "byte ptr ";121 printMemOffset(MI, OpNo, O);122 }123 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {124 O << "word ptr ";125 printMemOffset(MI, OpNo, O);126 }127 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {128 O << "dword ptr ";129 printMemOffset(MI, OpNo, O);130 }131 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {132 O << "qword ptr ";133 printMemOffset(MI, OpNo, O);134 }135};136 137} // end namespace llvm138 139#endif // LLVM_LIB_TARGET_X86_MCTARGETDESC_X86INTELINSTPRINTER_H140