//===-- X86InstrRelaxTables.h - X86 Instruction Relaxation Tables -*- 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 contains the interface to query the X86 instruction relaxation // tables. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_X86_X86INSTRRELAXTABLES_H #define LLVM_LIB_TARGET_X86_X86INSTRRELAXTABLES_H #include namespace llvm { // This struct is used for both the relaxed and short tables. The KeyOp is used // to determine the sorting order. struct X86InstrRelaxTableEntry { uint16_t KeyOp; uint16_t DstOp; bool operator<(const X86InstrRelaxTableEntry &RHS) const { return KeyOp < RHS.KeyOp; } bool operator==(const X86InstrRelaxTableEntry &RHS) const { return KeyOp == RHS.KeyOp; } friend bool operator<(const X86InstrRelaxTableEntry &TE, unsigned Opcode) { return TE.KeyOp < Opcode; } }; /// Look up the relaxed form table entry for a given \p ShortOp. const X86InstrRelaxTableEntry *lookupRelaxTable(unsigned ShortOp); /// Look up the short form table entry for a given \p RelaxOp. const X86InstrRelaxTableEntry *lookupShortTable(unsigned RelaxOp); namespace X86 { /// Get the short instruction opcode for a given relaxed opcode. unsigned getShortOpcodeArith(unsigned RelaxOp); /// Get the relaxed instruction opcode for a given short opcode. unsigned getRelaxedOpcodeArith(unsigned ShortOp); } // namespace X86 } // namespace llvm #endif