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