blob: f24674f68e3ad35f99e58a3f5f0f628811704014 [file] [log] [blame]
Chris Lattner1cbd3de2009-09-13 19:30:11 +00001//===-- X86ATTInstPrinter.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 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;
Bill Wendlingbc3f7902011-04-07 21:20:06 +000022class X86Subtarget;
Bill Wendling00f0cdd2011-03-21 04:13:46 +000023class TargetMachine;
Chris Lattner6d31b432009-09-14 01:49:26 +000024
25class X86ATTInstPrinter : public MCInstPrinter {
26public:
Bill Wendlingbc3f7902011-04-07 21:20:06 +000027 X86ATTInstPrinter(TargetMachine &TM, const MCAsmInfo &MAI);
Chris Lattner6d31b432009-09-14 01:49:26 +000028
Chris Lattner70129162010-04-04 05:04:31 +000029 virtual void printInst(const MCInst *MI, raw_ostream &OS);
Chris Lattnerb1913c42010-02-11 22:57:32 +000030 virtual StringRef getOpcodeName(unsigned Opcode) const;
31
Bill Wendlingbc3f7902011-04-07 21:20:06 +000032 // Methods used to print the alias of an instruction.
33 unsigned ComputeAvailableFeatures(const X86Subtarget *Subtarget) const;
34 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 Lattnerb1913c42010-02-11 22:57:32 +000039 static const char *getInstructionName(unsigned Opcode);
Chris Lattner1cbd3de2009-09-13 19:30:11 +000040
Chris Lattner76c564b2010-04-04 04:47:45 +000041 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
42 void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &OS);
Chris Lattner76c564b2010-04-04 04:47:45 +000043 void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &OS);
44 void print_pcrel_imm(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