mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-01 17:53:35 +00:00
The NEON one-register-and-modified-immediate forms -- VMOV, VMVN, VORR and VBIC against a constant -- had no encoding on the value slot at all. The routine that expands an 8-bit field by its cmode was already written and already correct; nothing called it, so twenty-six forms decoded their constant as zero. Printing it back is a second problem. A modified immediate is a bit pattern, and assemblers write it as one: in hex, or as a float when cmode 1111 expanded it into one. Both are operand kinds of their own now, so the VFP `vmov.f32 s0, #2.000000e+00` prints as the float it is rather than as the decimal of its bit pattern. Two more VMOV forms: the one that moves a pair of GPRs to a pair of S registers encodes only the first of the pair, and the second went unprinted rather than being named as the one after it; and the one that moves a 32-bit lane to a GPR names the lane in bit 21, which it did not read, so every lane printed as a bare register. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018UmHLRF11EoWwNWCJ7JGaA