blob: 6f120322742b274455931a64d3f68ac7a876d66b [file] [log] [blame]
Chris Lattnere895c612009-09-20 07:17:49 +00001//===-- X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -----===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This class prints an X86 MCInst to intel style .s file syntax.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86_INTEL_INST_PRINTER_H
15#define X86_INTEL_INST_PRINTER_H
16
17#include "llvm/MC/MCInstPrinter.h"
18#include "llvm/Support/raw_ostream.h"
19
20namespace llvm {
21 class MCOperand;
22
23class X86IntelInstPrinter : public MCInstPrinter {
24public:
Chris Lattnerd3740872010-04-04 05:04:31 +000025 X86IntelInstPrinter(const MCAsmInfo &MAI)
26 : MCInstPrinter(MAI) {}
Chris Lattnere895c612009-09-20 07:17:49 +000027
Chris Lattnerd3740872010-04-04 05:04:31 +000028 virtual void printInst(const MCInst *MI, raw_ostream &OS);
Chris Lattner0d7b0aa2010-02-11 22:57:32 +000029 virtual StringRef getOpcodeName(unsigned Opcode) const;
Chris Lattnere895c612009-09-20 07:17:49 +000030
31 // Autogenerated by tblgen.
Chris Lattner35c33bd2010-04-04 04:47:45 +000032 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattnere895c612009-09-20 07:17:49 +000033 static const char *getRegisterName(unsigned RegNo);
Chris Lattner0d7b0aa2010-02-11 22:57:32 +000034 static const char *getInstructionName(unsigned Opcode);
Chris Lattnere895c612009-09-20 07:17:49 +000035
36
Chris Lattner35c33bd2010-04-04 04:47:45 +000037 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
38 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);
Chris Lattner35c33bd2010-04-04 04:47:45 +000039 void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &O);
40 void print_pcrel_imm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Chris Lattnere895c612009-09-20 07:17:49 +000041
Chris Lattner35c33bd2010-04-04 04:47:45 +000042 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000043 O << "OPAQUE PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000044 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000045 }
46
Chris Lattner35c33bd2010-04-04 04:47:45 +000047 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000048 O << "BYTE PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000049 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000050 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000051 void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000052 O << "WORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000053 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000054 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000055 void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000056 O << "DWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000057 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000058 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000059 void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000060 O << "QWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000061 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000062 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000063 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000064 O << "XMMWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000065 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000066 }
Bruno Cardoso Lopes94143ee2010-07-19 23:32:44 +000067 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
68 O << "YMMWORD PTR ";
69 printMemReference(MI, OpNo, O);
70 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000071 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000072 O << "DWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000073 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000074 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000075 void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000076 O << "QWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000077 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000078 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000079 void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000080 O << "XWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000081 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000082 }
Chris Lattner35c33bd2010-04-04 04:47:45 +000083 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Chris Lattnere895c612009-09-20 07:17:49 +000084 O << "XMMWORD PTR ";
Chris Lattner35c33bd2010-04-04 04:47:45 +000085 printMemReference(MI, OpNo, O);
Chris Lattnere895c612009-09-20 07:17:49 +000086 }
Bruno Cardoso Lopese86b01c2010-07-09 18:27:43 +000087 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
88 O << "YMMWORD PTR ";
89 printMemReference(MI, OpNo, O);
90 }
Chris Lattnere895c612009-09-20 07:17:49 +000091};
92
93}
94
95#endif