Home | History | Annotate | Download | only in Mips
      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