phase12: match three more bodies (724 bodies / 733 regions)

This commit is contained in:
Christopher Williams
2026-09-25 09:22:25 -04:00
parent 6975b274cd
commit d17c4f84bf
7 changed files with 106 additions and 7 deletions
+2 -2
View File
@@ -959,7 +959,7 @@
952 0x801007E0 0x80100808 40 fallthrough 3 frame 1 - 1
#
# listed=952
# excluded_already_registered=728
# excluded_already_registered=731
# excluded_bad_extent_start=8
# excluded_degenerate_body=252
# excluded_delay_slot_start=5
@@ -968,6 +968,6 @@
# excluded_low_confidence_grade=90
# excluded_named_exclusion=9
# excluded_no_extent=0
# excluded_recorded_negative=100
# excluded_recorded_negative=97
# excluded_restores_unsaved=11
# excluded_trapping_arith=48
1 # Syphon Filter 3 (USA) match worklist.
959 952
960 #
961 # listed=952
962 # excluded_already_registered=728 # excluded_already_registered=731
963 # excluded_bad_extent_start=8
964 # excluded_degenerate_body=252
965 # excluded_delay_slot_start=5
968 # excluded_low_confidence_grade=90
969 # excluded_named_exclusion=9
970 # excluded_no_extent=0
971 # excluded_recorded_negative=100 # excluded_recorded_negative=97
972 # excluded_restores_unsaved=11
973 # excluded_trapping_arith=48
+3
View File
@@ -378,10 +378,12 @@
0x80073250 0x80073284 src/func_80073250.c
0x80073364 0x800733C4 src/func_80073364.c
0x800734A4 0x800734DC src/func_800734A4.c
0x8007374C 0x80073798 src/func_8007374C.c
0x80073F78 0x8007405C src/func_80073F78.c
0x80074C00 0x80074C74 src/func_80074C00.c
0x8007759C 0x800775E4 src/func_8007759C.c
0x80077D04 0x80077D7C src/func_80077D04.c
0x8007A114 0x8007A16C src/func_8007A114.c
0x8007A2AC 0x8007A324 src/func_8007A2AC.c
0x8007A404 0x8007A428 src/func_8007A404.c
0x8007A428 0x8007A4FC src/func_8007A428.c
@@ -604,6 +606,7 @@
0x800F6E50 0x800F6ED0 src/func_800F6E50.c maspsx=epilogue
0x800F6F20 0x800F6F5C src/func_800F6F20.c
0x800F75D0 0x800F760C src/func_800F75D0.c
0x800F7610 0x800F765C src/func_800F7610.c maspsx=epilogue
0x800F7990 0x800F79C0 src/func_800F7990.c
0x800F79C0 0x800F79F0 src/func_800F79C0.c
0x800F79F0 0x800F7A20 src/func_800F79F0.c
1 # Code-region registry: one C region per matched function.
378 0x80073250
379 0x80073364
380 0x800734A4
381 0x8007374C
382 0x80073F78
383 0x80074C00
384 0x8007759C
385 0x80077D04
386 0x8007A114
387 0x8007A2AC
388 0x8007A404
389 0x8007A428
606 0x800F6E50
607 0x800F6F20
608 0x800F75D0
609 0x800F7610
610 0x800F7990
611 0x800F79C0
612 0x800F79F0
+5 -5
View File
@@ -6,11 +6,11 @@
## STATE — SOLO CONTINUATION, 2026-09-24 (current)
**721 bodies / 730 regions**, from 685 / 694 at the last session stop — **+36 bodies / +36 regions**.
The Phase 12 milestone remains 750 bodies, so **+29 remains**. The promoted whole-binary gate is green:
`c_regions=730`, `differing_bytes=0`, SHA-1
**724 bodies / 733 regions**, from 685 / 694 at the last session stop — **+39 bodies / +39 regions**.
The Phase 12 milestone remains 750 bodies, so **+26 remains**. The promoted whole-binary gate is green:
`c_regions=733`, `differing_bytes=0`, SHA-1
`e173426c157384ebf1b6caf8c6fea18a85a14af9`; 348 synthetic tests pass and extents report
`regions=730 disagreements=0 result=AGREE`.
`regions=733 disagreements=0 result=AGREE`.
The requested second batch of 20 is complete. Twenty additional bodies are now matched:
`0x800BC9C4`, `0x800BC8C4`, `0x8006BB0C`, `0x8002D17C`, `0x801029A0`, `0x80055958`,
@@ -24,7 +24,7 @@ Final clean verification (2026-09-25): `make clean && make all`, `make worklist`
`make extents-verify`, and `make check` all exited 0. Both clean assembly and code rebuilds
matched the USA executable byte-for-byte; each is 1,886,208 bytes with SHA-1
`e173426c157384ebf1b6caf8c6fea18a85a14af9`. The final worklist is 952 rows and the extents
check reports `regions=730 disagreements=0 result=AGREE`.
check reports `regions=733 disagreements=0 result=AGREE`.
## STATE — SESSION STOP, 2026-09-24 23:35 (historical; superseded by the state above, kept for provenance)
**685 bodies / 694 regions**, from 602 / 611 at the Phase 11 close — **+83 bodies**. **Milestone 750 was NOT
+19
View File
@@ -2470,3 +2470,22 @@ SHA-1, exit 0. `make check` passed with 348 tests and extents `regions=730 disag
**Count after the peer batch: 721 bodies / 730 regions (+119 bodies from the Phase 12 open baseline;
+29 remain to milestone 750).**
### Peer batch 2 — `0x8007374C` and `0x800F7610` MATCH
* `0x8007374C..0x80073798`, 76/76, plain C with hard-bound object/counter registers.
* `0x800F7610..0x800F765C`, 76/76, three callback loads with `maspsx=epilogue`.
* Both peer sources were copied to tracked paths, freshly re-verified, and merged as a two-region
candidate. The candidate whole-binary gate passed at `c_regions=732`, zero differing bytes,
expected SHA-1, exit 0.
### Worker D claim — `0x8007A114` MATCH
* `0x8007A114..0x8007A16C`, 88/88, default toolchain. The scaled index is written before the literal
base in the address addition to preserve the original commutative operand order.
* Fresh range and candidate whole-binary gate both passed with zero differing bytes; the candidate
gate reported `c_regions=733`, expected SHA-1, exit 0. `make check` passed with 348 tests and
extents `regions=733 disagreements=0`; worklist regeneration reports 952 rows.
**Count after task 27: 724 bodies / 733 regions (+122 bodies from the Phase 12 open baseline;
+26 remain to milestone 750).**
+26
View File
@@ -0,0 +1,26 @@
/*
* func_8007374C — 76 bytes at 0x8007374C..0x80073798
*
* Allocate/look up an object, clear its state word, and initialize its tag
* from the caller's shifted index plus the low nibble of g_80122354.
*
* The object layout and helper meaning are address-based hypotheses; the
* instruction match is the evidence for this region.
*/
typedef struct Obj { char pad[30]; short tag; char pad2[8]; short state; } Obj;
extern Obj *func_80073798(int);
extern int g_80122354;
void func_8007374C(int a0)
{
register int s0 __asm__("$16") = a0;
register Obj *p __asm__("$4") = func_80073798(s0);
register int shifted __asm__("$3");
if (p) {
p->state = 0;
shifted = s0 << 4;
p->tag = (short)(shifted + (g_80122354 & 15));
}
}
+26
View File
@@ -0,0 +1,26 @@
/*
* func_8007A114 — 88 bytes at 0x8007A114..0x8007A16C
*
* Resolve a record from a short index and a literal base pointer, select one
* of two values according to the record tag, and return its low bit.
*
* The scaled index is written before the base in the address addition to
* preserve the original commutative operand order. The base address is literal
* because this site uses an absolute load despite the registry's gp marker.
*
* The structure meanings are address-based hypotheses; the byte match is the
* evidence for this region.
*/
int func_8007A114(char *a0)
{
char *p = (char *)(*(short *)(a0 + 2) * 76 + *(int *)0x80121BFC);
unsigned int v;
if (*(unsigned char *)(p + 42) == 24)
v = *(unsigned int *)(p + 40) >> 8;
else
v = *(unsigned short *)(*(int *)(a0 + 28) + 6);
return v & 1;
}
+25
View File
@@ -0,0 +1,25 @@
/*
* func_800F7610 — 76 bytes at 0x800F7610..0x800F765C
*
* Dispatch three fields from an object to three helpers. The original keeps
* the object pointer in s0 and uses the documented epilogue delay-slot shape.
*
* REGION TOKEN: `maspsx=epilogue`.
*
* The field names and helper purposes are address-based hypotheses; the byte
* match is the evidence for this region.
*/
typedef struct Obj { short h0; int w4; unsigned char b8, b9, b10; } Obj;
extern void func_80103B54(short);
extern void func_80103B60(int);
extern void func_80103B6C(unsigned char, unsigned char, unsigned char);
void func_800F7610(Obj *a0)
{
register Obj *s0 __asm__("$16") = a0;
func_80103B54(s0->h0);
func_80103B60(s0->w4);
func_80103B6C(s0->b8, s0->b9, s0->b10);
}