MipsInstPrinter.h revision 224133
1224133Sdim//===-- MipsInstPrinter.h - Convert Mips MCInst to assembly syntax ----------===//
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// This class prints a Mips MCInst to a .s file.
11224133Sdim//
12224133Sdim//===----------------------------------------------------------------------===//
13224133Sdim
14224133Sdim#ifndef MIPSINSTPRINTER_H
15224133Sdim#define MIPSINSTPRINTER_H
16224133Sdim#include "llvm/MC/MCInstPrinter.h"
17224133Sdim
18224133Sdimnamespace llvm {
19224133Sdim// These enumeration declarations were orignally in MipsInstrInfo.h but
20224133Sdim// had to be moved here to avoid circular dependencies between
21224133Sdim// LLVMMipsCodeGen and LLVMMipsAsmPrinter.
22224133Sdimnamespace Mips {
23224133Sdim// Mips Branch Codes
24224133Sdimenum FPBranchCode {
25224133Sdim  BRANCH_F,
26224133Sdim  BRANCH_T,
27224133Sdim  BRANCH_FL,
28224133Sdim  BRANCH_TL,
29224133Sdim  BRANCH_INVALID
30224133Sdim};
31224133Sdim
32224133Sdim// Mips Condition Codes
33224133Sdimenum CondCode {
34224133Sdim  // To be used with float branch True
35224133Sdim  FCOND_F,
36224133Sdim  FCOND_UN,
37224133Sdim  FCOND_OEQ,
38224133Sdim  FCOND_UEQ,
39224133Sdim  FCOND_OLT,
40224133Sdim  FCOND_ULT,
41224133Sdim  FCOND_OLE,
42224133Sdim  FCOND_ULE,
43224133Sdim  FCOND_SF,
44224133Sdim  FCOND_NGLE,
45224133Sdim  FCOND_SEQ,
46224133Sdim  FCOND_NGL,
47224133Sdim  FCOND_LT,
48224133Sdim  FCOND_NGE,
49224133Sdim  FCOND_LE,
50224133Sdim  FCOND_NGT,
51224133Sdim
52224133Sdim  // To be used with float branch False
53224133Sdim  // This conditions have the same mnemonic as the
54224133Sdim  // above ones, but are used with a branch False;
55224133Sdim  FCOND_T,
56224133Sdim  FCOND_OR,
57224133Sdim  FCOND_UNE,
58224133Sdim  FCOND_ONE,
59224133Sdim  FCOND_UGE,
60224133Sdim  FCOND_OGE,
61224133Sdim  FCOND_UGT,
62224133Sdim  FCOND_OGT,
63224133Sdim  FCOND_ST,
64224133Sdim  FCOND_GLE,
65224133Sdim  FCOND_SNE,
66224133Sdim  FCOND_GL,
67224133Sdim  FCOND_NLT,
68224133Sdim  FCOND_GE,
69224133Sdim  FCOND_NLE,
70224133Sdim  FCOND_GT
71224133Sdim};
72224133Sdim
73224133Sdimconst char *MipsFCCToString(Mips::CondCode CC);
74224133Sdim} // end namespace Mips
75224133Sdim
76224133Sdimclass TargetMachine;
77224133Sdim
78224133Sdimclass MipsInstPrinter : public MCInstPrinter {
79224133Sdimpublic:
80224133Sdim  MipsInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {}
81224133Sdim
82224133Sdim  // Autogenerated by tblgen.
83224133Sdim  void printInstruction(const MCInst *MI, raw_ostream &O);
84224133Sdim  static const char *getInstructionName(unsigned Opcode);
85224133Sdim  static const char *getRegisterName(unsigned RegNo);
86224133Sdim
87224133Sdim  virtual StringRef getOpcodeName(unsigned Opcode) const;
88224133Sdim  virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
89224133Sdim  virtual void printInst(const MCInst *MI, raw_ostream &O);
90224133Sdim
91224133Sdimprivate:
92224133Sdim  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
93224133Sdim  void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O);
94224133Sdim  void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O);
95224133Sdim  void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O);
96224133Sdim  void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O);
97224133Sdim};
98224133Sdim} // end namespace llvm
99224133Sdim
100224133Sdim#endif
101