~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to lib/Target/Mips/InstPrinter/MipsInstPrinter.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H
 
15
#define LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H
 
16
#include "llvm/MC/MCInstPrinter.h"
 
17
 
 
18
namespace 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.
 
22
namespace Mips {
 
23
// Mips Branch Codes
 
24
enum FPBranchCode {
 
25
  BRANCH_F,
 
26
  BRANCH_T,
 
27
  BRANCH_FL,
 
28
  BRANCH_TL,
 
29
  BRANCH_INVALID
 
30
};
 
31
 
 
32
// Mips Condition Codes
 
33
enum 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
 
 
73
const char *MipsFCCToString(Mips::CondCode CC);
 
74
} // end namespace Mips
 
75
 
 
76
class TargetMachine;
 
77
 
 
78
class MipsInstPrinter : public MCInstPrinter {
 
79
public:
 
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
  void printRegName(raw_ostream &OS, unsigned RegNo) const override;
 
89
  void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
 
90
                 const MCSubtargetInfo &STI) override;
 
91
 
 
92
  bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
 
93
  void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
 
94
                               unsigned PrintMethodIdx, raw_ostream &O);
 
95
 
 
96
private:
 
97
  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
 
98
  void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O);
 
99
  void printUnsignedImm8(const MCInst *MI, int opNum, raw_ostream &O);
 
100
  void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O);
 
101
  void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O);
 
102
  void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O);
 
103
  void printRegisterPair(const MCInst *MI, int opNum, raw_ostream &O);
 
104
  void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O);
 
105
 
 
106
  bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo,
 
107
                  raw_ostream &OS);
 
108
  bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0,
 
109
                  unsigned OpNo1, raw_ostream &OS);
 
110
  bool printAlias(const MCInst &MI, raw_ostream &OS);
 
111
  void printSaveRestore(const MCInst *MI, raw_ostream &O);
 
112
  void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O);
 
113
};
 
114
} // end namespace llvm
 
115
 
 
116
#endif