//===- X86ModRMFilters.h - Disassembler ModR/M filterss ---------*- 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 is part of the X86 Disassembler Emitter. // It contains ModR/M filters that determine which values of the ModR/M byte // are valid for a partiuclar instruction. // Documentation for the disassembler emitter in general can be found in // X86DisassemblerEmitter.h. // //===----------------------------------------------------------------------===// #ifndef LLVM_UTILS_TABLEGEN_X86MODRMFILTERS_H #define LLVM_UTILS_TABLEGEN_X86MODRMFILTERS_H #include <cstdint> namespace llvm { namespace X86Disassembler { /// ModRMFilter - Abstract base class for clases that recognize patterns in /// ModR/M bytes. class ModRMFilter { … }; /// DumbFilter - Accepts any ModR/M byte. Used for instructions that do not /// require a ModR/M byte or instructions where the entire ModR/M byte is used /// for operands. class DumbFilter : public ModRMFilter { … }; /// ModFilter - Filters based on the mod bits [bits 7-6] of the ModR/M byte. /// Some instructions are classified based on whether they are 11 or anything /// else. This filter performs that classification. class ModFilter : public ModRMFilter { … }; /// ExtendedFilter - Extended opcodes are classified based on the value of the /// mod field [bits 7-6] and the value of the nnn field [bits 5-3]. class ExtendedFilter : public ModRMFilter { … }; /// ExtendedRMFilter - Extended opcodes are classified based on the value of the /// mod field [bits 7-6] and the value of the nnn field [bits 2-0]. class ExtendedRMFilter : public ModRMFilter { … }; /// ExactFilter - The occasional extended opcode (such as VMCALL or MONITOR) /// requires the ModR/M byte to have a specific value. class ExactFilter : public ModRMFilter { … }; } // namespace X86Disassembler } // namespace llvm #endif