blob: ace31186a0544153a2a3b617579cf03f49958cdd [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
Craig Topperec828472014-03-31 06:53:13 +000022class X86IntelInstPrinter final : public MCInstPrinter {
Chris Lattner44790342009-09-20 07:17:49 +000023public:
Craig Topper54bfde72012-04-02 06:09:36 +000024 X86IntelInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
25 const MCRegisterInfo &MRI)
26 : MCInstPrinter(MAI, MII, MRI) {}
Bill Wendlingbc3f7902011-04-07 21:20:06 +000027
Craig Topper39012cc2014-03-09 18:03:14 +000028 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
Akira Hatanakab46d0232015-03-27 20:36:02 +000029 void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
30 const MCSubtargetInfo &STI) override;
Craig Topper39012cc2014-03-09 18:03:14 +000031
Chris Lattner44790342009-09-20 07:17:49 +000032 // Autogenerated by tblgen.
Chris Lattner76c564b2010-04-04 04:47:45 +000033 void printInstruction(const MCInst *MI, raw_ostream &O);
Chris Lattner44790342009-09-20 07:17:49 +000034 static const char *getRegisterName(unsigned RegNo);
35
Chris Lattner76c564b2010-04-04 04:47:45 +000036 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
37 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper6772eac2015-01-28 10:09:52 +000038 void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper916708f2015-02-13 07:42:25 +000039 void printXOPCC(const MCInst *MI, unsigned Op, raw_ostream &O);
Chad Rosier38e05a92012-09-10 22:50:57 +000040 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Craig Topper18854172013-08-25 22:23:38 +000041 void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouse2ef8d9c2014-01-22 15:08:08 +000042 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
David Woodhouseb33c2ef2014-01-22 15:08:21 +000043 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000044 void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &OS);
Craig Topper0271d102015-01-23 08:00:59 +000045 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O);
Craig Topper18854172013-08-25 22:23:38 +000046
Craig Topper7c102522015-01-08 07:41:30 +000047 void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
48 printMemReference(MI, OpNo, O);
49 }
50
Chris Lattner76c564b2010-04-04 04:47:45 +000051 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000052 O << "opaque ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000053 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000054 }
Michael Liao5bf95782014-12-04 05:20:33 +000055
Chris Lattner76c564b2010-04-04 04:47:45 +000056 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000057 O << "byte 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 printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000061 O << "word 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 printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000065 O << "dword 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 printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000069 O << "qword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000070 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000071 }
Chris Lattner76c564b2010-04-04 04:47:45 +000072 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000073 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000074 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000075 }
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000076 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000077 O << "ymmword ptr ";
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000078 printMemReference(MI, OpNo, O);
79 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000080 void printi512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000081 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +000082 printMemReference(MI, OpNo, O);
83 }
Chris Lattner76c564b2010-04-04 04:47:45 +000084 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000085 O << "dword 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 printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000089 O << "qword 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 printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000093 O << "xword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000094 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000095 }
Chris Lattner76c564b2010-04-04 04:47:45 +000096 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +000097 O << "xmmword ptr ";
Chris Lattner76c564b2010-04-04 04:47:45 +000098 printMemReference(MI, OpNo, O);
Chris Lattner44790342009-09-20 07:17:49 +000099 }
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +0000100 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +0000101 O << "ymmword ptr ";
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +0000102 printMemReference(MI, OpNo, O);
103 }
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000104 void printf512mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
Craig Topperefd67d42013-07-31 02:47:52 +0000105 O << "zmmword ptr ";
Elena Demikhovsky003e7d72013-07-28 08:28:38 +0000106 printMemReference(MI, OpNo, O);
107 }
Craig Topper18854172013-08-25 22:23:38 +0000108
David Woodhouse2ef8d9c2014-01-22 15:08:08 +0000109
110 void printSrcIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
111 O << "byte ptr ";
112 printSrcIdx(MI, OpNo, O);
113 }
114 void printSrcIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
115 O << "word ptr ";
116 printSrcIdx(MI, OpNo, O);
117 }
118 void printSrcIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
119 O << "dword ptr ";
120 printSrcIdx(MI, OpNo, O);
121 }
122 void printSrcIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
123 O << "qword ptr ";
124 printSrcIdx(MI, OpNo, O);
125 }
David Woodhouseb33c2ef2014-01-22 15:08:21 +0000126 void printDstIdx8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
127 O << "byte ptr ";
128 printDstIdx(MI, OpNo, O);
129 }
130 void printDstIdx16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
131 O << "word ptr ";
132 printDstIdx(MI, OpNo, O);
133 }
134 void printDstIdx32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
135 O << "dword ptr ";
136 printDstIdx(MI, OpNo, O);
137 }
138 void printDstIdx64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
139 O << "qword ptr ";
140 printDstIdx(MI, OpNo, O);
141 }
Craig Topper18854172013-08-25 22:23:38 +0000142 void printMemOffs8(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
143 O << "byte ptr ";
144 printMemOffset(MI, OpNo, O);
145 }
146 void printMemOffs16(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
147 O << "word ptr ";
148 printMemOffset(MI, OpNo, O);
149 }
150 void printMemOffs32(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
151 O << "dword ptr ";
152 printMemOffset(MI, OpNo, O);
153 }
154 void printMemOffs64(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
155 O << "qword ptr ";
156 printMemOffset(MI, OpNo, O);
157 }
Chris Lattner44790342009-09-20 07:17:49 +0000158};
Michael Liao5bf95782014-12-04 05:20:33 +0000159
Eugene Zelenko90562df2017-02-06 21:55:43 +0000160} // end namespace llvm
Chris Lattner44790342009-09-20 07:17:49 +0000161
Eugene Zelenko90562df2017-02-06 21:55:43 +0000162#endif // LLVM_LIB_TARGET_X86_INSTPRINTER_X86INTELINSTPRINTER_H