x86: move operand_types[] out of struct insn_template
Reduces memory usage and improves cache efficiency by moving operand type definitions out of instruction templates.
Jan Beulich’s fourth patch in a series reorganizes x86 instruction templates by moving the operand_types array out of the struct insn_template. This change aims to reduce memory usage and improve cache utilization by storing common operand combinations in a separate, shared array. It significantly reduces the number of i386_operand_type instances, from over 22,000 to 770.
In Details
This patch is the final part of a four-part series refactoring operand type handling in the x86 assembler gas. It addresses memory and cache efficiency by relocating the operand_types array from individual insn_template structs into a new, shared i386_operand_types array. This deduplication dramatically reduces the memory footprint associated with instruction templates. The patch also suggests potential further optimizations, such as folding related fields and consolidating CPU specifiers.
- struct insn_template
- A data structure in the assembler that defines the layout and properties of an assembly instruction.
- operand_types[]
- An array within an instruction template that specifies the types and characteristics of each operand the instruction can accept.
- cache locality
- The principle of keeping data that is accessed frequently closer to the processor's cache memory to speed up access times.
- cache utilization
- Maximizing the efficiency of the CPU cache by ensuring frequently used data is stored and accessed effectively.
- i386_operand_type
- A specific data structure on the x86 architecture that defines the type and properties of an operand for an instruction.