Vector arithmetic, and the bits nothing was looking at

The vector ALU's arithmetic translates: add, subtract, reverse-subtract and multiply in both encodings, multiply-add, fused multiply-add, reciprocal, and the conditional move. The census went from 81 to 93 of 126 instructions and from 1 to 2 of 10 fixtures complete. Fifty execution tests, all on a real device.

The substance was the modifiers, not the arithmetic. The long form carries per-source negate and absolute flags in bits that neither the operand layout nor the encoding table describes - both layers ignore them correctly, and both are the layer that would have been asked. A translator that read the operands and stopped would emit a + b where the guest wrote a + -b, in a shader that runs, for every subtraction a compiler expressed that way. Three tests: negate alone on a positive source, absolute alone on a negative one, and both together where only the order separates the answers.

Clamp and the output multiplier are refused rather than ignored, and Instruction gained second_word so a translator can reach fields the decoder does not model.

Surprises.

Not done. The division helpers (v_div_scale_f32, v_div_fixup_f32, v_div_fmas_f32) are the Newton-Raphson sequence, with special-case behaviour around denormals and overflow that is worth being careful about; they are the last VOP3 blockers and deliberately left. v_rcp_f32 is translated as an exact division where the guest's is an approximation - more accurate than the hardware, which cannot turn a correct frame into a wrong one but will show up in a bit-exact framebuffer comparison. v_mad_f32 and v_fma_f32 translate identically, so the fused one is the less faithful of the two.