1234353Sdim//=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- C++ -*-==// 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 14280031Sdim#ifndef LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H 15280031Sdim#define LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H 16224133Sdim#include "llvm/MC/MCInstPrinter.h" 17224133Sdim 18224133Sdimnamespace llvm { 19239462Sdim// These enumeration declarations were originally in MipsInstrInfo.h but 20224133Sdim// had to be moved here to avoid circular dependencies between 21234353Sdim// 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 MipsInstPrinter : public MCInstPrinter { 77224133Sdimpublic: 78234353Sdim MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 79234353Sdim const MCRegisterInfo &MRI) 80234353Sdim : MCInstPrinter(MAI, MII, MRI) {} 81234353Sdim 82224133Sdim // Autogenerated by tblgen. 83224133Sdim void printInstruction(const MCInst *MI, raw_ostream &O); 84224133Sdim static const char *getRegisterName(unsigned RegNo); 85234353Sdim 86276479Sdim void printRegName(raw_ostream &OS, unsigned RegNo) const override; 87288943Sdim void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot, 88288943Sdim const MCSubtargetInfo &STI) override; 89234353Sdim 90249423Sdim bool printAliasInstr(const MCInst *MI, raw_ostream &OS); 91276479Sdim void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx, 92276479Sdim unsigned PrintMethodIdx, raw_ostream &O); 93249423Sdim 94224133Sdimprivate: 95224133Sdim void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 96224133Sdim void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O); 97261991Sdim void printUnsignedImm8(const MCInst *MI, int opNum, raw_ostream &O); 98224133Sdim void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 99224133Sdim void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 100224133Sdim void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 101280031Sdim void printRegisterPair(const MCInst *MI, int opNum, raw_ostream &O); 102261991Sdim void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); 103261991Sdim 104261991Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, 105261991Sdim raw_ostream &OS); 106261991Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, 107261991Sdim unsigned OpNo1, raw_ostream &OS); 108261991Sdim bool printAlias(const MCInst &MI, raw_ostream &OS); 109276479Sdim void printSaveRestore(const MCInst *MI, raw_ostream &O); 110280031Sdim void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O); 111224133Sdim}; 112224133Sdim} // end namespace llvm 113224133Sdim 114224133Sdim#endif 115