mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-02 10:13:35 +00:00
Collapsing the encoding-shaped mnemonics into their assembler names merged several form lists that already overlapped, leaving byte-identical Encoding rows inside one mnemonic. The matcher takes the first form that matches, so every duplicate was dead weight -- unreachable, and inflating both tables. VMUL, VMLA and VMLS each gained two from the *_LANE merge; VSHR, VSRA and VRSHR two each, VQSHRN, VQRSHRN and VSHLL one each. The branch base had none, so these are mine: the collision check I ran before each merge compared operand signatures, which is the right test for "can the matcher tell these apart", but says nothing about two forms being wholly identical. Comparing the full Encoding would have caught them. 1680 -> 1665 forms. Removing an unreachable exact duplicate cannot change behaviour, and does not: the load/store, LDM/STM and NEON data-type encode checks are byte-for-byte what they were, and the decode sweep still round-trips every form. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>