blob: d082f0bd67094e25483f8fee74a150b1be3c8df0 [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//= X86IntelInstPrinter.h - Convert X86 MCInst to assembly syntax -*- C++ -*-=//
Chris Lattner44790342009-09-20 07:17:49 +00002//
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//
Chad Rosier095e1cd2012-10-03 19:00:20 +000010// This class prints an X86 MCInst to Intel style .s file syntax.
Chris Lattner44790342009-09-20 07:17:49 +000011//
12//===----------------------------------------------------------------------===//
13
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000014#ifndef LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H
15#define LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H
Chris Lattner44790342009-09-20 07:17:49 +000016
17#include "llvm/MC/MCInstPrinter.h"
18#include "llvm/Support/raw_ostream.h"
19
20namespace llvm {
Bill Wendling00f0cdd2011-03-21 04:13:46 +000021
22class MCOperand;
Craig Topperec828472014-03-31 06:53:13 +000023
24class X86IntelInstPrinter final : public MCInstPrinter {
Chris Lattner44790342009-09-20 07:17:49 +000025public:
Craig Topper54bfde72012-04-02 06:09:36 +000026 X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
27 const MCRegisterInfo &MRI)
28 : MCInstPrinter(MAI, MII, MRI) {}
Bill Wendlingbc3f7902011-04-07 21:20:06 +000029
Craig Topper39012cc2014-03-09 18:03:14 +000030 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
31 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot) override;
32
Chris Lattner44790342009-09-20 07:17:49 +000033 // Autogenerated by tblgen.
Chris Lattner76c564b2010-04-04 04:47:45 +000034 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattner44790342009-09-20 07:17:49 +000035 static const char *getRegisterName(unsigned RegNo);
36
Chris Lattner76c564b2010-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 Lattner76c564b2010-04-04 04:47:45 +000039 void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topperf1c20162012-10-09 05:26:13 +000040 void printAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O);
Chad Rosier38e05a92012-09-10 22:50:57 +000041 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Craig Topper18854172013-08-25 22:23:38 +000042 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouse2ef8d9c2014-01-22 15:08:08 +000043 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouseb33c2ef2014-01-22 15:08:21 +000044 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000045 void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
Craig Topper18854172013-08-25 22:23:38 +000046
Chris Lattner76c564b2010-04-04 04:47:45 +000047 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000048 O << "opaque ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000049 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000050 }
51
Chris Lattner76c564b2010-04-04 04:47:45 +000052 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000053 O << "byte ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000054 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000055 }
Chris Lattner76c564b2010-04-04 04:47:45 +000056 void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000057 O << "word ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000058 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000059 }
Chris Lattner76c564b2010-04-04 04:47:45 +000060 void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000061 O << "dword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000062 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000063 }
Chris Lattner76c564b2010-04-04 04:47:45 +000064 void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000065 O << "qword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000066 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000067 }
Chris Lattner76c564b2010-04-04 04:47:45 +000068 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000069 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000070 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000071 }
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000072 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000073 O << "ymmword ptr ";
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000074 printMemReference(MI, OpNo, O);
75 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000076 void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000077 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000078 printMemReference(MI, OpNo, O);
79 }
Chris Lattner76c564b2010-04-04 04:47:45 +000080 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000081 O << "dword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000082 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000083 }
Chris Lattner76c564b2010-04-04 04:47:45 +000084 void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000085 O << "qword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000086 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000087 }
Chris Lattner76c564b2010-04-04 04:47:45 +000088 void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000089 O << "xword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000090 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000091 }
Chris Lattner76c564b2010-04-04 04:47:45 +000092 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000093 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000094 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000095 }
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +000096 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000097 O << "ymmword ptr ";
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +000098 printMemReference(MI, OpNo, O);
99 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000100 void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +0000101 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000102 printMemReference(MI, OpNo, O);
103 }
Craig Topper18854172013-08-25 22:23:38 +0000104
David Woodhouse2ef8d9c2014-01-22 15:08:08 +0000105
106 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
107 O << "byte ptr ";
108 printSrcIdx(MI, OpNo, O);
109 }
110 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
111 O << "word ptr ";
112 printSrcIdx(MI, OpNo, O);
113 }
114 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
115 O << "dword ptr ";
116 printSrcIdx(MI, OpNo, O);
117 }
118 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
119 O << "qword ptr ";
120 printSrcIdx(MI, OpNo, O);
121 }
David Woodhouseb33c2ef2014-01-22 15:08:21 +0000122 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
123 O << "byte ptr ";
124 printDstIdx(MI, OpNo, O);
125 }
126 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
127 O << "word ptr ";
128 printDstIdx(MI, OpNo, O);
129 }
130 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
131 O << "dword ptr ";
132 printDstIdx(MI, OpNo, O);
133 }
134 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
135 O << "qword ptr ";
136 printDstIdx(MI, OpNo, O);
137 }
Craig Topper18854172013-08-25 22:23:38 +0000138 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
139 O << "byte ptr ";
140 printMemOffset(MI, OpNo, O);
141 }
142 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
143 O << "word ptr ";
144 printMemOffset(MI, OpNo, O);
145 }
146 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
147 O << "dword ptr ";
148 printMemOffset(MI, OpNo, O);
149 }
150 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
151 O << "qword ptr ";
152 printMemOffset(MI, OpNo, O);
153 }
Chris Lattner44790342009-09-20 07:17:49 +0000154};
155
156}
157
158#endif