mirror of
https://github.com/Cesarus85/ringfall-mjolnir-vr.git
synced 2026-10-23 08:00:24 +02:00
_bink_alloc@4 (+494 meaningful). Three hunks, each measured necessary:
- The two match_dassert sites inside the function become match_vassert. The
d-family is a project convenience wrapper (docs/assertions.md), not a claim
about January's text, and the wrapper auto-inlines the small static predicate
where January calls it out of line.
- A `boolean can_allocate` holds the three-operand guard chain. laws_w2 A13: the
helper inlines at 0, 1 or 2 && operands and declines at 3, and with the boolean
the assert line anchors 735/759/786/787/799 and January's ja/jge/jne polarity
put the failure arm first.
- One unit-local `__asm { int 3 }` in the failure arm, admitted by an explicit
owner ruling as a helper under house rule 10.
Evidence for the trap, as the ruling requires it be documented: a capstone census
over all 833 January split objects finds exactly four in-body int3 corpus-wide,
and exactly one in Halo source - this site at 0xd1; the other three are vendor
(binkxbox, d3d8, xapilib). A control replacing the trap with __debugbreak() gives
147 instructions with the int3 relocated from 0xd1 to 0xd4 (it sinks past
`pop edi; mov eax,esi`), and a control with no trap is 496/52 [sha] with a
one-instruction shift through the rest of the body - so the intrinsic provably
cannot pin the trap and only inline assembly reproduces January's placement.
This ruling covers that one instruction only; all allocator logic stays in C.
I verified the minimum-hunk requirement myself rather than assuming it: the trap
alone gives 496 [size 512!=496, relocs 51!=52], trap plus the vassert conversions
gives 480/51, so the boolean is load-bearing for the missing relocation and the
size. fake_match_scan reports the expected single inline-assembly review lead.
Full ninja, parks 273 active / 0 stale / 0 invalid, stable diff vs
scratch/opus5-next150-before.json: gained 8 / 7,328 padded, regressions 0; owner
census adds nothing and correctly drops the 'end bink_alloc' literal January
does not own.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>