| //===-- MipsInstPrinter.h - Convert Mips MCInst to assembly syntax --------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This class prints a Mips MCInst to a .s file. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef MIPSINSTPRINTER_H | |
| #define MIPSINSTPRINTER_H | |
| #include "llvm/MC/MCInstPrinter.h" | |
| namespace llvm { | |
| // These enumeration declarations were orignally in MipsInstrInfo.h but | |
| // had to be moved here to avoid circular dependencies between | |
| // LLVMMipsCodeGen and LLVMMipsAsmPrinter. | |
| namespace Mips { | |
| // Mips Branch Codes | |
| enum FPBranchCode { | |
| BRANCH_F, | |
| BRANCH_T, | |
| BRANCH_FL, | |
| BRANCH_TL, | |
| BRANCH_INVALID | |
| }; | |
| // Mips Condition Codes | |
| enum CondCode { | |
| // To be used with float branch True | |
| FCOND_F, | |
| FCOND_UN, | |
| FCOND_OEQ, | |
| FCOND_UEQ, | |
| FCOND_OLT, | |
| FCOND_ULT, | |
| FCOND_OLE, | |
| FCOND_ULE, | |
| FCOND_SF, | |
| FCOND_NGLE, | |
| FCOND_SEQ, | |
| FCOND_NGL, | |
| FCOND_LT, | |
| FCOND_NGE, | |
| FCOND_LE, | |
| FCOND_NGT, | |
| // To be used with float branch False | |
| // This conditions have the same mnemonic as the | |
| // above ones, but are used with a branch False; | |
| FCOND_T, | |
| FCOND_OR, | |
| FCOND_UNE, | |
| FCOND_ONE, | |
| FCOND_UGE, | |
| FCOND_OGE, | |
| FCOND_UGT, | |
| FCOND_OGT, | |
| FCOND_ST, | |
| FCOND_GLE, | |
| FCOND_SNE, | |
| FCOND_GL, | |
| FCOND_NLT, | |
| FCOND_GE, | |
| FCOND_NLE, | |
| FCOND_GT | |
| }; | |
| const char *MipsFCCToString(Mips::CondCode CC); | |
| } // end namespace Mips | |
| class TargetMachine; | |
| class MipsInstPrinter : public MCInstPrinter { | |
| public: | |
| MipsInstPrinter(const MCAsmInfo &MAI) : MCInstPrinter(MAI) {} | |
| // Autogenerated by tblgen. | |
| void printInstruction(const MCInst *MI, raw_ostream &O); | |
| static const char *getInstructionName(unsigned Opcode); | |
| static const char *getRegisterName(unsigned RegNo); | |
| virtual StringRef getOpcodeName(unsigned Opcode) const; | |
| virtual void printRegName(raw_ostream &OS, unsigned RegNo) const; | |
| virtual void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot); | |
| private: | |
| void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O); | |
| void printUnsignedImm(const MCInst *MI, int opNum, raw_ostream &O); | |
| void printMemOperand(const MCInst *MI, int opNum, raw_ostream &O); | |
| void printMemOperandEA(const MCInst *MI, int opNum, raw_ostream &O); | |
| void printFCCOperand(const MCInst *MI, int opNum, raw_ostream &O); | |
| }; | |
| } // end namespace llvm | |
| #endif |