mirror of
https://github.com/odin-lang/Odin.git
synced 2026-09-02 02:03:35 +00:00
The generator re-emits the encoding table from the typed one, and the routine that writes an entry's flags names them one by one -- so `cond_in_21`, added last commit, survived until the next regeneration and then vanished, taking VSEL's condition with it. Every flag has to be named there; the routine now says so. VCMLA names its rotation twice over. The by-element forms put it in bits 21:20, which is what the previous commit taught it, but the vector forms put it in 24:23 -- so those read every rotation as two quadrants further round than it was. VLDR and VSTR count their offset in words, not bytes, and were sharing the halfword-load encoding, which reads a split imm4H:imm4L field that is not there. They named offsets no VFP load can take. PSB CSYNC and TSB CSYNC are unconditional-only -- the condition field is fixed at AL -- but their entries left bits 31:28 free, so any condition decoded as a conditional PSB. A word with a real condition in it is a plain hint, and that is what it now decodes as. Also gone: the printer's last-resort data type, which guessed `.f32` or `.f64` from the register bank whenever a form gave none. Instructions that take no data type -- VLDR, VSTR, VORN -- got one anyway, and it is not accepted syntax. The table is where a form says what suffix it wants. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018UmHLRF11EoWwNWCJ7JGaA