18f5e8c1cd69fa77bea20140a7132ee2dea166c6dJia Liu//=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- C++ -*-==// 2794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// 3794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// The LLVM Compiler Infrastructure 4794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// 5794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// This file is distributed under the University of Illinois Open Source 6794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// License. See LICENSE.TXT for details. 7794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// 8794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka//===----------------------------------------------------------------------===// 9794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// 10794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// This class prints a Mips MCInst to a .s file. 11794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// 12794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka//===----------------------------------------------------------------------===// 13794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 14794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka#ifndef MIPSINSTPRINTER_H 15794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka#define MIPSINSTPRINTER_H 16794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka#include "llvm/MC/MCInstPrinter.h" 17794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 18794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakanamespace llvm { 19d9b0b025612992a0b724eeca8bdf10b1d7a5c355Benjamin Kramer// These enumeration declarations were originally in MipsInstrInfo.h but 20794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// had to be moved here to avoid circular dependencies between 21bb481f882093fb738d2bb15610c79364bada5496Jia Liu// LLVMMipsCodeGen and LLVMMipsAsmPrinter. 22794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakanamespace Mips { 23794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// Mips Branch Codes 24794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaenum FPBranchCode { 25794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka BRANCH_F, 26794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka BRANCH_T, 27794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka BRANCH_FL, 28794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka BRANCH_TL, 29794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka BRANCH_INVALID 30794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka}; 31794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 32794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka// Mips Condition Codes 33794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaenum CondCode { 34794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka // To be used with float branch True 35794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_F, 36794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_UN, 37794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OEQ, 38794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_UEQ, 39794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OLT, 40794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_ULT, 41794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OLE, 42794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_ULE, 43794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_SF, 44794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NGLE, 45794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_SEQ, 46794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NGL, 47794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_LT, 48794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NGE, 49794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_LE, 50794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NGT, 51794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 52794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka // To be used with float branch False 53794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka // This conditions have the same mnemonic as the 54794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka // above ones, but are used with a branch False; 55794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_T, 56794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OR, 57794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_UNE, 58794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_ONE, 59794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_UGE, 60794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OGE, 61794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_UGT, 62794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_OGT, 63794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_ST, 64794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_GLE, 65794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_SNE, 66794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_GL, 67794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NLT, 68794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_GE, 69794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_NLE, 70794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka FCOND_GT 71794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka}; 72794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 73794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaconst char *MipsFCCToString(Mips::CondCode CC); 74794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka} // end namespace Mips 75794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 76794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaclass TargetMachine; 77794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 78794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaclass MipsInstPrinter : public MCInstPrinter { 79794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakapublic: 8017463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 8117463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper const MCRegisterInfo &MRI) 8217463b3ef1a3d39b10619254f12e806c8c43f9e7Craig Topper : MCInstPrinter(MAI, MII, MRI) {} 83bb481f882093fb738d2bb15610c79364bada5496Jia Liu 84794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka // Autogenerated by tblgen. 85794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printInstruction(const MCInst *MI, raw_ostream &O); 86794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka static const char *getRegisterName(unsigned RegNo); 87bb481f882093fb738d2bb15610c79364bada5496Jia Liu 88dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void printRegName(raw_ostream &OS, unsigned RegNo) const override; 89dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot) override; 90bb481f882093fb738d2bb15610c79364bada5496Jia Liu 9137ef65b9c1b93c386d13089d9ace6a1cc00e82dcJack Carter bool printAliasInstr(const MCInst *MI, raw_ostream &OS); 92dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx, 93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines unsigned PrintMethodIdx, raw_ostream &O); 9437ef65b9c1b93c386d13089d9ace6a1cc00e82dcJack Carter 95794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanakaprivate: 96794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 97794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O); 98c8a1fa77a73e7c885035421712ceba951f9024cbDaniel Sanders void printUnsignedImm8(const MCInst *MI, int opNum, raw_ostream &O); 99794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 100794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 101794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 10293d995719e2459a6e9ccdb2c93a8ede8fa88c899Daniel Sanders void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); 1039b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka 1049b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, 1059b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka raw_ostream &OS); 1069b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, 1079b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka unsigned OpNo1, raw_ostream &OS); 1089b06dd6ca25fd1f8d2cf9227fdffc304c9f51564Akira Hatanaka bool printAlias(const MCInst &MI, raw_ostream &OS); 10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void printSaveRestore(const MCInst *MI, raw_ostream &O); 110794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka}; 111794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka} // end namespace llvm 112794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka 113794bf17cbe0bac301ef9e52fb4a0295bfdfe0cabAkira Hatanaka#endif 114