[InstCombine] Signed saturation patterns
[llvm-core.git] / lib / Target / Mips / MCTargetDesc / MipsInstPrinter.h
bloba34a5c1d6418749ba6c25684fd1b73e19b8e57de
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.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H
14 #define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H
15 #include "llvm/MC/MCInstPrinter.h"
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
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,
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
72 const char *MipsFCCToString(Mips::CondCode CC);
73 } // end namespace Mips
75 class MipsInstPrinter : public MCInstPrinter {
76 public:
77 MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
78 const MCRegisterInfo &MRI)
79 : MCInstPrinter(MAI, MII, MRI) {}
81 // Autogenerated by tblgen.
82 void printInstruction(const MCInst *MI, raw_ostream &O);
83 static const char *getRegisterName(unsigned RegNo);
85 void printRegName(raw_ostream &OS, unsigned RegNo) const override;
86 void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
87 const MCSubtargetInfo &STI) override;
89 bool printAliasInstr(const MCInst *MI, raw_ostream &OS);
90 void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx,
91 unsigned PrintMethodIdx, raw_ostream &O);
93 private:
94 void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
95 template <unsigned Bits, unsigned Offset = 0>
96 void printUImm(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 void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O);
102 bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo,
103 raw_ostream &OS);
104 bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0,
105 unsigned OpNo1, raw_ostream &OS);
106 bool printAlias(const MCInst &MI, raw_ostream &OS);
107 void printSaveRestore(const MCInst *MI, raw_ostream &O);
108 void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O);
110 } // end namespace llvm
112 #endif