1*9880d681SAndroid Build Coastguard Worker //=== MipsInstPrinter.h - Convert Mips MCInst to assembly syntax -*- C++ -*-==// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This class prints a Mips MCInst to a .s file. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H 15*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_MIPS_INSTPRINTER_MIPSINSTPRINTER_H 16*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCInstPrinter.h" 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker namespace llvm { 19*9880d681SAndroid Build Coastguard Worker // These enumeration declarations were originally in MipsInstrInfo.h but 20*9880d681SAndroid Build Coastguard Worker // had to be moved here to avoid circular dependencies between 21*9880d681SAndroid Build Coastguard Worker // LLVMMipsCodeGen and LLVMMipsAsmPrinter. 22*9880d681SAndroid Build Coastguard Worker namespace Mips { 23*9880d681SAndroid Build Coastguard Worker // Mips Branch Codes 24*9880d681SAndroid Build Coastguard Worker enum FPBranchCode { 25*9880d681SAndroid Build Coastguard Worker BRANCH_F, 26*9880d681SAndroid Build Coastguard Worker BRANCH_T, 27*9880d681SAndroid Build Coastguard Worker BRANCH_FL, 28*9880d681SAndroid Build Coastguard Worker BRANCH_TL, 29*9880d681SAndroid Build Coastguard Worker BRANCH_INVALID 30*9880d681SAndroid Build Coastguard Worker }; 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker // Mips Condition Codes 33*9880d681SAndroid Build Coastguard Worker enum CondCode { 34*9880d681SAndroid Build Coastguard Worker // To be used with float branch True 35*9880d681SAndroid Build Coastguard Worker FCOND_F, 36*9880d681SAndroid Build Coastguard Worker FCOND_UN, 37*9880d681SAndroid Build Coastguard Worker FCOND_OEQ, 38*9880d681SAndroid Build Coastguard Worker FCOND_UEQ, 39*9880d681SAndroid Build Coastguard Worker FCOND_OLT, 40*9880d681SAndroid Build Coastguard Worker FCOND_ULT, 41*9880d681SAndroid Build Coastguard Worker FCOND_OLE, 42*9880d681SAndroid Build Coastguard Worker FCOND_ULE, 43*9880d681SAndroid Build Coastguard Worker FCOND_SF, 44*9880d681SAndroid Build Coastguard Worker FCOND_NGLE, 45*9880d681SAndroid Build Coastguard Worker FCOND_SEQ, 46*9880d681SAndroid Build Coastguard Worker FCOND_NGL, 47*9880d681SAndroid Build Coastguard Worker FCOND_LT, 48*9880d681SAndroid Build Coastguard Worker FCOND_NGE, 49*9880d681SAndroid Build Coastguard Worker FCOND_LE, 50*9880d681SAndroid Build Coastguard Worker FCOND_NGT, 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker // To be used with float branch False 53*9880d681SAndroid Build Coastguard Worker // This conditions have the same mnemonic as the 54*9880d681SAndroid Build Coastguard Worker // above ones, but are used with a branch False; 55*9880d681SAndroid Build Coastguard Worker FCOND_T, 56*9880d681SAndroid Build Coastguard Worker FCOND_OR, 57*9880d681SAndroid Build Coastguard Worker FCOND_UNE, 58*9880d681SAndroid Build Coastguard Worker FCOND_ONE, 59*9880d681SAndroid Build Coastguard Worker FCOND_UGE, 60*9880d681SAndroid Build Coastguard Worker FCOND_OGE, 61*9880d681SAndroid Build Coastguard Worker FCOND_UGT, 62*9880d681SAndroid Build Coastguard Worker FCOND_OGT, 63*9880d681SAndroid Build Coastguard Worker FCOND_ST, 64*9880d681SAndroid Build Coastguard Worker FCOND_GLE, 65*9880d681SAndroid Build Coastguard Worker FCOND_SNE, 66*9880d681SAndroid Build Coastguard Worker FCOND_GL, 67*9880d681SAndroid Build Coastguard Worker FCOND_NLT, 68*9880d681SAndroid Build Coastguard Worker FCOND_GE, 69*9880d681SAndroid Build Coastguard Worker FCOND_NLE, 70*9880d681SAndroid Build Coastguard Worker FCOND_GT 71*9880d681SAndroid Build Coastguard Worker }; 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker const char *MipsFCCToString(Mips::CondCode CC); 74*9880d681SAndroid Build Coastguard Worker } // end namespace Mips 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker class MipsInstPrinter : public MCInstPrinter { 77*9880d681SAndroid Build Coastguard Worker public: MipsInstPrinter(const MCAsmInfo & MAI,const MCInstrInfo & MII,const MCRegisterInfo & MRI)78*9880d681SAndroid Build Coastguard Worker MipsInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, 79*9880d681SAndroid Build Coastguard Worker const MCRegisterInfo &MRI) 80*9880d681SAndroid Build Coastguard Worker : MCInstPrinter(MAI, MII, MRI) {} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker // Autogenerated by tblgen. 83*9880d681SAndroid Build Coastguard Worker void printInstruction(const MCInst *MI, raw_ostream &O); 84*9880d681SAndroid Build Coastguard Worker static const char *getRegisterName(unsigned RegNo); 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker void printRegName(raw_ostream &OS, unsigned RegNo) const override; 87*9880d681SAndroid Build Coastguard Worker void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot, 88*9880d681SAndroid Build Coastguard Worker const MCSubtargetInfo &STI) override; 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker bool printAliasInstr(const MCInst *MI, raw_ostream &OS); 91*9880d681SAndroid Build Coastguard Worker void printCustomAliasOperand(const MCInst *MI, unsigned OpIdx, 92*9880d681SAndroid Build Coastguard Worker unsigned PrintMethodIdx, raw_ostream &O); 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker private: 95*9880d681SAndroid Build Coastguard Worker void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); 96*9880d681SAndroid Build Coastguard Worker template <unsigned Bits, unsigned Offset = 0> 97*9880d681SAndroid Build Coastguard Worker void printUImm(const MCInst *MI, int opNum, raw_ostream &O); 98*9880d681SAndroid Build Coastguard Worker void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); 99*9880d681SAndroid Build Coastguard Worker void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); 100*9880d681SAndroid Build Coastguard Worker void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); 101*9880d681SAndroid Build Coastguard Worker void printRegisterPair(const MCInst *MI, int opNum, raw_ostream &O); 102*9880d681SAndroid Build Coastguard Worker void printSHFMask(const MCInst *MI, int opNum, raw_ostream &O); 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo, 105*9880d681SAndroid Build Coastguard Worker raw_ostream &OS); 106*9880d681SAndroid Build Coastguard Worker bool printAlias(const char *Str, const MCInst &MI, unsigned OpNo0, 107*9880d681SAndroid Build Coastguard Worker unsigned OpNo1, raw_ostream &OS); 108*9880d681SAndroid Build Coastguard Worker bool printAlias(const MCInst &MI, raw_ostream &OS); 109*9880d681SAndroid Build Coastguard Worker void printSaveRestore(const MCInst *MI, raw_ostream &O); 110*9880d681SAndroid Build Coastguard Worker void printRegisterList(const MCInst *MI, int opNum, raw_ostream &O); 111*9880d681SAndroid Build Coastguard Worker }; 112*9880d681SAndroid Build Coastguard Worker } // end namespace llvm 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker #endif 115