blob: 8e09183dccc9f5f88566db288aa36c200d9eeb59 [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//==- X86ATTInstPrinter.h - Convert X86 MCInst to assembly syntax -*- C++ -*-=//
Chris Lattner1cbd3de2009-09-13 19:30:11 +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//
10// This class prints an X86 MCInst to AT&T style .s file syntax.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86_ATT_INST_PRINTER_H
15#define X86_ATT_INST_PRINTER_H
16
Chris Lattner6d31b432009-09-14 01:49:26 +000017#include "llvm/MC/MCInstPrinter.h"
Chris Lattner06c5eed2009-09-13 20:08:00 +000018
Chris Lattner6d31b432009-09-14 01:49:26 +000019namespace llvm {
Bill Wendling00f0cdd2011-03-21 04:13:46 +000020
21class MCOperand;
Chris Lattner6d31b432009-09-14 01:49:26 +000022
23class X86ATTInstPrinter : public MCInstPrinter {
24public:
Craig Topper54bfde72012-04-02 06:09:36 +000025 X86ATTInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
26 const MCRegisterInfo &MRI)
27 : MCInstPrinter(MAI, MII, MRI) {}
Jim Grosbachfd93a592012-03-05 19:33:20 +000028
Rafael Espindolad6860522011-06-02 02:34:55 +000029 virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
Owen Andersona0c3b972011-09-15 23:38:46 +000030 virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot);
Chris Lattnerb1913c42010-02-11 22:57:32 +000031
Eric Christopher2e3fbaa2011-04-18 21:28:11 +000032 // Autogenerated by tblgen, returns true if we successfully printed an
33 // alias.
Bill Wendlingbc3f7902011-04-07 21:20:06 +000034 bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
35
Chris Lattner06c5eed2009-09-13 20:08:00 +000036 // Autogenerated by tblgen.
Chris Lattner76c564b2010-04-04 04:47:45 +000037 void printInstruction(const MCInst *MI, raw_ostream &OS);
Chris Lattnerad10b3b2009-09-13 20:19:22 +000038 static const char *getRegisterName(unsigned RegNo);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000039
Chris Lattner76c564b2010-04-04 04:47:45 +000040 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
41 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &OS);
Chris Lattner76c564b2010-04-04 04:47:45 +000042 void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &OS);
Craig Topperf1c20162012-10-09 05:26:13 +000043 void printAVXCC(const MCInst *MI, unsigned Op, raw_ostream &OS);
Chad Rosier38e05a92012-09-10 22:50:57 +000044 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000045
Chris Lattner76c564b2010-04-04 04:47:45 +000046 void printopaquemem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
47 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000048 }
49
Chris Lattner76c564b2010-04-04 04:47:45 +000050 void printi8mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
51 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000052 }
Chris Lattner76c564b2010-04-04 04:47:45 +000053 void printi16mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
54 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000055 }
Chris Lattner76c564b2010-04-04 04:47:45 +000056 void printi32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
57 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000058 }
Chris Lattner76c564b2010-04-04 04:47:45 +000059 void printi64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
60 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000061 }
Chris Lattner76c564b2010-04-04 04:47:45 +000062 void printi128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
63 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000064 }
Bruno Cardoso Lopes9de0ca72010-07-19 23:32:44 +000065 void printi256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
66 printMemReference(MI, OpNo, O);
67 }
Chris Lattner76c564b2010-04-04 04:47:45 +000068 void printf32mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
69 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000070 }
Chris Lattner76c564b2010-04-04 04:47:45 +000071 void printf64mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
72 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000073 }
Chris Lattner76c564b2010-04-04 04:47:45 +000074 void printf80mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
75 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000076 }
Chris Lattner76c564b2010-04-04 04:47:45 +000077 void printf128mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
78 printMemReference(MI, OpNo, O);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000079 }
Bruno Cardoso Lopes792e9062010-07-09 18:27:43 +000080 void printf256mem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
81 printMemReference(MI, OpNo, O);
82 }
Chris Lattner1cbd3de2009-09-13 19:30:11 +000083};
84
85}
86
87#endif