mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-30 07:31:59 -04:00
feat(phase-30 T6/S11): the propagation lag — EXTEND 31/36, and the PROPAGATE head measured
Continues the S11 lane. Fleet 96.01 -> 96.06% fn-count / 93.6 -> 93.7% instr / 88.0% distinct; dedup 1905 -> 1907 groups, 0 failed, C1 240669/240669. R22 clean-fleet: 140 passed, 0 failed of 140. 0 NON_MATCHING (G4). EXTEND (SC07): the 16 volatile-blocked DIFF slots banked on retry after the data asm-label alias -> lane total 31/36. PROPAGATE head, measured rather than projected. .run/s8_lag.json re-split: the checkpoint's "45 classes / 20,837 ins" is really 5 classes carrying 18,545 ins (89%) and 41 carrying 2,316. Per-class outcome: func_80147364 30x137 = 4,110 BANKED x137 (definition-side asm-label alias) func_8012f274 29x137 = 3,973 DROPPED — byte-diverges in ~130 overlays func_8016ba68 29x134 = 3,886 4 of 138 banked; excluded from ~130 func_8012a598 24x137 = 3,288 SKIPPED, cause NAMED by the tool func_801466f0 24x137 = 3,288 no source found — the S6b D4 gap, still open func_80147364's byte-true definition is `(u16, u16)` while 4,046 fleet decls say `(u16, s32)`. u16 is a default-promotion type, so the `()` no-prototype escape is ILLEGAL (the documented gcc-2.7.2 dead-end) and conforming the decl would change caller codegen. The DEFINITION-SIDE asm-label alias gives the def a distinct C identifier while emitting the real symbol -- zero blast radius on every caller. Probed on ONE member first (1 build, not 137 -- the S29 discipline): byte-identical 9052dc0e first try; then 137 overlays clean. In-tree precedent for the form: 1,725 files. MEASURED NEGATIVE, recorded not buried: `dedup_propagate --recover` banked only 4 of 138 on func_8016ba68 and dropped func_8012f274 entirely (137 [exclude] lines). The caller-extern reconcile that is 16/16 lifetime ON DRAFTS does NOT transfer to PROPAGATION of these two. Cause not yet diagnosed -- probe one excluded overlay's build output before any further attempt (§136a), do not re-run the lever hoping. NAMED NEXT (cheapest first): func_8012a598 skips on `missing file-scope extern (CARRY-FIXABLE): D_801151D4, D_80126DB8_a, D_80127504` -- the SESSION-18 preamble-backscan class. Its body is 2 statements and `struct BigCopy` is ALREADY in the shared engine_types.h (L312) with the identical statement already macro-ized at engine_core.h:16158, so a hand-authored macro (the func_80147364 path) should take it x137 for ~0 tokens. Process errors recorded in CURRENT_PHASE.md, all three one mechanism -- the signal sampled is not the thing waited for: (1) a `nohup CMD &` wrapper's exit read as the fleet check finishing (it stood at 63/140); (2) a corpus.stubs probe mid-rebuild, which R32's coverage assertion refused rather than answer wrongly; (3) CORRECTION to the S10 checkpoint's own rule -- `pgrep -x make` is right for one make and WRONG for a campaign of sequential makes (it fired in a gap and reported a live campaign done), and `pgrep -f <pattern>` SELF-MATCHES so that waiter can never exit. Wait on the campaign process or `treelock.sh --status`.
This commit is contained in:
@@ -426,6 +426,20 @@
|
||||
} \
|
||||
}
|
||||
|
||||
#define DEFINE_func_8016BA68() \
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
|
||||
extern s32 func_8014C050(s32 a0, s32 a1); \
|
||||
extern void func_80146C3C(u8*); \
|
||||
s32 func_8016BA68(s32 arg0, s32 arg1) { \
|
||||
extern s32 D_80126B58; \
|
||||
s32 temp_v0; \
|
||||
temp_v0 = func_8014C050(&D_80126B58, 0x56); \
|
||||
if (temp_v0 != 0) { \
|
||||
((void (*)(void *))func_80146C3C)(temp_v0); \
|
||||
} \
|
||||
func_80146A6C(0x56, arg0, M2C_FIELD(arg0, s16 *, 0x7C), M2C_FIELD(arg0, s16 *, 0x7E), (s32) M2C_FIELD(arg0, s16 *, 0x80), arg1, 0); \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#define DEFINE_func_80128EA8() \
|
||||
@@ -30146,4 +30160,44 @@
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
/* PROPAGATE-lane probe: func_80147364 (30 ins, matched in ov_SC07_006, stub in 137 overlays).
|
||||
DEFINITION-SIDE asm-label alias (§37/§124): the fleet declares this fn `(u16, s32)` in 4,046
|
||||
places while its byte-true definition is `(u16, u16)`. u16 is a default-promotion type, so the
|
||||
`()` no-prototype escape is ILLEGAL here (the documented gcc-2.7.2 dead-end) and a decl conform
|
||||
would change caller codegen. The alias gives the definition a distinct C identifier while
|
||||
emitting the real symbol -- zero blast radius on every caller. func_8012E5CC is aliased for the
|
||||
same reason (3 incompatible shapes fleet-wide); its use is cast, so both are codegen-neutral. */
|
||||
#define DEFINE_func_80147364() \
|
||||
extern s16 currentLocationId; \
|
||||
extern s32 D_80126B58; \
|
||||
extern void func_80015978(s32, s32*); \
|
||||
extern s32 aF8012E5CC(s32, s32, s32) __asm__("func_8012E5CC"); \
|
||||
extern void func_8002D4C8(s32 a0, s32 a1); \
|
||||
void aF80147364(u16 param_1, u16 param_2) __asm__("func_80147364"); \
|
||||
void aF80147364(u16 param_1, u16 param_2) { \
|
||||
s32 sp10[2]; \
|
||||
s32 *p = &D_80126B58; \
|
||||
if (currentLocationId == 0x308d) { \
|
||||
((void (*)(void *, void *))func_80015978)(p + 1, sp10); \
|
||||
((void (*)(void *, s32, s32))aF8012E5CC)(sp10, param_1, param_2); \
|
||||
} else { \
|
||||
func_8002D4C8(param_1, param_2); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DEFINE_func_8016BA68() \
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); \
|
||||
extern s32 func_8014C050(s32 a0, s32 a1); \
|
||||
extern void func_80146C3C(u8*); \
|
||||
s32 func_8016BA68(s32 arg0, s32 arg1) { \
|
||||
extern s32 D_80126B58; \
|
||||
s32 temp_v0; \
|
||||
temp_v0 = func_8014C050(&D_80126B58, 0x56); \
|
||||
if (temp_v0 != 0) { \
|
||||
((void (*)(void *))func_80146C3C)(temp_v0); \
|
||||
} \
|
||||
func_80146A6C(0x56, arg0, M2C_FIELD(arg0, s16 *, 0x7C), M2C_FIELD(arg0, s16 *, 0x7E), (s32) M2C_FIELD(arg0, s16 *, 0x80), arg1, 0); \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user