← board

Why a census and not a walk

CLAUDE.md's rule that a first-failure census ranks by queue position applies to the compiler's own error reporting just as much as to a corpus probe: attempting SDL2/SDL.h reports ONE unsupported instruction, so clearing it reveals the next and nothing tells you how many are left. Grepping the headers gives the whole population in one command, and the population is small and closed:

mnemonic reached on x86-64?
xchgb (with %b0/%h0, =Q) yes — landed 642943118
bswapl, bswapq yes — this ticket
pause yes — this ticket
int $3 yes — this ticket
rlwimi, or 27,27,27 no, ppc
dmb, mcr, bkpt, brk no, arm / aarch64
ebreak no, riscv
rorw already supported

What landed

Guards, and what each can actually see

Three instruments that lied, all correct about something else

  1. objdump -d parses ZERO instructions out of a pxx binary. It reported "no bswap present" for a binary containing three, which reads exactly like the feature being absent.
  2. A CC byte count said int $3 emitted nothing. With- and without-asm binaries came out at identical size with identical CC counts — CC is the padding filler — while one traps and the other exits clean.
  3. The pause guard, written to demonstrate framing, was itself unframed. od | tr -d ' \n' runs the hex together, so f390 matched ACROSS two adjacent bytes and the CONTROL binary answered 2 where the truth is 0.

The i386 sibling is NOT covered, deliberately and loudly

AttKnows386 does not list these and asmtext_386.inc cannot assemble them, so the i386 arm fails with unsupported instruction rather than emitting nothing. That is checked, not assumed: AttEncodeOne errors on a False from AttEmitInstr. SDL's i386 arm wants bswapl too, so this is a real gap — named here rather than left for someone to discover, which is the lesson the %h0 fix paid for.