MCInstrInfo.h revision c667ba69ac342563c0886e20509e68705d78a0a5
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//--------------------------------------------------------------------------- 23e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng/// 24e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng/// MCInstrInfo - Interface to description of machine instruction set 25e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng/// 26e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Chengclass MCInstrInfo { 27c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const MCInstrDesc *Desc; // Raw array to allow static init'n 28c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const unsigned *InstrNameIndices; // Array for name indices in InstrNameData 29c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const char *InstrNameData; // Instruction name string pool 30c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer unsigned NumOpcodes; // Number of entries in the desc array 31e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 32e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Chengpublic: 33e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// InitMCInstrInfo - Initialize MCInstrInfo, called by TableGen 34e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// auto-generated routines. *DO NOT USE*. 35c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND, 36c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer unsigned NO) { 37e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng Desc = D; 38c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer InstrNameIndices = NI; 39c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer InstrNameData = ND; 40e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng NumOpcodes = NO; 41e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 42e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 43e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng unsigned getNumOpcodes() const { return NumOpcodes; } 44e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 45e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// get - Return the machine instruction descriptor that corresponds to the 46e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// specified instruction opcode. 47e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng /// 48e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng const MCInstrDesc &get(unsigned Opcode) const { 49e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng assert(Opcode < NumOpcodes && "Invalid opcode!"); 50e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return Desc[Opcode]; 51e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 52c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer 53c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer /// getName - Returns the name for the instructions with the given opcode. 54c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer const char *getName(unsigned Opcode) const { 55c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer assert(Opcode < NumOpcodes && "Invalid opcode!"); 56c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer return &InstrNameData[InstrNameIndices[Opcode]]; 57c667ba69ac342563c0886e20509e68705d78a0a5Benjamin Kramer } 58e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng}; 59e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 60e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng} // End llvm namespace 61e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 62e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#endif 63