MipsInstPrinter.h revision 224133
1224133Sdim//===-- MipsInstPrinter.h - Convert Mips MCInst to assembly syntax ----------===// 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 14224133Sdim#ifndef MIPSINSTPRINTER_H 15224133Sdim#define MIPSINSTPRINTER_H 16224133Sdim#include "llvm/MC/MCInstPrinter.h" 17224133Sdim 18224133Sdimnamespace llvm { 19224133Sdim// These enumeration declarations were orignally in MipsInstrInfo.h but 20224133Sdim// had to be moved here to avoid circular dependencies between 21224133Sdim// 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: 80224133Sdim MipsInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {} 81224133Sdim 82224133Sdim // Autogenerated by tblgen. 83224133Sdim void printInstruction(const MCInst *MI, raw_ostream &O); 84224133Sdim static const char *getInstructionName(unsigned Opcode); 85224133Sdim static const char *getRegisterName(unsigned RegNo); 86224133Sdim 87224133Sdim virtual StringRef getOpcodeName(unsigned Opcode) const; 88224133Sdim virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; 89224133Sdim virtual void printInst(const MCInst *MI, raw_ostream &O); 90224133Sdim 91224133Sdimprivate: 92224133Sdim void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 93224133Sdim void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O); 94224133Sdim void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 95224133Sdim void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 96224133Sdim void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 97224133Sdim}; 98224133Sdim} // end namespace llvm 99224133Sdim 100224133Sdim#endif 101