1351278Sdim//=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- C++ -*-==// 2351278Sdim// 3351278Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4351278Sdim// See https://llvm.org/LICENSE.txt for license information. 5351278Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6351278Sdim// 7351278Sdim//===----------------------------------------------------------------------===// 8351278Sdim// 9351278Sdim// This class prints a Mips MCInst to a .s file. 10351278Sdim// 11351278Sdim//===----------------------------------------------------------------------===// 12351278Sdim 13351278Sdim#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H 14351278Sdim#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSINSTPRINTER_H 15351278Sdim#include "llvm/MC/MCInstPrinter.h" 16351278Sdim 17351278Sdimnamespace llvm { 18351278Sdim// These enumeration declarations were originally in MipsInstrInfo.h but 19351278Sdim// had to be moved here to avoid circular dependencies between 20351278Sdim// LLVMMipsCodeGen and LLVMMipsAsmPrinter. 21351278Sdimnamespace Mips { 22351278Sdim// Mips Branch Codes 23351278Sdimenum FPBranchCode { 24351278Sdim BRANCH_F, 25351278Sdim BRANCH_T, 26351278Sdim BRANCH_FL, 27351278Sdim BRANCH_TL, 28351278Sdim BRANCH_INVALID 29351278Sdim}; 30351278Sdim 31351278Sdim// Mips Condition Codes 32351278Sdimenum CondCode { 33351278Sdim // To be used with float branch True 34351278Sdim FCOND_F, 35351278Sdim FCOND_UN, 36351278Sdim FCOND_OEQ, 37351278Sdim FCOND_UEQ, 38351278Sdim FCOND_OLT, 39351278Sdim FCOND_ULT, 40351278Sdim FCOND_OLE, 41351278Sdim FCOND_ULE, 42351278Sdim FCOND_SF, 43351278Sdim FCOND_NGLE, 44351278Sdim FCOND_SEQ, 45351278Sdim FCOND_NGL, 46351278Sdim FCOND_LT, 47351278Sdim FCOND_NGE, 48351278Sdim FCOND_LE, 49351278Sdim FCOND_NGT, 50351278Sdim 51351278Sdim // To be used with float branch False 52351278Sdim // This conditions have the same mnemonic as the 53351278Sdim // above ones, but are used with a branch False; 54351278Sdim FCOND_T, 55351278Sdim FCOND_OR, 56351278Sdim FCOND_UNE, 57351278Sdim FCOND_ONE, 58351278Sdim FCOND_UGE, 59351278Sdim FCOND_OGE, 60351278Sdim FCOND_UGT, 61351278Sdim FCOND_OGT, 62351278Sdim FCOND_ST, 63351278Sdim FCOND_GLE, 64351278Sdim FCOND_SNE, 65351278Sdim FCOND_GL, 66351278Sdim FCOND_NLT, 67351278Sdim FCOND_GE, 68351278Sdim FCOND_NLE, 69351278Sdim FCOND_GT 70351278Sdim}; 71351278Sdim 72351278Sdimconst char *MipsFCCToString(Mips::CondCode CC); 73351278Sdim} // end namespace Mips 74351278Sdim 75351278Sdimclass MipsInstPrinter : public MCInstPrinter { 76351278Sdimpublic: 77351278Sdim MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 78351278Sdim const MCRegisterInfo &MRI) 79351278Sdim : MCInstPrinter(MAI, MII, MRI) {} 80351278Sdim 81351278Sdim // Autogenerated by tblgen. 82360784Sdim void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O); 83351278Sdim static const char *getRegisterName(unsigned RegNo); 84351278Sdim 85351278Sdim void printRegName(raw_ostream &OS, unsigned RegNo) const override; 86360784Sdim void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, 87360784Sdim const MCSubtargetInfo &STI, raw_ostream &O) override; 88351278Sdim 89351278Sdim bool printAliasInstr(const MCInst *MI, raw_ostream &OS); 90351278Sdim void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx, 91351278Sdim unsigned PrintMethodIdx, raw_ostream &O); 92351278Sdim 93351278Sdimprivate: 94351278Sdim void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 95351278Sdim template <unsigned Bits, unsigned Offset = 0> 96351278Sdim void printUImm(const MCInst *MI, int opNum, raw_ostream &O); 97351278Sdim void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 98351278Sdim void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 99351278Sdim void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 100351278Sdim void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); 101351278Sdim 102351278Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, 103351278Sdim raw_ostream &OS); 104351278Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, 105351278Sdim unsigned OpNo1, raw_ostream &OS); 106351278Sdim bool printAlias(const MCInst &MI, raw_ostream &OS); 107351278Sdim void printSaveRestore(const MCInst *MI, raw_ostream &O); 108351278Sdim void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O); 109351278Sdim}; 110351278Sdim} // end namespace llvm 111351278Sdim 112351278Sdim#endif 113