131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//= X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -*- C++ -*-=// 2e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// 3e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// The LLVM Compiler Infrastructure 4e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// 5e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// This file is distributed under the University of Illinois Open Source 6e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// License. See LICENSE.TXT for details. 7e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// 8e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner//===----------------------------------------------------------------------===// 9e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// 107f74eade1f48b32e4c87db651f1a86e0a64b6fa7Chad Rosier// This class prints an X86 MCInst to Intel style .s file syntax. 11e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner// 12e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner//===----------------------------------------------------------------------===// 13e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 14e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner#ifndef X86_INTEL_INST_PRINTER_H 15e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner#define X86_INTEL_INST_PRINTER_H 16e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 17e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner#include "llvm/MC/MCInstPrinter.h" 18e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner#include "llvm/Support/raw_ostream.h" 19e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 20e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattnernamespace llvm { 21a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendling 22a5c177e70a42f48e4885075c4c48aad0816a2817Bill Wendlingclass MCOperand; 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass X86IntelInstPrinter final : public MCInstPrinter { 25e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattnerpublic: 2617463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 2717463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper const MCRegisterInfo &MRI) 2817463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper : MCInstPrinter(MAI, MII, MRI) {} 2944dcfd36253570ccd5f00189eb918604473135e0Bill Wendling 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printRegName(raw_ostream &OS, unsigned RegNo) const override; 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot) override; 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 33e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner // Autogenerated by tblgen. 3435c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printInstruction(const MCInst *MI, raw_ostream &O); 35e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner static const char *getRegisterName(unsigned RegNo); 36e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 3735c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 3835c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O); 3935c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &O); 40ac0740f2442dae01a4c44875f9b936d9ea352636Craig Topper void printAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O); 4135c688932a3d8f133905280f64f490f61270b2a9Chad Rosier void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O); 42a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O); 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O); 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O); 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS); 46a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper 4735c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 48418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "opaque ptr "; 4935c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 50e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 51e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 5235c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 53418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "byte ptr "; 5435c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 55e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 5635c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 57418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "word ptr "; 5835c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 59e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 6035c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 61418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "dword ptr "; 6235c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 63e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 6435c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 65418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "qword ptr "; 6635c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 67e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 6835c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 69418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "xmmword ptr "; 7035c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 71e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 7294143ee6254944a26adba2200037328c2c8ef289Bruno Cardoso Lopes void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 73418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "ymmword ptr "; 7494143ee6254944a26adba2200037328c2c8ef289Bruno Cardoso Lopes printMemReference(MI, OpNo, O); 7594143ee6254944a26adba2200037328c2c8ef289Bruno Cardoso Lopes } 76c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 77418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "zmmword ptr "; 78c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky printMemReference(MI, OpNo, O); 79c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky } 8035c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 81418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "dword ptr "; 8235c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 83e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 8435c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 85418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "qword ptr "; 8635c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 87e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 8835c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 89418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "xword ptr "; 9035c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 91e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 9235c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 93418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "xmmword ptr "; 9435c33bd772b3cfb34fdc6b5c9171f955454d0043Chris Lattner printMemReference(MI, OpNo, O); 95e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner } 96e86b01c153ba52307ecb6e7513ec33f57caedfddBruno Cardoso Lopes void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 97418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "ymmword ptr "; 98e86b01c153ba52307ecb6e7513ec33f57caedfddBruno Cardoso Lopes printMemReference(MI, OpNo, O); 99e86b01c153ba52307ecb6e7513ec33f57caedfddBruno Cardoso Lopes } 100c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 101418eb3df746816293dd013b82264f43e501ec093Craig Topper O << "zmmword ptr "; 102c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky printMemReference(MI, OpNo, O); 103c18f4efc5dd24adcc653806455fc7ae8508e9c66Elena Demikhovsky } 104a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "byte ptr "; 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printSrcIdx(MI, OpNo, O); 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "word ptr "; 11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printSrcIdx(MI, OpNo, O); 11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "dword ptr "; 11636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printSrcIdx(MI, OpNo, O); 11736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 11836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "qword ptr "; 12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printSrcIdx(MI, OpNo, O); 12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 12236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 12336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "byte ptr "; 12436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printDstIdx(MI, OpNo, O); 12536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 12636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 12736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "word ptr "; 12836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printDstIdx(MI, OpNo, O); 12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "dword ptr "; 13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printDstIdx(MI, OpNo, O); 13336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 13436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 13536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines O << "qword ptr "; 13636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines printDstIdx(MI, OpNo, O); 13736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines } 138a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 139a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper O << "byte ptr "; 140a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper printMemOffset(MI, OpNo, O); 141a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper } 142a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 143a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper O << "word ptr "; 144a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper printMemOffset(MI, OpNo, O); 145a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper } 146a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 147a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper O << "dword ptr "; 148a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper printMemOffset(MI, OpNo, O); 149a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper } 150a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) { 151a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper O << "qword ptr "; 152a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper printMemOffset(MI, OpNo, O); 153a4959f3f6eb9b6ab3cbbe085a2797208682e96c6Craig Topper } 154e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner}; 155e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 156e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner} 157e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner 158e895c6151589c1b7f6ac9ca992b76106fa197a37Chris Lattner#endif 159