D128 - A field no probe can reach is widened from its family, and the claim is checked

Status: decided (2026-08-21) - the log line is a check now

orbistoun-gen operands now reconciles field widths within a family before writing, and prints every adoption.

Usually a too-narrow field means a weak probe and the cure is a better one. Sometimes no probe exists: v_cndmask_b32 takes a sixty-four-bit mask as its third source, a mask is always a scalar pair, and the highest value that field can legally hold is the execution mask's code - so the top bits are unreachable by any instruction the assembler will emit. Left alone it warned on every run, and a check that always warns is a check nobody reads.

Only widths are reconciled. Two readings that disagree about kind or scale decode differently, are a real ambiguity, and stay a warning - that distinction is what stops this becoming a way to paper over a genuine one.

Verified by the case it was written for: the same run that adopted the width solved every other opcode unchanged.

The distinction is checked rather than asserted

The weakness was named when this was written and left open: "sometimes no probe can" and "usually the cure is a better probe" look identical in the output, and the only thing separating them was a line in a log. A line in a log is not a check, and this project has already learned twice today that a too-narrow field is usually a weak probe.

It is answerable mechanically. Put a value in that operand which would need the wider field, ask the assembler, and read the encoded field back. If a value that needs those bits assembles, a probe could have been written and the adoption was avoidable. If none does, the operand genuinely cannot reach there.

Run against this target it confirms the original claim rather than overturning it: both adoptions - the conditional move's mask source and the carry-in form's - are constrained to scalar pairs, and nothing an assembler will emit reaches those bits.

A second defect, found on 2026-08-21 and the mirror of the first. The check rebuilt its trial instruction from the parsed operand list, which has modifiers stripped. For a family whose modifiers are mandatory that produces something illegal: tbuffer_load_format_x v1, v200, s[8:11], s3 is refused outright, because a typed access needs a format: and an addressing mode. So every candidate was refused and the check reported "no instruction can reach those bits" about an address register field that any v200 reaches.

Same failure as the original, pointing the opposite way: that one said avoidable about an unreachable field, this said unreachable about a probeable one. Both send someone to do work that cannot succeed.

Fixed by keeping the printed text on each sample and substituting one token in place, so the rebuilt instruction differs from a real one in exactly the operand under test. Worth recording as a pattern rather than a bug: this check reasons about what the assembler will not accept, and every silent way of making an instruction invalid reads as evidence.

The first version of the check was wrong, and wrong in the dangerous direction. It stopped at "did it assemble" and reported every adoption as avoidable, because s[100:101] assembles perfectly well - and its code is 100, which fits in seven bits and needs nothing wider. That version would have sent someone to widen a probe for a field no instruction can reach, which is precisely the advice this exists to avoid. The fix is that it now reads the field back rather than trusting that the attempt succeeded.

It is checked in both directions, because a check that can only stay silent is worth nothing: asked about an ordinary source, which accepts a vector register whose code is 256 and therefore needs the ninth bit, it says so.