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