MipsInstPrinter.h revision 288943
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 TargetMachine; 77224133Sdim 78224133Sdimclass MipsInstPrinter : public MCInstPrinter { 79224133Sdimpublic: 80234353Sdim MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 81234353Sdim const MCRegisterInfo &MRI) 82234353Sdim : MCInstPrinter(MAI, MII, MRI) {} 83234353Sdim 84224133Sdim // Autogenerated by tblgen. 85224133Sdim void printInstruction(const MCInst *MI, raw_ostream &O); 86224133Sdim static const char *getRegisterName(unsigned RegNo); 87234353Sdim 88276479Sdim void printRegName(raw_ostream &OS, unsigned RegNo) const override; 89288943Sdim void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot, 90288943Sdim const MCSubtargetInfo &STI) override; 91234353Sdim 92249423Sdim bool printAliasInstr(const MCInst *MI, raw_ostream &OS); 93276479Sdim void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx, 94276479Sdim unsigned PrintMethodIdx, raw_ostream &O); 95249423Sdim 96224133Sdimprivate: 97224133Sdim void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 98224133Sdim void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O); 99261991Sdim void printUnsignedImm8(const MCInst *MI, int opNum, raw_ostream &O); 100224133Sdim void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 101224133Sdim void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 102224133Sdim void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 103280031Sdim void printRegisterPair(const MCInst *MI, int opNum, raw_ostream &O); 104261991Sdim void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); 105261991Sdim 106261991Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, 107261991Sdim raw_ostream &OS); 108261991Sdim bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, 109261991Sdim unsigned OpNo1, raw_ostream &OS); 110261991Sdim bool printAlias(const MCInst &MI, raw_ostream &OS); 111276479Sdim void printSaveRestore(const MCInst *MI, raw_ostream &O); 112280031Sdim void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O); 113224133Sdim}; 114224133Sdim} // end namespace llvm 115224133Sdim 116224133Sdim#endif 117