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