1//===-- llvm/MC/MCInstrInfo.h - Target Instruction Info ---------*- C++ -*-===// 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 file describes the target machine instruction set. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_MC_MCINSTRINFO_H 15#define LLVM_MC_MCINSTRINFO_H 16 17#include "llvm/MC/MCInstrDesc.h" 18#include <cassert> 19 20namespace llvm { 21 22//--------------------------------------------------------------------------- 23/// \brief Interface to description of machine instruction set. 24class MCInstrInfo { 25 const MCInstrDesc *Desc; // Raw array to allow static init'n 26 const unsigned *InstrNameIndices; // Array for name indices in InstrNameData 27 const char *InstrNameData; // Instruction name string pool 28 unsigned NumOpcodes; // Number of entries in the desc array 29 30public: 31 /// \brief Initialize MCInstrInfo, called by TableGen auto-generated routines. 32 /// *DO NOT USE*. 33 void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND, 34 unsigned NO) { 35 Desc = D; 36 InstrNameIndices = NI; 37 InstrNameData = ND; 38 NumOpcodes = NO; 39 } 40 41 unsigned getNumOpcodes() const { return NumOpcodes; } 42 43 /// \brief Return the machine instruction descriptor that corresponds to the 44 /// specified instruction opcode. 45 const MCInstrDesc &get(unsigned Opcode) const { 46 assert(Opcode < NumOpcodes && "Invalid opcode!"); 47 return Desc[Opcode]; 48 } 49 50 /// \brief Returns the name for the instructions with the given opcode. 51 const char *getName(unsigned Opcode) const { 52 assert(Opcode < NumOpcodes && "Invalid opcode!"); 53 return &InstrNameData[InstrNameIndices[Opcode]]; 54 } 55}; 56 57} // End llvm namespace 58 59#endif 60