blob: ffa3990ed1cec249d68bbd25087a9d31c03a24bd [file] [log] [blame]
Chris Lattnerb36cbd02005-07-01 22:44:09 +00001//===-- X86IntelAsmPrinter.h - Convert X86 LLVM code to Intel assembly ----===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Intel assembly code printer class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86INTELASMPRINTER_H
15#define X86INTELASMPRINTER_H
16
17#include "X86AsmPrinter.h"
18#include "llvm/CodeGen/ValueTypes.h"
Chris Lattnerb36cbd02005-07-01 22:44:09 +000019#include "llvm/Target/MRegisterInfo.h"
20
21namespace llvm {
Chris Lattnerb36cbd02005-07-01 22:44:09 +000022
23struct X86IntelAsmPrinter : public X86SharedAsmPrinter {
Evan Chengc4c62572006-03-13 23:20:37 +000024 X86IntelAsmPrinter(std::ostream &O, X86TargetMachine &TM)
Chris Lattnerb36cbd02005-07-01 22:44:09 +000025 : X86SharedAsmPrinter(O, TM) { }
26
27 virtual const char *getPassName() const {
28 return "X86 Intel-Style Assembly Printer";
29 }
30
31 /// printInstruction - This method is automatically generated by tablegen
32 /// from the instruction set description. This method returns true if the
33 /// machine instruction was sufficiently described to print it, otherwise it
34 /// returns false.
35 bool printInstruction(const MachineInstr *MI);
36
37 // This method is used by the tablegen'erated instruction printer.
Chris Lattnera3b8c572006-02-06 23:41:19 +000038 void printOperand(const MachineInstr *MI, unsigned OpNo,
39 const char *Modifier = 0) {
Chris Lattnerb36cbd02005-07-01 22:44:09 +000040 const MachineOperand &MO = MI->getOperand(OpNo);
41 if (MO.getType() == MachineOperand::MO_MachineRegister) {
42 assert(MRegisterInfo::isPhysicalRegister(MO.getReg())&&"Not physref??");
Chris Lattner99f26322006-05-01 05:53:50 +000043 O << TM.getRegisterInfo()->get(MO.getReg()).Name;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000044 } else {
Chris Lattnera3b8c572006-02-06 23:41:19 +000045 printOp(MO, Modifier);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000046 }
47 }
48
Nate Begeman391c5d22005-11-30 18:54:35 +000049 void printi8mem(const MachineInstr *MI, unsigned OpNo) {
50 O << "BYTE PTR ";
51 printMemReference(MI, OpNo);
52 }
53 void printi16mem(const MachineInstr *MI, unsigned OpNo) {
54 O << "WORD PTR ";
55 printMemReference(MI, OpNo);
56 }
57 void printi32mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000058 O << "DWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000059 printMemReference(MI, OpNo);
60 }
61 void printi64mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000062 O << "QWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000063 printMemReference(MI, OpNo);
64 }
Evan Cheng470a6ad2006-02-22 02:26:30 +000065 void printi128mem(const MachineInstr *MI, unsigned OpNo) {
66 O << "XMMWORD PTR ";
67 printMemReference(MI, OpNo);
68 }
Nate Begeman391c5d22005-11-30 18:54:35 +000069 void printf32mem(const MachineInstr *MI, unsigned OpNo) {
70 O << "DWORD PTR ";
71 printMemReference(MI, OpNo);
72 }
73 void printf64mem(const MachineInstr *MI, unsigned OpNo) {
74 O << "QWORD PTR ";
75 printMemReference(MI, OpNo);
76 }
Evan Cheng223547a2006-01-31 22:28:30 +000077 void printf128mem(const MachineInstr *MI, unsigned OpNo) {
78 O << "XMMWORD PTR ";
Chris Lattnerb36cbd02005-07-01 22:44:09 +000079 printMemReference(MI, OpNo);
80 }
81
Evan Cheng55c25f22006-04-28 23:19:39 +000082 bool printAsmMRegister(const MachineOperand &MO, const char Mode);
Evan Cheng3d48a902006-04-28 21:19:05 +000083 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
84 unsigned AsmVariant, const char *ExtraCode);
85 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
86 unsigned AsmVariant, const char *ExtraCode);
87 void printMachineInstruction(const MachineInstr *MI);
Chris Lattnera3b8c572006-02-06 23:41:19 +000088 void printOp(const MachineOperand &MO, const char *Modifier = 0);
Nate Begeman391c5d22005-11-30 18:54:35 +000089 void printSSECC(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000090 void printMemReference(const MachineInstr *MI, unsigned Op);
Evan Cheng7ccced62006-02-18 00:15:05 +000091 void printPICLabel(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000092 bool runOnMachineFunction(MachineFunction &F);
93 bool doInitialization(Module &M);
94};
95
Chris Lattnerb36cbd02005-07-01 22:44:09 +000096} // end namespace llvm
97
98#endif