Files
Cesarus85--mjolnir-vr/docs/object_matching_logs/bitmaps_quantitize_obj.md
T

4.8 KiB

bitmaps_quantitize.obj exact-match strategy ledger

Scope and provenance

  • Translation unit: source/bitmaps/bitmaps_quantitize.c
  • January target object: source/bitmaps/bitmaps_quantitize.obj
  • Compiler: XDK 3911 CL 13.00.9254.1
  • Flags: /O2 /Oy- /DDEBUG /Dxbox
  • January _code_0006d5f0 is the function known cross-build as row_dither.
  • The exact 464-byte January target body also occurs in the October 12, 2001 2276betaP.xbe, corroborating the machine-code target and algorithm.
  • No authentic C donor or useful January/HCEA local-variable record has been found.

Current validated baseline

Two of three functions are strict exact. All owned .rdata, .data, and .bss sections are exact.

Function Target/base size Relocs Result
_bitmap_quantitize 592/592 28/28 strict exact
_code_0006d5d0 32/32 0/0 strict exact
_code_0006d5f0 / row_dither 464/464 0/0 nonexact scheduler residual

row_dither target normalized SHA-256 is a5feef0c98bc8565991a9cf9722e0258d2bd556e23fc0326891aa0ce0ebca5db. The restored baseline candidate hash is 7afe02e297bf06dd682a9c44bfd00aacf39c2f7ea0c0f45acce838dc9b696da4.

The sole baseline machine-code residual is the ordering of independent inner-loop maintenance:

target:    inc eax; add ebx,2; add ecx,2
candidate: add ebx,2; inc eax; add ecx,2

Here EAX is the channel index, EBX is the minimum-error pointer, and ECX is a compiler-synthesized next-row channel pointer.

Accepted source controls

  • The current clamping, quantization, and Floyd-Steinberg error-diffusion topology reproduces the target size, frame, branches, and all bytes outside the three independent loop-maintenance operations.
  • _bitmap_quantitize and _code_0006d5d0 are protected exact siblings; no closeout experiment may regress them.
  • Existing source comments preserve the original one-allocation-failure leak and explain the nonmatching safe fix.

Bounded experiment matrix

The prior closeout research exhausted source-order, loop-shape, pragma, barrier, dependency, and pointer-topology families. The original detailed research packet is C:\tmp\bitmaps-quantitize-agent\ROW_DITHER_PROVENANCE_REPORT.md.

Experiment Size Relocs Candidate hash / first divergence Decision
Restored source: minimum_channel++ then channel_index++ 464/464 0/0 7afe02e2...; add ebx,2 precedes inc eax best baseline
Reverse those two source statements 464/464 0/0 a5d1033d681cec568e19033f09f52ef415f989e690717817a578423a4f9b52d5; emits inc eax; add ecx,2; add ebx,2 reverted
Declaration/source-order and equivalent loop-tail permutations 464/464 in best forms 0/0 either baseline ordering or moves ECX between EAX and EBX exhausted/reverted
Compiler barriers around the tail varied/regressed 0/0 alter the loop schedule beyond the target exhausted/reverted
Pointer aliases/dependencies intended to order the advances varied/regressed 0/0 change earlier register allocation or remain baseline exhausted/reverted

An earlier research lane also measured three narrow inline-assembly diagnostics. None matched, and all were reverted. They are retained in the historical report only as negative evidence; inline assembly is prohibited and must not be retried or admitted.

Do-not-repeat list

  • Do not retry either ordering of only minimum_channel++ and channel_index++; both exact compiler outcomes are recorded above.
  • Do not repeat declaration-order, loop-tail, barrier, pragma, explicit pointer-topology, or artificial dependency variants from the prior report.
  • Do not use inline assembly, _emit, volatile forcing, undefined behavior, compiler-flag changes, comparator weakening, or object-byte patches.
  • Do not treat the October body as an original-C donor. It proves target identity, not source spelling.

Residual classification

The residual is a measured scheduler tie among three independent maintenance operations. Size, frame, relocation count, control flow, and every other instruction are already exact. Two direct source statement orders were tested: one leaves EBX before EAX; the other puts ECX between EAX and EBX. Neither produces January's EAX/EBX/ECX order.

Reopen criteria

Reopen only for:

  1. original Bungie C or local-variable/statement provenance for row_dither;
  2. a strict-exact C donor under the same compiler and flags with the same three-operation dependency context; or
  3. a newly demonstrated legal-C scheduling control not represented in the exhausted matrix.

Current disposition

bitmaps_quantitize.obj remains 2/3 strict exact with all data exact. It is rigorously parked and must remain NonMatching; no fuzzy or semantic credit is claimed for row_dither.