//===-- llvm/MC/MCInstrDesc.h - Instruction Descriptors -*- 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 defines the MCOperandInfo and MCInstrDesc classes, which // are used to describe target instructions and their operands. // //===----------------------------------------------------------------------===// #ifndef LLVM_MC_MCINSTRDESC_H #define LLVM_MC_MCINSTRDESC_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/iterator_range.h" #include "llvm/MC/MCRegister.h" namespace llvm { class MCRegisterInfo; class MCInst; //===----------------------------------------------------------------------===// // Machine Operand Flags and Description //===----------------------------------------------------------------------===// namespace MCOI { /// Operand constraints. These are encoded in 16 bits with one of the /// low-order 3 bits specifying that a constraint is present and the /// corresponding high-order hex digit specifying the constraint value. /// This allows for a maximum of 3 constraints. enum OperandConstraint { … }; // Define a macro to produce each constraint value. #define MCOI_TIED_TO(op) … #define MCOI_EARLY_CLOBBER … /// These are flags set on operands, but should be considered /// private, all access should go through the MCOperandInfo accessors. /// See the accessors for a description of what these are. enum OperandFlags { … }; /// Operands are tagged with one of the values of this enum. enum OperandType { … }; } // namespace MCOI /// This holds information about one operand of a machine instruction, /// indicating the register class for register operands, etc. class MCOperandInfo { … }; //===----------------------------------------------------------------------===// // Machine Instruction Flags and Description //===----------------------------------------------------------------------===// namespace MCID { /// These should be considered private to the implementation of the /// MCInstrDesc class. Clients should use the predicate methods on MCInstrDesc, /// not use these directly. These all correspond to bitfields in the /// MCInstrDesc::Flags field. enum Flag { … }; } // namespace MCID /// Describe properties that are true of each instruction in the target /// description file. This captures information about side effects, register /// use and many other things. There is one instance of this struct for each /// target instruction class, and the MachineInstr class points to this struct /// directly to describe itself. class MCInstrDesc { … }; } // end namespace llvm #endif