MipsAsmPrinter.h revision 243830
1234353Sdim//===-- MipsAsmPrinter.h - Mips LLVM Assembly Printer ----------*- C++ -*--===// 2224133Sdim// 3224133Sdim// The LLVM Compiler Infrastructure 4224133Sdim// 5224133Sdim// This file is distributed under the University of Illinois Open Source 6224133Sdim// License. See LICENSE.TXT for details. 7224133Sdim// 8224133Sdim//===----------------------------------------------------------------------===// 9224133Sdim// 10224133Sdim// Mips Assembly printer class. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim#ifndef MIPSASMPRINTER_H 15224133Sdim#define MIPSASMPRINTER_H 16224133Sdim 17234353Sdim#include "MipsMachineFunction.h" 18234353Sdim#include "MipsMCInstLower.h" 19224133Sdim#include "MipsSubtarget.h" 20224133Sdim#include "llvm/CodeGen/AsmPrinter.h" 21224133Sdim#include "llvm/Support/Compiler.h" 22224133Sdim#include "llvm/Target/TargetMachine.h" 23224133Sdim 24224133Sdimnamespace llvm { 25224133Sdimclass MCStreamer; 26224133Sdimclass MachineInstr; 27224133Sdimclass MachineBasicBlock; 28224133Sdimclass Module; 29234353Sdimclass raw_ostream; 30224133Sdim 31224133Sdimclass LLVM_LIBRARY_VISIBILITY MipsAsmPrinter : public AsmPrinter { 32234353Sdim 33234353Sdim void EmitInstrWithMacroNoAT(const MachineInstr *MI); 34234353Sdim 35243830Sdimprivate: 36243830Sdim // tblgen'erated function. 37243830Sdim bool emitPseudoExpansionLowering(MCStreamer &OutStreamer, 38243830Sdim const MachineInstr *MI); 39243830Sdim 40243830Sdim // lowerOperand - Convert a MachineOperand into the equivalent MCOperand. 41243830Sdim bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp); 42243830Sdim 43234353Sdimpublic: 44234353Sdim 45224133Sdim const MipsSubtarget *Subtarget; 46234353Sdim const MipsFunctionInfo *MipsFI; 47234353Sdim MipsMCInstLower MCInstLowering; 48234353Sdim 49224133Sdim explicit MipsAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) 50234353Sdim : AsmPrinter(TM, Streamer), MCInstLowering(*this) { 51224133Sdim Subtarget = &TM.getSubtarget<MipsSubtarget>(); 52224133Sdim } 53224133Sdim 54224133Sdim virtual const char *getPassName() const { 55224133Sdim return "Mips Assembly Printer"; 56224133Sdim } 57224133Sdim 58234353Sdim virtual bool runOnMachineFunction(MachineFunction &MF); 59234353Sdim 60224133Sdim void EmitInstruction(const MachineInstr *MI); 61224133Sdim void printSavedRegsBitmask(raw_ostream &O); 62224133Sdim void printHex32(unsigned int Value, raw_ostream &O); 63224133Sdim void emitFrameDirective(); 64224133Sdim const char *getCurrentABIString() const; 65224133Sdim virtual void EmitFunctionEntryLabel(); 66224133Sdim virtual void EmitFunctionBodyStart(); 67224133Sdim virtual void EmitFunctionBodyEnd(); 68224133Sdim virtual bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock* 69224133Sdim MBB) const; 70224133Sdim bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 71224133Sdim unsigned AsmVariant, const char *ExtraCode, 72224133Sdim raw_ostream &O); 73224133Sdim bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, 74224133Sdim unsigned AsmVariant, const char *ExtraCode, 75224133Sdim raw_ostream &O); 76224133Sdim void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 77224133Sdim void printUnsignedImm(const MachineInstr *MI, int opNum, raw_ostream &O); 78224133Sdim void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 79224133Sdim void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O); 80224133Sdim void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O, 81224133Sdim const char *Modifier = 0); 82224133Sdim void EmitStartOfAsmFile(Module &M); 83224133Sdim virtual MachineLocation getDebugValueLocation(const MachineInstr *MI) const; 84224133Sdim void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS); 85224133Sdim}; 86224133Sdim} 87224133Sdim 88224133Sdim#endif 89224133Sdim 90