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