Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/Mips/MCTargetDesc/MipsInstPrinter.h
35294 views
1
//=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- C++ -*-==//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This class prints a Mips MCInst to a .s file.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H
14
#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H
15
#include "llvm/MC/MCInstPrinter.h"
16
17
namespace llvm {
18
// These enumeration declarations were originally in MipsInstrInfo.h but
19
// had to be moved here to avoid circular dependencies between
20
// LLVMMipsCodeGen and LLVMMipsAsmPrinter.
21
namespace Mips {
22
// Mips Branch Codes
23
enum FPBranchCode {
24
BRANCH_F,
25
BRANCH_T,
26
BRANCH_FL,
27
BRANCH_TL,
28
BRANCH_INVALID
29
};
30
31
// Mips Condition Codes
32
enum CondCode {
33
// To be used with float branch True
34
FCOND_F,
35
FCOND_UN,
36
FCOND_OEQ,
37
FCOND_UEQ,
38
FCOND_OLT,
39
FCOND_ULT,
40
FCOND_OLE,
41
FCOND_ULE,
42
FCOND_SF,
43
FCOND_NGLE,
44
FCOND_SEQ,
45
FCOND_NGL,
46
FCOND_LT,
47
FCOND_NGE,
48
FCOND_LE,
49
FCOND_NGT,
50
51
// To be used with float branch False
52
// This conditions have the same mnemonic as the
53
// above ones, but are used with a branch False;
54
FCOND_T,
55
FCOND_OR,
56
FCOND_UNE,
57
FCOND_ONE,
58
FCOND_UGE,
59
FCOND_OGE,
60
FCOND_UGT,
61
FCOND_OGT,
62
FCOND_ST,
63
FCOND_GLE,
64
FCOND_SNE,
65
FCOND_GL,
66
FCOND_NLT,
67
FCOND_GE,
68
FCOND_NLE,
69
FCOND_GT
70
};
71
72
const char *MipsFCCToString(Mips::CondCode CC);
73
} // end namespace Mips
74
75
class MipsInstPrinter : public MCInstPrinter {
76
public:
77
MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
78
const MCRegisterInfo &MRI)
79
: MCInstPrinter(MAI, MII, MRI) {}
80
81
// Autogenerated by tblgen.
82
std::pair<const char *, uint64_t> getMnemonic(const MCInst *MI) override;
83
void printInstruction(const MCInst *MI, uint64_t Address,
84
const MCSubtargetInfo &STI, raw_ostream &O);
85
static const char *getRegisterName(MCRegister Reg);
86
87
void printRegName(raw_ostream &OS, MCRegister Reg) const override;
88
void printInst(const MCInst *MI, uint64_t Address, StringRef Annot,
89
const MCSubtargetInfo &STI, raw_ostream &O) override;
90
91
bool printAliasInstr(const MCInst *MI, uint64_t Address,
92
const MCSubtargetInfo &STI, raw_ostream &OS);
93
void printCustomAliasOperand(const MCInst *MI, uint64_t Address,
94
unsigned OpIdx, unsigned PrintMethodIdx,
95
const MCSubtargetInfo &STI, raw_ostream &O);
96
97
private:
98
void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
99
raw_ostream &O);
100
void printJumpOperand(const MCInst *MI, unsigned OpNo,
101
const MCSubtargetInfo &STI, raw_ostream &O);
102
void printBranchOperand(const MCInst *MI, uint64_t Address, unsigned OpNo,
103
const MCSubtargetInfo &STI, raw_ostream &O);
104
template <unsigned Bits, unsigned Offset = 0>
105
void printUImm(const MCInst *MI, int opNum, const MCSubtargetInfo &STI,
106
raw_ostream &O);
107
void printMemOperand(const MCInst *MI, int opNum, const MCSubtargetInfo &STI,
108
raw_ostream &O);
109
void printMemOperandEA(const MCInst *MI, int opNum,
110
const MCSubtargetInfo &STI, raw_ostream &O);
111
void printFCCOperand(const MCInst *MI, int opNum, const MCSubtargetInfo &STI,
112
raw_ostream &O);
113
void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O);
114
115
bool printAlias(const char *Str, const MCInst &MI, uint64_t Address,
116
unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &OS,
117
bool IsBranch = false);
118
bool printAlias(const char *Str, const MCInst &MI, uint64_t Address,
119
unsigned OpNo0, unsigned OpNo1, const MCSubtargetInfo &STI,
120
raw_ostream &OS, bool IsBranch = false);
121
bool printAlias(const MCInst &MI, uint64_t Address,
122
const MCSubtargetInfo &STI, raw_ostream &OS);
123
void printSaveRestore(const MCInst *MI, const MCSubtargetInfo &STI,
124
raw_ostream &O);
125
void printRegisterList(const MCInst *MI, int opNum,
126
const MCSubtargetInfo &STI, raw_ostream &O);
127
};
128
} // end namespace llvm
129
130
#endif
131
132