G1 card C05 - _render_camera_build_frustum: the projection-plane scaling as flat product chains (J arithmetic count)
Written 2026-09-26 02:14:19 -0700 (clock-read), BEFORE any compile of this card. Never edited.

C04 OUTCOME (facts, objects rc_C04a.obj / rc_C04b.obj, compiled ~02:13:3x): both variants give the IDENTICAL function
(3408 != 3376 padded, 112 != 113 relocs), 20 other rows exact, keyed diff 1 changed / 0 added / 0 removed.
fchs count J27/O27 (was O29): prediction 'fchs = J' CONFIRMED; 'block count drops' FAILED (169 -> 172; 1092 -> 1091
insns vs J 1080). The two named extents reproduce January's arithmetic (2 negations, reused) but not its schedule.

OBSERVED (J, alndiff on rc_C04a vs January T+0x846..0x88c): January scales the view plane with
  fld st(1)(inv_z); fmul [ps]; fmul st(3)(n.i)  ... fxch; fmul [ps]; fmul [n.j]
i.e. it forms inverse_plane_z * projection_scale TWICE (once per component); ours forms it once and reuses it
(fmul count J122/O121 - the only remaining arithmetic-count difference besides J's 0.0f literal load for n.i).
Our source: 'view_plane.n.i *= inverse_plane_z * projection_scale;' (and n.j) - the compound assignment makes
(inverse_plane_z * projection_scale) ONE subexpression, which VC7 CSEs across the two statements. January's bytes
show no such shared unit: each statement is a flat three-factor chain (VC7 CSEs a repeated subtree but not a sub-list of
two different flat MUL lists).
EVIDENCE:
  J: the recomputed product per component (fmul count) - a grouping fact of January's bytes that our '*= (a*b)'
     contradicts.
  D: /Od 0x83d600 +0xf08..0xf40 (2020 revision): 'n.i = projection_scale * n.i / n.k' - flat, left-associative, no
     grouped factor pair; the 2020 text divides by n.k where January multiplies by the stored inverse (disclosed).
  S: 'view_plane.n.i = projection_scale * view_plane.n.i * inverse_plane_z;' is ordinary C (the /Od operand order with
     January's inverse factor).
SHAPES: C05a = HEAD + the flat /Od-order chains for n.i and n.j. C05b = HEAD + flat chains in OUR factor order
  ('view_plane.n.i = view_plane.n.i * inverse_plane_z * projection_scale;') - tests whether factor order matters.
  C05c = C04a + C05a (coupled repair, both independently J-evidenced; rule 'coupled repairs': test A, B, A+B).
PREDICTIONS: C05a fmul count = J122 (p 0.75); C05a and C05b identical (flat chains are sorted by slot IDs; p 0.5);
  C05c: fchs J27 AND fmul J122 (p 0.7); function stays residual (p 0.95). 20 other rows unchanged.
