/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/MC/MCInstrInfo.h
Line | Count | Source |
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 | | |
20 | | namespace llvm { |
21 | | |
22 | | //--------------------------------------------------------------------------- |
23 | | /// \brief Interface to description of machine instruction set. |
24 | | class 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 | | |
30 | | public: |
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 | 98.6k | unsigned NO) { |
35 | 98.6k | Desc = D; |
36 | 98.6k | InstrNameIndices = NI; |
37 | 98.6k | InstrNameData = ND; |
38 | 98.6k | NumOpcodes = NO; |
39 | 98.6k | } |
40 | | |
41 | 2.26k | unsigned getNumOpcodes() const { return NumOpcodes; } |
42 | | |
43 | | /// \brief Return the machine instruction descriptor that corresponds to the |
44 | | /// specified instruction opcode. |
45 | 258M | const MCInstrDesc &get(unsigned Opcode) const { |
46 | 258M | assert(Opcode < NumOpcodes && "Invalid opcode!"); |
47 | 258M | return Desc[Opcode]; |
48 | 258M | } |
49 | | |
50 | | /// \brief Returns the name for the instructions with the given opcode. |
51 | 20.1M | StringRef getName(unsigned Opcode) const { |
52 | 20.1M | assert(Opcode < NumOpcodes && "Invalid opcode!"); |
53 | 20.1M | return StringRef(&InstrNameData[InstrNameIndices[Opcode]]); |
54 | 20.1M | } |
55 | | }; |
56 | | |
57 | | } // End llvm namespace |
58 | | |
59 | | #endif |