From 536e7dba3ca67f4528d522f9b78f7cefef46b6c2 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 11 Sep 2026 04:49:55 -0600 Subject: [PATCH] =?UTF-8?q?phase-36:=20S104=20s104=5Fe31=20=E2=80=94=20fun?= =?UTF-8?q?c=5F8002FF0C=20banked=20at=200=20through=20the=20whole-object?= =?UTF-8?q?=20gate=20+=20propagated=20=E2=80=94=203=20barriers=20=E2=86=92?= =?UTF-8?q?=202=20marked=20do-whiles=20(ruling=20(a))=20+=20a=20struct-typ?= =?UTF-8?q?ed=20read;=20the=20zero-lever=20record-field=20form=20is=20link?= =?UTF-8?q?-only=20(parked)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/P36/delever/calibration.json | 356 +++++++++++++++--------------- .run/P36/delever/ledger.jsonl | 1 + src/800_b_2.c | 17 +- 3 files changed, 189 insertions(+), 185 deletions(-) diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 163a537c7..3fe40eef0 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,5 +1,5 @@ { - "head": "ba64a7898", + "head": "ae50f9cfe", "stamp": "15956e4a96c4", "generated": "2026-09-11 04:49", "aliases": [ @@ -21,206 +21,206 @@ "main": { "objects": 85, "identical": 85, - "seconds": 6.213999999999999, - "mean_s": 0.073 + "seconds": 6.385000000000002, + "mean_s": 0.075 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 4.390000000000001, + "seconds": 4.394, "mean_s": 0.137 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 4.197, - "mean_s": 0.131 + "seconds": 4.220999999999999, + "mean_s": 0.132 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 3.6390000000000002, - "mean_s": 0.13 + "seconds": 3.6150000000000007, + "mean_s": 0.129 } }, "per_object_seconds": { - "build/src/800.o": 0.676, - "build/src/800_b.o": 0.063, - "build/src/800_b_2.o": 0.264, - "build/src/800_b_o0a.o": 0.085, - "build/src/800_c.o": 0.162, - "build/src/800b2.o": 0.073, - "build/src/apicard1.o": 0.07, - "build/src/apicard2.o": 0.071, - "build/src/apicard3.o": 0.081, - "build/src/apicard4.o": 0.07, - "build/src/apicard5.o": 0.06, - "build/src/apicard6.o": 0.057, - "build/src/apicard7.o": 0.051, - "build/src/boot.o": 0.08, - "build/src/gap.o": 0.057, - "build/src/libapi1.o": 0.065, - "build/src/libapi2.o": 0.056, - "build/src/libc2_1.o": 0.056, - "build/src/libc2_2.o": 0.056, - "build/src/libcd1.o": 0.068, - "build/src/libcd2.o": 0.055, - "build/src/libetc.o": 0.056, - "build/src/libgpu.o": 0.052, - "build/src/libgpu2.o": 0.061, - "build/src/libgs1.o": 0.065, - "build/src/libgs2.o": 0.056, - "build/src/libgs3.o": 0.061, - "build/src/libgs4.o": 0.064, - "build/src/libgs5.o": 0.06, - "build/src/libgs6.o": 0.07, - "build/src/libgs7.o": 0.061, - "build/src/libgs8.o": 0.062, - "build/src/libgte1.o": 0.055, - "build/src/libgte10.o": 0.064, - "build/src/libgte11.o": 0.057, - "build/src/libgte12.o": 0.066, - "build/src/libgte13.o": 0.066, - "build/src/libgte14.o": 0.065, - "build/src/libgte15.o": 0.06, - "build/src/libgte16.o": 0.056, - "build/src/libgte17.o": 0.061, - "build/src/libgte18.o": 0.059, - "build/src/libgte19.o": 0.064, - "build/src/libgte2.o": 0.06, - "build/src/libgte20.o": 0.065, - "build/src/libgte21.o": 0.065, - "build/src/libgte22.o": 0.067, - "build/src/libgte23.o": 0.06, - "build/src/libgte24.o": 0.06, - "build/src/libgte25.o": 0.064, - "build/src/libgte26.o": 0.056, - "build/src/libgte27.o": 0.06, - "build/src/libgte28.o": 0.052, - "build/src/libgte29.o": 0.063, - "build/src/libgte3.o": 0.065, - "build/src/libgte30.o": 0.062, - "build/src/libgte4.o": 0.068, - "build/src/libgte5.o": 0.059, - "build/src/libgte6.o": 0.061, - "build/src/libgte7.o": 0.063, - "build/src/libgte8.o": 0.061, - "build/src/libgte9.o": 0.058, - "build/src/libmcrd1.o": 0.067, - "build/src/libmcrd2.o": 0.064, - "build/src/libpad1.o": 0.061, - "build/src/libpad2.o": 0.062, - "build/src/sgap.o": 0.064, - "build/src/sgap_2.o": 0.068, - "build/src/sgap_3.o": 0.059, - "build/src/sgap_4.o": 0.055, - "build/src/sgap_5.o": 0.055, - "build/src/sgap_6.o": 0.059, - "build/src/sgap_8.o": 0.062, - "build/src/snd1.o": 0.063, - "build/src/snd10.o": 0.072, - "build/src/snd11.o": 0.06, - "build/src/snd12.o": 0.061, - "build/src/snd2.o": 0.064, - "build/src/snd3.o": 0.064, + "build/src/800.o": 0.7, + "build/src/800_b.o": 0.082, + "build/src/800_b_2.o": 0.303, + "build/src/800_b_o0a.o": 0.06, + "build/src/800_c.o": 0.171, + "build/src/800b2.o": 0.097, + "build/src/apicard1.o": 0.063, + "build/src/apicard2.o": 0.064, + "build/src/apicard3.o": 0.078, + "build/src/apicard4.o": 0.058, + "build/src/apicard5.o": 0.083, + "build/src/apicard6.o": 0.072, + "build/src/apicard7.o": 0.057, + "build/src/boot.o": 0.098, + "build/src/gap.o": 0.066, + "build/src/libapi1.o": 0.069, + "build/src/libapi2.o": 0.061, + "build/src/libc2_1.o": 0.06, + "build/src/libc2_2.o": 0.059, + "build/src/libcd1.o": 0.073, + "build/src/libcd2.o": 0.054, + "build/src/libetc.o": 0.062, + "build/src/libgpu.o": 0.059, + "build/src/libgpu2.o": 0.064, + "build/src/libgs1.o": 0.064, + "build/src/libgs2.o": 0.063, + "build/src/libgs3.o": 0.048, + "build/src/libgs4.o": 0.065, + "build/src/libgs5.o": 0.059, + "build/src/libgs6.o": 0.075, + "build/src/libgs7.o": 0.064, + "build/src/libgs8.o": 0.063, + "build/src/libgte1.o": 0.054, + "build/src/libgte10.o": 0.061, + "build/src/libgte11.o": 0.061, + "build/src/libgte12.o": 0.065, + "build/src/libgte13.o": 0.052, + "build/src/libgte14.o": 0.055, + "build/src/libgte15.o": 0.063, + "build/src/libgte16.o": 0.06, + "build/src/libgte17.o": 0.063, + "build/src/libgte18.o": 0.062, + "build/src/libgte19.o": 0.052, + "build/src/libgte2.o": 0.061, + "build/src/libgte20.o": 0.062, + "build/src/libgte21.o": 0.064, + "build/src/libgte22.o": 0.052, + "build/src/libgte23.o": 0.059, + "build/src/libgte24.o": 0.055, + "build/src/libgte25.o": 0.06, + "build/src/libgte26.o": 0.059, + "build/src/libgte27.o": 0.064, + "build/src/libgte28.o": 0.057, + "build/src/libgte29.o": 0.06, + "build/src/libgte3.o": 0.057, + "build/src/libgte30.o": 0.065, + "build/src/libgte4.o": 0.059, + "build/src/libgte5.o": 0.062, + "build/src/libgte6.o": 0.059, + "build/src/libgte7.o": 0.065, + "build/src/libgte8.o": 0.058, + "build/src/libgte9.o": 0.065, + "build/src/libmcrd1.o": 0.064, + "build/src/libmcrd2.o": 0.062, + "build/src/libpad1.o": 0.064, + "build/src/libpad2.o": 0.067, + "build/src/sgap.o": 0.049, + "build/src/sgap_2.o": 0.064, + "build/src/sgap_3.o": 0.055, + "build/src/sgap_4.o": 0.061, + "build/src/sgap_5.o": 0.063, + "build/src/sgap_6.o": 0.066, + "build/src/sgap_8.o": 0.074, + "build/src/snd1.o": 0.071, + "build/src/snd10.o": 0.063, + "build/src/snd11.o": 0.059, + "build/src/snd12.o": 0.069, + "build/src/snd2.o": 0.07, + "build/src/snd3.o": 0.065, "build/src/snd4.o": 0.061, - "build/src/snd5.o": 0.049, - "build/src/snd6.o": 0.062, - "build/src/snd7.o": 0.056, - "build/src/snd8.o": 0.079, - "build/src/snd9.o": 0.061, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.122, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.471, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.377, + "build/src/snd5.o": 0.065, + "build/src/snd6.o": 0.068, + "build/src/snd7.o": 0.063, + "build/src/snd8.o": 0.061, + "build/src/snd9.o": 0.076, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.127, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.491, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.369, "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.057, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.057, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.119, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.152, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.118, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.076, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.064, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.164, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.072, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.151, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.089, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.065, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.054, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.089, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.449, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.252, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.091, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.197, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.053, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.087, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.056, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.153, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.194, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.05, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.275, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.062, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.059, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.056, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.116, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.147, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.11, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.079, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.065, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.181, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.079, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.169, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.09, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.06, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.065, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.086, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.479, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.253, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.101, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.163, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.054, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.092, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.054, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.157, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.195, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.047, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.241, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.045, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.054, "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.053, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.062, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.059, "build/src/ov_SC03_015/ov_SC03_015.o": 0.115, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.479, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.388, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.041, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.044, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.094, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.139, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.114, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.061, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.061, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.156, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.054, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.144, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.084, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.066, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.5, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.352, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.049, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.042, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.1, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.14, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.112, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.064, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.056, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.161, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.065, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.155, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.092, + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.064, "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.066, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.086, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.403, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.241, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.087, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.187, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.048, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.09, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.057, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.144, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.202, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.047, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.265, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.058, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.057, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.05, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.069, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.104, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.397, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.331, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.088, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.434, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.24, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.095, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.188, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.052, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.098, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.054, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.151, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.171, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.049, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.231, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.059, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.06, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.052, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.066, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.112, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.382, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.307, "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.047, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.046, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.105, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.135, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.108, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.068, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.057, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.163, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.052, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.115, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.149, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.105, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.067, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.058, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.166, "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.068, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.156, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.079, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.06, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.057, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.091, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.327, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.199, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.087, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.161, - "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.057, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.087, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.054, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.096, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.404, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.042, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.053 + "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.152, + "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.071, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.057, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.059, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.085, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.321, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.201, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.082, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.153, + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.052, + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.091, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.067, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.105, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.398, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.041, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.052 }, "ok": true, "seconds": 2.1 diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index eecb1d7e5..0d44e5520 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -29536,3 +29536,4 @@ {"ts": "2026-09-11 04:49:03", "label": "s104_e31", "rung": "E", "calib": {"head": "5b0993531", "stamp": "15956e4a96c4"}, "tu": "src/800_b_2.c", "fn": "func_8003350C", "addr": 2147693836, "aliases": null, "header": false, "includers": 0, "nhash_before": "5e1812a959a46c5b260a1d7053a739efcd242b1c", "nhash_after": "aa8286e25017d82a511057fbfb5a396ba2e59ecb", "source": ".run/P36/agents/main__func_8003324C/scratch/twin_350C.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.171, "objects": ["build/src/800_b_2.o"], "before_text": "void func_8003350C(s32 arg0, s32 arg1) {\n register Ent30D80 *p __asm__(\"$16\"); // !FAKE: pin $16 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 t __asm__(\"$19\"); // !FAKE: pin $19 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n u8 *base;\n u8 *e;\n s32 off;\n s32 i;\n\n off = arg0 * 0x54;\n base = (u8 *)D_800A46E8;\n e = base + off;\n i = 0;\n t = arg1 << 16;\n p = (Ent30D80 *)(base + 0x2A0);\n __asm__ (\"\" :: \"r\"(base)); // !FAKE: keepalive \u2014 NEEDED DIFFERS (P36 rung B tus9)\n for (; i < 8; i++, p++) {\n u8 *q = e + i;\n if (q[0xE] != 0) {\n q[0xE] = 0;\n p->unk40 = 0;\n if (p->unk4E != 0) {\n func_80030D80(p, t >> 16);\n }\n }\n }\n *(u16 *)e = 0;\n}\n", "after_text": "void func_8003350C(s32 arg0, s32 arg1) {\n u8 *base;\n u8 *e;\n s32 off;\n Ent30D80 *p;\n s32 i;\n\n off = arg0 * 0x54;\n base = (u8 *)D_800A46E8;\n e = base + off;\n p = (Ent30D80 *)(base + 0x2A0);\n for (i = 0; i < 8; i++) {\n if ((e + i)[0xE] != 0) {\n (e + i)[0xE] = 0;\n p[i].unk40 = 0;\n if (p[i].unk4E != 0) {\n func_80030D80(&p[i], arg1);\n }\n }\n }\n *(u16 *)e = 0;\n}\n"} {"ts": "2026-09-11 04:49:20", "label": "s104_e31", "rung": "E", "calib": {"head": "b274f6d5d", "stamp": "15956e4a96c4"}, "tu": "src/800_b_2.c", "fn": "func_800335B8", "addr": 2147694008, "aliases": null, "header": false, "includers": 0, "nhash_before": "19367ed850caba039aa1f4a43d9372525a341c8f", "nhash_after": "3dcf69f25dd2c0695eed37642a4bdbd3dc662b49", "source": ".run/P36/agents/main__func_800335B8/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.17, "objects": ["build/src/800_b_2.o"], "before_text": "void func_800335B8(s32 a0, s32 a1) {\n u8 *e = (u8 *)D_800A46E8 + a0 * 0x54;\n u8 *p;\n s32 a2;\n s32 v1;\n s32 t0;\n\n if ((*(u16 *)e & 0x3F) != 1) {\n return;\n }\n\n /* copy-fence: keeps the `addu $t0,$a1,$zero` param copy alive (cse would\n otherwise propagate $a1 into branch 2's `andi $a1,$t0,0x7F`). */\n t0 = a1;\n __asm__ (\"\" : \"=r\"(t0) : \"0\"(t0)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n\n if (a1 & 0x1000) {\n v1 = 0;\n a2 = *(u16 *)(e + 0xC);\n a1 = a1 & 0x7F;\n t0 = 1;\n p = (u8 *)D_800A46E8 + 0x2A0;\n for (; v1 < 8; v1++, p += 0x54) {\n u8 *rec;\n if (a2 == 0) {\n return;\n }\n if (*(u8 *)(e + v1 + 0xE) != 0) {\n /* copy-fence: materialises the target's in-loop\n `addu $v0,$a0,$zero` (reorg then steals it for the\n beqz delay slot). Walking pointer, NOT p + v1*0x54,\n so loop strength reduction still owns $a0. */\n rec = p;\n __asm__ (\"\" : \"=r\"(rec) : \"0\"(rec)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n a2--;\n *(u16 *)(rec + 0x48) = a1;\n *(u8 *)(rec + 0x4F) = t0;\n }\n }\n } else if (a1 & 0x2000) {\n a2 = *(u16 *)(e + 0xC);\n v1 = 0;\n a1 = t0 & 0x7F;\n p = (u8 *)D_800A46E8 + 0x2A0;\n for (; v1 < 8; v1++) {\n u8 *rec;\n if (a2 == 0) {\n return;\n }\n if (*(u8 *)(e + v1 + 0xE) != 0) {\n rec = p + v1 * 0x54;\n if (*(u8 *)(rec + 0x35) != 0) {\n *(u8 *)(rec + 0x53) = a1;\n }\n a2--;\n }\n }\n }\n}\n", "after_text": "void func_800335B8(s32 a0, s32 flags) {\n u8 *e = (u8 *)D_800A46E8 + a0 * 0x54;\n u8 *p;\n u8 *rec;\n s32 n;\n s32 i;\n u16 val = flags;\n\n if ((*(u16 *)e & 0x3F) != 1) {\n return;\n }\n\n if (flags & 0x1000) {\n n = *(u16 *)(e + 0xC);\n p = (u8 *)D_800A46E8 + 0x2A0;\n for (i = 0; i < 8; i++) {\n if (n == 0) {\n return;\n }\n if ((e + i)[0xE] != 0) {\n rec = p + i * 0x54;\n n--;\n *(u16 *)(rec + 0x48) = flags & 0x7F;\n rec[0x4F] = 1;\n }\n }\n } else if (flags & 0x2000) {\n n = *(u16 *)(e + 0xC);\n p = (u8 *)D_800A46E8 + 0x2A0;\n for (i = 0; i < 8; i++) {\n if (n == 0) {\n return;\n }\n if ((e + i)[0xE] != 0) {\n rec = p + i * 0x54;\n if (rec[0x35] != 0) {\n rec[0x53] = val & 0x7F;\n }\n n--;\n }\n }\n }\n}\n"} {"ts": "2026-09-11 04:49:37", "label": "s104_e31", "rung": "E", "calib": {"head": "ba64a7898", "stamp": "15956e4a96c4"}, "tu": "src/800_b_2.c", "fn": "func_80032A74", "addr": 2147691124, "aliases": null, "header": false, "includers": 0, "nhash_before": "4bcdfdd9d9b0c1a7cd862cd78d2d0b23f934e40a", "nhash_after": "0941b91dc57ae32732411e724bf224883fb08f84", "source": ".run/P36/agents/main__func_80032A74/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.171, "objects": ["build/src/800_b_2.o"], "before_text": "void func_80032A74(Slot54 *arg0, s32 arg1, Rec14 *arg2, s32 flags) {\n#define REQ ((Req32A74 *)arg0)\n#define REC ((Rec32A74 *)arg2)\n C24 sp10;\n\n Chan32A74 *ch;\n Voice32A74 *vo;\n A12 *dd;\n B12 *q;\n u8 *cp;\n const u16 *tA;\n const u16 *tB;\n u8 *vB;\n s32 i2;\n u16 v;\n u32 vv;\n s32 idx;\n s32 w;\n s32 n;\n s32 flag;\n s32 h;\n s32 i;\n s32 b;\n s32 sub;\n u8 pan;\n u32 vol;\n u32 mp;\n u32 qq;\n s32 tb;\n u32 d;\n register s32 base __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n u16 t16;\n s32 t8;\n s32 t32;\n u32 gx;\n\n tA = D_8007319E;\n tB = D_800731A0;\n vB = (u8 *)D_800A4C28;\n v = REQ->unk02;\n i = 7;\n cp = (u8 *)arg0 + 7;\n do {\n cp[0xE] = 0;\n i--;\n cp--;\n } while (i >= 0);\n REQ->unk0C = 0;\n\n for (;;) {\n b = REC->unk08;\n flag = 0;\n if ((b & 0x80) == 0) {\n dd = &D_80064D44[b];\n sub = REC->unk09;\n if (dd->unk06 != 0) {\n gx = dd->unk07;\n gx -= 0x100;\n flag = (u32)sub < (u32)(u8)gx;\n }\n n = D_800C5328[b * 2];\n if (n < 0) {\n if (flag == 0) {\n break;\n }\n n = D_800C532A[b * 2];\n if (n < 0) {\n break;\n }\n if (sub >= D_800A4646[n * 12]) {\n break;\n }\n }\n } else {\n n = 4;\n }\n if ((flags & 0x1000) && (flags & 0x7F) < 0x30U) {\n v >>= 1;\n flags = (flags & 0xFF80) | (0x2F - ((0x2F - (flags & 0x7F)) >> 1));\n }\n idx = func_80030CA4(v);\n if (idx != 0) {\n idx--;\n vo = (Voice32A74 *)(idx * 0x48 + (s32)vB);\n if ((b & 0x80) == 0) {\n q = &D_8006A970[n][REC->unk09];\n vo->unk1C = q->unk00;\n vo->unk18 = q->unk04;\n vo->unk3A = q->unk06;\n vo->unk3C = q->unk08;\n } else {\n if (func_8003F144(D_800A46A2, b & 0x7F, REC->unk09, &sp10) != 0) {\n goto next;\n }\n h = func_8003F380(D_800A46A2, sp10.unk16);\n if (h < 0) {\n goto next;\n }\n tb = sp10.unk04;\n vo->unk1C = h;\n vo->unk18 = tb << 8;\n vo->unk3A = sp10.unk10;\n vo->unk3C = sp10.unk12;\n }\n w = idx + 0x10;\n vo->unk00 = D_80073140[w];\n ch = (Chan32A74 *)(D_800A4988 + idx * 0x54);\n ch->unk4C = 0;\n ch->unk4A = 0x7FFF;\n if (REQ->unk00 & 0x80) {\n ch->unk4D = 0;\n } else {\n ch->unk4D = 1;\n }\n t16 = REC->unk02;\n ch->unk04 = 0;\n ch->unk08 = v;\n ch->unk0A = w;\n ch->unk00 = t16;\n t8 = REC->unk09;\n ch->unk0E = b;\n ch->unk36 = flag;\n ch->unk10 = n;\n ch->unk12 = 0;\n ch->unk0C = t8;\n t32 = REC->unk10;\n ch->unk4F = 0;\n ch->unk4E = 0x85;\n ch->unk14 = t32;\n __asm__ __volatile__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n vol = REC->unk06;\n if (D_800A4F1E != 0) {\n vol *= 0x70;\n vol >>= 7;\n }\n if (flags & 0x1000) {\n ch->unk48 = flags & 0x7F;\n } else {\n ch->unk48 = 0x7F;\n }\n ch->unk34 = vol & 0x7F;\n pan = REC->unk07;\n ch->unk35 = pan;\n if (flags & 0x8000) {\n ch->unk24 = REC->unk04 - 0x80;\n } else {\n ch->unk24 = REC->unk04;\n }\n ch->unk40 = (s32)func_80033324;\n ch->unk44 = arg1;\n if ((flags & 0x2000) && pan != 0) {\n if ((flags & 0x3000) == 0x3000) {\n ch->unk53 = D_8006AED8[(u32)(flags & 0xF00) >> 8];\n } else {\n ch->unk53 = flags & 0x7F;\n }\n } else {\n ch->unk53 = 0;\n }\n if (REC->unk02 == 0) {\n func_800316F8(ch);\n }\n {\n u16 u18 = vo->unk18;\n base = (u18 & 0xFF00) + (s8)u18 * 2;\n }\n base -= 0x3C00;\n d = ch->unk24;\n d -= base;\n if (d >= 0x5300) {\n vo->unk14 = 0x3FFF;\n } else {\n qq = D_8006AB30[d >> 8];\n qq = qq * (0x100 - (d & 0xFF));\n vo->unk14 = (qq + D_8006AB32[d >> 8] * (d & 0xFF)) >> 8;\n }\n vol = D_8006AA30[ch->unk34];\n mp = vol * D_800A4EFA;\n vol = mp >> 7;\n mp = vol * ch->unk48;\n vol = mp >> 7;\n if (pan != 0) {\n if (ch->unk53 != 0) {\n pan += ch->unk53;\n if (pan >= 0x42) {\n pan -= 0x40;\n if (pan >= 0x80) {\n pan = 0x7F;\n }\n } else {\n pan = 1;\n }\n }\n if (D_800A4F19 != 0) {\n vv = (vol * tA[pan]) >> 14;\n vo->unk0A = vv;\n vv = (vol * tB[0x7F - pan]) >> 14;\n vo->unk08 = vv;\n } else {\n vv = (vol * D_8007321E) >> 14;\n vo->unk0A = vv;\n vo->unk08 = vv;\n }\n } else {\n vv = vol;\n vo->unk08 = vv;\n vo->unk0A = vv;\n }\n ch->unk52 = pan;\n vo->unk0C = 0;\n vo->unk0E = 0;\n vo->unk04 = 0x6009F;\n __asm__ __volatile__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (D_800A4EF6 > REC->unk0A) {\n func_8002F064(1, vo->unk00);\n } else {\n func_8002F064(0, vo->unk00);\n }\n t16 = ch->unk0A;\n vo->unk45 = 0;\n vo->unk44 = 1;\n vo->unk40 = t16;\n if (REC->unk02 == 0) {\n func_8002EFF8(1, vo->unk00);\n }\n REQ->unk0C++;\n REQ->unk0E[idx] = 1;\n }\n next:\n if (REC->unk0B == 0) {\n break;\n }\n arg2++;\n v = REC->unk00;\n }\n if (REQ->unk0C == 0) {\n REQ->unk00 = 0;\n } else {\n REQ->unk0A = 4;\n }\n}\n", "after_text": "void func_80032A74(Slot54 *arg0, s32 arg1, Rec14 *arg2, s32 flags) {\n#define REQ ((Req32A74 *)arg0)\n#define REC ((Rec32A74 *)arg2)\n C24 sp10;\n\n Chan32A74 *ch;\n Voice32A74 *vo;\n A12 *dd;\n B12 *q;\n u8 *cp;\n const u16 *tA;\n const u16 *tB;\n u8 *vB;\n s32 i2;\n u16 v;\n u32 vv;\n s32 idx;\n s32 w;\n s32 n;\n s32 flag;\n s32 h;\n s32 i;\n s32 b;\n s32 sub;\n u8 pan;\n u32 vol;\n u32 mp;\n u32 qq;\n s32 tb;\n u32 d;\n u16 t16;\n s32 t8;\n s32 t32;\n u32 gx;\n\n tA = D_8007319E;\n tB = D_800731A0;\n vB = (u8 *)D_800A4C28;\n v = REQ->unk02;\n i = 7;\n cp = (u8 *)arg0 + 7;\n do {\n cp[0xE] = 0;\n i--;\n cp--;\n } while (i >= 0);\n REQ->unk0C = 0;\n\n for (;;) {\n b = REC->unk08;\n flag = 0;\n if ((b & 0x80) == 0) {\n dd = &D_80064D44[b];\n sub = REC->unk09;\n if (dd->unk06 != 0) {\n gx = dd->unk07;\n gx -= 0x100;\n flag = (u32)sub < (u32)(u8)gx;\n }\n n = D_800C5328[b * 2];\n if (n < 0) {\n if (flag == 0) {\n break;\n }\n n = D_800C532A[b * 2];\n if (n < 0) {\n break;\n }\n if (sub >= D_800A4646[n * 12]) {\n break;\n }\n }\n } else {\n n = 4;\n }\n if ((flags & 0x1000) && (flags & 0x7F) < 0x30U) {\n v >>= 1;\n flags = (flags & 0xFF80) | (0x2F - ((0x2F - (flags & 0x7F)) >> 1));\n }\n idx = func_80030CA4(v);\n if (idx != 0) {\n idx--;\n vo = (Voice32A74 *)(idx * 0x48 + (s32)vB);\n if ((b & 0x80) == 0) {\n q = &D_8006A970[n][REC->unk09];\n vo->unk1C = q->unk00;\n vo->unk18 = q->unk04;\n vo->unk3A = q->unk06;\n vo->unk3C = q->unk08;\n } else {\n if (func_8003F144(D_800A46A2, b & 0x7F, REC->unk09, &sp10) != 0) {\n goto next;\n }\n h = func_8003F380(D_800A46A2, sp10.unk16);\n if (h < 0) {\n goto next;\n }\n tb = sp10.unk04;\n vo->unk1C = h;\n vo->unk18 = tb << 8;\n vo->unk3A = sp10.unk10;\n vo->unk3C = sp10.unk12;\n }\n w = idx + 0x10;\n vo->unk00 = D_80073140[w];\n ch = (Chan32A74 *)(D_800A4988 + idx * 0x54);\n ch->unk4C = 0;\n ch->unk4A = 0x7FFF;\n if (REQ->unk00 & 0x80) {\n ch->unk4D = 0;\n } else {\n ch->unk4D = 1;\n }\n t16 = REC->unk02;\n ch->unk04 = 0;\n ch->unk08 = v;\n ch->unk0A = w;\n ch->unk00 = t16;\n t8 = REC->unk09;\n ch->unk0E = b;\n ch->unk36 = flag;\n ch->unk10 = n;\n ch->unk12 = 0;\n ch->unk0C = t8;\n t32 = REC->unk10;\n ch->unk4F = 0;\n ch->unk4E = 0x85;\n *(s32 *)((u8 *)ch + 0x14) = t32;\n vol = REC->unk06;\n if (D_800A4F1E != 0) {\n vol *= 0x70;\n vol >>= 7;\n }\n if (flags & 0x1000) {\n ch->unk48 = flags & 0x7F;\n } else {\n ch->unk48 = 0x7F;\n }\n ch->unk34 = vol & 0x7F;\n pan = REC->unk07;\n ch->unk35 = pan;\n if (flags & 0x8000) {\n ch->unk24 = REC->unk04 - 0x80;\n } else {\n ch->unk24 = REC->unk04;\n }\n ch->unk40 = (s32)func_80033324;\n ch->unk44 = arg1;\n if ((flags & 0x2000) && pan != 0) {\n if ((flags & 0x3000) == 0x3000) {\n ch->unk53 = D_8006AED8[(u32)(flags & 0xF00) >> 8];\n } else {\n ch->unk53 = flags & 0x7F;\n }\n } else {\n ch->unk53 = 0;\n }\n if (REC->unk02 == 0) {\n func_800316F8(ch);\n }\n {\n u16 u18 = vo->unk18;\n vv = (u18 & 0xFF00) + (s8)u18 * 2;\n }\n vv -= 0x3C00;\n d = ch->unk24;\n d -= vv;\n if (d >= 0x5300) {\n vo->unk14 = 0x3FFF;\n } else {\n qq = D_8006AB30[d >> 8];\n qq = qq * (0x100 - (d & 0xFF));\n vo->unk14 = (qq + D_8006AB32[d >> 8] * (d & 0xFF)) >> 8;\n }\n vol = D_8006AA30[ch->unk34];\n mp = vol * D_800A4EFA;\n vol = mp >> 7;\n mp = vol * ch->unk48;\n vol = mp >> 7;\n if (pan != 0) {\n if (ch->unk53 != 0) {\n pan += ch->unk53;\n if (pan >= 0x42) {\n pan -= 0x40;\n if (pan >= 0x80) {\n pan = 0x7F;\n }\n } else {\n pan = 1;\n }\n }\n if (D_800A4F19 != 0) {\n vv = (vol * tA[pan]) >> 14;\n vo->unk0A = vv;\n vv = (vol * tB[0x7F - pan]) >> 14;\n vo->unk08 = vv;\n } else {\n vv = (vol * D_8007321E) >> 14;\n vo->unk0A = vv;\n vo->unk08 = vv;\n }\n } else {\n vv = vol;\n vo->unk08 = vv;\n vo->unk0A = vv;\n }\n ch->unk52 = pan;\n *(u16 *)((u8 *)vo + 0xC) = 0;\n *(u16 *)((u8 *)vo + 0xE) = 0;\n *(s32 *)((u8 *)vo + 4) = 0x6009F;\n if (D_800A4EF6 > REC->unk0A) {\n func_8002F064(1, vo->unk00);\n } else {\n func_8002F064(0, vo->unk00);\n }\n t16 = ch->unk0A;\n vo->unk45 = 0;\n vo->unk44 = 1;\n vo->unk40 = t16;\n if (REC->unk02 == 0) {\n func_8002EFF8(1, vo->unk00);\n }\n REQ->unk0C++;\n REQ->unk0E[idx] = 1;\n }\n next:\n if (REC->unk0B == 0) {\n break;\n }\n arg2++;\n v = REC->unk00;\n }\n if (REQ->unk0C == 0) {\n REQ->unk00 = 0;\n } else {\n REQ->unk0A = 4;\n }\n}\n"} +{"ts": "2026-09-11 04:49:53", "label": "s104_e31", "rung": "E", "calib": {"head": "ae50f9cfe", "stamp": "15956e4a96c4"}, "tu": "src/800_b_2.c", "fn": "func_8002FF0C", "addr": 2147680012, "aliases": null, "header": false, "includers": 0, "nhash_before": "827913560a7f26fa86af42b08506e0ea820c1404", "nhash_after": "138c1bc84ce4be89e5bc2211628afb75db304614", "source": ".run/P36/agents/main__func_8002FF0C/body_minlever.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.171, "objects": ["build/src/800_b_2.o"], "before_text": "s32 func_8002FF0C(s32 a0, s32 a1) {\n /* block scope: src/800_b.c declares this symbol `extern s16 D_800A46D2[]`\n * further down the TU, and the ARRAY spelling materialises the address into\n * a register (`la`) for both the store and the re-read -- the target keeps\n * two independent %hi/%lo accesses, which only the scalar spelling emits. */\n extern s16 D_800A46D2;\n s32 b;\n s32 i;\n s32 idx24;\n s32 j12;\n s32 v1;\n s16 t;\n s16 r;\n s16 *q;\n u8 *w;\n u8 *base;\n s32 res;\n\n if (D_800A46CC == 0) {\n b = D_80064D49[a0].unk00;\n i = b * 24;\n v1 = *(s16 *)((u8 *)D_800A4644 + i);\n if (v1 != 0 && v1 != D_80064D4A[a0 * 12]) {\n t = *(s16 *)((u8 *)D_800A4648 + i);\n *(s16 *)((u8 *)D_800C532A + t * 4) = -1;\n __asm__ __volatile__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n *(s16 *)((u8 *)D_800A4644 + i) = 0;\n *(s16 *)((u8 *)D_800A4648 + i) = 0;\n }\n idx24 = (b * 3) << 3;\n if (D_800A4650[idx24] == 0) {\n t = *(s16 *)((u8 *)D_800A4640 + idx24);\n *(s16 *)((u8 *)D_800C5328 + t * 4) = -1;\n func_80031A98();\n }\n q = D_800A46CE;\n j12 = a0 * 12;\n *q = b;\n *(s16 *)((u8 *)D_800A4640 + idx24) = a0;\n D_800A46D0 = a0;\n D_800A46BC = a1;\n *(s32 *)((u8 *)D_800A464C + idx24) = a1;\n __asm__ __volatile__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (D_80064D4E[j12] != 0) {\n D_800A4EF6 = D_80064D4E[j12];\n }\n r = func_80041A80(a1, -1, *(s32 *)((u8 *)D_800A463C + idx24));\n D_800A46D2 = r;\n base = (u8 *)q - 0x96;\n w = idx24 + base;\n *(s16 *)(w + 0xA) = r;\n __asm__ __volatile__(\"\" ::: \"memory\"); // !FAKE: barrier memory \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (r == -1 || func_800419B0(D_800A46D2) == -1) {\n D_800A4650[idx24] = 1;\n return 1;\n }\n D_800A46CC = 1;\n }\n res = 0;\n switch (D_800A46CC) {\n case 1:\n res = func_80030730();\n break;\n case 2:\n res = func_80030A14();\n break;\n }\n if (res != 0) {\n s16 *p = &D_800A46D2;\n func_800415A8(*p);\n *p = -1;\n *(s16 *)((u8 *)D_800A4642 + *(s16 *)D_800A46CE * 24) = -1;\n return 1;\n }\n return 0;\n}\n", "after_text": "s32 func_8002FF0C(s32 a0, s32 a1) {\n /* block scope: src/800_b.c declares this symbol `extern s16 D_800A46D2[]`\n * further down the TU, and the ARRAY spelling materialises the address into\n * a register (`la`) for both the store and the re-read -- the target keeps\n * two independent %hi/%lo accesses, which only the scalar spelling emits. */\n extern s16 D_800A46D2;\n s32 b;\n s32 i;\n s32 idx24;\n s32 j12;\n s32 v1;\n s16 t;\n s16 r;\n s16 *q;\n u8 *w;\n u8 *base;\n s32 res;\n\n if (D_800A46CC == 0) {\n b = D_80064D49[a0].unk00;\n i = b * 24;\n v1 = *(s16 *)((u8 *)D_800A4644 + i);\n if (v1 != 0 && v1 != D_80064D4A[a0 * 12]) {\n t = *(s16 *)((u8 *)D_800A4648 + i);\n *(s16 *)((u8 *)D_800C532A + t * 4) = -1;\n do { // !FAKE: do-while \u2014 sched1 LOOP-note barrier, sched.c:2058-2074: keeps the zero stores after the D_800C532A store (the Rsc24 field spelling D_800A4640[b].unk04/.unk08 needs none; identical only after linking) (P36 S104 e31 minimum-lever)\n *(s16 *)((u8 *)D_800A4644 + i) = 0;\n *(s16 *)((u8 *)D_800A4648 + i) = 0;\n } while (0);\n }\n idx24 = (b * 3) << 3;\n if (D_800A4650[idx24] == 0) {\n t = *(s16 *)((u8 *)D_800A4640 + idx24);\n *(s16 *)((u8 *)D_800C5328 + t * 4) = -1;\n func_80031A98();\n }\n q = D_800A46CE;\n j12 = a0 * 12;\n *q = b;\n *(s16 *)((u8 *)D_800A4640 + idx24) = a0;\n D_800A46D0 = a0;\n D_800A46BC = a1;\n do { // !FAKE: do-while \u2014 sched1 LOOP-note barrier, sched.c:2058-2074: keeps the D_800A464C store ahead of the D_80064D4E load (the field spelling *(s32 *)&D_800A4640[b].unk0C needs none; identical only after linking) (P36 S104 e31 minimum-lever)\n *(s32 *)((u8 *)D_800A464C + idx24) = a1;\n } while (0);\n if (D_80064D4E[j12] != 0) {\n D_800A4EF6 = D_80064D4E[j12];\n }\n r = func_80041A80(a1, -1, *(s32 *)((u8 *)D_800A463C + idx24));\n D_800A46D2 = r;\n base = (u8 *)q - 0x96;\n w = idx24 + base;\n *(s16 *)(w + 0xA) = r;\n /* read through a struct-typed pointer: expand forces the constant address into a pseudo (explow.c\n memory_address), so cse does not forward the `D_800A46D2 = r` store and the value is re-read */\n if (r == -1 || func_800419B0(((struct { s16 v; } *)&D_800A46D2)->v) == -1) {\n D_800A4650[idx24] = 1;\n return 1;\n }\n D_800A46CC = 1;\n }\n res = 0;\n switch (D_800A46CC) {\n case 1:\n res = func_80030730();\n break;\n case 2:\n res = func_80030A14();\n break;\n }\n if (res != 0) {\n s16 *p = &D_800A46D2;\n func_800415A8(*p);\n *p = -1;\n *(s16 *)((u8 *)D_800A4642 + *(s16 *)D_800A46CE * 24) = -1;\n return 1;\n }\n return 0;\n}\n"} diff --git a/src/800_b_2.c b/src/800_b_2.c index 1715a6de3..a0e7d29b8 100644 --- a/src/800_b_2.c +++ b/src/800_b_2.c @@ -2945,9 +2945,10 @@ s32 func_8002FF0C(s32 a0, s32 a1) { if (v1 != 0 && v1 != D_80064D4A[a0 * 12]) { t = *(s16 *)((u8 *)D_800A4648 + i); *(s16 *)((u8 *)D_800C532A + t * 4) = -1; - __asm__ __volatile__(""); // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) - *(s16 *)((u8 *)D_800A4644 + i) = 0; - *(s16 *)((u8 *)D_800A4648 + i) = 0; + do { // !FAKE: do-while — sched1 LOOP-note barrier, sched.c:2058-2074: keeps the zero stores after the D_800C532A store (the Rsc24 field spelling D_800A4640[b].unk04/.unk08 needs none; identical only after linking) (P36 S104 e31 minimum-lever) + *(s16 *)((u8 *)D_800A4644 + i) = 0; + *(s16 *)((u8 *)D_800A4648 + i) = 0; + } while (0); } idx24 = (b * 3) << 3; if (D_800A4650[idx24] == 0) { @@ -2961,8 +2962,9 @@ s32 func_8002FF0C(s32 a0, s32 a1) { *(s16 *)((u8 *)D_800A4640 + idx24) = a0; D_800A46D0 = a0; D_800A46BC = a1; - *(s32 *)((u8 *)D_800A464C + idx24) = a1; - __asm__ __volatile__(""); // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + do { // !FAKE: do-while — sched1 LOOP-note barrier, sched.c:2058-2074: keeps the D_800A464C store ahead of the D_80064D4E load (the field spelling *(s32 *)&D_800A4640[b].unk0C needs none; identical only after linking) (P36 S104 e31 minimum-lever) + *(s32 *)((u8 *)D_800A464C + idx24) = a1; + } while (0); if (D_80064D4E[j12] != 0) { D_800A4EF6 = D_80064D4E[j12]; } @@ -2971,8 +2973,9 @@ s32 func_8002FF0C(s32 a0, s32 a1) { base = (u8 *)q - 0x96; w = idx24 + base; *(s16 *)(w + 0xA) = r; - __asm__ __volatile__("" ::: "memory"); // !FAKE: barrier memory — NEEDED DIFFERS (P36 rung B tus9) - if (r == -1 || func_800419B0(D_800A46D2) == -1) { + /* read through a struct-typed pointer: expand forces the constant address into a pseudo (explow.c + memory_address), so cse does not forward the `D_800A46D2 = r` store and the value is re-read */ + if (r == -1 || func_800419B0(((struct { s16 v; } *)&D_800A46D2)->v) == -1) { D_800A4650[idx24] = 1; return 1; }