blob: c594e462551cc2b91f883e567cbf8169786d9ef5 [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 {
Jeff Cohenc884db42006-05-02 01:16:28 +000024 X86IntelAsmPrinter(std::ostream &O, X86TargetMachine &TM);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000025
26 virtual const char *getPassName() const {
27 return "X86 Intel-Style Assembly Printer";
28 }
29
30 /// printInstruction - This method is automatically generated by tablegen
31 /// from the instruction set description. This method returns true if the
32 /// machine instruction was sufficiently described to print it, otherwise it
33 /// returns false.
34 bool printInstruction(const MachineInstr *MI);
35
36 // This method is used by the tablegen'erated instruction printer.
Chris Lattnera3b8c572006-02-06 23:41:19 +000037 void printOperand(const MachineInstr *MI, unsigned OpNo,
38 const char *Modifier = 0) {
Chris Lattnerb36cbd02005-07-01 22:44:09 +000039 const MachineOperand &MO = MI->getOperand(OpNo);
Chris Lattner2d90ac72006-05-04 18:05:43 +000040 if (MO.isRegister()) {
Chris Lattnerea50fab2006-05-04 01:15:02 +000041 assert(MRegisterInfo::isPhysicalRegister(MO.getReg()) && "Not physreg??");
Chris Lattner99f26322006-05-01 05:53:50 +000042 O << TM.getRegisterInfo()->get(MO.getReg()).Name;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000043 } else {
Chris Lattnera3b8c572006-02-06 23:41:19 +000044 printOp(MO, Modifier);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000045 }
46 }
47
Nate Begeman391c5d22005-11-30 18:54:35 +000048 void printi8mem(const MachineInstr *MI, unsigned OpNo) {
49 O << "BYTE PTR ";
50 printMemReference(MI, OpNo);
51 }
52 void printi16mem(const MachineInstr *MI, unsigned OpNo) {
53 O << "WORD PTR ";
54 printMemReference(MI, OpNo);
55 }
56 void printi32mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000057 O << "DWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000058 printMemReference(MI, OpNo);
59 }
60 void printi64mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000061 O << "QWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000062 printMemReference(MI, OpNo);
63 }
Evan Cheng470a6ad2006-02-22 02:26:30 +000064 void printi128mem(const MachineInstr *MI, unsigned OpNo) {
65 O << "XMMWORD PTR ";
66 printMemReference(MI, OpNo);
67 }
Nate Begeman391c5d22005-11-30 18:54:35 +000068 void printf32mem(const MachineInstr *MI, unsigned OpNo) {
69 O << "DWORD PTR ";
70 printMemReference(MI, OpNo);
71 }
72 void printf64mem(const MachineInstr *MI, unsigned OpNo) {
73 O << "QWORD PTR ";
74 printMemReference(MI, OpNo);
75 }
Evan Cheng223547a2006-01-31 22:28:30 +000076 void printf128mem(const MachineInstr *MI, unsigned OpNo) {
77 O << "XMMWORD PTR ";
Chris Lattnerb36cbd02005-07-01 22:44:09 +000078 printMemReference(MI, OpNo);
79 }
80
Evan Cheng55c25f22006-04-28 23:19:39 +000081 bool printAsmMRegister(const MachineOperand &MO, const char Mode);
Evan Cheng3d48a902006-04-28 21:19:05 +000082 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
83 unsigned AsmVariant, const char *ExtraCode);
84 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
85 unsigned AsmVariant, const char *ExtraCode);
Jeff Cohenc884db42006-05-02 01:16:28 +000086 void printMachineInstruction(const MachineInstr *MI);
Chris Lattnera3b8c572006-02-06 23:41:19 +000087 void printOp(const MachineOperand &MO, const char *Modifier = 0);
Nate Begeman391c5d22005-11-30 18:54:35 +000088 void printSSECC(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000089 void printMemReference(const MachineInstr *MI, unsigned Op);
Evan Cheng7ccced62006-02-18 00:15:05 +000090 void printPICLabel(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000091 bool runOnMachineFunction(MachineFunction &F);
92 bool doInitialization(Module &M);
Jeff Cohen4f1ea1e2006-05-02 03:11:50 +000093 bool doFinalization(Module &M);
Jeff Cohenc884db42006-05-02 01:16:28 +000094
Jeff Cohenc884db42006-05-02 01:16:28 +000095 virtual void EmitString(const ConstantArray *CVA) const;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000096};
97
Chris Lattnerb36cbd02005-07-01 22:44:09 +000098} // end namespace llvm
99
100#endif