mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-02 02:03:35 +00:00
Seventeen predicate operations were printing an element size they do not have. AND/ORR/NAND/BRKA and the rest of that family treat a predicate as a bit mask rather than as elements, so they are always .b -- bits 23:22 are opcode there, not a size, and deriving the size from them produced `ands p0.h, p0/z, p0.h, p0.h`, which no assembler takes. PNEXT and PTRUE really are sized and keep it. SVE2's AES are destructive: the destination is also the first source and is written twice, so `aese z0.b, z0.b, z1.b` has one operand more than the NEON form. All four were modelled with the NEON operand count, which made them unassemblable regardless of what else was right. PFIRST and PNEXT had their governing predicate sized as well; it is written bare, like every other governing predicate. SVE/SME2 decode entries against llvm-mc: 545 byte-exact and 0 mismatched, from 211 and 78 at the start of the session. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018UmHLRF11EoWwNWCJ7JGaA