blob: 8e0e8ba9858321f6911ae27ac16d87dcd2a1c940 [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 {
Jim Laskey563321a2006-09-06 18:34:40 +000024 X86IntelAsmPrinter(std::ostream &O, X86TargetMachine &TM, TargetAsmInfo *T)
25 : X86SharedAsmPrinter(O, TM, T) {
26 }
Chris Lattnerb36cbd02005-07-01 22:44:09 +000027
28 virtual const char *getPassName() const {
29 return "X86 Intel-Style Assembly Printer";
30 }
31
32 /// printInstruction - This method is automatically generated by tablegen
33 /// from the instruction set description. This method returns true if the
34 /// machine instruction was sufficiently described to print it, otherwise it
35 /// returns false.
36 bool printInstruction(const MachineInstr *MI);
37
38 // This method is used by the tablegen'erated instruction printer.
Chris Lattnera3b8c572006-02-06 23:41:19 +000039 void printOperand(const MachineInstr *MI, unsigned OpNo,
40 const char *Modifier = 0) {
Chris Lattnerb36cbd02005-07-01 22:44:09 +000041 const MachineOperand &MO = MI->getOperand(OpNo);
Chris Lattner2d90ac72006-05-04 18:05:43 +000042 if (MO.isRegister()) {
Chris Lattnerea50fab2006-05-04 01:15:02 +000043 assert(MRegisterInfo::isPhysicalRegister(MO.getReg()) && "Not physreg??");
Chris Lattner99f26322006-05-01 05:53:50 +000044 O << TM.getRegisterInfo()->get(MO.getReg()).Name;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000045 } else {
Chris Lattnera3b8c572006-02-06 23:41:19 +000046 printOp(MO, Modifier);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000047 }
48 }
49
Nate Begeman391c5d22005-11-30 18:54:35 +000050 void printi8mem(const MachineInstr *MI, unsigned OpNo) {
51 O << "BYTE PTR ";
52 printMemReference(MI, OpNo);
53 }
54 void printi16mem(const MachineInstr *MI, unsigned OpNo) {
55 O << "WORD PTR ";
56 printMemReference(MI, OpNo);
57 }
58 void printi32mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000059 O << "DWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000060 printMemReference(MI, OpNo);
61 }
62 void printi64mem(const MachineInstr *MI, unsigned OpNo) {
Nate Begeman85a168a2005-11-30 18:57:39 +000063 O << "QWORD PTR ";
Nate Begeman391c5d22005-11-30 18:54:35 +000064 printMemReference(MI, OpNo);
65 }
Evan Cheng470a6ad2006-02-22 02:26:30 +000066 void printi128mem(const MachineInstr *MI, unsigned OpNo) {
67 O << "XMMWORD PTR ";
68 printMemReference(MI, OpNo);
69 }
Nate Begeman391c5d22005-11-30 18:54:35 +000070 void printf32mem(const MachineInstr *MI, unsigned OpNo) {
71 O << "DWORD PTR ";
72 printMemReference(MI, OpNo);
73 }
74 void printf64mem(const MachineInstr *MI, unsigned OpNo) {
75 O << "QWORD PTR ";
76 printMemReference(MI, OpNo);
77 }
Evan Cheng223547a2006-01-31 22:28:30 +000078 void printf128mem(const MachineInstr *MI, unsigned OpNo) {
79 O << "XMMWORD PTR ";
Chris Lattnerb36cbd02005-07-01 22:44:09 +000080 printMemReference(MI, OpNo);
81 }
82
Evan Cheng55c25f22006-04-28 23:19:39 +000083 bool printAsmMRegister(const MachineOperand &MO, const char Mode);
Evan Cheng3d48a902006-04-28 21:19:05 +000084 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
85 unsigned AsmVariant, const char *ExtraCode);
86 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
87 unsigned AsmVariant, const char *ExtraCode);
Jeff Cohenc884db42006-05-02 01:16:28 +000088 void printMachineInstruction(const MachineInstr *MI);
Chris Lattnera3b8c572006-02-06 23:41:19 +000089 void printOp(const MachineOperand &MO, const char *Modifier = 0);
Nate Begeman391c5d22005-11-30 18:54:35 +000090 void printSSECC(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000091 void printMemReference(const MachineInstr *MI, unsigned Op);
Evan Cheng7ccced62006-02-18 00:15:05 +000092 void printPICLabel(const MachineInstr *MI, unsigned Op);
Chris Lattnerb36cbd02005-07-01 22:44:09 +000093 bool runOnMachineFunction(MachineFunction &F);
94 bool doInitialization(Module &M);
Jeff Cohen4f1ea1e2006-05-02 03:11:50 +000095 bool doFinalization(Module &M);
Jeff Cohenc884db42006-05-02 01:16:28 +000096
Jeff Cohenc884db42006-05-02 01:16:28 +000097 virtual void EmitString(const ConstantArray *CVA) const;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000098};
99
Chris Lattnerb36cbd02005-07-01 22:44:09 +0000100} // end namespace llvm
101
102#endif