1 //===-- MipsAsmPrinter.h - Mips LLVM Assembly Printer ----------*- C++ -*--===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Mips Assembly printer class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef MIPSASMPRINTER_H 15 #define MIPSASMPRINTER_H 16 17 #include "MipsMachineFunction.h" 18 #include "MipsMCInstLower.h" 19 #include "MipsSubtarget.h" 20 #include "llvm/CodeGen/AsmPrinter.h" 21 #include "llvm/Support/Compiler.h" 22 #include "llvm/Target/TargetMachine.h" 23 24 namespace llvm { 25 class MCStreamer; 26 class MachineInstr; 27 class MachineBasicBlock; 28 class Module; 29 class raw_ostream; 30 31 class LLVM_LIBRARY_VISIBILITY MipsAsmPrinter : public AsmPrinter { 32 33 void EmitInstrWithMacroNoAT(const MachineInstr *MI); 34 35 public: 36 37 const MipsSubtarget *Subtarget; 38 const MipsFunctionInfo *MipsFI; 39 MipsMCInstLower MCInstLowering; 40 41 explicit MipsAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) 42 : AsmPrinter(TM, Streamer), MCInstLowering(*this) { 43 Subtarget = &TM.getSubtarget<MipsSubtarget>(); 44 } 45 46 virtual const char *getPassName() const { 47 return "Mips Assembly Printer"; 48 } 49 50 virtual bool runOnMachineFunction(MachineFunction &MF); 51 52 void EmitInstruction(const MachineInstr *MI); 53 void printSavedRegsBitmask(raw_ostream &O); 54 void printHex32(unsigned int Value, raw_ostream &O); 55 void emitFrameDirective(); 56 const char *getCurrentABIString() const; 57 virtual void EmitFunctionEntryLabel(); 58 virtual void EmitFunctionBodyStart(); 59 virtual void EmitFunctionBodyEnd(); 60 virtual bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock* 61 MBB) const; 62 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, 63 unsigned AsmVariant, const char *ExtraCode, 64 raw_ostream &O); 65 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, 66 unsigned AsmVariant, const char *ExtraCode, 67 raw_ostream &O); 68 void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 69 void printUnsignedImm(const MachineInstr *MI, int opNum, raw_ostream &O); 70 void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O); 71 void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O); 72 void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O, 73 const char *Modifier = 0); 74 void EmitStartOfAsmFile(Module &M); 75 virtual MachineLocation getDebugValueLocation(const MachineInstr *MI) const; 76 void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS); 77 }; 78 } 79 80 #endif 81 82