Home | History | Annotate | Download | only in Mips
      1 //===-- MipsAsmPrinter.h - Mips LLVM assembly writer ----------------------===//
      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 "MipsSubtarget.h"
     18 #include "llvm/CodeGen/AsmPrinter.h"
     19 #include "llvm/Support/Compiler.h"
     20 #include "llvm/Target/TargetMachine.h"
     21 
     22 namespace llvm {
     23 class MCStreamer;
     24 class MachineInstr;
     25 class raw_ostream;
     26 class MachineBasicBlock;
     27 class Module;
     28 
     29 class LLVM_LIBRARY_VISIBILITY MipsAsmPrinter : public AsmPrinter {
     30   const MipsSubtarget *Subtarget;
     31 
     32 public:
     33   explicit MipsAsmPrinter(TargetMachine &TM,  MCStreamer &Streamer)
     34     : AsmPrinter(TM, Streamer) {
     35     Subtarget = &TM.getSubtarget<MipsSubtarget>();
     36   }
     37 
     38   virtual const char *getPassName() const {
     39     return "Mips Assembly Printer";
     40   }
     41 
     42   void EmitInstruction(const MachineInstr *MI);
     43   void printSavedRegsBitmask(raw_ostream &O);
     44   void printHex32(unsigned int Value, raw_ostream &O);
     45   void emitFrameDirective();
     46   const char *getCurrentABIString() const;
     47   virtual void EmitFunctionEntryLabel();
     48   virtual void EmitFunctionBodyStart();
     49   virtual void EmitFunctionBodyEnd();
     50   virtual bool isBlockOnlyReachableByFallthrough(const MachineBasicBlock*
     51                                                  MBB) const;
     52   bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
     53                        unsigned AsmVariant, const char *ExtraCode,
     54                        raw_ostream &O);
     55   bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum,
     56                              unsigned AsmVariant, const char *ExtraCode,
     57                              raw_ostream &O);
     58   void printOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
     59   void printUnsignedImm(const MachineInstr *MI, int opNum, raw_ostream &O);
     60   void printMemOperand(const MachineInstr *MI, int opNum, raw_ostream &O);
     61   void printMemOperandEA(const MachineInstr *MI, int opNum, raw_ostream &O);
     62   void printFCCOperand(const MachineInstr *MI, int opNum, raw_ostream &O,
     63                        const char *Modifier = 0);
     64   void EmitStartOfAsmFile(Module &M);
     65   virtual MachineLocation getDebugValueLocation(const MachineInstr *MI) const;
     66   void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS);
     67 };
     68 }
     69 
     70 #endif
     71 
     72