G1 card C04 - _render_camera_build_frustum (render/render_cameras, 3370 meaningful / 3376 padded B, PARKED
'unclassified'): the negated far-plane extents as values computed ONCE (J arithmetic count)
Written 2026-09-26 02:13:00 -0700 (clock-read), BEFORE any compile of this card. Never edited.
Unit taken by G1 from this card on: source/render/render_cameras (lead-parked; not owned by any wave-3 worker).
Park read (config/parked.json): per-object /Ob1 flag, 22 helper calls, 'distributed x87/local scheduling plus one
zero-literal relocation and the current project _pi folding bit'; reopen needs new evidence.

NEW CENSUS FACT (tools/fpops.py, FP arithmetic-count census over 50 residual rows, base/fpops_head.txt): 38 of 50
rows have IDENTICAL FP arithmetic to January (their residue is order/allocation only). build_frustum is one of the
few whose ARITHMETIC differs: fchs J27/O29, fmul J122/O121, one extra 0.0f literal load in J.
LOCATED (alndiff T+0x582..0x5f1 vs ours): January computes inv_x = 1/px (fst [ebp-0x20]), then -(inv_x * z_far) ONCE
(fmul [edi+0x40]; fchs), the same for y, and multiplies the kept negated products by left_plane_z / (cx - 1) and
bottom_plane_z / (cy - 1) (fmul st(2), fmul st(1)): TWO fchs for the four far values. Ours negates each of the four
products (four fchs): VC7 rewrites 'a * -(b)' into '-(a * b)' and CSEs only (inv * z_far).

EVIDENCE (owner ruling 2026-09-26: S and J; D as structure support only):
  J: the fchs/fmul counts and the reuse of one negated product per axis (fchs directly after 'fmul z_far', result kept
     on the x87 stack for two multiplies) - an arithmetic fact of January's bytes that our text contradicts.
  D: the /Od build (0x83d600, 2020 revision) stores the negated far extents in two LOCALS ([ebp-0xd4] = -z_far/px,
     [ebp-0xd8] = -z_far/py) and multiplies them into far_left/right/bottom/top. (Its formula divides by px where
     January multiplies by the stored inverse; disclosed - D supports the structure 'negated extent held in a local',
     not the arithmetic.)
  S: two named locals holding the negated far-plane extents is ordinary code; names are DESCRIPTIVE (HCEX.pdb lists
     only aggregate locals for this function: x/y/z_axis, viewspace_plane, viewspace_normal, frustum_midpoint,
     frustum_vertex, clip_plane; scalars enregistered).
SHAPE C04a: declare 'real far_x_extent;' / 'real far_y_extent;' with the other scalars (after half_z), compute
  far_x_extent = -(inverse_projection_x_scale * camera->z_far); far_y_extent likewise, directly after half_z (J order:
  inv_x, -(inv_x*z_far), inv_y, -(inv_y*z_far), half_z - so ALSO C04b: the two extents computed before half_z, per J's
  instruction order), and far_left = left_plane_z * far_x_extent; etc.
PREDICTION: fchs count becomes J's 27 (p 0.7); the function stays residual (p 0.95; 169 blocks, statement-order and
  allocation differences elsewhere); block count drops (p 0.6). 20 other exact rows unchanged. Zero credit either way;
  a gain is preserved as fuzzy provenance only (rule 'preserve useful house-rule-compliant fuzzy source').
COLLATERAL: two new locals change this function's slot pool (IDs/frame) - any frame change is reported.
