1e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng//===-- llvm/MC/MCInstrInfo.h - Target Instruction Info ---------*- C++ -*-===// 2e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// 3e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// The LLVM Compiler Infrastructure 4e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// 5e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// This file is distributed under the University of Illinois Open Source 6e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// License. See LICENSE.TXT for details. 7e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// 8e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng//===----------------------------------------------------------------------===// 9e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// 10e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// This file describes the target machine instruction set. 11e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng// 12e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng//===----------------------------------------------------------------------===// 13e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 14e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#ifndef LLVM_MC_MCINSTRINFO_H 15e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#define LLVM_MC_MCINSTRINFO_H 16e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 17e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#include "llvm/MC/MCInstrDesc.h" 18e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#include <cassert> 19e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 20e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Chengnamespace llvm { 21e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 22e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng//--------------------------------------------------------------------------- 236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar/// \brief Interface to description of machine instruction set. 24e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Chengclass MCInstrInfo { 25c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const MCInstrDesc *Desc; // Raw array to allow static init'n 26c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const unsigned *InstrNameIndices; // Array for name indices in InstrNameData 27c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const char *InstrNameData; // Instruction name string pool 28c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer unsigned NumOpcodes; // Number of entries in the desc array 29e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 30e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Chengpublic: 316948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar /// \brief Initialize MCInstrInfo, called by TableGen auto-generated routines. 326948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar /// *DO NOT USE*. 33c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND, 34c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer unsigned NO) { 35e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng Desc = D; 36c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer InstrNameIndices = NI; 37c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer InstrNameData = ND; 38e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng NumOpcodes = NO; 39e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 40e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 41e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng unsigned getNumOpcodes() const { return NumOpcodes; } 42e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 436948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar /// \brief Return the machine instruction descriptor that corresponds to the 44e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// specified instruction opcode. 45e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng const MCInstrDesc &get(unsigned Opcode) const { 46e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng assert(Opcode < NumOpcodes && "Invalid opcode!"); 47e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return Desc[Opcode]; 48e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 49c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer 506948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar /// \brief Returns the name for the instructions with the given opcode. 51c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const char *getName(unsigned Opcode) const { 52c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer assert(Opcode < NumOpcodes && "Invalid opcode!"); 53c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer return &InstrNameData[InstrNameIndices[Opcode]]; 54c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer } 55e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng}; 56e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 57e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng} // End llvm namespace 58e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 59e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#endif 60