MipsAsmPrinter.h revision 234353
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 35234353Sdimpublic: 36234353Sdim 37224133Sdim const MipsSubtarget *Subtarget; 38234353Sdim const MipsFunctionInfo *MipsFI; 39234353Sdim MipsMCInstLower MCInstLowering; 40234353Sdim 41224133Sdim explicit MipsAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) 42234353Sdim : AsmPrinter(TM, Streamer), MCInstLowering(*this) { 43224133Sdim Subtarget = &TM.getSubtarget<MipsSubtarget>(); 44224133Sdim } 45224133Sdim 46224133Sdim virtual const char *getPassName() const { 47224133Sdim return "Mips Assembly Printer"; 48224133Sdim } 49224133Sdim 50234353Sdim virtual bool runOnMachineFunction(MachineFunction &MF); 51234353Sdim 52224133Sdim void EmitInstruction(const MachineInstr *MI); 53224133Sdim void printSavedRegsBitmask(raw_ostream &O); 54224133Sdim void printHex32(unsigned int Value, raw_ostream &O); 55224133Sdim void emitFrameDirective(); 56224133Sdim const char *getCurrentABIString() const; 57224133Sdim virtual void EmitFunctionEntryLabel(); 58224133Sdim virtual void EmitFunctionBodyStart(); 59224133Sdim virtual void EmitFunctionBodyEnd(); 60224133Sdim virtual bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock* 61224133Sdim MBB) const; 62224133Sdim bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 63224133Sdim unsigned AsmVariant, const char *ExtraCode, 64224133Sdim raw_ostream &O); 65224133Sdim bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, 66224133Sdim unsigned AsmVariant, const char *ExtraCode, 67224133Sdim raw_ostream &O); 68224133Sdim void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 69224133Sdim void printUnsignedImm(const MachineInstr *MI, int opNum, raw_ostream &O); 70224133Sdim void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 71224133Sdim void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O); 72224133Sdim void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O, 73224133Sdim const char *Modifier = 0); 74224133Sdim void EmitStartOfAsmFile(Module &M); 75224133Sdim virtual MachineLocation getDebugValueLocation(const MachineInstr *MI) const; 76224133Sdim void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS); 77224133Sdim}; 78224133Sdim} 79224133Sdim 80224133Sdim#endif 81224133Sdim 82