blob: 6e371da3729075b92c3aad8b4196662d9cce29a4 [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;
Akira Hatanakab46d0232015-03-27 20:36:02 +000031 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
32 const MCSubtargetInfo &STI) override;
Craig Topper39012cc2014-03-09 18:03:14 +000033
Chris Lattner44790342009-09-20 07:17:49 +000034 // Autogenerated by tblgen.
Chris Lattner76c564b2010-04-04 04:47:45 +000035 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattner44790342009-09-20 07:17:49 +000036 static const char *getRegisterName(unsigned RegNo);
37
Chris Lattner76c564b2010-04-04 04:47:45 +000038 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
39 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper6772eac2015-01-28 10:09:52 +000040 void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper916708f2015-02-13 07:42:25 +000041 void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &O);
Chad Rosier38e05a92012-09-10 22:50:57 +000042 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Craig Topper18854172013-08-25 22:23:38 +000043 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouse2ef8d9c2014-01-22 15:08:08 +000044 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouseb33c2ef2014-01-22 15:08:21 +000045 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000046 void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
Craig Topper0271d102015-01-23 08:00:59 +000047 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper18854172013-08-25 22:23:38 +000048
Craig Topper7c102522015-01-08 07:41:30 +000049 void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
50 printMemReference(MI, OpNo, O);
51 }
52
Chris Lattner76c564b2010-04-04 04:47:45 +000053 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000054 O << "opaque ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000055 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000056 }
Michael Liao5bf95782014-12-04 05:20:33 +000057
Chris Lattner76c564b2010-04-04 04:47:45 +000058 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000059 O << "byte ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000060 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000061 }
Chris Lattner76c564b2010-04-04 04:47:45 +000062 void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000063 O << "word ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000064 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000065 }
Chris Lattner76c564b2010-04-04 04:47:45 +000066 void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000067 O << "dword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000068 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000069 }
Chris Lattner76c564b2010-04-04 04:47:45 +000070 void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000071 O << "qword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000072 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000073 }
Chris Lattner76c564b2010-04-04 04:47:45 +000074 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000075 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000076 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000077 }
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000078 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000079 O << "ymmword ptr ";
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000080 printMemReference(MI, OpNo, O);
81 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000082 void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000083 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000084 printMemReference(MI, OpNo, O);
85 }
Chris Lattner76c564b2010-04-04 04:47:45 +000086 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000087 O << "dword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000088 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000089 }
Chris Lattner76c564b2010-04-04 04:47:45 +000090 void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000091 O << "qword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000092 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000093 }
Chris Lattner76c564b2010-04-04 04:47:45 +000094 void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000095 O << "xword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000096 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000097 }
Chris Lattner76c564b2010-04-04 04:47:45 +000098 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000099 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +0000100 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +0000101 }
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +0000102 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +0000103 O << "ymmword ptr ";
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +0000104 printMemReference(MI, OpNo, O);
105 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000106 void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +0000107 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000108 printMemReference(MI, OpNo, O);
109 }
Craig Topper18854172013-08-25 22:23:38 +0000110
David Woodhouse2ef8d9c2014-01-22 15:08:08 +0000111
112 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
113 O << "byte ptr ";
114 printSrcIdx(MI, OpNo, O);
115 }
116 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
117 O << "word ptr ";
118 printSrcIdx(MI, OpNo, O);
119 }
120 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
121 O << "dword ptr ";
122 printSrcIdx(MI, OpNo, O);
123 }
124 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
125 O << "qword ptr ";
126 printSrcIdx(MI, OpNo, O);
127 }
David Woodhouseb33c2ef2014-01-22 15:08:21 +0000128 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
129 O << "byte ptr ";
130 printDstIdx(MI, OpNo, O);
131 }
132 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
133 O << "word ptr ";
134 printDstIdx(MI, OpNo, O);
135 }
136 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
137 O << "dword ptr ";
138 printDstIdx(MI, OpNo, O);
139 }
140 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
141 O << "qword ptr ";
142 printDstIdx(MI, OpNo, O);
143 }
Craig Topper18854172013-08-25 22:23:38 +0000144 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
145 O << "byte ptr ";
146 printMemOffset(MI, OpNo, O);
147 }
148 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
149 O << "word ptr ";
150 printMemOffset(MI, OpNo, O);
151 }
152 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
153 O << "dword ptr ";
154 printMemOffset(MI, OpNo, O);
155 }
156 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
157 O << "qword ptr ";
158 printMemOffset(MI, OpNo, O);
159 }
Chris Lattner44790342009-09-20 07:17:49 +0000160};
Michael Liao5bf95782014-12-04 05:20:33 +0000161
Alexander Kornienkof00654e2015-06-23 09:49:53 +0000162}
Chris Lattner44790342009-09-20 07:17:49 +0000163
164#endif