1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- llvm/MC/MCInstrInfo.h - Target Instruction Info ---------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file describes the target machine instruction set.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_MC_MCINSTRINFO_H
- #define LLVM_MC_MCINSTRINFO_H
- #include "llvm/MC/MCInstrDesc.h"
- #include <cassert>
- namespace llvm {
- class MCSubtargetInfo;
- //---------------------------------------------------------------------------
- /// Interface to description of machine instruction set.
- class MCInstrInfo {
- public:
- using ComplexDeprecationPredicate = bool (*)(MCInst &,
- const MCSubtargetInfo &,
- std::string &);
- private:
- const MCInstrDesc *Desc; // Raw array to allow static init'n
- const unsigned *InstrNameIndices; // Array for name indices in InstrNameData
- const char *InstrNameData; // Instruction name string pool
- // Subtarget feature that an instruction is deprecated on, if any
- // -1 implies this is not deprecated by any single feature. It may still be
- // deprecated due to a "complex" reason, below.
- const uint8_t *DeprecatedFeatures;
- // A complex method to determine if a certain instruction is deprecated or
- // not, and return the reason for deprecation.
- const ComplexDeprecationPredicate *ComplexDeprecationInfos;
- unsigned NumOpcodes; // Number of entries in the desc array
- public:
- /// Initialize MCInstrInfo, called by TableGen auto-generated routines.
- /// *DO NOT USE*.
- void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND,
- const uint8_t *DF,
- const ComplexDeprecationPredicate *CDI, unsigned NO) {
- Desc = D;
- InstrNameIndices = NI;
- InstrNameData = ND;
- DeprecatedFeatures = DF;
- ComplexDeprecationInfos = CDI;
- NumOpcodes = NO;
- }
- unsigned getNumOpcodes() const { return NumOpcodes; }
- /// Return the machine instruction descriptor that corresponds to the
- /// specified instruction opcode.
- const MCInstrDesc &get(unsigned Opcode) const {
- assert(Opcode < NumOpcodes && "Invalid opcode!");
- return Desc[Opcode];
- }
- /// Returns the name for the instructions with the given opcode.
- StringRef getName(unsigned Opcode) const {
- assert(Opcode < NumOpcodes && "Invalid opcode!");
- return StringRef(&InstrNameData[InstrNameIndices[Opcode]]);
- }
- /// Returns true if a certain instruction is deprecated and if so
- /// returns the reason in \p Info.
- bool getDeprecatedInfo(MCInst &MI, const MCSubtargetInfo &STI,
- std::string &Info) const;
- };
- } // End llvm namespace
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|