MipsInstPrinter.h revision 37ef65b9c1b93c386d13089d9ace6a1cc00e82dc
1//=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- 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// This class prints a Mips MCInst to a .s file.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MIPSINSTPRINTER_H
15#define MIPSINSTPRINTER_H
16#include "llvm/MC/MCInstPrinter.h"
17
18namespace llvm {
19// These enumeration declarations were originally in MipsInstrInfo.h but
20// had to be moved here to avoid circular dependencies between
21// LLVMMipsCodeGen and LLVMMipsAsmPrinter.
22namespace Mips {
23// Mips Branch Codes
24enum FPBranchCode {
25  BRANCH_F,
26  BRANCH_T,
27  BRANCH_FL,
28  BRANCH_TL,
29  BRANCH_INVALID
30};
31
32// Mips Condition Codes
33enum CondCode {
34  // To be used with float branch True
35  FCOND_F,
36  FCOND_UN,
37  FCOND_OEQ,
38  FCOND_UEQ,
39  FCOND_OLT,
40  FCOND_ULT,
41  FCOND_OLE,
42  FCOND_ULE,
43  FCOND_SF,
44  FCOND_NGLE,
45  FCOND_SEQ,
46  FCOND_NGL,
47  FCOND_LT,
48  FCOND_NGE,
49  FCOND_LE,
50  FCOND_NGT,
51
52  // To be used with float branch False
53  // This conditions have the same mnemonic as the
54  // above ones, but are used with a branch False;
55  FCOND_T,
56  FCOND_OR,
57  FCOND_UNE,
58  FCOND_ONE,
59  FCOND_UGE,
60  FCOND_OGE,
61  FCOND_UGT,
62  FCOND_OGT,
63  FCOND_ST,
64  FCOND_GLE,
65  FCOND_SNE,
66  FCOND_GL,
67  FCOND_NLT,
68  FCOND_GE,
69  FCOND_NLE,
70  FCOND_GT
71};
72
73const char *MipsFCCToString(Mips::CondCode CC);
74} // end namespace Mips
75
76class TargetMachine;
77
78class MipsInstPrinter : public MCInstPrinter {
79public:
80  MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
81                  const MCRegisterInfo &MRI)
82    : MCInstPrinter(MAI, MII, MRI) {}
83
84  // Autogenerated by tblgen.
85  void printInstruction(const MCInst *MI, raw_ostream &O);
86  static const char *getRegisterName(unsigned RegNo);
87
88  virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
89  virtual void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot);
90  void printCPURegs(const MCInst *MI, unsigned OpNo, raw_ostream &O);
91
92  bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
93
94private:
95  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
96  void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O);
97  void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O);
98  void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O);
99  void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O);
100};
101} // end namespace llvm
102
103#endif
104