diff --git a/.run/P36/census/lever_census.json b/.run/P36/census/lever_census.json index dda1bdb5f7..9615686a3e 100644 --- a/.run/P36/census/lever_census.json +++ b/.run/P36/census/lever_census.json @@ -72,15 +72,15 @@ "binaries": 218, "classes": { "A": { - "bodies": 10195, + "bodies": 10191, "distinct_bodies": 1330, "file_scope": 0, - "in_bodies": 20512, + "in_bodies": 20508, "kinds": { - "pin": 20512 + "pin": 20508 }, - "marked": 20512, - "sites": 20512, + "marked": 20508, + "sites": 20508, "tus": 2577, "unmarked": 0 }, @@ -207,9 +207,9 @@ "coverage": { "asm": { "comment_dead": 6792, - "live": 43864, + "live": 43860, "macro_block": 194, - "raw": 50850 + "raw": 50846 }, "attribute": { "comment_dead": 0, @@ -225,9 +225,9 @@ }, "register": { "comment_dead": 8587, - "live": 20562, + "live": 20558, "macro_block": 18, - "raw": 29167 + "raw": 29163 }, "volatile": { "comment_dead": 2607, @@ -237,7 +237,7 @@ } }, "coverage_ok": true, - "elapsed_s": 35.5, + "elapsed_s": 36.4, "generated": "2026-09-09", "gte_levers": { "direct": 362, @@ -248,15 +248,15 @@ "via_macro": 100, "what": "GTE ops whose clobbers exceed the canonical macro's (a scheduling steer): class-B levers INSIDE the headline number since T5 (2026-09-09), marked, 0 at the close" }, - "head": "1761a3125", + "head": "8fac96651", "headers": 3181, "levers_AB": { "asm": 13445, - "bodies": 12578, + "bodies": 12574, "distinct_bodies": 1758, - "marked": 33957, - "pins": 20512, - "sites": 33957, + "marked": 33953, + "pins": 20508, + "sites": 33953, "unmarked": 0, "what": "register pins + asm statements excluding GTE ops: the classes the phase drives to 0" }, @@ -399,11 +399,11 @@ "$13": 6, "$14": 139, "$15": 1, - "$16": 1764, - "$17": 1358, + "$16": 1763, + "$17": 1357, "$18": 464, "$19": 588, - "$2": 3834, + "$2": 3832, "$20": 286, "$21": 408, "$22": 7, @@ -424,28 +424,28 @@ "v0": 2, "v1": 5 }, - "sites": 20512, + "sites": 20508, "sp": 13, "spelling": { - "__asm__": 20410, + "__asm__": 20406, "asm": 102 }, "volatile_qualified": 134, "zero": 1321 }, - "src_stamp": "08cc85e727e5882a", + "src_stamp": "60ed465042fd2475", "tus": 4121, "unclassified": 0, "union_AD": { - "bodies": 15827, + "bodies": 15823, "by_kind": { "main": 180, "md": 182, - "ov": 15125, + "ov": 15121, "resident": 12, "shared": 328 }, - "copies_in_multi": 14197, + "copies_in_multi": 14193, "distinct_bodies": 2030, "multi_copy_classes": 400 }, diff --git a/.run/P36/census/lever_census.txt b/.run/P36/census/lever_census.txt index 0cbbd11410..9c4da6f46b 100644 --- a/.run/P36/census/lever_census.txt +++ b/.run/P36/census/lever_census.txt @@ -1,31 +1,31 @@ lever_census: 218 binaries · 4,121 TUs + 3,181 headers · coverage OK · unclassified 0 · verbatim excluded 13 fn / 14 sites (manifest 13) - coverage asm raw 50850 = live 43864 + macro-block 194 + comment/dead 6792 - coverage register raw 29167 = live 20562 + macro-block 18 + comment/dead 8587 + coverage asm raw 50846 = live 43860 + macro-block 194 + comment/dead 6792 + coverage register raw 29163 = live 20558 + macro-block 18 + comment/dead 8587 coverage volatile raw 4858 = live 2169 + macro-block 82 + comment/dead 2607 coverage builtin raw 599 = live 445 + macro-block 0 + comment/dead 154 coverage attribute raw 76 = live 76 + macro-block 0 + comment/dead 0 class sites in-bodies file-scope bodies distinct TUs marked unmarked kinds - A pins 20512 20512 0 10195 1330 2577 20512 0 {'pin': 20512} - B asm 22988 22975 13 9766 1063 2297 13711 9277 {'barrier': 4578, 'instruction': 1712, 'launder': 4680, 'keepalive': 2000, 'gte': 6858, 'gte-lever': 462, 'gte-unsigned': 3, 'asm-body': 13, 'verbatim-body': 2682} - C volatile 1722 1570 152 628 97 612 14 1708 {'decl-body': 58, 'decl-file': 152, 'cast': 1510, 'param': 2} + A pins 20508 20508 0 10191 1330 2577 20508 0 {'pin': 20508} + B asm 22988 22975 13 9766 1063 2297 13711 9277 {'barrier': 4578, 'launder': 4680, 'keepalive': 2000, 'instruction': 1712, 'gte': 6858, 'gte-lever': 462, 'gte-unsigned': 3, 'asm-body': 13, 'verbatim-body': 2682} + C volatile 1722 1570 152 628 97 612 14 1708 {'cast': 1510, 'decl-body': 58, 'decl-file': 152, 'param': 2} D register 50 50 0 47 47 6 0 50 {'register': 50} E asm-label 7428 1005 6423 737 117 2080 0 7428 {'asm-label': 7428} F builtin 445 445 0 428 27 302 0 445 {'builtin': 445} G attribute 76 1 75 1 1 40 0 76 {'attribute': 76} - UNION A–D: 15,827 bodies · 2,030 distinct (addresses normalized) · 400 multi-copy classes holding 14,197 bodies · by kind {'ov': 15125, 'main': 180, 'md': 182, 'shared': 328, 'resident': 12} - THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 33,957 sites in 12,578 bodies (1,758 distinct) · marked !FAKE 33,957 · UNMARKED 0 + UNION A–D: 15,823 bodies · 2,030 distinct (addresses normalized) · 400 multi-copy classes holding 14,193 bodies · by kind {'ov': 15121, 'main': 180, 'shared': 328, 'md': 182, 'resident': 12} + THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 33,953 sites in 12,574 bodies (1,758 distinct) · marked !FAKE 33,953 · UNMARKED 0 orphan !FAKE markers (no pin/asm site on the line nor below): 0 GTE levers (clobbers beyond the canonical macro's): 462 sites (100 via a variant macro, 362 direct) · marked 462 · UNMARKED 0 · unsigned GTE statements 3 - per-TU asm macro definitions outside the GTE header: 314 {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1} (GTE variants 64) - pins: 20,512 · $0 1,321 · $sp 13 · with initializer 2,776 · volatile-qualified 134 · bare-name 25 · spellings {'__asm__': 20410, 'asm': 102} + per-TU asm macro definitions outside the GTE header: 314 {'launder': 154, 'gte': 150, 'instruction': 9, 'barrier': 1} (GTE variants 64) + pins: 20,508 · $0 1,321 · $sp 13 · with initializer 2,776 · volatile-qualified 134 · bare-name 25 · spellings {'__asm__': 20406, 'asm': 102} whole-body asm routines in C shells, manifest PERMANENT (hand asm, NOT levers): 22 routines · 2,682 sites (2,660 private copies + 22 shared headers); asm-bodies NOT permanent (levers): 13 site(s) ['func_8001E378:DECOMPILE-NOW', 'func_80020F34:DECOMPILE-NOW', 'func_800249F0:DECOMPILE-NOW', 'func_80025CBC:DECOMPILE-NOW', 'func_80026514:UNCERTAIN', 'func_800268D0:UNCERTAIN', 'func_80027058:DECOMPILE-NOW', 'func_80027200:DECOMPILE-NOW', 'func_800CBA44:DECOMPILE-NOW', 'func_8017D810:DECOMPILE-NOW', 'func_8017E26C:UNCERTAIN', 'func_80184440:DECOMPILE-NOW', 'func_801A3BCC:DECOMPILE-NOW'] asm kinds: {'asm-body/direct': 13, 'barrier/direct': 4576, 'barrier/via-macro': 2, 'gte/direct': 200, 'gte/via-macro': 6658, 'gte-lever/direct': 362, 'gte-lever/via-macro': 100, 'gte-unsigned/direct': 3, 'instruction/direct': 1690, 'instruction/via-macro': 22, 'keepalive/direct': 2000, 'launder/direct': 4236, 'launder/via-macro': 444, 'verbatim-body/direct': 2682} instruction mnemonics: {'addu': 966, 'move': 406, 'la': 142, 'lh': 134, 'addiu': 22, 'RTP_SND': 22, '.section': 7, 'lui': 4, 'and': 2, 'mult': 1, 'mfhi': 1, 'sll': 1, 'li': 1, 'lw': 1, 'nop': 1, 'srl': 1} - gte mnemonics: {'gte_ldv0': 757, 'gte_stlvnl': 593, 'gte_stsxy': 447, 'gte_rtps': 437, 'gte_stflg': 415, 'gte_rtpt': 352, 'gte_SetRotMatrix': 246, 'gte_stsxy3': 236, 'gte_rtv0tr': 228, 'gte_SetTransMatrix': 226, 'gte_ldv3c': 184, 'gte_ldv3': 177, 'gte_ldrgb': 164, 'gte_stsv': 161, 'lwc2': 159, 'gte_stsz4': 149, 'gte_stsz3': 147, 'gte_stszotz': 134, 'gte_ldIR0z': 134, 'gte_ldIRGB': 134, 'gte_dpcl': 134, 'gte_stORGB': 134, 'gte_stsxy3_f3': 111, 'gte_stclmv': 108, 'gte_nclip': 108, 'gte_stopz': 108, 'gte_stsxy3c': 108, 'gte_stsxy3_ft3': 79, 'gte_rtir': 75, 'gte_ldclmv': 72} - asm-bearing macro definitions: 314 (20 names, 3 with >1 text) kinds {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1} + gte mnemonics: {'gte_ldv0': 757, 'gte_stlvnl': 593, 'gte_stsxy': 447, 'gte_rtps': 437, 'gte_stflg': 415, 'gte_rtpt': 352, 'gte_SetRotMatrix': 246, 'gte_stsxy3': 236, 'gte_rtv0tr': 228, 'gte_SetTransMatrix': 226, 'gte_ldv3c': 184, 'gte_ldv3': 177, 'gte_ldrgb': 164, 'gte_stsv': 161, 'lwc2': 159, 'gte_stsz4': 149, 'gte_stsz3': 147, 'gte_ldIR0z': 134, 'gte_ldIRGB': 134, 'gte_dpcl': 134, 'gte_stORGB': 134, 'gte_stszotz': 134, 'gte_stsxy3_f3': 111, 'gte_stclmv': 108, 'gte_nclip': 108, 'gte_stopz': 108, 'gte_stsxy3c': 108, 'gte_stsxy3_ft3': 79, 'gte_rtir': 75, 'gte_ldclmv': 72} + asm-bearing macro definitions: 314 (20 names, 3 with >1 text) kinds {'launder': 154, 'gte': 150, 'instruction': 9, 'barrier': 1} controls (R39): src/800.c func_800226C0 pins got 14 expected 45 N-A src/shared/ov/func_80178004.h pins got 8 expected 26 N-A ov_SC03_006 func_80184034 bare-name pins got 0 expected 3 N-A engine_prelude.h asm sites (a macro definition only) got 0 expected 0 OK - elapsed 35.5 s + elapsed 36.4 s diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 50983c697e..6aa81bf566 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,7 +1,7 @@ { - "head": "1761a3125", + "head": "8fac96651", "stamp": "b44c5a8a3423", - "generated": "2026-09-09 11:47", + "generated": "2026-09-09 12:11", "aliases": [ "main", "ov_SC03_014", @@ -21,207 +21,207 @@ "main": { "objects": 85, "identical": 85, - "seconds": 14.902999999999997, - "mean_s": 0.175 + "seconds": 10.007000000000005, + "mean_s": 0.118 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 8.385, - "mean_s": 0.262 + "seconds": 6.2040000000000015, + "mean_s": 0.194 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 8.013, - "mean_s": 0.25 + "seconds": 6.201999999999998, + "mean_s": 0.194 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 7.434, - "mean_s": 0.266 + "seconds": 5.154, + "mean_s": 0.184 } }, "per_object_seconds": { - "build/src/800.o": 1.453, - "build/src/800_b.o": 0.227, - "build/src/800_b_2.o": 0.481, - "build/src/800_b_o0a.o": 0.155, - "build/src/800_c.o": 0.422, - "build/src/800b2.o": 0.178, - "build/src/apicard1.o": 0.134, - "build/src/apicard2.o": 0.282, - "build/src/apicard3.o": 0.147, - "build/src/apicard4.o": 0.15, - "build/src/apicard5.o": 0.155, - "build/src/apicard6.o": 0.175, - "build/src/apicard7.o": 0.14, - "build/src/boot.o": 0.174, - "build/src/gap.o": 0.175, - "build/src/libapi1.o": 0.133, - "build/src/libapi2.o": 0.078, - "build/src/libc2_1.o": 0.242, - "build/src/libc2_2.o": 0.084, - "build/src/libcd1.o": 0.109, - "build/src/libcd2.o": 0.244, - "build/src/libetc.o": 0.218, - "build/src/libgpu.o": 0.08, - "build/src/libgpu2.o": 0.213, - "build/src/libgs1.o": 0.088, - "build/src/libgs2.o": 0.086, - "build/src/libgs3.o": 0.096, - "build/src/libgs4.o": 0.088, - "build/src/libgs5.o": 0.152, - "build/src/libgs6.o": 0.14, - "build/src/libgs7.o": 0.082, - "build/src/libgs8.o": 0.11, - "build/src/libgte1.o": 0.11, - "build/src/libgte10.o": 0.131, - "build/src/libgte11.o": 0.129, - "build/src/libgte12.o": 0.107, - "build/src/libgte13.o": 0.1, - "build/src/libgte14.o": 0.119, - "build/src/libgte15.o": 0.08, - "build/src/libgte16.o": 0.174, - "build/src/libgte17.o": 0.132, - "build/src/libgte18.o": 0.151, - "build/src/libgte19.o": 0.084, - "build/src/libgte2.o": 0.287, - "build/src/libgte20.o": 0.102, - "build/src/libgte21.o": 0.12, - "build/src/libgte22.o": 0.091, - "build/src/libgte23.o": 0.279, - "build/src/libgte24.o": 0.142, - "build/src/libgte25.o": 0.204, - "build/src/libgte26.o": 0.121, - "build/src/libgte27.o": 0.112, - "build/src/libgte28.o": 0.089, - "build/src/libgte29.o": 0.132, - "build/src/libgte3.o": 0.145, - "build/src/libgte30.o": 0.114, - "build/src/libgte4.o": 0.123, - "build/src/libgte5.o": 0.09, - "build/src/libgte6.o": 0.218, - "build/src/libgte7.o": 0.09, - "build/src/libgte8.o": 0.278, - "build/src/libgte9.o": 0.104, - "build/src/libmcrd1.o": 0.201, - "build/src/libmcrd2.o": 0.101, - "build/src/libpad1.o": 0.134, - "build/src/libpad2.o": 0.187, - "build/src/sgap.o": 0.116, - "build/src/sgap_2.o": 0.105, - "build/src/sgap_3.o": 0.298, - "build/src/sgap_4.o": 0.277, - "build/src/sgap_5.o": 0.11, - "build/src/sgap_6.o": 0.107, - "build/src/sgap_8.o": 0.161, - "build/src/snd1.o": 0.125, - "build/src/snd10.o": 0.185, - "build/src/snd11.o": 0.348, - "build/src/snd12.o": 0.177, - "build/src/snd2.o": 0.157, - "build/src/snd3.o": 0.245, - "build/src/snd4.o": 0.159, - "build/src/snd5.o": 0.2, - "build/src/snd6.o": 0.17, - "build/src/snd7.o": 0.138, - "build/src/snd8.o": 0.118, - "build/src/snd9.o": 0.235, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.207, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 1.037, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 1.11, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.118, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.09, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.398, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.355, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.247, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.184, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.18, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.264, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.157, + "build/src/800.o": 0.93, + "build/src/800_b.o": 0.094, + "build/src/800_b_2.o": 0.49, + "build/src/800_b_o0a.o": 0.105, + "build/src/800_c.o": 0.239, + "build/src/800b2.o": 0.117, + "build/src/apicard1.o": 0.079, + "build/src/apicard2.o": 0.128, + "build/src/apicard3.o": 0.093, + "build/src/apicard4.o": 0.106, + "build/src/apicard5.o": 0.092, + "build/src/apicard6.o": 0.083, + "build/src/apicard7.o": 0.161, + "build/src/boot.o": 0.159, + "build/src/gap.o": 0.082, + "build/src/libapi1.o": 0.091, + "build/src/libapi2.o": 0.066, + "build/src/libc2_1.o": 0.076, + "build/src/libc2_2.o": 0.063, + "build/src/libcd1.o": 0.09, + "build/src/libcd2.o": 0.087, + "build/src/libetc.o": 0.11, + "build/src/libgpu.o": 0.111, + "build/src/libgpu2.o": 0.174, + "build/src/libgs1.o": 0.133, + "build/src/libgs2.o": 0.065, + "build/src/libgs3.o": 0.069, + "build/src/libgs4.o": 0.114, + "build/src/libgs5.o": 0.065, + "build/src/libgs6.o": 0.086, + "build/src/libgs7.o": 0.076, + "build/src/libgs8.o": 0.153, + "build/src/libgte1.o": 0.082, + "build/src/libgte10.o": 0.073, + "build/src/libgte11.o": 0.07, + "build/src/libgte12.o": 0.077, + "build/src/libgte13.o": 0.156, + "build/src/libgte14.o": 0.091, + "build/src/libgte15.o": 0.062, + "build/src/libgte16.o": 0.078, + "build/src/libgte17.o": 0.067, + "build/src/libgte18.o": 0.157, + "build/src/libgte19.o": 0.1, + "build/src/libgte2.o": 0.097, + "build/src/libgte20.o": 0.066, + "build/src/libgte21.o": 0.069, + "build/src/libgte22.o": 0.071, + "build/src/libgte23.o": 0.073, + "build/src/libgte24.o": 0.09, + "build/src/libgte25.o": 0.14, + "build/src/libgte26.o": 0.096, + "build/src/libgte27.o": 0.12, + "build/src/libgte28.o": 0.092, + "build/src/libgte29.o": 0.14, + "build/src/libgte3.o": 0.118, + "build/src/libgte30.o": 0.107, + "build/src/libgte4.o": 0.188, + "build/src/libgte5.o": 0.199, + "build/src/libgte6.o": 0.182, + "build/src/libgte7.o": 0.106, + "build/src/libgte8.o": 0.09, + "build/src/libgte9.o": 0.111, + "build/src/libmcrd1.o": 0.104, + "build/src/libmcrd2.o": 0.109, + "build/src/libpad1.o": 0.088, + "build/src/libpad2.o": 0.077, + "build/src/sgap.o": 0.065, + "build/src/sgap_2.o": 0.101, + "build/src/sgap_3.o": 0.105, + "build/src/sgap_4.o": 0.085, + "build/src/sgap_5.o": 0.085, + "build/src/sgap_6.o": 0.109, + "build/src/sgap_8.o": 0.115, + "build/src/snd1.o": 0.077, + "build/src/snd10.o": 0.083, + "build/src/snd11.o": 0.086, + "build/src/snd12.o": 0.08, + "build/src/snd2.o": 0.08, + "build/src/snd3.o": 0.07, + "build/src/snd4.o": 0.154, + "build/src/snd5.o": 0.125, + "build/src/snd6.o": 0.082, + "build/src/snd7.o": 0.076, + "build/src/snd8.o": 0.129, + "build/src/snd9.o": 0.167, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.153, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.606, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.529, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.124, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.084, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.141, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.194, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.13, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.101, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.1, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.233, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.082, "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.22, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.197, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.121, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.265, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.117, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.573, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.473, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.17, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.256, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.075, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.143, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.089, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.223, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.311, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.068, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.381, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.073, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.072, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.122, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.089, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.151, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.14, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.088, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.155, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.613, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.388, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.187, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.238, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.096, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.138, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.086, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.208, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.219, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.085, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.337, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.078, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.086, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.117, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.097, "build/src/ov_SC03_015/ov_SC03_015.o": 0.195, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.723, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.563, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.068, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.076, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.151, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.417, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.288, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.087, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.216, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.309, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.138, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.244, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.117, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.091, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.084, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.131, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.712, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.617, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.623, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.47, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.083, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.074, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.15, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.194, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.127, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.107, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.107, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.203, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.088, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.249, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.129, + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.142, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.093, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.163, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.607, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.484, "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.135, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.323, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.161, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.146, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.084, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.314, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.329, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.137, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.442, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.135, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.134, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.115, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.331, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.248, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.666, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.559, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.109, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.077, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.171, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.439, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.259, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.161, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.19, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.256, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.166, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.26, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.155, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.162, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.271, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.161, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.523, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.358, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.223, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.291, - "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.115, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.229, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.198, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.194, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.803, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.089, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.101 + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.228, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.07, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.115, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.076, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.233, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.225, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.09, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.361, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.09, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.084, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.098, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.109, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.139, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.511, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.437, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.058, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.073, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.131, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.177, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.184, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.135, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.092, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.247, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.097, + "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.185, + "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.179, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.095, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.098, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.101, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.439, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.29, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.121, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.235, + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.08, + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.107, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.098, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.121, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.569, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.077, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.078 }, "ok": true, - "seconds": 4.4 + "seconds": 3.3 } diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index 533664a9c0..961f44eb3e 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -17682,3 +17682,12 @@ {"ts": "2026-09-09 11:53:53", "label": "r1", "rung": "R", "calib": {"head": "1761a3125", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC07_010/ov_SC07_010_jr_80135D20.c", "fn": "func_80135D20", "addr": 2148752672, "aliases": ["ov_SC07_010"], "header": false, "nhash_before": "716cc05fc1252ab66107d25423410f6a2a0d167e", "nhash_after": "b3f98953208071d2f2f72b4e81c8c369ba1766dc", "candidates": 47, "pins": 1, "verdict": "LEVER-FREE", "recipe": "R7", "how": "do-while @609", "sites": []} {"ts": "2026-09-09 11:53:55", "label": "r1", "rung": "R", "calib": {"head": "1761a3125", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC07_011/ov_SC07_011_jr_80135D20.c", "fn": "func_80135D20", "addr": 2148752672, "aliases": ["ov_SC07_011"], "header": false, "nhash_before": "716cc05fc1252ab66107d25423410f6a2a0d167e", "nhash_after": "b3f98953208071d2f2f72b4e81c8c369ba1766dc", "candidates": 47, "pins": 1, "verdict": "LEVER-FREE", "recipe": "R7", "how": "do-while @604", "sites": []} {"ts": "2026-09-09 11:54:03", "label": "r1", "rung": "R", "calib": {"head": "1761a3125", "stamp": "b44c5a8a3423"}, "tu": "src/shared/ov/func_80135D20__616418a6.h", "fn": "func_80135D20", "addr": 2148752672, "aliases": ["ov_SC03_126", "ov_SC04_021", "ov_SC05_019"], "header": true, "nhash_before": "716cc05fc1252ab66107d25423410f6a2a0d167e", "nhash_after": "b3f98953208071d2f2f72b4e81c8c369ba1766dc", "candidates": 47, "pins": 1, "verdict": "LEVER-FREE", "recipe": "R7", "how": "do-while @20", "sites": []} +{"ts": "2026-09-09 12:13:31", "label": "r2a", "rung": "R", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_MAIN_012/ov_MAIN_012_jr_8015A3C8.c", "fn": "func_80163EC8", "addr": 2148941512, "aliases": ["ov_MAIN_012"], "header": false, "nhash_before": "f291a077544a77707d70d488891fbed3b1d7d6b4", "nhash_after": null, "candidates": 146, "pins": 1, "verdict": "RESIDUE", "recipe": null, "how": null, "sites": [{"ord": 0, "kind": "pin", "cls": "A", "detail": "$2", "via": "", "line": 6364, "verdict": "NEEDED", "why": "", "oracle": "DIFFERS"}]} +{"ts": "2026-09-09 12:15:45", "label": "r2b", "rung": "R", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_MAIN_012/ov_MAIN_012_jr_8015A3C8.c", "fn": "func_80163EC8", "addr": 2148941512, "aliases": ["ov_MAIN_012"], "header": false, "nhash_before": null, "nhash_after": null, "candidates": 154, "pins": 1, "verdict": "RESIDUE", "recipe": null, "how": null, "sites": [{"ord": 0, "kind": "pin", "cls": "A", "detail": "$2", "via": "", "line": 6364, "verdict": "NEEDED", "why": "", "oracle": "DIFFERS"}]} +{"ts": "2026-09-09 12:16:21", "label": "d1", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c", "fn": "func_80163EC8", "addr": 2148941512, "aliases": null, "header": false, "includers": 0, "nhash_before": "f291a077544a77707d70d488891fbed3b1d7d6b4", "nhash_after": "3b27c13d8d73f260776d8663e626ffa6042dc620", "source": ".run/P36/permuter/ov_SC04_011__func_80163EC8/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.435, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o"], "before_text": "void func_80163EC8(s32 param_1) {\n extern Blk8 D_801ED2B0;\n extern u16 D_800B99DA;\n extern u8 func_801656D0(s32 a0, s32 a1);\n extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);\n extern void func_80015978(s32 a0, s32 *a1);\n extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);\n\n Blk8 in;\n u16 out[4];\n s16 buf[4];\n s32 psVar6;\n s32 iVar8;\n s32 iVar7;\n register s32 uVar5 __asm__(\"$2\"); /* PIN (flagged): uVar5 -> $v0 */ // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B t3_tus1)\n u16 uVar4;\n u8 uVar3;\n\n in = D_801ED2B0;\n psVar6 = *(s32 *)(param_1 + 0x4c);\n iVar8 = *(s32 *)(param_1 + 0x20);\n func_80162D88((s32 *)param_1);\n\n if (*(s32 *)(psVar6 + 0x184) == 0) {\n uVar5 = *(s32 *)(psVar6 + 0x44);\n *(s16 *)(psVar6 + 0x18a) = 0;\n *(s16 *)(psVar6 + 0x188) = 0;\n *(s32 *)(psVar6 + 0x44) = uVar5 & ~0x20;\n func_80146CA0((void *)param_1);\n func_80146CA0((void *)param_1);\n return;\n }\n if (*(s16 *)(*(s32 *)(psVar6 + 0x184) + 0x36) == *(u16 *)(psVar6 + 0x194)) {\n goto LAB_matched;\n }\n *(s32 *)(psVar6 + 0x184) = 0;\n uVar5 = *(s32 *)(psVar6 + 0x44);\n *(s16 *)(psVar6 + 0x18a) = 0;\n *(s16 *)(psVar6 + 0x188) = 0;\n *(s32 *)(psVar6 + 0x44) = uVar5 & ~0x20;\n func_80146CA0((void *)param_1);\n func_80146CA0((void *)param_1);\n return;\n\nLAB_matched:\n *(s16 *)(psVar6 + 0x18a) = *(u16 *)(psVar6 + 0x18a) + 1;\n if ((D_800B99DA & 3) == 0) {\n if (*(s16 *)(psVar6 + 0x188) >= *(u8 *)(param_1 + 0x67)) {\n *(s16 *)(psVar6 + 0x188) = *(s16 *)(psVar6 + 0x188) - *(u8 *)(param_1 + 0x67);\n } else {\n *(s16 *)(psVar6 + 0x188) = 0;\n }\n if (*(s16 *)(psVar6 + 0x188) < 0) {\n *(s16 *)(psVar6 + 0x188) = 0;\n }\n }\n\n *(s16 *)(param_1 + 0x66) = *(u16 *)(param_1 + 0x66) + 0x40;\n uVar5 = func_80148800((s32 *)psVar6);\n if ((uVar5 & 0x80) != 0) {\n *(s16 *)(param_1 + 0x66) = 0;\n uVar3 = func_801656D0(psVar6, func_8014CA00(*(s32 *)(psVar6 + 0x184)) & 0xff);\n *(s16 *)(psVar6 + 0x188) = *(u16 *)(psVar6 + 0x188) + uVar3;\n *(s16 *)(iVar8 + 0x1a) = 0x4000;\n *(s16 *)(iVar8 + 0x18) = 0x4000;\n *(s32 *)(iVar8 + 0x48) = *(s16 *)(param_1 + 0x58);\n *(s32 *)(iVar8 + 0x4c) = *(s16 *)(param_1 + 0x5a);\n *(s32 *)(iVar8 + 0x50) = *(s16 *)(param_1 + 0x5c);\n ((void (*)(s32, s32, s32))func_80149350)(param_1, (s32)&in, (s32)out);\n *(s16 *)(param_1 + 0x6) = out[0];\n *(s16 *)(param_1 + 0xa) = out[1];\n *(s16 *)(param_1 + 0xe) = out[2];\n }\n\n if (0x80 < *(s16 *)(psVar6 + 0x188)) {\n *(s16 *)(psVar6 + 0x188) = 0x80;\n }\n if (*(s16 *)(psVar6 + 0x188) >= 0x80) {\n iVar7 = *(s32 *)(psVar6 + 0x184);\n if (iVar7 != 0) {\n func_80015978(iVar7 + 4, (s32 *)buf);\n buf[3] = 0;\n uVar4 = func_80156370(0xe);\n func_8014C4AC(iVar7, 0xe, uVar4, buf, *(s16 *)(iVar8 + 0x12));\n func_80146994(0x33, param_1, 0, iVar7);\n }\n } else {\n if (*(s16 *)(psVar6 + 0x18a) < 0x80 && *(u16 *)psVar6 != 0x19) {\n goto LAB_end;\n }\n iVar7 = *(s32 *)(psVar6 + 0x184);\n if (iVar7 != 0) {\n func_80015978(iVar7 + 4, (s32 *)buf);\n buf[3] = 0;\n uVar4 = func_80156370(0x21);\n func_8014C4AC(iVar7, 0x21, uVar4, buf, *(s16 *)(iVar8 + 0x12));\n if ((*(s32 *)(iVar7 + 0xb4) & 0x40000) != 0) {\n func_8014AD30(param_1, (u16 *)buf, 0, *(s16 *)(iVar7 + 0x60));\n }\n }\n }\n\n uVar5 = func_8014CA00(iVar7);\n *(s32 *)(psVar6 + 0x184) = uVar5;\n if (0x1e < (u32)uVar5) {\n *(s32 *)(psVar6 + 0x184) = 0;\n }\n func_80146E90((s32 *)param_1, 0x20);\n *(s32 *)(psVar6 + 0x44) = *(s32 *)(psVar6 + 0x44) & ~0x20;\n func_80147324(0x449);\n func_80146CA0((void *)param_1);\n func_80146CA0((void *)param_1);\n\nLAB_end:\n uVar4 = func_80012F74(*(s16 *)(iVar8 + 0x1a), 0x1800, 3, 1);\n *(s16 *)(iVar8 + 0x1a) = uVar4;\n *(s16 *)(iVar8 + 0x18) = uVar4;\n uVar4 = func_80012F74(*(s16 *)(param_1 + 0x6), *(s16 *)(param_1 + 0x58), 8, 1);\n *(s16 *)(param_1 + 0x6) = uVar4;\n uVar4 = func_80012F74(*(s16 *)(param_1 + 0xa), *(s16 *)(param_1 + 0x5a), 8, 1);\n *(s16 *)(param_1 + 0xa) = uVar4;\n uVar4 = func_80012F74(*(s16 *)(param_1 + 0xe), *(s16 *)(param_1 + 0x5c), 8, 1);\n *(s16 *)(param_1 + 0xe) = uVar4;\n}\n", "after_text": "void func_80163EC8(s32 param_1)\n{\n extern Blk8 D_801ED2B0;\n extern u16 D_800B99DA;\n extern u8 func_801656D0(s32 a0, s32 a1);\n extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);\n extern void func_80015978(s32 a0, s32 *a1);\n extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);\n Blk8 in;\n u16 out[4];\n s16 buf[4];\n s32 psVar6;\n s32 iVar8;\n s32 iVar7;\n s32 uVar5;\n u16 uVar4;\n u8 uVar3;\n in = D_801ED2B0;\n psVar6 = *((s32 *) (param_1 + 0x4c));\n iVar8 = *((s32 *) (param_1 + 0x20));\n func_80162D88((s32 *) param_1);\n if ((*((s32 *) (psVar6 + 0x184))) == 0)\n {\n ;\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n }\n if ((*((s16 *) ((*((s32 *) (psVar6 + 0x184))) + 0x36))) == (*((u16 *) (psVar6 + 0x194))))\n {\n goto LAB_matched;\n }\n *((s32 *) (psVar6 + 0x184)) = 0;\n ;\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n LAB_matched:\n *((s16 *) (psVar6 + 0x18a)) = (*((u16 *) (psVar6 + 0x18a))) + 1;\n\n if ((D_800B99DA & 3) == 0)\n {\n if ((*((s16 *) (psVar6 + 0x188))) >= (*((u8 *) (param_1 + 0x67))))\n {\n *((s16 *) (psVar6 + 0x188)) = (*((s16 *) (psVar6 + 0x188))) - (*((u8 *) (param_1 + 0x67)));\n }\n else\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n if ((*((s16 *) (psVar6 + 0x188))) < 0)\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n }\n *((s16 *) (param_1 + 0x66)) = (*((u16 *) (param_1 + 0x66))) + 0x40;\n uVar5 = func_80148800((s32 *) psVar6);\n if ((uVar5 & 0x80) != 0)\n {\n *((s16 *) (param_1 + 0x66)) = 0;\n uVar3 = func_801656D0(psVar6, func_8014CA00(*((s32 *) (psVar6 + 0x184))) & 0xff);\n *((s16 *) (psVar6 + 0x188)) = (*((u16 *) (psVar6 + 0x188))) + uVar3;\n *((s16 *) (iVar8 + 0x1a)) = 0x4000;\n *((s16 *) (iVar8 + 0x18)) = 0x4000;\n *((s32 *) (iVar8 + 0x48)) = *((s16 *) (param_1 + 0x58));\n *((s32 *) (iVar8 + 0x4c)) = *((s16 *) (param_1 + 0x5a));\n *((s32 *) (iVar8 + 0x50)) = *((s16 *) (param_1 + 0x5c));\n ((void (*)(s32, s32, s32)) func_80149350)(param_1, (s32) (&in), (s32) out);\n *((s16 *) (param_1 + 0x6)) = out[0];\n *((s16 *) (param_1 + 0xa)) = out[1];\n *((s16 *) (param_1 + 0xe)) = out[2];\n }\n if (0x80 < (*((s16 *) (psVar6 + 0x188))))\n {\n *((s16 *) (psVar6 + 0x188)) = 0x80;\n }\n if ((*((s16 *) (psVar6 + 0x188))) >= 0x80)\n {\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0xe);\n func_8014C4AC(iVar7, 0xe, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n func_80146994(0x33, param_1, 0, iVar7);\n }\n }\n else\n {\n if (((*((s16 *) (psVar6 + 0x18a))) < 0x80) && ((*((u16 *) psVar6)) != 0x19))\n {\n goto LAB_end;\n }\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0x21);\n func_8014C4AC(iVar7, 0x21, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n if (((*((s32 *) (iVar7 + 0xb4))) & 0x40000) != 0)\n {\n func_8014AD30(param_1, (u16 *) buf, 0, *((s16 *) (iVar7 + 0x60)));\n }\n }\n }\n uVar5 = func_8014CA00(iVar7);\n *((s32 *) (psVar6 + 0x184)) = uVar5;\n if (0x1e < ((u32) uVar5))\n {\n *((s32 *) (psVar6 + 0x184)) = 0;\n }\n func_80146E90((s32 *) param_1, 0x20);\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80147324(0x449);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n LAB_end:\n uVar4 = func_80012F74(*((s16 *) (iVar8 + 0x1a)), 0x1800, 3, 1);\n\n *((s16 *) (iVar8 + 0x1a)) = uVar4;\n *((s16 *) (iVar8 + 0x18)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0x6)), *((s16 *) (param_1 + 0x58)), 8, 1);\n *((s16 *) (param_1 + 0x6)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xa)), *((s16 *) (param_1 + 0x5a)), 8, 1);\n *((s16 *) (param_1 + 0xa)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xe)), *((s16 *) (param_1 + 0x5c)), 8, 1);\n *((s16 *) (param_1 + 0xe)) = uVar4;\n}\n"} +{"ts": "2026-09-09 12:17:35", "label": "d1t", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c", "fn": "func_80163EC8", "addr": 2148941512, "aliases": null, "header": false, "includers": 0, "nhash_before": "3b27c13d8d73f260776d8663e626ffa6042dc620", "nhash_after": "75de33be007e6586e43ae06528f8f9feab8924a7", "source": ".run/P36/permuter/ov_SC04_011__func_80163EC8/body_tidy.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.415, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o"], "before_text": "void func_80163EC8(s32 param_1)\n{\n extern Blk8 D_801ED2B0;\n extern u16 D_800B99DA;\n extern u8 func_801656D0(s32 a0, s32 a1);\n extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);\n extern void func_80015978(s32 a0, s32 *a1);\n extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);\n Blk8 in;\n u16 out[4];\n s16 buf[4];\n s32 psVar6;\n s32 iVar8;\n s32 iVar7;\n s32 uVar5;\n u16 uVar4;\n u8 uVar3;\n in = D_801ED2B0;\n psVar6 = *((s32 *) (param_1 + 0x4c));\n iVar8 = *((s32 *) (param_1 + 0x20));\n func_80162D88((s32 *) param_1);\n if ((*((s32 *) (psVar6 + 0x184))) == 0)\n {\n ;\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n }\n if ((*((s16 *) ((*((s32 *) (psVar6 + 0x184))) + 0x36))) == (*((u16 *) (psVar6 + 0x194))))\n {\n goto LAB_matched;\n }\n *((s32 *) (psVar6 + 0x184)) = 0;\n ;\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n LAB_matched:\n *((s16 *) (psVar6 + 0x18a)) = (*((u16 *) (psVar6 + 0x18a))) + 1;\n\n if ((D_800B99DA & 3) == 0)\n {\n if ((*((s16 *) (psVar6 + 0x188))) >= (*((u8 *) (param_1 + 0x67))))\n {\n *((s16 *) (psVar6 + 0x188)) = (*((s16 *) (psVar6 + 0x188))) - (*((u8 *) (param_1 + 0x67)));\n }\n else\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n if ((*((s16 *) (psVar6 + 0x188))) < 0)\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n }\n *((s16 *) (param_1 + 0x66)) = (*((u16 *) (param_1 + 0x66))) + 0x40;\n uVar5 = func_80148800((s32 *) psVar6);\n if ((uVar5 & 0x80) != 0)\n {\n *((s16 *) (param_1 + 0x66)) = 0;\n uVar3 = func_801656D0(psVar6, func_8014CA00(*((s32 *) (psVar6 + 0x184))) & 0xff);\n *((s16 *) (psVar6 + 0x188)) = (*((u16 *) (psVar6 + 0x188))) + uVar3;\n *((s16 *) (iVar8 + 0x1a)) = 0x4000;\n *((s16 *) (iVar8 + 0x18)) = 0x4000;\n *((s32 *) (iVar8 + 0x48)) = *((s16 *) (param_1 + 0x58));\n *((s32 *) (iVar8 + 0x4c)) = *((s16 *) (param_1 + 0x5a));\n *((s32 *) (iVar8 + 0x50)) = *((s16 *) (param_1 + 0x5c));\n ((void (*)(s32, s32, s32)) func_80149350)(param_1, (s32) (&in), (s32) out);\n *((s16 *) (param_1 + 0x6)) = out[0];\n *((s16 *) (param_1 + 0xa)) = out[1];\n *((s16 *) (param_1 + 0xe)) = out[2];\n }\n if (0x80 < (*((s16 *) (psVar6 + 0x188))))\n {\n *((s16 *) (psVar6 + 0x188)) = 0x80;\n }\n if ((*((s16 *) (psVar6 + 0x188))) >= 0x80)\n {\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0xe);\n func_8014C4AC(iVar7, 0xe, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n func_80146994(0x33, param_1, 0, iVar7);\n }\n }\n else\n {\n if (((*((s16 *) (psVar6 + 0x18a))) < 0x80) && ((*((u16 *) psVar6)) != 0x19))\n {\n goto LAB_end;\n }\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0x21);\n func_8014C4AC(iVar7, 0x21, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n if (((*((s32 *) (iVar7 + 0xb4))) & 0x40000) != 0)\n {\n func_8014AD30(param_1, (u16 *) buf, 0, *((s16 *) (iVar7 + 0x60)));\n }\n }\n }\n uVar5 = func_8014CA00(iVar7);\n *((s32 *) (psVar6 + 0x184)) = uVar5;\n if (0x1e < ((u32) uVar5))\n {\n *((s32 *) (psVar6 + 0x184)) = 0;\n }\n func_80146E90((s32 *) param_1, 0x20);\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80147324(0x449);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n LAB_end:\n uVar4 = func_80012F74(*((s16 *) (iVar8 + 0x1a)), 0x1800, 3, 1);\n\n *((s16 *) (iVar8 + 0x1a)) = uVar4;\n *((s16 *) (iVar8 + 0x18)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0x6)), *((s16 *) (param_1 + 0x58)), 8, 1);\n *((s16 *) (param_1 + 0x6)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xa)), *((s16 *) (param_1 + 0x5a)), 8, 1);\n *((s16 *) (param_1 + 0xa)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xe)), *((s16 *) (param_1 + 0x5c)), 8, 1);\n *((s16 *) (param_1 + 0xe)) = uVar4;\n}\n", "after_text": "void func_80163EC8(s32 param_1)\n{\n extern Blk8 D_801ED2B0;\n extern u16 D_800B99DA;\n extern u8 func_801656D0(s32 a0, s32 a1);\n extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);\n extern void func_80015978(s32 a0, s32 *a1);\n extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4);\n Blk8 in;\n u16 out[4];\n s16 buf[4];\n s32 psVar6;\n s32 iVar8;\n s32 iVar7;\n s32 uVar5;\n u16 uVar4;\n u8 uVar3;\n in = D_801ED2B0;\n psVar6 = *((s32 *) (param_1 + 0x4c));\n iVar8 = *((s32 *) (param_1 + 0x20));\n func_80162D88((s32 *) param_1);\n if ((*((s32 *) (psVar6 + 0x184))) == 0)\n {\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n }\n if ((*((s16 *) ((*((s32 *) (psVar6 + 0x184))) + 0x36))) == (*((u16 *) (psVar6 + 0x194))))\n {\n goto LAB_matched;\n }\n *((s32 *) (psVar6 + 0x184)) = 0;\n *((s16 *) (psVar6 + 0x18a)) = 0;\n *((s16 *) (psVar6 + 0x188)) = 0;\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n return;\n LAB_matched:\n *((s16 *) (psVar6 + 0x18a)) = (*((u16 *) (psVar6 + 0x18a))) + 1;\n\n if ((D_800B99DA & 3) == 0)\n {\n if ((*((s16 *) (psVar6 + 0x188))) >= (*((u8 *) (param_1 + 0x67))))\n {\n *((s16 *) (psVar6 + 0x188)) = (*((s16 *) (psVar6 + 0x188))) - (*((u8 *) (param_1 + 0x67)));\n }\n else\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n if ((*((s16 *) (psVar6 + 0x188))) < 0)\n {\n *((s16 *) (psVar6 + 0x188)) = 0;\n }\n }\n *((s16 *) (param_1 + 0x66)) = (*((u16 *) (param_1 + 0x66))) + 0x40;\n uVar5 = func_80148800((s32 *) psVar6);\n if ((uVar5 & 0x80) != 0)\n {\n *((s16 *) (param_1 + 0x66)) = 0;\n uVar3 = func_801656D0(psVar6, func_8014CA00(*((s32 *) (psVar6 + 0x184))) & 0xff);\n *((s16 *) (psVar6 + 0x188)) = (*((u16 *) (psVar6 + 0x188))) + uVar3;\n *((s16 *) (iVar8 + 0x1a)) = 0x4000;\n *((s16 *) (iVar8 + 0x18)) = 0x4000;\n *((s32 *) (iVar8 + 0x48)) = *((s16 *) (param_1 + 0x58));\n *((s32 *) (iVar8 + 0x4c)) = *((s16 *) (param_1 + 0x5a));\n *((s32 *) (iVar8 + 0x50)) = *((s16 *) (param_1 + 0x5c));\n ((void (*)(s32, s32, s32)) func_80149350)(param_1, (s32) (&in), (s32) out);\n *((s16 *) (param_1 + 0x6)) = out[0];\n *((s16 *) (param_1 + 0xa)) = out[1];\n *((s16 *) (param_1 + 0xe)) = out[2];\n }\n if (0x80 < (*((s16 *) (psVar6 + 0x188))))\n {\n *((s16 *) (psVar6 + 0x188)) = 0x80;\n }\n if ((*((s16 *) (psVar6 + 0x188))) >= 0x80)\n {\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0xe);\n func_8014C4AC(iVar7, 0xe, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n func_80146994(0x33, param_1, 0, iVar7);\n }\n }\n else\n {\n if (((*((s16 *) (psVar6 + 0x18a))) < 0x80) && ((*((u16 *) psVar6)) != 0x19))\n {\n goto LAB_end;\n }\n iVar7 = *((s32 *) (psVar6 + 0x184));\n if (iVar7 != 0)\n {\n func_80015978(iVar7 + 4, (s32 *) buf);\n buf[3] = 0;\n uVar4 = func_80156370(0x21);\n func_8014C4AC(iVar7, 0x21, uVar4, buf, *((s16 *) (iVar8 + 0x12)));\n if (((*((s32 *) (iVar7 + 0xb4))) & 0x40000) != 0)\n {\n func_8014AD30(param_1, (u16 *) buf, 0, *((s16 *) (iVar7 + 0x60)));\n }\n }\n }\n uVar5 = func_8014CA00(iVar7);\n *((s32 *) (psVar6 + 0x184)) = uVar5;\n if (0x1e < ((u32) uVar5))\n {\n *((s32 *) (psVar6 + 0x184)) = 0;\n }\n func_80146E90((s32 *) param_1, 0x20);\n *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20);\n func_80147324(0x449);\n func_80146CA0((void *) param_1);\n func_80146CA0((void *) param_1);\n LAB_end:\n uVar4 = func_80012F74(*((s16 *) (iVar8 + 0x1a)), 0x1800, 3, 1);\n\n *((s16 *) (iVar8 + 0x1a)) = uVar4;\n *((s16 *) (iVar8 + 0x18)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0x6)), *((s16 *) (param_1 + 0x58)), 8, 1);\n *((s16 *) (param_1 + 0x6)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xa)), *((s16 *) (param_1 + 0x5a)), 8, 1);\n *((s16 *) (param_1 + 0xa)) = uVar4;\n uVar4 = func_80012F74(*((s16 *) (param_1 + 0xe)), *((s16 *) (param_1 + 0x5c)), 8, 1);\n *((s16 *) (param_1 + 0xe)) = uVar4;\n}\n"} +{"ts": "2026-09-09 12:17:42", "label": "d1", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_80135D20.c", "fn": "func_80135D20", "addr": 2148752672, "aliases": null, "header": false, "includers": 0, "nhash_before": "b3f98953208071d2f2f72b4e81c8c369ba1766dc", "nhash_after": "5e32b172a5cfc3d5a2f39932d2692db96edd965d", "source": ".run/P36/permuter/ov_SC04_011__func_80135D20/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.098, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o"], "before_text": "s32 func_80135D20(s32 arg0, s32 arg1, u16 *arg2)\n{\n u8 dead[96];\n u16 sp[3];\n s32 *p;\n s32 flag;\n s32 q;\n\n sp[0] = arg2[0];\n sp[1] = arg2[1] + 0x300;\n sp[2] = arg2[2];\n switch (((s32 (*)(void *, s32, s16 *, s16 *))func_80135480)((void *)arg0, arg1, (s16 *)arg2, (s16 *)sp)) {\n case 0:\n return 0;\n case 1:\n q = arg0 + 0x34;\n p = (s32 *)((arg1 & 0xFFFFFFF) | 0x80000000);\n do { flag = 0; } while (0);\n break;\n case 2:\n q = arg0 + 0x34;\n p = (s32 *)((arg1 & 0xFFFFFFF) | 0x80000000);\n flag = 1;\n break;\n case 3:\n q = arg0 + 0x34;\n p = &D_801EDA64;\n flag = 0;\n break;\n case 4:\n q = (s32)&D_801EDA44;\n p = &D_801EDA64;\n flag = 1;\n break;\n }\n if (arg1 >= 0) {\n goto elsepath;\n }\n if (func_80135EB0(p, 0) != 0) {\n goto hit;\n }\n p = (s32 *)*p;\n if (p == NULL) {\n return 0;\n }\nloop:\n if (func_80135EB0(p, 0) == 0) {\n goto body;\n }\nhit:\n func_80136A94(flag, arg0, (s32)arg2, q);\n return 1;\nbody:\n p = (s32 *)*p;\n if (p != NULL) {\n goto loop;\n }\n return 0;\nelsepath:\n if (func_801345F8(arg1) != 0) {\n goto hit;\n }\n return 0;\n}\n", "after_text": "s32 func_80135D20(s32 arg0, s32 arg1, u16 *arg2)\n{\n u8 dead[96];\n u16 sp[3];\n s32 *p;\n s32 flag;\n s32 q;\n sp[0] = arg2[0];\n sp[1] = arg2[1] + 0x300;\n sp[2] = arg2[2];\n switch (((s32 (*)(void *, s32, s16 *, s16 *)) func_80135480)((void *) arg0, arg1, (s16 *) arg2, (s16 *) sp))\n {\n case 0:\n return 0;\n\n case 1:\n q = arg0 + 0x34;\n p = (s32 *) ((arg1 & 0xFFFFFFF) | 0x80000000);\n do { flag = 0; } while (0);\n break;\n\n case 2:\n q = arg0 + 0x34;\n p = (s32 *) ((arg1 & 0xFFFFFFF) | 0x80000000);\n flag = 1;\n break;\n\n case 3:\n q = arg0 + 0x34;\n p = &D_801EDA64;\n flag = 0;\n break;\n\n case 4:\n q = (s32) (&D_801EDA44);\n p = &D_801EDA64;\n flag = 1;\n break;\n\n }\n\n if (arg1 >= 0)\n {\n goto elsepath;\n }\n if (func_80135EB0(p, 0) != 0)\n {\n goto hit;\n }\n p = (s32 *) (*p);\n if (p == ((void *) 0))\n {\n return 0;\n }\n loop:\n if (func_80135EB0(p, 0) == 0)\n {\n goto body;\n }\n\n hit:\n func_80136A94(flag, arg0, (s32) arg2, q);\n\n return 1;\n body:\n p = (s32 *) (*p);\n\n if (p != ((void *) 0))\n {\n goto loop;\n }\n return 0;\n elsepath:\n if (func_801345F8(arg1) != 0)\n {\n goto hit;\n }\n\n return 0;\n}\n"} +{"ts": "2026-09-09 12:17:44", "label": "d1", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c", "fn": "func_8015D01C", "addr": 2148913180, "aliases": null, "header": false, "includers": 0, "nhash_before": "4ea6e9f0cbcdd496c2fa7dcf4e6f501660f64ad5", "nhash_after": "807dc50aee4eff6ee54cf4b983462a43c42b6a57", "source": ".run/P36/permuter/ov_SC04_011__func_8015D01C/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.394, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o"], "before_text": "void func_8015D01C(int param_1) {\n extern s32 func_801725F4(u8 *a0);\n extern int D_800D550C;\n extern int D_80192C8C;\n\n int iVar4;\n unsigned short uVar1;\n register unsigned short uVar5 __asm__(\"$17\"); // !FAKE: pin $17 \u2014 NEEDED DIFFERS (P36 rung B t3_tus1)\n short sVar2;\n short sVar3;\n\n ((void (*)(int, void *))func_80154274)(param_1, &D_800D550C);\n *(short *)(*(int *)(param_1 + 0x20) + 0x10) = 0;\n iVar4 = *(short *)(*(int *)(param_1 + 0x20) + 0x12);\n uVar1 = *(unsigned short *)(*(int *)(*(int *)(param_1 + 0x180) + 0x20) + 0x12);\n uVar5 = (uVar1 + 0x800) & 0xfff;\n sVar2 = func_80012A60(iVar4, (short)uVar1);\n sVar3 = func_80012A60(iVar4, uVar5);\n if (sVar2 < sVar3) {\n *(short *)(*(int *)(param_1 + 0x20) + 0x12) = uVar1;\n } else {\n *(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) = uVar5;\n }\n *(int *)(param_1 + 0x38) = (int)&D_80192C8C | 0x40000000;\n ((void (*)(int))func_801725F4)(param_1);\n ((void (*)(int))func_80146CA0)(param_1);\n}\n", "after_text": "void func_8015D01C(int param_1)\n{\n extern s32 func_801725F4(u8 *a0);\n extern int D_800D550C;\n short new_var2;\n unsigned short new_var;\n extern int D_80192C8C;\n short sVar2;\n int iVar4;\n unsigned short uVar1;\n unsigned short uVar5;\n short sVar3;\n ((void (*)(int, void *)) func_80154274)(param_1, &D_800D550C);\n *((short *) ((*((int *) (param_1 + 0x20))) + 0x10)) = 0;\n iVar4 = *((short *) ((*((int *) (param_1 + 0x20))) + 0x12));\n uVar1 = *((unsigned short *) ((*((int *) ((*((int *) (param_1 + 0x180))) + 0x20))) + 0x12));\n uVar5 = (uVar1 + 0x800) & 0xfff;\n new_var = uVar5;\n new_var2 = new_var;\n sVar2 = func_80012A60(iVar4, (short) uVar1);\n sVar3 = func_80012A60(iVar4, new_var2);\n if (sVar2 < sVar3)\n {\n *((short *) ((*((int *) (param_1 + 0x20))) + 0x12)) = uVar1;\n }\n else\n {\n *((unsigned short *) ((*((int *) (param_1 + 0x20))) + 0x12)) = new_var;\n }\n *((int *) (param_1 + 0x38)) = ((int) (&D_80192C8C)) | 0x40000000;\n ((void (*)(int)) func_801725F4)(param_1);\n ((void (*)(int)) func_80146CA0)(param_1);\n}\n"} +{"ts": "2026-09-09 12:17:45", "label": "d1", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c", "fn": "func_8013E5E8", "addr": 2148787688, "aliases": null, "header": false, "includers": 0, "nhash_before": "f30b00e65b50254377a932e5191337cb4d5242b0", "nhash_after": "897ec8fe80589181ebcc8e0a17b996865a226c66", "source": ".run/P36/permuter/ov_SC04_011__func_8013E5E8/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.103, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o"], "before_text": "void func_8013E5E8(void)\n{\n\n extern u16 D_8011511E;\n extern u16 D_8011511C;\n extern unsigned short D_80115112;\n extern u16 D_80115116;\n extern void (*D_801917E0[])(void);\n register void (*fp)(void) __asm__(\"$2\"); /* pin fn-ptr to $v0 -> store retires early */ // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B t3_tus1)\n func_80029444();\n func_801754A8();\n D_8011511E = func_80014ED4(0);\n D_8011511C = func_80015018(0);\n fp = D_801917E0[D_80115112];\n fp();\n func_800190AC();\n func_80141C04();\n D_80115116 += 1;\n}\n", "after_text": "void func_8013E5E8(void)\n{\n extern u16 D_8011511E;\n extern u16 D_8011511C;\n extern unsigned short D_80115112;\n extern u16 D_80115116;\n extern void (*D_801917E0[])(void);\n void (**new_var)(void);\n void (*fp)(void);\n func_80029444();\n func_801754A8();\n D_8011511E = func_80014ED4(0);\n D_8011511C = func_80015018(0);\n new_var = &D_801917E0[D_80115112];\n fp = *new_var;\n fp();\n func_800190AC();\n func_80141C04();\n D_80115116 += 1;\n}\n"} +{"ts": "2026-09-09 12:17:46", "label": "d1", "rung": "D", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_801734BC.c", "fn": "func_80178840", "addr": 2149025856, "aliases": null, "header": false, "includers": 0, "nhash_before": "e2e0dc0103e0b8dca1527caa55e9e47dc0ceac01", "nhash_after": "2db520e9b186a21b881028de3f98ec815ed3f2d6", "source": ".run/P36/permuter/ov_SC04_011__func_80178840/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.178, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o"], "before_text": "void func_80178840(int param_1) {\n\n extern int D_80193C70;\n extern int D_80193C7C[];\n register int p __asm__(\"$16\"); // !FAKE: pin $16 \u2014 NEEDED DIFFERS (P36 rung B t3_tus1)\n int s1byte;\n p = param_1;\n if ((*(unsigned short *)(p + 0x5c) & 1) != 0) {\n s1byte = *(unsigned char *)(p + 0x5e);\n if (s1byte == 0xc) {\n ((void (*)(int))func_80019064)((int)&D_80193C70);\n }\n ((void (*)(int, int))func_80131E00)(p, D_80193C7C[s1byte]);\n }\n}\n", "after_text": "void func_80178840(int param_1)\n{\n extern int D_80193C70;\n extern int D_80193C7C[];\n int p;\n int s1byte;\n p = param_1;\n if (((*((unsigned short *) (p + 0x5c))) & 1) != 0)\n {\n s1byte = *((unsigned char *) (p + 0x5e));\n if (s1byte == 0xc)\n {\n ((void (*)(int)) func_80019064)((int) (&D_80193C70));\n }\n ((void (*)(int, int)) func_80131E00)(p, D_80193C7C[s1byte]);\n p = param_1;\n }\n}\n"} +{"ts": "2026-09-09 12:18:17", "label": "d1fix", "rung": "R", "calib": {"head": "8fac96651", "stamp": "b44c5a8a3423"}, "tu": "src/ov_SC04_011/ov_SC04_011_jr_80135D20.c", "fn": "func_80135D20", "addr": 2148752672, "aliases": null, "header": false, "includers": 0, "nhash_before": "5e32b172a5cfc3d5a2f39932d2692db96edd965d", "nhash_after": "b3f98953208071d2f2f72b4e81c8c369ba1766dc", "source": ".run/P36/permuter/ov_SC04_011__func_80135D20/body_rungR.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.098, "objects": ["build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o"], "before_text": "s32 func_80135D20(s32 arg0, s32 arg1, u16 *arg2)\n{\n u8 dead[96];\n u16 sp[3];\n s32 *p;\n s32 flag;\n s32 q;\n sp[0] = arg2[0];\n sp[1] = arg2[1] + 0x300;\n sp[2] = arg2[2];\n switch (((s32 (*)(void *, s32, s16 *, s16 *)) func_80135480)((void *) arg0, arg1, (s16 *) arg2, (s16 *) sp))\n {\n case 0:\n return 0;\n\n case 1:\n q = arg0 + 0x34;\n p = (s32 *) ((arg1 & 0xFFFFFFF) | 0x80000000);\n do { flag = 0; } while (0);\n break;\n\n case 2:\n q = arg0 + 0x34;\n p = (s32 *) ((arg1 & 0xFFFFFFF) | 0x80000000);\n flag = 1;\n break;\n\n case 3:\n q = arg0 + 0x34;\n p = &D_801EDA64;\n flag = 0;\n break;\n\n case 4:\n q = (s32) (&D_801EDA44);\n p = &D_801EDA64;\n flag = 1;\n break;\n\n }\n\n if (arg1 >= 0)\n {\n goto elsepath;\n }\n if (func_80135EB0(p, 0) != 0)\n {\n goto hit;\n }\n p = (s32 *) (*p);\n if (p == ((void *) 0))\n {\n return 0;\n }\n loop:\n if (func_80135EB0(p, 0) == 0)\n {\n goto body;\n }\n\n hit:\n func_80136A94(flag, arg0, (s32) arg2, q);\n\n return 1;\n body:\n p = (s32 *) (*p);\n\n if (p != ((void *) 0))\n {\n goto loop;\n }\n return 0;\n elsepath:\n if (func_801345F8(arg1) != 0)\n {\n goto hit;\n }\n\n return 0;\n}\n", "after_text": "s32 func_80135D20(s32 arg0, s32 arg1, u16 *arg2)\n{\n u8 dead[96];\n u16 sp[3];\n s32 *p;\n s32 flag;\n s32 q;\n\n sp[0] = arg2[0];\n sp[1] = arg2[1] + 0x300;\n sp[2] = arg2[2];\n switch (((s32 (*)(void *, s32, s16 *, s16 *))func_80135480)((void *)arg0, arg1, (s16 *)arg2, (s16 *)sp)) {\n case 0:\n return 0;\n case 1:\n q = arg0 + 0x34;\n p = (s32 *)((arg1 & 0xFFFFFFF) | 0x80000000);\n do { flag = 0; } while (0);\n break;\n case 2:\n q = arg0 + 0x34;\n p = (s32 *)((arg1 & 0xFFFFFFF) | 0x80000000);\n flag = 1;\n break;\n case 3:\n q = arg0 + 0x34;\n p = &D_801EDA64;\n flag = 0;\n break;\n case 4:\n q = (s32)&D_801EDA44;\n p = &D_801EDA64;\n flag = 1;\n break;\n }\n if (arg1 >= 0) {\n goto elsepath;\n }\n if (func_80135EB0(p, 0) != 0) {\n goto hit;\n }\n p = (s32 *)*p;\n if (p == NULL) {\n return 0;\n }\nloop:\n if (func_80135EB0(p, 0) == 0) {\n goto body;\n }\nhit:\n func_80136A94(flag, arg0, (s32)arg2, q);\n return 1;\nbody:\n p = (s32 *)*p;\n if (p != NULL) {\n goto loop;\n }\n return 0;\nelsepath:\n if (func_801345F8(arg1) != 0) {\n goto hit;\n }\n return 0;\n}\n"} diff --git a/.run/P36/delever/recipes_r2.log b/.run/P36/delever/recipes_r2.log new file mode 100644 index 0000000000..b203309a91 --- /dev/null +++ b/.run/P36/delever/recipes_r2.log @@ -0,0 +1,2 @@ +delever --recipes: control 2/2 — the identity splice reproduces its text and the untouched file its object +delever --recipes: 533 RESIDUE bodies diff --git a/.run/P36/permuter/outcomes.jsonl b/.run/P36/permuter/outcomes.jsonl index 69a137cd92..3763330269 100644 --- a/.run/P36/permuter/outcomes.jsonl +++ b/.run/P36/permuter/outcomes.jsonl @@ -14,3 +14,8 @@ {"kind": "attempt", "ts": "2026-09-09 11:30:22", "nhash": "fd0a0a6776804081a0e67021650cf9edae8d224d", "tu": "src/ov_SC04_011/ov_SC04_011_after.c", "fn": "func_80148D44", "alias": "ov_SC04_011", "copies": 132, "needed": 2, "kinds": ["keepalive", "pin"], "regs": ["$4"], "secs": 240, "cycles": 3, "j": 4, "levered": 0, "free": 52, "levered_line": "MATCH (68 ins) func_80148D44", "free_line": "DIFF func_80148D44 mine=67 ins, target=68 ins, 52 mismatched", "klass": "cse", "cmd": "/home/musashi/bfm-decomp/.venv/bin/python tools/permuter_ils.py func_80148D44 --draft .run/P36/permuter/ov_SC04_011__func_80148D44/draft.c --asm-subdir .run/P36/permuter/ov_SC04_011__func_80148D44/gas --klass cse --cycles 3 --secs 240 --j 4 --winners .run/P36/permuter/ov_SC04_011__func_80148D44 --pd .run/P36/permuter/ov_SC04_011__func_80148D44/pd --target-o .run/P36/permuter/ov_SC04_011__func_80148D44/target.o", "best": 3, "seconds": 721.9, "rc": 0, "winner": null, "verdict": "NO-MATCH"} {"kind": "attempt", "ts": "2026-09-09 11:30:25", "nhash": "c7541dad40d8b360d4733a5ebe605d560bd28f07", "tu": "src/ov_SC04_011/ov_SC04_011_after.c", "fn": "func_80148E54", "alias": "ov_SC04_011", "copies": 132, "needed": 2, "kinds": ["launder", "pin"], "regs": ["$4"], "secs": 240, "cycles": 3, "j": 4, "levered": 0, "free": 50, "levered_line": "MATCH (67 ins) func_80148E54", "free_line": "DIFF func_80148E54 mine=66 ins, target=67 ins, 50 mismatched", "klass": "cse", "cmd": "/home/musashi/bfm-decomp/.venv/bin/python tools/permuter_ils.py func_80148E54 --draft .run/P36/permuter/ov_SC04_011__func_80148E54/draft.c --asm-subdir .run/P36/permuter/ov_SC04_011__func_80148E54/gas --klass cse --cycles 3 --secs 240 --j 4 --winners .run/P36/permuter/ov_SC04_011__func_80148E54 --pd .run/P36/permuter/ov_SC04_011__func_80148E54/pd --target-o .run/P36/permuter/ov_SC04_011__func_80148E54/target.o", "best": 3, "seconds": 722.0, "rc": 0, "winner": null, "verdict": "NO-MATCH"} {"kind": "attempt", "ts": "2026-09-09 11:35:29", "nhash": "baf2a68c3d1443c2c17776905597b6f64e8f853e", "tu": "src/ov_SC04_011/ov_SC04_011_jr_80140608.c", "fn": "func_801424E4", "alias": "ov_SC04_011", "copies": 132, "needed": 2, "kinds": ["cast", "keepalive"], "regs": [], "secs": 240, "cycles": 3, "j": 4, "levered": 0, "free": 37, "levered_line": "MATCH (58 ins) func_801424E4", "free_line": "DIFF func_801424E4 mine=62 ins, target=58 ins, 37 mismatched", "klass": "regalloc", "cmd": "/home/musashi/bfm-decomp/.venv/bin/python tools/permuter_ils.py func_801424E4 --draft .run/P36/permuter/ov_SC04_011__func_801424E4/draft.c --asm-subdir .run/P36/permuter/ov_SC04_011__func_801424E4/gas --klass regalloc --cycles 3 --secs 240 --j 4 --winners .run/P36/permuter/ov_SC04_011__func_801424E4 --pd .run/P36/permuter/ov_SC04_011__func_801424E4/pd --target-o .run/P36/permuter/ov_SC04_011__func_801424E4/target.o", "best": 2, "seconds": 721.6, "rc": 0, "winner": null, "verdict": "NO-MATCH"} +{"kind": "bank", "ts": "2026-09-09 12:16:21", "nhash": "f291a077544a77707d70d488891fbed3b1d7d6b4", "tu": "src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c", "fn": "func_80163EC8", "alias": "ov_SC04_011", "label": "d1", "applied": true, "apply_out": "delever --apply-body: src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c:func_80163EC8 IDENTICAL on 1 object(s) (0.43 s) \u2014 KEPT, ledgered (rung D, d1)", "gte_refold": "gte_consolidate --apply: src/ is dirty \u2014 commit or tools/delever.py --restore first:\n M src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c"} +{"kind": "bank", "ts": "2026-09-09 12:17:42", "nhash": "716cc05fc1252ab66107d25423410f6a2a0d167e", "tu": "src/ov_SC04_011/ov_SC04_011_jr_80135D20.c", "fn": "func_80135D20", "alias": "ov_SC04_011", "label": "d1", "applied": true, "apply_out": "delever --apply-body: src/ov_SC04_011/ov_SC04_011_jr_80135D20.c:func_80135D20 IDENTICAL on 1 object(s) (0.10 s) \u2014 KEPT, ledgered (rung D, d1)", "gte_refold": "gte_consolidate --apply: src/ is dirty \u2014 commit or tools/delever.py --restore first:\n M src/ov_SC04_011/ov_SC04_011_jr_80135D20.c\n M src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c"} +{"kind": "bank", "ts": "2026-09-09 12:17:44", "nhash": "4ea6e9f0cbcdd496c2fa7dcf4e6f501660f64ad5", "tu": "src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c", "fn": "func_8015D01C", "alias": "ov_SC04_011", "label": "d1", "applied": true, "apply_out": "delever --apply-body: src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c:func_8015D01C IDENTICAL on 1 object(s) (0.39 s) \u2014 KEPT, ledgered (rung D, d1)", "gte_refold": "gte_consolidate --apply: src/ is dirty \u2014 commit or tools/delever.py --restore first:\n M src/ov_SC04_011/ov_SC04_011_jr_80135D20.c\n M src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c"} +{"kind": "bank", "ts": "2026-09-09 12:17:45", "nhash": "f30b00e65b50254377a932e5191337cb4d5242b0", "tu": "src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c", "fn": "func_8013E5E8", "alias": "ov_SC04_011", "label": "d1", "applied": true, "apply_out": "delever --apply-body: src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c:func_8013E5E8 IDENTICAL on 1 object(s) (0.10 s) \u2014 KEPT, ledgered (rung D, d1)", "gte_refold": "gte_consolidate --apply: src/ is dirty \u2014 commit or tools/delever.py --restore first:\n M src/ov_SC04_011/ov_SC04_011_jr_80135D20.c\n M src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c\n M src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c"} +{"kind": "bank", "ts": "2026-09-09 12:17:46", "nhash": "e2e0dc0103e0b8dca1527caa55e9e47dc0ceac01", "tu": "src/ov_SC04_011/ov_SC04_011_jr_801734BC.c", "fn": "func_80178840", "alias": "ov_SC04_011", "label": "d1", "applied": true, "apply_out": "delever --apply-body: src/ov_SC04_011/ov_SC04_011_jr_801734BC.c:func_80178840 IDENTICAL on 1 object(s) (0.18 s) \u2014 KEPT, ledgered (rung D, d1)", "gte_refold": "gte_consolidate --apply: src/ is dirty \u2014 commit or tools/delever.py --restore first:\n M src/ov_SC04_011/ov_SC04_011_jr_80135D20.c\n M src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c\n M src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c\n M src/ov_SC04_011/ov_SC04_011_jr_801734BC.c"} diff --git a/docs/lever-progress.tsv b/docs/lever-progress.tsv index 4d20d58de8..976ffdb17f 100644 --- a/docs/lever-progress.tsv +++ b/docs/lever-progress.tsv @@ -1,2 +1,3 @@ date milestone head sites_AB pins asm bodies_AB distinct_AB marked unmarked gte_levers per_tu_asm_macros class_C class_D class_E class_F class_G 2026-09-09 T6 r1 (rung R's first class) 1761a3125 33957 20512 13445 12578 1758 33957 0 462 314 1722 50 7428 445 76 +2026-09-09 T6 d1 (rung D's four exemplars) 8fac96651 33953 20508 13445 12574 1758 33953 0 462 314 1722 50 7428 445 76 diff --git a/docs/levers.md b/docs/levers.md index ce2e9c5f95..2a84ea7cfd 100644 --- a/docs/levers.md +++ b/docs/levers.md @@ -46,6 +46,7 @@ counted, not marked). E, F and G belong to the canonical type layer and are the | date | milestone | pins | asm | **class A+B sites** | bodies | distinct | GTE levers | per-TU asm macros | C | D | E | F | G | HEAD | |---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---| | 2026-09-09 | T6 r1 (rung R's first class) | 20512 | 13445 | **33957** | 12578 | 1758 | 462 | 314 | 1722 | 50 | 7428 | 445 | 76 | `1761a3125` | +| 2026-09-09 | T6 d1 (rung D's four exemplars) | 20508 | 13445 | **33953** | 12574 | 1758 | 462 | 314 | 1722 | 50 | 7428 | 445 | 76 | `8fac96651` | ### The campaign — every batch, from the ledger (derived on every render) @@ -71,7 +72,8 @@ counted, not marked). E, F and G belong to the canonical type layer and are the | `sweep2` | 2026-09-09 | sweep | 3 | 0 | 0 | 0 | 0 | | `sweep3` | 2026-09-09 | sweep | 134 | 0 | 0 | 0 | 0 | | `r1` | 2026-09-09 | R | 0 | 0 | 0 | 134 | 134 | -| **total** | | | **17,119** | **20,778** | **283** | **134** | **134** | +| `d1` | 2026-09-09 | D | 0 | 0 | 0 | 4 | 4 | +| **total** | | | **17,119** | **20,778** | **283** | **138** | **138** | *Generated by `tools/lever_progress.py --render` from `.run/P36/census/lever_census.json` and `.run/P36/delever/ledger.jsonl`; the series lives in `docs/lever-progress.tsv` (R75: published numbers are generated, never typed).* diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c b/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c index 0c0e9fc6f1..9d29703bfa 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.c @@ -1796,18 +1796,19 @@ extern void func_80141C04(void); void func_8013E5E8(void) { - extern u16 D_8011511E; extern u16 D_8011511C; extern unsigned short D_80115112; extern u16 D_80115116; extern void (*D_801917E0[])(void); - register void (*fp)(void) __asm__("$2"); /* pin fn-ptr to $v0 -> store retires early */ // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B t3_tus1) + void (**new_var)(void); + void (*fp)(void); func_80029444(); func_801754A8(); D_8011511E = func_80014ED4(0); D_8011511C = func_80015018(0); - fp = D_801917E0[D_80115112]; + new_var = &D_801917E0[D_80115112]; + fp = *new_var; fp(); func_800190AC(); func_80141C04(); diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c b/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c index a188292427..6e1fbe478b 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.c @@ -1636,32 +1636,38 @@ void func_8015CFC0(s32 *a0) { // @stuck: none — MATCH (uVar1 pinned $s3, uVar5 pinned $s1; param_1->s2, iVar4->s0 fall out) -void func_8015D01C(int param_1) { +void func_8015D01C(int param_1) +{ extern s32 func_801725F4(u8 *a0); extern int D_800D550C; + short new_var2; + unsigned short new_var; extern int D_80192C8C; - + short sVar2; int iVar4; unsigned short uVar1; - register unsigned short uVar5 __asm__("$17"); // !FAKE: pin $17 — NEEDED DIFFERS (P36 rung B t3_tus1) - short sVar2; + unsigned short uVar5; short sVar3; - - ((void (*)(int, void *))func_80154274)(param_1, &D_800D550C); - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = 0; - iVar4 = *(short *)(*(int *)(param_1 + 0x20) + 0x12); - uVar1 = *(unsigned short *)(*(int *)(*(int *)(param_1 + 0x180) + 0x20) + 0x12); + ((void (*)(int, void *)) func_80154274)(param_1, &D_800D550C); + *((short *) ((*((int *) (param_1 + 0x20))) + 0x10)) = 0; + iVar4 = *((short *) ((*((int *) (param_1 + 0x20))) + 0x12)); + uVar1 = *((unsigned short *) ((*((int *) ((*((int *) (param_1 + 0x180))) + 0x20))) + 0x12)); uVar5 = (uVar1 + 0x800) & 0xfff; - sVar2 = func_80012A60(iVar4, (short)uVar1); - sVar3 = func_80012A60(iVar4, uVar5); - if (sVar2 < sVar3) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = uVar1; - } else { - *(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12) = uVar5; + new_var = uVar5; + new_var2 = new_var; + sVar2 = func_80012A60(iVar4, (short) uVar1); + sVar3 = func_80012A60(iVar4, new_var2); + if (sVar2 < sVar3) + { + *((short *) ((*((int *) (param_1 + 0x20))) + 0x12)) = uVar1; } - *(int *)(param_1 + 0x38) = (int)&D_80192C8C | 0x40000000; - ((void (*)(int))func_801725F4)(param_1); - ((void (*)(int))func_80146CA0)(param_1); + else + { + *((unsigned short *) ((*((int *) (param_1 + 0x20))) + 0x12)) = new_var; + } + *((int *) (param_1 + 0x38)) = ((int) (&D_80192C8C)) | 0x40000000; + ((void (*)(int)) func_801725F4)(param_1); + ((void (*)(int)) func_80146CA0)(param_1); } @@ -4097,129 +4103,139 @@ void func_80163A58(void *a0) { #include "../shared/ov/func_80163C2C.h" -void func_80163EC8(s32 param_1) { +void func_80163EC8(s32 param_1) +{ extern Blk8 D_801ED2B0; extern u16 D_800B99DA; extern u8 func_801656D0(s32 a0, s32 a1); extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_80015978(s32 a0, s32 *a1); extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); - Blk8 in; u16 out[4]; s16 buf[4]; s32 psVar6; s32 iVar8; s32 iVar7; - register s32 uVar5 __asm__("$2"); /* PIN (flagged): uVar5 -> $v0 */ // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B t3_tus1) + s32 uVar5; u16 uVar4; u8 uVar3; - in = D_801ED2B0; - psVar6 = *(s32 *)(param_1 + 0x4c); - iVar8 = *(s32 *)(param_1 + 0x20); - func_80162D88((s32 *)param_1); - - if (*(s32 *)(psVar6 + 0x184) == 0) { - uVar5 = *(s32 *)(psVar6 + 0x44); - *(s16 *)(psVar6 + 0x18a) = 0; - *(s16 *)(psVar6 + 0x188) = 0; - *(s32 *)(psVar6 + 0x44) = uVar5 & ~0x20; - func_80146CA0((void *)param_1); - func_80146CA0((void *)param_1); + psVar6 = *((s32 *) (param_1 + 0x4c)); + iVar8 = *((s32 *) (param_1 + 0x20)); + func_80162D88((s32 *) param_1); + if ((*((s32 *) (psVar6 + 0x184))) == 0) + { + *((s16 *) (psVar6 + 0x18a)) = 0; + *((s16 *) (psVar6 + 0x188)) = 0; + *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20); + func_80146CA0((void *) param_1); + func_80146CA0((void *) param_1); return; } - if (*(s16 *)(*(s32 *)(psVar6 + 0x184) + 0x36) == *(u16 *)(psVar6 + 0x194)) { + if ((*((s16 *) ((*((s32 *) (psVar6 + 0x184))) + 0x36))) == (*((u16 *) (psVar6 + 0x194)))) + { goto LAB_matched; } - *(s32 *)(psVar6 + 0x184) = 0; - uVar5 = *(s32 *)(psVar6 + 0x44); - *(s16 *)(psVar6 + 0x18a) = 0; - *(s16 *)(psVar6 + 0x188) = 0; - *(s32 *)(psVar6 + 0x44) = uVar5 & ~0x20; - func_80146CA0((void *)param_1); - func_80146CA0((void *)param_1); + *((s32 *) (psVar6 + 0x184)) = 0; + *((s16 *) (psVar6 + 0x18a)) = 0; + *((s16 *) (psVar6 + 0x188)) = 0; + *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20); + func_80146CA0((void *) param_1); + func_80146CA0((void *) param_1); return; + LAB_matched: + *((s16 *) (psVar6 + 0x18a)) = (*((u16 *) (psVar6 + 0x18a))) + 1; -LAB_matched: - *(s16 *)(psVar6 + 0x18a) = *(u16 *)(psVar6 + 0x18a) + 1; - if ((D_800B99DA & 3) == 0) { - if (*(s16 *)(psVar6 + 0x188) >= *(u8 *)(param_1 + 0x67)) { - *(s16 *)(psVar6 + 0x188) = *(s16 *)(psVar6 + 0x188) - *(u8 *)(param_1 + 0x67); - } else { - *(s16 *)(psVar6 + 0x188) = 0; + if ((D_800B99DA & 3) == 0) + { + if ((*((s16 *) (psVar6 + 0x188))) >= (*((u8 *) (param_1 + 0x67)))) + { + *((s16 *) (psVar6 + 0x188)) = (*((s16 *) (psVar6 + 0x188))) - (*((u8 *) (param_1 + 0x67))); } - if (*(s16 *)(psVar6 + 0x188) < 0) { - *(s16 *)(psVar6 + 0x188) = 0; + else + { + *((s16 *) (psVar6 + 0x188)) = 0; + } + if ((*((s16 *) (psVar6 + 0x188))) < 0) + { + *((s16 *) (psVar6 + 0x188)) = 0; } } - - *(s16 *)(param_1 + 0x66) = *(u16 *)(param_1 + 0x66) + 0x40; - uVar5 = func_80148800((s32 *)psVar6); - if ((uVar5 & 0x80) != 0) { - *(s16 *)(param_1 + 0x66) = 0; - uVar3 = func_801656D0(psVar6, func_8014CA00(*(s32 *)(psVar6 + 0x184)) & 0xff); - *(s16 *)(psVar6 + 0x188) = *(u16 *)(psVar6 + 0x188) + uVar3; - *(s16 *)(iVar8 + 0x1a) = 0x4000; - *(s16 *)(iVar8 + 0x18) = 0x4000; - *(s32 *)(iVar8 + 0x48) = *(s16 *)(param_1 + 0x58); - *(s32 *)(iVar8 + 0x4c) = *(s16 *)(param_1 + 0x5a); - *(s32 *)(iVar8 + 0x50) = *(s16 *)(param_1 + 0x5c); - ((void (*)(s32, s32, s32))func_80149350)(param_1, (s32)&in, (s32)out); - *(s16 *)(param_1 + 0x6) = out[0]; - *(s16 *)(param_1 + 0xa) = out[1]; - *(s16 *)(param_1 + 0xe) = out[2]; + *((s16 *) (param_1 + 0x66)) = (*((u16 *) (param_1 + 0x66))) + 0x40; + uVar5 = func_80148800((s32 *) psVar6); + if ((uVar5 & 0x80) != 0) + { + *((s16 *) (param_1 + 0x66)) = 0; + uVar3 = func_801656D0(psVar6, func_8014CA00(*((s32 *) (psVar6 + 0x184))) & 0xff); + *((s16 *) (psVar6 + 0x188)) = (*((u16 *) (psVar6 + 0x188))) + uVar3; + *((s16 *) (iVar8 + 0x1a)) = 0x4000; + *((s16 *) (iVar8 + 0x18)) = 0x4000; + *((s32 *) (iVar8 + 0x48)) = *((s16 *) (param_1 + 0x58)); + *((s32 *) (iVar8 + 0x4c)) = *((s16 *) (param_1 + 0x5a)); + *((s32 *) (iVar8 + 0x50)) = *((s16 *) (param_1 + 0x5c)); + ((void (*)(s32, s32, s32)) func_80149350)(param_1, (s32) (&in), (s32) out); + *((s16 *) (param_1 + 0x6)) = out[0]; + *((s16 *) (param_1 + 0xa)) = out[1]; + *((s16 *) (param_1 + 0xe)) = out[2]; } - - if (0x80 < *(s16 *)(psVar6 + 0x188)) { - *(s16 *)(psVar6 + 0x188) = 0x80; + if (0x80 < (*((s16 *) (psVar6 + 0x188)))) + { + *((s16 *) (psVar6 + 0x188)) = 0x80; } - if (*(s16 *)(psVar6 + 0x188) >= 0x80) { - iVar7 = *(s32 *)(psVar6 + 0x184); - if (iVar7 != 0) { - func_80015978(iVar7 + 4, (s32 *)buf); + if ((*((s16 *) (psVar6 + 0x188))) >= 0x80) + { + iVar7 = *((s32 *) (psVar6 + 0x184)); + if (iVar7 != 0) + { + func_80015978(iVar7 + 4, (s32 *) buf); buf[3] = 0; uVar4 = func_80156370(0xe); - func_8014C4AC(iVar7, 0xe, uVar4, buf, *(s16 *)(iVar8 + 0x12)); + func_8014C4AC(iVar7, 0xe, uVar4, buf, *((s16 *) (iVar8 + 0x12))); func_80146994(0x33, param_1, 0, iVar7); } - } else { - if (*(s16 *)(psVar6 + 0x18a) < 0x80 && *(u16 *)psVar6 != 0x19) { + } + else + { + if (((*((s16 *) (psVar6 + 0x18a))) < 0x80) && ((*((u16 *) psVar6)) != 0x19)) + { goto LAB_end; } - iVar7 = *(s32 *)(psVar6 + 0x184); - if (iVar7 != 0) { - func_80015978(iVar7 + 4, (s32 *)buf); + iVar7 = *((s32 *) (psVar6 + 0x184)); + if (iVar7 != 0) + { + func_80015978(iVar7 + 4, (s32 *) buf); buf[3] = 0; uVar4 = func_80156370(0x21); - func_8014C4AC(iVar7, 0x21, uVar4, buf, *(s16 *)(iVar8 + 0x12)); - if ((*(s32 *)(iVar7 + 0xb4) & 0x40000) != 0) { - func_8014AD30(param_1, (u16 *)buf, 0, *(s16 *)(iVar7 + 0x60)); + func_8014C4AC(iVar7, 0x21, uVar4, buf, *((s16 *) (iVar8 + 0x12))); + if (((*((s32 *) (iVar7 + 0xb4))) & 0x40000) != 0) + { + func_8014AD30(param_1, (u16 *) buf, 0, *((s16 *) (iVar7 + 0x60))); } } } - uVar5 = func_8014CA00(iVar7); - *(s32 *)(psVar6 + 0x184) = uVar5; - if (0x1e < (u32)uVar5) { - *(s32 *)(psVar6 + 0x184) = 0; + *((s32 *) (psVar6 + 0x184)) = uVar5; + if (0x1e < ((u32) uVar5)) + { + *((s32 *) (psVar6 + 0x184)) = 0; } - func_80146E90((s32 *)param_1, 0x20); - *(s32 *)(psVar6 + 0x44) = *(s32 *)(psVar6 + 0x44) & ~0x20; + func_80146E90((s32 *) param_1, 0x20); + *((s32 *) (psVar6 + 0x44)) = (*((s32 *) (psVar6 + 0x44))) & (~0x20); func_80147324(0x449); - func_80146CA0((void *)param_1); - func_80146CA0((void *)param_1); + func_80146CA0((void *) param_1); + func_80146CA0((void *) param_1); + LAB_end: + uVar4 = func_80012F74(*((s16 *) (iVar8 + 0x1a)), 0x1800, 3, 1); -LAB_end: - uVar4 = func_80012F74(*(s16 *)(iVar8 + 0x1a), 0x1800, 3, 1); - *(s16 *)(iVar8 + 0x1a) = uVar4; - *(s16 *)(iVar8 + 0x18) = uVar4; - uVar4 = func_80012F74(*(s16 *)(param_1 + 0x6), *(s16 *)(param_1 + 0x58), 8, 1); - *(s16 *)(param_1 + 0x6) = uVar4; - uVar4 = func_80012F74(*(s16 *)(param_1 + 0xa), *(s16 *)(param_1 + 0x5a), 8, 1); - *(s16 *)(param_1 + 0xa) = uVar4; - uVar4 = func_80012F74(*(s16 *)(param_1 + 0xe), *(s16 *)(param_1 + 0x5c), 8, 1); - *(s16 *)(param_1 + 0xe) = uVar4; + *((s16 *) (iVar8 + 0x1a)) = uVar4; + *((s16 *) (iVar8 + 0x18)) = uVar4; + uVar4 = func_80012F74(*((s16 *) (param_1 + 0x6)), *((s16 *) (param_1 + 0x58)), 8, 1); + *((s16 *) (param_1 + 0x6)) = uVar4; + uVar4 = func_80012F74(*((s16 *) (param_1 + 0xa)), *((s16 *) (param_1 + 0x5a)), 8, 1); + *((s16 *) (param_1 + 0xa)) = uVar4; + uVar4 = func_80012F74(*((s16 *) (param_1 + 0xe)), *((s16 *) (param_1 + 0x5c)), 8, 1); + *((s16 *) (param_1 + 0xe)) = uVar4; } diff --git a/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c b/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c index d253b4e975..a251db4c5a 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c @@ -3856,19 +3856,22 @@ extern void func_80019064(void *a0); extern void func_80131E00(struct S80131E00 *a0, s32 a1); -void func_80178840(int param_1) { - +void func_80178840(int param_1) +{ extern int D_80193C70; extern int D_80193C7C[]; - register int p __asm__("$16"); // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B t3_tus1) + int p; int s1byte; p = param_1; - if ((*(unsigned short *)(p + 0x5c) & 1) != 0) { - s1byte = *(unsigned char *)(p + 0x5e); - if (s1byte == 0xc) { - ((void (*)(int))func_80019064)((int)&D_80193C70); + if (((*((unsigned short *) (p + 0x5c))) & 1) != 0) + { + s1byte = *((unsigned char *) (p + 0x5e)); + if (s1byte == 0xc) + { + ((void (*)(int)) func_80019064)((int) (&D_80193C70)); } - ((void (*)(int, int))func_80131E00)(p, D_80193C7C[s1byte]); + ((void (*)(int, int)) func_80131E00)(p, D_80193C7C[s1byte]); + p = param_1; } } diff --git a/tools/delever.py b/tools/delever.py index a45ce2c851..eb9fb9c3ba 100644 --- a/tools/delever.py +++ b/tools/delever.py @@ -1406,23 +1406,34 @@ def inline_single_set_temps(text, tu, fn, d_): decls.append(p) else: uses.append(p) - if len(asgs) != 1 or len(uses) != 1 or len(decls) > 1: + if not asgs or not uses or len(decls) > 1: continue - ai = asgs[0][0] - ui, u0, u1 = uses[0] - if ai >= ui: - continue - mm = re.match(ASG % re.escape(v), masked[ai].strip()) - raw_stripped = lines[ai].strip() - expr = raw_stripped[mm.start(1):mm.end(1)] - if not expr.strip(): - continue - cand = list(lines) - cand[ui] = lines[ui][:u0] + f"({expr})" + lines[ui][u1:] - cand[ai] = None # the assignment goes (with its declaration when they are one) - if decls: # form B: the separate `T v;` is dead now - cand[decls[0][0]] = None - out.append((f"inline {v} @{ai + 1}", "\n".join(l for l in cand if l is not None))) + # ONE ASSIGNMENT AT A TIME, not one per variable. The single-set case is the easy half; the lever rung D actually + # found is narrower: `uVar5` is assigned in TWO branches of func_80163EC8, and the winning move inlined ONE of them. + # An assignment is inlinable when its value is read exactly once before the variable is written again — the classic + # def-with-one-use — so the assignment can go and the read can carry the expression. + order = sorted(places) + for ai, _, _ in asgs: + after = [p for p in order if p[0] > ai] + reads = [p for p in after if p not in [(x, y, z) for x, y, z in asgs] and not is_decl_line(masked[p[0]].strip())] + if not reads: + continue + ui, u0, u1 = reads[0] + nxt = [p for p in after if p[0] > ui] + if nxt and (nxt[0][0], nxt[0][1], nxt[0][2]) not in [(x, y, z) for x, y, z in asgs]: + continue # read again before it is rewritten: the assignment is not dead + mm = re.match(ASG % re.escape(v), masked[ai].strip()) + if not mm: + continue + expr = lines[ai].strip()[mm.start(1):mm.end(1)] + if not expr.strip(): + continue + cand = list(lines) + cand[ui] = lines[ui][:u0] + f"({expr})" + lines[ui][u1:] + cand[ai] = None # the assignment goes (with its declaration when they are one) + if decls and len(asgs) == 1: # the separate `T v;` is dead only when nothing else writes v + cand[decls[0][0]] = None + out.append((f"inline {v} @{ai + 1}", "\n".join(l for l in cand if l is not None))) return out @@ -1559,12 +1570,19 @@ def recipes(a): return [r for t_ in inc.get(tu, []) for r in by_src.get(t_, [])] if tu.endswith(".h") else by_src.get(tu, []) def judge(tu, cand): + """judge one candidate, and be killable: the oracle writes the candidate into the tree to compile it, so a SIGTERM + between the write and the restore leaves a candidate in `src/`. The original text goes into inflight.json first, the + same file `--restore` reads (P35's rule: a tool restores from its OWN snapshot, never `git checkout`) — S99 killed a + run mid-judge and found exactly that leftover.""" path = REPO / tu raw, st = path.read_text(errors="surrogateescape"), path.stat() + RUN.mkdir(parents=True, exist_ok=True) + INFLIGHT.write_text(json.dumps({tu: raw})) try: return oracle.judge_all(recs_for(tu), cand, tag="rec", write_path=(tu if tu.endswith(".h") else None)) finally: restore_file(path, raw, st) + INFLIGHT.unlink(missing_ok=True) def lever_free(tu, raw, fn): m, ls = same_len_mask(raw), line_starts(raw) @@ -1613,7 +1631,7 @@ def recipes(a): print(f"delever --recipes: {len(todo)} RESIDUE bodies", flush=True) rows, won, tried, compiles = [], 0, 0, 0 t0 = time.time() - for (tu, fn), r in todo: + for n_body, ((tu, fn), r) in enumerate(todo, 1): path = REPO / tu raw = path.read_text(errors="surrogateescape") names = pin_names(sites_by[(tu, fn)]) # may be empty: R5 needs no pinned declaration @@ -1632,6 +1650,9 @@ def recipes(a): if v == "IDENTICAL": hit = (rec, desc, cand) break + if n_body % 10 == 0 or hit: # R55: a lane that runs unattended leaves evidence + print(f" [{n_body}/{len(todo)}] {won} closed · {compiles} compiles · {(time.time() - t0) / 60:.1f} min", + flush=True) row = dict(ts=time.strftime("%Y-%m-%d %H:%M:%S"), label=a.label, rung="R", calib=dict(head=oracle.head(), stamp=oracle.config_stamp()), tu=tu, fn=fn, addr=fn_addr(fn, tu), aliases=r.get("aliases"), header=tu.endswith(".h"), nhash_before=r.get("nhash_after"), nhash_after=None, candidates=len(cands), pins=len(names), diff --git a/tools/delever_permute.py b/tools/delever_permute.py index 1970976cd0..2e5a311411 100644 --- a/tools/delever_permute.py +++ b/tools/delever_permute.py @@ -572,10 +572,34 @@ def winner_body(winner_c, fn, tu): return None +def tidy_body(body): + """the permuter's winner, made to read like the tree it lands in — or None when there is nothing to tidy. + + pycparser reprints a body it has parsed: two-space indent where this tree uses four, and an empty statement `;` left + where a statement was inlined away. Neither generates code, and the object oracle judges the tidied text before it is + kept, so this can only ever improve the source. What it deliberately does NOT touch is the parenthesisation + (`*((s32 *) (p + 4))`) or the brace style — that is the formatting phase's job, with clang-format, over the whole tree + at once (`decomp-architect/templates/.clang-format`); a per-bank reformat would make this phase's diffs unreadable.""" + lines = [l for l in body.split("\n") if l.strip() != ";"] + indents = [len(l) - len(l.lstrip(" ")) for l in lines if l.strip() and l.startswith(" ")] + if indents and min(indents) == 2: # a two-space body: double every leading run + lines = [(" " * (2 * (len(l) - len(l.lstrip(" ")))) + l.lstrip(" ")) if l.startswith(" ") else l for l in lines] + out = "\n".join(lines) + return out if out != body else None + + def bank(a): outs = load_outcomes() banked = {(o["alias"], o["fn"], o["nhash"]) for o in outs if o.get("kind") == "bank" and o.get("applied")} + # a body ANOTHER rung already closed is not banked again (S99: --bank re-applied the permuter's reprinted body over the + # one-line version rung R had banked for the same function, and the tree lost a clean diff for a byte-identical one) + cur = {} + for r in dl.load_ledger(): + if r.get("tu") and r.get("fn"): + cur[(r["tu"], r["fn"])] = r + already = {(k[0], k[1]) for k, r in cur.items() if r.get("verdict") == "LEVER-FREE"} todo = [o for o in outs if o.get("kind") == "attempt" and o.get("verdict") == "MATCH" + and (o["tu"], o["fn"]) not in already and (o["alias"], o["fn"], o["nhash"]) not in banked and (not a.only or any(x in (o["fn"], o["tu"], o["alias"]) or o["nhash"].startswith(x) for x in a.only))] if not todo: @@ -590,11 +614,17 @@ def bank(a): bad += 1 continue bf = d / "body.c" - bf.write_text(body, errors="surrogateescape") - cmd = [PY, "tools/delever.py", "--apply-body", o["tu"], o["fn"], bf.relative_to(REPO).as_posix(), - "--label", a.label, "--rung", "D"] + (["--dirty-ok"] if a.dirty_ok else []) - r = subprocess.run(cmd, cwd=REPO, capture_output=True, text=True) - print(" " + (r.stdout or r.stderr).strip().splitlines()[-1][:220], flush=True) + # the tidied body FIRST (the oracle judges it like any other candidate); the winner verbatim only if it is refused + forms = [(t_, "tidied") for t_ in [tidy_body(body)] if t_] + [(body, "verbatim")] + r = None + for text_, how in forms: + bf.write_text(text_, errors="surrogateescape") + cmd = [PY, "tools/delever.py", "--apply-body", o["tu"], o["fn"], bf.relative_to(REPO).as_posix(), + "--label", a.label, "--rung", "D"] + (["--dirty-ok"] if a.dirty_ok else []) + r = subprocess.run(cmd, cwd=REPO, capture_output=True, text=True) + print(f" [{how}] " + (r.stdout or r.stderr).strip().splitlines()[-1][:210], flush=True) + if r.returncode == 0: + break row = dict(kind="bank", ts=time.strftime("%Y-%m-%d %H:%M:%S"), nhash=o["nhash"], tu=o["tu"], fn=o["fn"], alias=o["alias"], label=a.label, applied=(r.returncode == 0), apply_out=(r.stdout or r.stderr).strip()[-400:])