x86: decode EVEX 0F38 4B by length
Modifies the EVEX decoder to correctly handle instructions with non-zero L'L, a prerequisite for ACE instructions.
This patch adjusts the EVEX decoder in binutils to properly process entries where the L’L field is non-zero. This is a necessary change to ensure that ACE instructions, which may utilize non-zero L’L values, are decoded correctly.
In Details
The EVEX prefix is an extension to VEX used in AVX-512 and later instruction sets. This patch modifies the evex_len_table and related files in opcodes/ to ensure that the disassembler correctly associates instruction byte sequences starting with 0F38 4B with their corresponding lengths, even when the L'L signaling of the EVEX prefix is set. This is a prerequisite for decoding new ACE V1 instructions that leverage these features.
- EVEX
- A 4-byte instruction prefix used in AVX-512 and later x86 instruction sets to encode features like vector length, rounding, and masking. It extends the capabilities of the older VEX prefix.
- L'L field
- A field within the EVEX prefix that typically encodes vector length information. Modifying how this field is interpreted is crucial for supporting new instruction sets that may use it differently.
- ACE
- AI Compute Extensions, a set of x86 instructions designed to accelerate AI and machine learning workloads.
- disassembler
- A program that converts machine code into assembly language source code.
- opcodes
- The part of an instruction that specifies the operation to be performed. In binutils, 'opcodes' refers to the component responsible for instruction decoding and encoding.