diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 3a5618d24..5a286e033 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,5 +1,5 @@ { - "head": "8733d36da", + "head": "4792daaae", "stamp": "15956e4a96c4", "generated": "2026-09-11 03:53", "aliases": [ @@ -21,207 +21,207 @@ "main": { "objects": 85, "identical": 85, - "seconds": 7.850000000000001, - "mean_s": 0.092 + "seconds": 6.607000000000001, + "mean_s": 0.078 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 5.756, - "mean_s": 0.18 + "seconds": 4.465, + "mean_s": 0.14 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 5.114, - "mean_s": 0.16 + "seconds": 4.372, + "mean_s": 0.137 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 4.3870000000000005, - "mean_s": 0.157 + "seconds": 3.738, + "mean_s": 0.134 } }, "per_object_seconds": { - "build/src/800.o": 0.566, - "build/src/800_b.o": 0.146, - "build/src/800_b_2.o": 0.277, - "build/src/800_b_o0a.o": 0.113, - "build/src/800_c.o": 0.238, - "build/src/800b2.o": 0.135, - "build/src/apicard1.o": 0.089, - "build/src/apicard2.o": 0.107, - "build/src/apicard3.o": 0.081, - "build/src/apicard4.o": 0.12, - "build/src/apicard5.o": 0.107, - "build/src/apicard6.o": 0.102, - "build/src/apicard7.o": 0.1, - "build/src/boot.o": 0.158, - "build/src/gap.o": 0.102, - "build/src/libapi1.o": 0.1, - "build/src/libapi2.o": 0.066, - "build/src/libc2_1.o": 0.083, - "build/src/libc2_2.o": 0.081, - "build/src/libcd1.o": 0.069, - "build/src/libcd2.o": 0.066, - "build/src/libetc.o": 0.065, - "build/src/libgpu.o": 0.073, - "build/src/libgpu2.o": 0.081, - "build/src/libgs1.o": 0.066, - "build/src/libgs2.o": 0.057, - "build/src/libgs3.o": 0.038, - "build/src/libgs4.o": 0.04, - "build/src/libgs5.o": 0.037, - "build/src/libgs6.o": 0.043, - "build/src/libgs7.o": 0.049, - "build/src/libgs8.o": 0.044, - "build/src/libgte1.o": 0.044, - "build/src/libgte10.o": 0.047, - "build/src/libgte11.o": 0.05, - "build/src/libgte12.o": 0.049, - "build/src/libgte13.o": 0.047, - "build/src/libgte14.o": 0.053, - "build/src/libgte15.o": 0.127, - "build/src/libgte16.o": 0.123, - "build/src/libgte17.o": 0.139, - "build/src/libgte18.o": 0.113, - "build/src/libgte19.o": 0.094, - "build/src/libgte2.o": 0.085, - "build/src/libgte20.o": 0.125, - "build/src/libgte21.o": 0.135, - "build/src/libgte22.o": 0.138, - "build/src/libgte23.o": 0.081, - "build/src/libgte24.o": 0.1, - "build/src/libgte25.o": 0.112, - "build/src/libgte26.o": 0.095, - "build/src/libgte27.o": 0.12, - "build/src/libgte28.o": 0.118, - "build/src/libgte29.o": 0.152, - "build/src/libgte3.o": 0.076, - "build/src/libgte30.o": 0.082, - "build/src/libgte4.o": 0.08, - "build/src/libgte5.o": 0.065, - "build/src/libgte6.o": 0.064, - "build/src/libgte7.o": 0.065, - "build/src/libgte8.o": 0.072, - "build/src/libgte9.o": 0.057, - "build/src/libmcrd1.o": 0.067, - "build/src/libmcrd2.o": 0.059, - "build/src/libpad1.o": 0.053, - "build/src/libpad2.o": 0.055, - "build/src/sgap.o": 0.045, - "build/src/sgap_2.o": 0.048, - "build/src/sgap_3.o": 0.048, - "build/src/sgap_4.o": 0.047, - "build/src/sgap_5.o": 0.049, - "build/src/sgap_6.o": 0.041, - "build/src/sgap_8.o": 0.042, - "build/src/snd1.o": 0.042, - "build/src/snd10.o": 0.042, - "build/src/snd11.o": 0.039, - "build/src/snd12.o": 0.107, - "build/src/snd2.o": 0.104, - "build/src/snd3.o": 0.092, - "build/src/snd4.o": 0.127, - "build/src/snd5.o": 0.118, - "build/src/snd6.o": 0.085, - "build/src/snd7.o": 0.13, - "build/src/snd8.o": 0.125, - "build/src/snd9.o": 0.078, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.196, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.426, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.365, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.111, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.114, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.182, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.226, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.134, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.091, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.08, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.161, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.091, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.149, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.091, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.075, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.063, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.061, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.756, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.166, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.064, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.296, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.115, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.136, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.121, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.217, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.286, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.122, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.316, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.156, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.104, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.152, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.133, - "build/src/ov_SC03_015/ov_SC03_015.o": 0.2, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.311, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.398, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.106, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.091, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.123, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.152, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.117, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.098, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.079, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.173, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.073, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.16, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.061, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.052, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.044, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.061, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.288, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.283, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.167, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.242, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.119, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.178, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.15, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.216, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.255, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.123, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.271, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.14, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.13, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.117, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.136, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.173, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.413, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.3, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.064, + "build/src/800.o": 0.69, + "build/src/800_b.o": 0.083, + "build/src/800_b_2.o": 0.287, + "build/src/800_b_o0a.o": 0.091, + "build/src/800_c.o": 0.18, + "build/src/800b2.o": 0.07, + "build/src/apicard1.o": 0.084, + "build/src/apicard2.o": 0.072, + "build/src/apicard3.o": 0.063, + "build/src/apicard4.o": 0.087, + "build/src/apicard5.o": 0.063, + "build/src/apicard6.o": 0.056, + "build/src/apicard7.o": 0.059, + "build/src/boot.o": 0.094, + "build/src/gap.o": 0.06, + "build/src/libapi1.o": 0.094, + "build/src/libapi2.o": 0.057, + "build/src/libc2_1.o": 0.06, + "build/src/libc2_2.o": 0.056, + "build/src/libcd1.o": 0.072, + "build/src/libcd2.o": 0.064, + "build/src/libetc.o": 0.062, + "build/src/libgpu.o": 0.059, + "build/src/libgpu2.o": 0.076, + "build/src/libgs1.o": 0.061, + "build/src/libgs2.o": 0.059, + "build/src/libgs3.o": 0.055, + "build/src/libgs4.o": 0.059, + "build/src/libgs5.o": 0.065, + "build/src/libgs6.o": 0.079, + "build/src/libgs7.o": 0.061, + "build/src/libgs8.o": 0.063, + "build/src/libgte1.o": 0.066, + "build/src/libgte10.o": 0.064, + "build/src/libgte11.o": 0.061, + "build/src/libgte12.o": 0.063, + "build/src/libgte13.o": 0.062, + "build/src/libgte14.o": 0.057, + "build/src/libgte15.o": 0.059, + "build/src/libgte16.o": 0.063, + "build/src/libgte17.o": 0.057, + "build/src/libgte18.o": 0.066, + "build/src/libgte19.o": 0.063, + "build/src/libgte2.o": 0.068, + "build/src/libgte20.o": 0.064, + "build/src/libgte21.o": 0.07, + "build/src/libgte22.o": 0.064, + "build/src/libgte23.o": 0.062, + "build/src/libgte24.o": 0.066, + "build/src/libgte25.o": 0.063, + "build/src/libgte26.o": 0.062, + "build/src/libgte27.o": 0.074, + "build/src/libgte28.o": 0.068, + "build/src/libgte29.o": 0.066, + "build/src/libgte3.o": 0.06, + "build/src/libgte30.o": 0.071, + "build/src/libgte4.o": 0.066, + "build/src/libgte5.o": 0.063, + "build/src/libgte6.o": 0.063, + "build/src/libgte7.o": 0.056, + "build/src/libgte8.o": 0.068, + "build/src/libgte9.o": 0.065, + "build/src/libmcrd1.o": 0.071, + "build/src/libmcrd2.o": 0.071, + "build/src/libpad1.o": 0.069, + "build/src/libpad2.o": 0.073, + "build/src/sgap.o": 0.088, + "build/src/sgap_2.o": 0.072, + "build/src/sgap_3.o": 0.06, + "build/src/sgap_4.o": 0.078, + "build/src/sgap_5.o": 0.062, + "build/src/sgap_6.o": 0.062, + "build/src/sgap_8.o": 0.067, + "build/src/snd1.o": 0.066, + "build/src/snd10.o": 0.063, + "build/src/snd11.o": 0.067, + "build/src/snd12.o": 0.064, + "build/src/snd2.o": 0.064, + "build/src/snd3.o": 0.057, + "build/src/snd4.o": 0.067, + "build/src/snd5.o": 0.064, + "build/src/snd6.o": 0.067, + "build/src/snd7.o": 0.064, + "build/src/snd8.o": 0.057, + "build/src/snd9.o": 0.073, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.11, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.491, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.385, + "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.061, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.108, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.165, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.115, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.08, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.063, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.179, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.078, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.175, + "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.069, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.067, + "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.425, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.256, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.094, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.188, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.06, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.093, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.065, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.169, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.172, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.058, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.271, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.059, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.058, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.052, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.067, + "build/src/ov_SC03_015/ov_SC03_015.o": 0.108, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.508, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.392, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.053, + "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.103, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.159, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.109, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.074, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.063, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.153, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.068, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.162, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.091, + "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.057, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.08, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.444, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.251, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.101, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.194, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.056, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.101, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.064, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.156, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.177, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.05, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.25, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.057, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.058, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.058, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.067, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.118, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.401, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.316, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.042, "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.053, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.104, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.097, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.072, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.048, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.038, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.109, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.044, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.103, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.055, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.101, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.125, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.134, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.419, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.266, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.133, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.211, - "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.129, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.151, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.12, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.158, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.492, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.131, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.144 + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.111, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.144, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.11, + "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.051, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.156, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.069, + "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.084, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.066, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.064, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.087, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.353, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.212, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.094, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.169, + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.053, + "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.057, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.089, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.417, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.06, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.056 }, "ok": true, - "seconds": 18.4 + "seconds": 2.2 } diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index 05321e0a9..8768a0972 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -29492,3 +29492,4 @@ {"ts": "2026-09-11 03:27:35", "label": "s104_e25", "rung": "E", "calib": {"head": "811684515", "stamp": "15956e4a96c4"}, "tu": "src/800.c", "fn": "func_800279AC", "addr": 2147645868, "aliases": null, "header": false, "includers": 0, "nhash_before": "0ba73216abf13ed651635af0316f4989b7492c1b", "nhash_after": "b5ed8ab0eaa553a1be780956e8f89e427af569e5", "source": ".run/P36/agents/main__func_800279AC/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.503, "objects": ["build/src/800.o"], "before_text": "LineG4 *func_800279AC(SrcQ *src, Vtx8 *vb, s32 unused, LineG4 *prim, s32 n, s32 shift, u32 *ot)\n{\n s32 flag;\n s32 otz;\n\n /* cookbook \u00a721 zero-byte re-tie: without it loop.c's record_initial takes the biv's\n * initial value straight from the parameter COPY (set prim (reg $a3)), so the +4 giv is\n * emitted as (plus (reg $a3) 4) -- $a3 then stays live past the copy, conflicts with the\n * prim pseudo, and prim/giv land in $t1/$a3 (target: $a3/$t1). The re-tie makes the\n * pre-loop set non-invariant so the giv is derived from the PSEUDO and prim coalesces\n * into $a3. Emits nothing. */\n __asm__ (\"\" : \"=r\"(prim) : \"0\"(prim)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n for (; n != 0; n--, src++) {\n gte_ldv3(&vb[src->i0], &vb[src->i1], &vb[src->i2]);\n gte_rtpt();\n prim->rgb1 = src->rgb1;\n prim->rgb2 = src->rgb2;\n prim->rgb3 = src->rgb3;\n gte_stflg(&flag);\n if (flag & 0xFFFFEFFF) {\n continue;\n }\n gte_nclip();\n gte_stopz(&otz);\n if (otz <= 0) {\n continue;\n }\n gte_stsxy3_ft3(prim);\n gte_ldv0(&vb[src->i3]);\n gte_rtps();\n gte_stflg(&flag);\n if (flag & 0xFFFFEFFF) {\n continue;\n }\n gte_stsxy(&prim->xy3);\n prim->term = src->term;\n /* \u00a75a zero-byte barrier: else sched2 hoists the D_80078D88 load above this store and\n * eats the two load-delay nops the target keeps (the -2 length drift). */\n if (D_80078D88[0] & 0x8000) {\n s32 sz[4];\n s32 m, k;\n gte_stsz4(&sz[0], &sz[1], &sz[2], &sz[3]);\n m = sz[2];\n if (m < sz[3]) {\n m = sz[3];\n }\n k = sz[0];\n if (k < sz[1]) {\n k = sz[1];\n }\n if (k < m) {\n k = m;\n }\n otz = k >> 2;\n } else {\n gte_avsz4();\n gte_stotz(&otz);\n }\n prim->rgb0 = (src->rgb0 & 0xFFFFFF) | ((u32)src->code << 24);\n /* \u00a75a zero-byte barrier: keeps the rgb0 store ahead of the OT-link block instead of\n * letting sched2 interleave the `otz` reload into the rgb0 chain. */\n __asm__ __volatile__ (\"\" : : : \"memory\"); // !FAKE: barrier memory \u2014 NEEDED DIFFERS (P36 rung B tus9)\n {\n u32 *p = &ot[otz >> shift];\n prim->tag = (*p & 0xFFFFFF) | 0x09000000;\n *p = (u32)prim & 0xFFFFFF;\n }\n prim++;\n }\n return prim;\n}\n", "after_text": "LineG4 *func_800279AC(SrcQ *src, Vtx8 *vb, s32 unused, LineG4 *prim, s32 n, s32 shift, u32 *ot)\n{\n struct { s32 flag, otz, sz0, sz1, sz2, sz3; } g;\n LineG4 *p = prim;\n s32 m, k;\n\n for (; n != 0; n--, src++) {\n gte_ldv3(&vb[src->i0], &vb[src->i1], &vb[src->i2]);\n gte_rtpt();\n p->rgb1 = src->rgb1;\n p->rgb2 = src->rgb2;\n p->rgb3 = src->rgb3;\n gte_stflg(&g.flag);\n if (g.flag & 0xFFFFEFFF) {\n continue;\n }\n gte_nclip();\n gte_stopz(&g.otz);\n if (g.otz <= 0) {\n continue;\n }\n gte_stsxy3_ft3(p);\n gte_ldv0(&vb[src->i3]);\n gte_rtps();\n gte_stflg(&g.flag);\n if (g.flag & 0xFFFFEFFF) {\n continue;\n }\n gte_stsxy(&p->xy3);\n p->term = src->term;\n if (D_80078D88[0] & 0x8000) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n m = g.sz2;\n if (m < g.sz3) {\n m = g.sz3;\n }\n k = g.sz0;\n if (k < g.sz1) {\n k = g.sz1;\n }\n if (k < m) {\n k = m;\n }\n g.otz = k >> 2;\n } else {\n gte_avsz4();\n gte_stotz(&g.otz);\n }\n p->rgb0 = (src->rgb0 & 0xFFFFFF) | ((u32)src->code << 24);\n {\n u32 *q = &ot[g.otz >> shift];\n p->tag = (*q & 0xFFFFFF) | 0x09000000;\n *q = (u32)p & 0xFFFFFF;\n }\n p++;\n }\n return p;\n}\n"} {"ts": "2026-09-11 03:28:02", "label": "s104_e25", "rung": "E", "calib": {"head": "aa0564d72", "stamp": "15956e4a96c4"}, "tu": "src/800.c", "fn": "func_800277DC", "addr": 2147645404, "aliases": null, "header": false, "includers": 0, "nhash_before": "50b306f2c73fa9f8a23341f79e47d48063531f58", "nhash_after": "42f74cc53ae1ca675eeb8b096c1212f11cbda151", "source": ".run/P36/agents/main__func_800277DC/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.487, "objects": ["build/src/800.o"], "before_text": "void *func_800277DC(void *a0, SVECTOR800277DC *a1, void *a2, u8 *a3,\n s32 count, s32 shift, s32 *ot)\n{\n /* The five GTE scratch slots MUST be ONE array, not five scalars. gcc-2.7.2 assigns a\n * stack slot at the point each addressable local's address is first taken, NOT in\n * declaration order; hoisting &otz/&sz0/&sz1 into pre-loop pointer temps (needed to put\n * their three `addiu $sp` ahead of the mask/t0/t1 setup, see below) therefore stole slot 0\n * from `flag` and shifted the whole frame. One array pins the layout:\n * st[0]=flag @sp+0 st[1]=otz @sp+4 st[2]=sz0 @sp+8 st[3]=sz1 @sp+0xC st[4]=sz2 @sp+0x10\n * &st[0] folds to plain $sp, which is why `flag` is touched as 0($sp) with no address reg. */\n s32 st[5];\n /* t0/t1 pins ARE load-bearing (unpinning them re-drifts to 124 ins): they reproduce the\n * hand-budgeted src/dst induction-variable allocation so every field offset stays a direct\n * displacement off $t0 / $t1. cnt/mask/shiftAmt/otp need no pin -- gcc lands them on\n * $t2/$t3/$t9/$t8 on its own, and pinning `otp` to $24 actively BREAKS the match (below). */\n register u8 *t0 __asm__(\"$8\"); // !FAKE: pin $8 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register u8 *t1 __asm__(\"$9\"); // !FAKE: pin $9 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 cnt;\n s32 mask;\n s32 shiftAmt;\n s32 *otp;\n s32 *potz, *psz0, *psz1;\n s32 idx0, idx1, idx2;\n s32 idx;\n s32 m;\n\n cnt = count;\n shiftAmt = shift;\n otp = ot;\n\n if (cnt == 0) {\n return a3;\n }\n\n /* Explicit pre-loop pointer temps, ordered ahead of mask/t0/t1: loop-invariant motion\n * APPENDS hoisted insns after the preheader's own statements, so leaving these implicit\n * emitted them last (`lui/ori, addiu t0, addiu t1, addiu sp+4/8/0xC`) -- the target is the\n * reverse order. */\n potz = &st[1];\n psz0 = &st[2];\n psz1 = &st[3];\n mask = 0xFFFFFF;\n t0 = (u8 *)a0 + 3;\n t1 = a3 + 4;\n\n do {\n idx0 = *(u16 *)(t0 + 0x11);\n idx1 = *(u16 *)(t0 + 0x13);\n idx2 = *(u16 *)(t0 + 0x15);\n\n gte_ldv3(&a1[idx0], &a1[idx1], &a1[idx2]);\n gte_rtpt();\n\n *(u32 *)(t1 + 8) = *(u32 *)(t0 + 1);\n *(u32 *)(t1 + 0x10) = *(u32 *)(t0 + 5);\n *(u32 *)(t1 + 0x18) = *(u32 *)(t0 + 9);\n\n gte_stflg(&st[0]);\n if (!(st[0] & ~0x1000)) {\n gte_nclip();\n gte_stopz(potz);\n if (st[1] > 0) {\n gte_stsxy3_ft3(a3);\n\n if (D_80078D88[0] & 0x8000) {\n gte_stsz3(psz0, psz1, &st[4]);\n /* `m` must NOT be the address-taken otz slot: assigning otz in each arm\n * makes gcc spill to sp+4 three times. The target keeps the running max\n * in $v1 and stores ONCE, so the max needs a plain (non-addressable) temp.\n * `st[2] > st[3]` (not `st[3] < st[2]`) is what loads sz0 first and emits\n * `slt $v0, $v1, $a2`. */\n if (st[2] > st[3]) {\n m = st[2];\n if (m < st[4]) m = st[4];\n } else {\n m = st[3];\n if (m < st[4]) m = st[4];\n }\n st[1] = m >> 2;\n } else {\n gte_avsz3();\n gte_stotz(potz);\n }\n\n *(u32 *)t1 = (*(u32 *)(t0 + 0xD) & mask) | ((u32)t0[0] << 24);\n t1 += 0x20;\n\n idx = st[1] >> shiftAmt;\n {\n u32 old = (u32)a3 & mask;\n /* `s32 *p = otp + idx;` -- writing `otp[idx]` inline emits the address\n * plus with the SCALED INDEX first (`addu $a0,$a0,$t8`); an explicit\n * pointer temp emits it base-first (`addu $a0,$t8,$a0`) like the target.\n * The second half of that fix is that `otp` must be an ordinary pseudo:\n * with `register s32 *otp __asm__(\"$24\")` local-alloc will not tie the\n * dying index register to the address destination and the chain lands in\n * $v0 instead of $a0. Base-first + unpinned base = the last instruction. */\n s32 *p = otp + idx;\n *(u32 *)a3 = (*p & mask) | 0x7000000;\n a3 += 0x20;\n *p = old;\n }\n }\n }\n\n t0 += 0x1C;\n } while (--cnt);\n\n return a3;\n}\n", "after_text": "void *func_800277DC(void *a0, SVECTOR800277DC *a1, void *a2, u8 *a3,\n s32 count, s32 shift, s32 *ot)\n{\n struct { s32 flag, otz, sz0, sz1, sz2; } g;\n struct { u8 pad[3]; u8 code; u32 rgb1, rgb2, term, rgb0; u16 i0, i1, i2, i3; } *src = a0;\n struct { u32 tag, rgb0, xy0, rgb1, xy1, rgb2, xy2, term; } *p = (void *)a3;\n s32 m;\n\n for (; count != 0; count--, src++) {\n gte_ldv3(&a1[src->i0], &a1[src->i1], &a1[src->i2]);\n gte_rtpt();\n p->rgb1 = src->rgb1;\n p->rgb2 = src->rgb2;\n p->term = src->term;\n gte_stflg(&g.flag);\n if (g.flag & 0xFFFFEFFF) {\n continue;\n }\n gte_nclip();\n gte_stopz(&g.otz);\n if (g.otz <= 0) {\n continue;\n }\n gte_stsxy3_ft3(p);\n if (D_80078D88[0] & 0x8000) {\n gte_stsz3(&g.sz0, &g.sz1, &g.sz2);\n if (g.sz0 > g.sz1) {\n m = g.sz0;\n if (m < g.sz2) m = g.sz2;\n } else {\n m = g.sz1;\n if (m < g.sz2) m = g.sz2;\n }\n g.otz = m >> 2;\n } else {\n gte_avsz3();\n gte_stotz(&g.otz);\n }\n p->rgb0 = (src->rgb0 & 0xFFFFFF) | ((u32)src->code << 24);\n {\n u32 *q = (u32 *)&ot[g.otz >> shift];\n p->tag = (*q & 0xFFFFFF) | 0x07000000;\n *q = (u32)p & 0xFFFFFF;\n }\n p++;\n }\n return p;\n}\n"} {"ts": "2026-09-11 03:53:32", "label": "s104_e22", "rung": "E", "calib": {"head": "8733d36da", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_029/ov_SC06_029_jr_8017C954.c", "fn": "func_8017C954", "addr": 2149042516, "aliases": null, "header": false, "includers": 0, "nhash_before": "8c7196cbabbd501745b1958962d403df83bbd598", "nhash_after": "6036a7d34f7fbe2880601f082ae41ee89e06fffa", "source": ".run/P36/agents/ov_SC06_029__func_8017C954/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.217, "objects": ["build/src/ov_SC06_029/ov_SC06_029_jr_8017C954.o"], "before_text": "void func_8017C954(s32 arg0)\n{\n typedef struct { u32 w0, w1, w2; } Prim;\n\n extern s32 func_800491EC(void);\n extern void func_800547D8(s32, MATRIX2 *);\n extern void func_80052E38(MATRIX2 *);\n extern u8 *D_800A5E60;\n extern u8 D_800A6610[];\n extern short D_800B9A02; /* TU-visible spelling (engine_core.h + ov_SC01_000.c col-0); unsigned access forced at use \u2014 \u00a78d sub-class (b) */\n extern s32 D_801DCCA0; /* fade/flash level driving both overlay colours */\n\n DVECTOR2 tmpxy[4];\n SVECTOR2 box[8];\n SVECTOR2 sxy[8];\n SVECTOR2 vv[4]; /* 0xA0..0xBF; only vv[3] is used (arm E vertex copy) */\n MATRIX2 mtx;\n struct { long otz, flag, opz, sz0, sz1, sz2, sz3; } g;\n\n s32 lim;\n u32 colA;\n u32 colB;\n u32 nprim;\n s32 nparts;\n s32 j;\n u32 i;\n Part *part;\n Prim *prim;\n u8 *pkt;\n u32 ot;\n u8 *vtx;\n u8 *va, *vb, *vc, *vd;\n u32 w, code;\n u32 wx, wy, wz;\n s32 xa32, xb32, t32;\n s32 xmn1, xmx1, xmn2, xmx2;\n s32 mnc, mxc;\n s16 my, mny, mx, mn;\n s32 d;\n u32 e;\n\n lim = func_800491EC() + *(s32 *)(arg0 + 0x64);\n func_800547D8(arg0 + 0x10, &mtx);\n func_80052E38(&mtx);\n\n pkt = D_800A5E60;\n ot = (u32)&D_800A6610[(*(u16 *)&D_800B9A02) << 14];\n d = D_801DCCA0;\n colA = (d << 16) | (d << 8) | d;\n e = d * 2;\n if (e > 0xFF) e = 0xFF;\n colB = (e << 16) | (e << 8) | e;\n part = *(Part **)(arg0 + 0xC);\n nparts = *(s32 *)(*(s32 *)(arg0 + 8) + 8);\n vtx = *(u8 **)(*(s32 *)(arg0 + 8) + 0x10);\n\n for (j = 0; j < nparts; j++, part++) {\n wx = part->xx;\n mn = wx;\n mx = wx >> 16;\n wy = part->yy;\n mny = wy;\n my = wy >> 16;\n wz = part->zz;\n box[0].vx = mn; box[0].vy = mny;\n box[1].vx = mx; box[1].vy = mny;\n box[2].vx = mn; box[2].vy = mny;\n box[3].vx = mx; box[3].vy = mny;\n box[4].vx = mn; box[4].vy = my;\n box[5].vx = mx; box[5].vy = my;\n box[6].vx = mn; box[6].vy = my;\n box[7].vx = mx; box[7].vy = my;\n wy = wz >> 16;\n box[0].vz = wz;\n box[1].vz = wz;\n box[4].vz = wz;\n box[5].vz = wz;\n box[2].vz = wy;\n box[3].vz = wy;\n box[6].vz = wy;\n box[7].vz = wy;\n\n gte_ldv3c(&box[0]);\n gte_rtpt();\n gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]);\n gte_ldv0(&box[3]);\n gte_rtps();\n gte_stsxy(&sxy[3]);\n gte_ldv3c(&box[4]);\n gte_rtpt();\n gte_stsxy3(&sxy[4], &sxy[5], &sxy[6]);\n gte_ldv0(&box[7]);\n gte_rtps();\n gte_stsxy(&sxy[7]);\n gte_stszotz(&g.otz);\n\n if (lim >= g.otz) {\n xa32 = sxy[0].vx;\n xb32 = sxy[1].vx;\n if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; }\n t32 = sxy[2].vx;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n t32 = sxy[3].vx;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n xa32 = sxy[4].vx;\n xb32 = sxy[5].vx;\n if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; }\n t32 = sxy[6].vx;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n t32 = sxy[7].vx;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n mnc = xmn1;\n if (xmn2 < xmn1) mnc = xmn2;\n mxc = xmx1;\n if (mxc < xmx2) mxc = xmx2;\n if ((s16)mxc >= -0xA0 && (s16)mnc < 0xA1) {\n xa32 = sxy[0].vy;\n xb32 = sxy[1].vy;\n if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; }\n t32 = sxy[2].vy;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n t32 = sxy[3].vy;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n xa32 = sxy[4].vy;\n xb32 = sxy[5].vy;\n if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; }\n t32 = sxy[6].vy;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n t32 = sxy[7].vy;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n mnc = xmn1;\n if (xmn2 < xmn1) mnc = xmn2;\n mxc = xmx1;\n if (mxc < xmx2) mxc = xmx2;\n if ((s16)mxc >= -0x78 && (s16)mnc < 0x79) {\n prim = (Prim *)part->prim;\n nprim = part->nprim;\n for (i = 0; i < nprim; i++, prim++) {\n w = prim->w1;\n va = vtx + (w & 0xFFFF);\n vb = vtx + (w >> 16);\n w = prim->w2;\n vc = vtx + (w & 0xFFFF);\n w = w >> 16;\n gte_ldv3(va, vb, vc);\n gte_rtpt();\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_nclip();\n code = w & 7;\n vd = vtx + (w & 0xFFF8);\n gte_stopz(&g.opz);\n if (g.opz > 0) {\n switch (code) {\n case 4:\n case 5:\n gte_stsxy3_f3(pkt);\n gte_stsz3(&g.sz0, &g.sz1, &g.sz2);\n if (((PolyF3 *)pkt)->x0 > ((PolyF3 *)pkt)->x1) {\n mx = ((PolyF3 *)pkt)->x0;\n mn = ((PolyF3 *)pkt)->x1;\n } else {\n mn = ((PolyF3 *)pkt)->x0;\n mx = ((PolyF3 *)pkt)->x1;\n }\n if (((PolyF3 *)pkt)->x2 > mx) mx = ((PolyF3 *)pkt)->x2;\n else if (((PolyF3 *)pkt)->x2 < mn) mn = ((PolyF3 *)pkt)->x2;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyF3 *)pkt)->y0 > ((PolyF3 *)pkt)->y1) {\n my = ((PolyF3 *)pkt)->y0;\n mny = ((PolyF3 *)pkt)->y1;\n } else {\n mny = ((PolyF3 *)pkt)->y0;\n my = ((PolyF3 *)pkt)->y1;\n }\n if (((PolyF3 *)pkt)->y2 > my) my = ((PolyF3 *)pkt)->y2;\n else if (((PolyF3 *)pkt)->y2 < mny) mny = ((PolyF3 *)pkt)->y2;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n if (g.sz0 > g.sz1) {\n za = g.sz0;\n if (za < g.sz2) za = g.sz2;\n } else {\n za = g.sz1;\n if (za < g.sz2) za = g.sz2;\n }\n g.opz = za;\n if (code != 4) g.opz = za + 0x200;\n ((PolyF3 *)pkt)->rgbc = prim->w0;\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x4000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x14;\n }\n }\n break;\n case 6:\n case 7:\n gte_stsxy3_ft3(pkt);\n gte_stsz3(&g.sz0, &g.sz1, &g.sz2);\n if (((PolyFT3 *)pkt)->x0 > ((PolyFT3 *)pkt)->x1) {\n mx = ((PolyFT3 *)pkt)->x0;\n mn = ((PolyFT3 *)pkt)->x1;\n } else {\n mn = ((PolyFT3 *)pkt)->x0;\n mx = ((PolyFT3 *)pkt)->x1;\n }\n if (((PolyFT3 *)pkt)->x2 > mx) mx = ((PolyFT3 *)pkt)->x2;\n else if (((PolyFT3 *)pkt)->x2 < mn) mn = ((PolyFT3 *)pkt)->x2;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyFT3 *)pkt)->y0 > ((PolyFT3 *)pkt)->y1) {\n my = ((PolyFT3 *)pkt)->y0;\n mny = ((PolyFT3 *)pkt)->y1;\n } else {\n mny = ((PolyFT3 *)pkt)->y0;\n my = ((PolyFT3 *)pkt)->y1;\n }\n if (((PolyFT3 *)pkt)->y2 > my) my = ((PolyFT3 *)pkt)->y2;\n else if (((PolyFT3 *)pkt)->y2 < mny) mny = ((PolyFT3 *)pkt)->y2;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n if (g.sz0 > g.sz1) {\n za = g.sz0;\n if (za < g.sz2) za = g.sz2;\n } else {\n za = g.sz1;\n if (za < g.sz2) za = g.sz2;\n }\n g.opz = za;\n if (code == 7) g.opz = za + 0x200;\n tp = (u32 *)prim->w0;\n ((PolyFT3 *)pkt)->rgbc = tp[0];\n ((PolyFT3 *)pkt)->uvc0 = tp[1];\n ((PolyFT3 *)pkt)->uvp1 = tp[2];\n ((PolyFT3 *)pkt)->uv2 = tp[3];\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x7000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x20;\n }\n }\n break;\n case 0:\n case 1:\n gte_stsxy3_f3(pkt);\n gte_ldv0(vd);\n gte_rtps();\n if (((PolyF4 *)pkt)->x0 > ((PolyF4 *)pkt)->x1) {\n mx = ((PolyF4 *)pkt)->x0;\n mn = ((PolyF4 *)pkt)->x1;\n } else {\n mn = ((PolyF4 *)pkt)->x0;\n mx = ((PolyF4 *)pkt)->x1;\n }\n if (((PolyF4 *)pkt)->x2 > mx) mx = ((PolyF4 *)pkt)->x2;\n else if (((PolyF4 *)pkt)->x2 < mn) mn = ((PolyF4 *)pkt)->x2;\n if (((PolyF4 *)pkt)->y0 > ((PolyF4 *)pkt)->y1) {\n my = ((PolyF4 *)pkt)->y0;\n mny = ((PolyF4 *)pkt)->y1;\n } else {\n mny = ((PolyF4 *)pkt)->y0;\n my = ((PolyF4 *)pkt)->y1;\n }\n if (((PolyF4 *)pkt)->y2 > my) my = ((PolyF4 *)pkt)->y2;\n else if (((PolyF4 *)pkt)->y2 < mny) mny = ((PolyF4 *)pkt)->y2;\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&((PolyF4 *)pkt)->x3);\n if (((PolyF4 *)pkt)->x3 < mn) mn = ((PolyF4 *)pkt)->x3;\n else if (mx < ((PolyF4 *)pkt)->x3) mx = ((PolyF4 *)pkt)->x3;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyF4 *)pkt)->y3 < mny) mny = ((PolyF4 *)pkt)->y3;\n else if (my < ((PolyF4 *)pkt)->y3) my = ((PolyF4 *)pkt)->y3;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n ((PolyF4 *)pkt)->rgbc = prim->w0;\n otp = (u32 *)(((za >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x5000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x18;\n }\n }\n }\n break;\n case 2:\n gte_stsxy3c(&tmpxy[0]);\n gte_ldv0(vd);\n gte_rtps();\n if (tmpxy[0].vx > tmpxy[1].vx) {\n mx = tmpxy[0].vx;\n mn = tmpxy[1].vx;\n } else {\n mn = tmpxy[0].vx;\n mx = tmpxy[1].vx;\n }\n if (tmpxy[2].vx > mx) mx = tmpxy[2].vx;\n else if (tmpxy[2].vx < mn) mn = tmpxy[2].vx;\n if (tmpxy[0].vy > tmpxy[1].vy) {\n my = tmpxy[0].vy;\n mny = tmpxy[1].vy;\n } else {\n mny = tmpxy[0].vy;\n my = tmpxy[1].vy;\n }\n if (tmpxy[2].vy > my) my = tmpxy[2].vy;\n else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy;\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&((PolyFT4 *)pkt)->x3);\n if (((PolyFT4 *)pkt)->x3 < mn) mn = ((PolyFT4 *)pkt)->x3;\n else if (mx < ((PolyFT4 *)pkt)->x3) mx = ((PolyFT4 *)pkt)->x3;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyFT4 *)pkt)->y3 < mny) mny = ((PolyFT4 *)pkt)->y3;\n else if (my < ((PolyFT4 *)pkt)->y3) my = ((PolyFT4 *)pkt)->y3;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n u32 uvw;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n if (code == 3) g.opz = za + 0x200;\n *(u32 *)&((PolyFT4 *)pkt)->x0 = *(u32 *)&tmpxy[0];\n *(u32 *)&((PolyFT4 *)pkt)->x1 = *(u32 *)&tmpxy[1];\n *(u32 *)&((PolyFT4 *)pkt)->x2 = *(u32 *)&tmpxy[2];\n tp = (u32 *)prim->w0;\n ((PolyFT4 *)pkt)->rgbc = tp[0];\n ((PolyFT4 *)pkt)->uvc0 = tp[1];\n ((PolyFT4 *)pkt)->uvp1 = tp[2];\n uvw = tp[3];\n ((PolyFT4 *)pkt)->uv2 = uvw;\n ((PolyFT4 *)pkt)->uv3 = uvw >> 16;\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x9000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x28;\n }\n }\n }\n break;\n case 3:\n gte_stsxy3c(&tmpxy[0]);\n vv[3] = *(SVECTOR2 *)vd;\n gte_ldv0(&vv[3]);\n gte_rtps();\n if (tmpxy[0].vx > tmpxy[1].vx) {\n mx = tmpxy[0].vx;\n mn = tmpxy[1].vx;\n } else {\n mn = tmpxy[0].vx;\n mx = tmpxy[1].vx;\n }\n if (tmpxy[2].vx > mx) mx = tmpxy[2].vx;\n else if (tmpxy[2].vx < mn) mn = tmpxy[2].vx;\n if (tmpxy[0].vy > tmpxy[1].vy) {\n my = tmpxy[0].vy;\n mny = tmpxy[1].vy;\n } else {\n mny = tmpxy[0].vy;\n my = tmpxy[1].vy;\n }\n if (tmpxy[2].vy > my) my = tmpxy[2].vy;\n else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy;\n /* L1: zero-byte $v1 conflict dial -- keeps my/mny off $v1 so the\n * my/mny/mx/mn quad lands on $a2/$a3/$t0/$t1 (see header). */\n __asm__ __volatile__ (\"\" ::: \"$3\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus10)\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&tmpxy[3]);\n if (tmpxy[3].vx < mn) mn = tmpxy[3].vx;\n else if (mx < tmpxy[3].vx) mx = tmpxy[3].vx;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (tmpxy[3].vy < mny) mny = tmpxy[3].vy;\n else if (my < tmpxy[3].vy) my = tmpxy[3].vy;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n u32 uvw;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n *(u32 *)&((PolyFT4 *)pkt)->x0 = *(u32 *)&tmpxy[0];\n *(u32 *)&((PolyFT4 *)pkt)->x1 = *(u32 *)&tmpxy[1];\n *(u32 *)&((PolyFT4 *)pkt)->x2 = *(u32 *)&tmpxy[2];\n *(u32 *)&((PolyFT4 *)pkt)->x3 = *(u32 *)&tmpxy[3];\n tp = (u32 *)prim->w0;\n ((PolyFT4 *)pkt)->rgbc = colA | 0x2E000000;\n ((PolyFT4 *)pkt)->uvc0 = tp[1];\n ((PolyFT4 *)pkt)->uvp1 = tp[2];\n uvw = tp[3];\n ((PolyFT4 *)pkt)->uv2 = uvw;\n ((PolyFT4 *)pkt)->uv3 = uvw >> 16;\n {\n u32 *op1 = (u32 *)(((za >> 2) << 2) + ot);\n *(u32 *)pkt = (*op1 & 0xFFFFFF) | 0x9000000;\n *op1 = (*op1 & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n }\n pkt += 0x28;\n pkt[3] = 6;\n *(u32 *)(pkt + 8) = colB | 0x2A000000;\n *(u32 *)(pkt + 0xC) = *(u32 *)&tmpxy[0];\n *(u32 *)(pkt + 4) = 0xE1000040;\n *(u32 *)(pkt + 0x10) = *(u32 *)&tmpxy[1];\n *(u32 *)(pkt + 0x14) = *(u32 *)&tmpxy[2];\n *(u32 *)(pkt + 0x18) = *(u32 *)&tmpxy[3];\n {\n u32 *op2 = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*op2 & 0xFFFFFF) | 0x6000000;\n *op2 = (*op2 & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n }\n pkt += 0x1C;\n }\n }\n }\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n D_800A5E60 = pkt;\n}\n", "after_text": "void func_8017C954(s32 arg0)\n{\n typedef struct { u32 w0, w1, w2; } Prim;\n\n extern s32 func_800491EC(void);\n extern void func_800547D8(s32, MATRIX2 *);\n extern void func_80052E38(MATRIX2 *);\n extern u8 *D_800A5E60;\n extern u8 D_800A6610[];\n extern short D_800B9A02; /* TU-visible spelling (engine_core.h + ov_SC01_000.c col-0); unsigned access forced at use \u2014 \u00a78d sub-class (b) */\n extern s32 D_801DCCA0; /* fade/flash level driving both overlay colours */\n\n DVECTOR2 tmpxy[4];\n SVECTOR2 box[8];\n SVECTOR2 sxy[8];\n SVECTOR2 vv[4]; /* 0xA0..0xBF; only vv[3] is used (arm E vertex copy) */\n MATRIX2 mtx;\n struct { long otz, flag, opz, sz0, sz1, sz2, sz3; } g;\n\n s32 lim;\n u32 colA;\n u32 colB;\n u32 nprim;\n s32 nparts;\n s32 j;\n u32 i;\n Part *part;\n Prim *prim;\n u8 *pkt;\n u32 ot;\n u8 *vtx;\n u8 *va, *vb, *vc, *vd;\n u32 w, code;\n u32 wx, wy, wz;\n s16 wq; /* P36 S104 e22: the box's high z half, its own s16 (see mechanism.md) */\n s32 xa32, xb32, t32;\n s32 xmn1, xmx1, xmn2, xmx2;\n s32 mnc, mxc;\n s16 my, mny, mx, mn;\n s32 d;\n u32 e;\n\n lim = func_800491EC() + *(s32 *)(arg0 + 0x64);\n func_800547D8(arg0 + 0x10, &mtx);\n func_80052E38(&mtx);\n\n pkt = D_800A5E60;\n ot = (u32)&D_800A6610[(*(u16 *)&D_800B9A02) << 14];\n d = D_801DCCA0;\n colA = (d << 16) | (d << 8) | d;\n e = d * 2;\n if (e > 0xFF) e = 0xFF;\n colB = (e << 16) | (e << 8) | e;\n part = *(Part **)(arg0 + 0xC);\n nparts = *(s32 *)(*(s32 *)(arg0 + 8) + 8);\n vtx = *(u8 **)(*(s32 *)(arg0 + 8) + 0x10);\n\n for (j = 0; j < nparts; j++, part++) {\n wx = part->xx;\n mn = wx;\n mx = wx >> 16;\n wy = part->yy;\n mny = wy;\n my = wy >> 16;\n wz = part->zz;\n box[0].vx = mn; box[0].vy = mny;\n box[1].vx = mx; box[1].vy = mny;\n box[2].vx = mn; box[2].vy = mny;\n box[3].vx = mx; box[3].vy = mny;\n box[4].vx = mn; box[4].vy = my;\n box[5].vx = mx; box[5].vy = my;\n box[6].vx = mn; box[6].vy = my;\n box[7].vx = mx; box[7].vy = my;\n wq = wz >> 16;\n box[0].vz = wz;\n box[1].vz = wz;\n box[4].vz = wz;\n box[5].vz = wz;\n box[2].vz = wq;\n box[3].vz = wq;\n box[6].vz = wq;\n box[7].vz = wq;\n\n gte_ldv3c(&box[0]);\n gte_rtpt();\n gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]);\n gte_ldv0(&box[3]);\n gte_rtps();\n gte_stsxy(&sxy[3]);\n gte_ldv3c(&box[4]);\n gte_rtpt();\n gte_stsxy3(&sxy[4], &sxy[5], &sxy[6]);\n gte_ldv0(&box[7]);\n gte_rtps();\n gte_stsxy(&sxy[7]);\n gte_stszotz(&g.otz);\n\n if (lim >= g.otz) {\n xa32 = sxy[0].vx;\n xb32 = sxy[1].vx;\n if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; }\n t32 = sxy[2].vx;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n t32 = sxy[3].vx;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n xa32 = sxy[4].vx;\n xb32 = sxy[5].vx;\n if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; }\n t32 = sxy[6].vx;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n t32 = sxy[7].vx;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n mnc = xmn1;\n if (xmn2 < xmn1) mnc = xmn2;\n mxc = xmx1;\n if (mxc < xmx2) mxc = xmx2;\n if ((s16)mxc >= -0xA0 && (s16)mnc < 0xA1) {\n xa32 = sxy[0].vy;\n xb32 = sxy[1].vy;\n if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; }\n t32 = sxy[2].vy;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n t32 = sxy[3].vy;\n if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32;\n xa32 = sxy[4].vy;\n xb32 = sxy[5].vy;\n if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; }\n t32 = sxy[6].vy;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n t32 = sxy[7].vy;\n if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32;\n mnc = xmn1;\n if (xmn2 < xmn1) mnc = xmn2;\n mxc = xmx1;\n if (mxc < xmx2) mxc = xmx2;\n if ((s16)mxc >= -0x78 && (s16)mnc < 0x79) {\n prim = (Prim *)part->prim;\n nprim = part->nprim;\n for (i = 0; i < nprim; i++, prim++) {\n w = prim->w1;\n va = vtx + (w & 0xFFFF);\n vb = vtx + (w >> 16);\n w = prim->w2;\n vc = vtx + (w & 0xFFFF);\n w = w >> 16;\n gte_ldv3(va, vb, vc);\n gte_rtpt();\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_nclip();\n code = w & 7;\n vd = vtx + (w & 0xFFF8);\n gte_stopz(&g.opz);\n if (g.opz > 0) {\n switch (code) {\n case 4:\n case 5:\n gte_stsxy3_f3(pkt);\n gte_stsz3(&g.sz0, &g.sz1, &g.sz2);\n if (((PolyF3 *)pkt)->x0 > ((PolyF3 *)pkt)->x1) {\n mx = ((PolyF3 *)pkt)->x0;\n mn = ((PolyF3 *)pkt)->x1;\n } else {\n mn = ((PolyF3 *)pkt)->x0;\n mx = ((PolyF3 *)pkt)->x1;\n }\n if (((PolyF3 *)pkt)->x2 > mx) mx = ((PolyF3 *)pkt)->x2;\n else if (((PolyF3 *)pkt)->x2 < mn) mn = ((PolyF3 *)pkt)->x2;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyF3 *)pkt)->y0 > ((PolyF3 *)pkt)->y1) {\n my = ((PolyF3 *)pkt)->y0;\n mny = ((PolyF3 *)pkt)->y1;\n } else {\n mny = ((PolyF3 *)pkt)->y0;\n my = ((PolyF3 *)pkt)->y1;\n }\n if (((PolyF3 *)pkt)->y2 > my) my = ((PolyF3 *)pkt)->y2;\n else if (((PolyF3 *)pkt)->y2 < mny) mny = ((PolyF3 *)pkt)->y2;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n if (g.sz0 > g.sz1) {\n za = g.sz0;\n if (za < g.sz2) za = g.sz2;\n } else {\n za = g.sz1;\n if (za < g.sz2) za = g.sz2;\n }\n g.opz = za;\n if (code != 4) g.opz = za + 0x200;\n ((PolyF3 *)pkt)->rgbc = prim->w0;\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x4000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x14;\n }\n }\n break;\n case 6:\n case 7:\n gte_stsxy3_ft3(pkt);\n gte_stsz3(&g.sz0, &g.sz1, &g.sz2);\n if (((PolyFT3 *)pkt)->x0 > ((PolyFT3 *)pkt)->x1) {\n mx = ((PolyFT3 *)pkt)->x0;\n mn = ((PolyFT3 *)pkt)->x1;\n } else {\n mn = ((PolyFT3 *)pkt)->x0;\n mx = ((PolyFT3 *)pkt)->x1;\n }\n if (((PolyFT3 *)pkt)->x2 > mx) mx = ((PolyFT3 *)pkt)->x2;\n else if (((PolyFT3 *)pkt)->x2 < mn) mn = ((PolyFT3 *)pkt)->x2;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyFT3 *)pkt)->y0 > ((PolyFT3 *)pkt)->y1) {\n my = ((PolyFT3 *)pkt)->y0;\n mny = ((PolyFT3 *)pkt)->y1;\n } else {\n mny = ((PolyFT3 *)pkt)->y0;\n my = ((PolyFT3 *)pkt)->y1;\n }\n if (((PolyFT3 *)pkt)->y2 > my) my = ((PolyFT3 *)pkt)->y2;\n else if (((PolyFT3 *)pkt)->y2 < mny) mny = ((PolyFT3 *)pkt)->y2;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n if (g.sz0 > g.sz1) {\n za = g.sz0;\n if (za < g.sz2) za = g.sz2;\n g.opz = za;\n } else {\n za = g.sz1;\n if (za < g.sz2) za = g.sz2;\n g.opz = za;\n }\n if (code == 7) g.opz = za + 0x200;\n tp = (u32 *)prim->w0;\n ((PolyFT3 *)pkt)->rgbc = tp[0];\n ((PolyFT3 *)pkt)->uvc0 = tp[1];\n ((PolyFT3 *)pkt)->uvp1 = tp[2];\n ((PolyFT3 *)pkt)->uv2 = tp[3];\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x7000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x20;\n }\n }\n break;\n case 0:\n case 1:\n gte_stsxy3_f3(pkt);\n gte_ldv0(vd);\n gte_rtps();\n if (((PolyF4 *)pkt)->x0 > ((PolyF4 *)pkt)->x1) {\n mx = ((PolyF4 *)pkt)->x0;\n mn = ((PolyF4 *)pkt)->x1;\n } else {\n mn = ((PolyF4 *)pkt)->x0;\n mx = ((PolyF4 *)pkt)->x1;\n }\n if (((PolyF4 *)pkt)->x2 > mx) mx = ((PolyF4 *)pkt)->x2;\n else if (((PolyF4 *)pkt)->x2 < mn) mn = ((PolyF4 *)pkt)->x2;\n if (((PolyF4 *)pkt)->y0 > ((PolyF4 *)pkt)->y1) {\n my = ((PolyF4 *)pkt)->y0;\n mny = ((PolyF4 *)pkt)->y1;\n } else {\n mny = ((PolyF4 *)pkt)->y0;\n my = ((PolyF4 *)pkt)->y1;\n }\n if (((PolyF4 *)pkt)->y2 > my) my = ((PolyF4 *)pkt)->y2;\n else if (((PolyF4 *)pkt)->y2 < mny) mny = ((PolyF4 *)pkt)->y2;\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&((PolyF4 *)pkt)->x3);\n if (((PolyF4 *)pkt)->x3 < mn) mn = ((PolyF4 *)pkt)->x3;\n else if (mx < ((PolyF4 *)pkt)->x3) mx = ((PolyF4 *)pkt)->x3;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyF4 *)pkt)->y3 < mny) mny = ((PolyF4 *)pkt)->y3;\n else if (my < ((PolyF4 *)pkt)->y3) my = ((PolyF4 *)pkt)->y3;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n ((PolyF4 *)pkt)->rgbc = prim->w0;\n otp = (u32 *)(((za >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x5000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x18;\n }\n }\n }\n break;\n case 2:\n gte_stsxy3c(&tmpxy[0]);\n gte_ldv0(vd);\n gte_rtps();\n if (tmpxy[0].vx > tmpxy[1].vx) {\n mx = tmpxy[0].vx;\n mn = tmpxy[1].vx;\n } else {\n mn = tmpxy[0].vx;\n mx = tmpxy[1].vx;\n }\n if (tmpxy[2].vx > mx) mx = tmpxy[2].vx;\n else if (tmpxy[2].vx < mn) mn = tmpxy[2].vx;\n if (tmpxy[0].vy > tmpxy[1].vy) {\n my = tmpxy[0].vy;\n mny = tmpxy[1].vy;\n } else {\n mny = tmpxy[0].vy;\n my = tmpxy[1].vy;\n }\n if (tmpxy[2].vy > my) my = tmpxy[2].vy;\n else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy;\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&((PolyFT4 *)pkt)->x3);\n if (((PolyFT4 *)pkt)->x3 < mn) mn = ((PolyFT4 *)pkt)->x3;\n else if (mx < ((PolyFT4 *)pkt)->x3) mx = ((PolyFT4 *)pkt)->x3;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (((PolyFT4 *)pkt)->y3 < mny) mny = ((PolyFT4 *)pkt)->y3;\n else if (my < ((PolyFT4 *)pkt)->y3) my = ((PolyFT4 *)pkt)->y3;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n u32 uvw;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n if (code == 3) g.opz = za + 0x200;\n *(u32 *)&((PolyFT4 *)pkt)->x0 = *(u32 *)&tmpxy[0];\n *(u32 *)&((PolyFT4 *)pkt)->x1 = *(u32 *)&tmpxy[1];\n *(u32 *)&((PolyFT4 *)pkt)->x2 = *(u32 *)&tmpxy[2];\n tp = (u32 *)prim->w0;\n ((PolyFT4 *)pkt)->rgbc = tp[0];\n ((PolyFT4 *)pkt)->uvc0 = tp[1];\n ((PolyFT4 *)pkt)->uvp1 = tp[2];\n uvw = tp[3];\n ((PolyFT4 *)pkt)->uv2 = uvw;\n ((PolyFT4 *)pkt)->uv3 = uvw >> 16;\n otp = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x9000000;\n *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n pkt += 0x28;\n }\n }\n }\n break;\n case 3:\n gte_stsxy3c(&tmpxy[0]);\n vv[3] = *(SVECTOR2 *)vd;\n gte_ldv0(&vv[3]);\n gte_rtps();\n if (tmpxy[0].vx > tmpxy[1].vx) {\n mx = tmpxy[0].vx;\n mn = tmpxy[1].vx;\n } else {\n mn = tmpxy[0].vx;\n mx = tmpxy[1].vx;\n }\n if (tmpxy[2].vx > mx) mx = tmpxy[2].vx;\n else if (tmpxy[2].vx < mn) mn = tmpxy[2].vx;\n if (tmpxy[0].vy > tmpxy[1].vy) {\n my = tmpxy[0].vy;\n mny = tmpxy[1].vy;\n } else {\n mny = tmpxy[0].vy;\n my = tmpxy[1].vy;\n }\n if (tmpxy[2].vy > my) my = tmpxy[2].vy;\n else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy;\n gte_stflg(&g.flag);\n if (!(g.flag & 0x7F85E000)) {\n gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);\n gte_stsxy((long *)&tmpxy[3]);\n if (tmpxy[3].vx < mn) mn = tmpxy[3].vx;\n else if (mx < tmpxy[3].vx) mx = tmpxy[3].vx;\n if (mx >= -0xA0 && mn < 0xA1) {\n if (tmpxy[3].vy < mny) mny = tmpxy[3].vy;\n else if (my < tmpxy[3].vy) my = tmpxy[3].vy;\n if (my >= -0x78 && mny < 0x79) {\n s32 za, zb;\n u32 *otp;\n u32 *tp;\n u32 uvw;\n zb = g.sz2;\n if (zb < g.sz3) zb = g.sz3;\n za = g.sz0;\n if (za < g.sz1) za = g.sz1;\n if (za < zb) za = zb;\n g.opz = za;\n *(u32 *)&((PolyFT4 *)pkt)->x0 = *(u32 *)&tmpxy[0];\n *(u32 *)&((PolyFT4 *)pkt)->x1 = *(u32 *)&tmpxy[1];\n *(u32 *)&((PolyFT4 *)pkt)->x2 = *(u32 *)&tmpxy[2];\n *(u32 *)&((PolyFT4 *)pkt)->x3 = *(u32 *)&tmpxy[3];\n tp = (u32 *)prim->w0;\n ((PolyFT4 *)pkt)->rgbc = colA | 0x2E000000;\n ((PolyFT4 *)pkt)->uvc0 = tp[1];\n ((PolyFT4 *)pkt)->uvp1 = tp[2];\n uvw = tp[3];\n ((PolyFT4 *)pkt)->uv2 = uvw;\n ((PolyFT4 *)pkt)->uv3 = uvw >> 16;\n {\n u32 *op1 = (u32 *)(((za >> 2) << 2) + ot);\n *(u32 *)pkt = (*op1 & 0xFFFFFF) | 0x9000000;\n *op1 = (*op1 & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n }\n pkt += 0x28;\n pkt[3] = 6;\n *(u32 *)(pkt + 8) = colB | 0x2A000000;\n *(u32 *)(pkt + 0xC) = *(u32 *)&tmpxy[0];\n *(u32 *)(pkt + 4) = 0xE1000040;\n *(u32 *)(pkt + 0x10) = *(u32 *)&tmpxy[1];\n *(u32 *)(pkt + 0x14) = *(u32 *)&tmpxy[2];\n *(u32 *)(pkt + 0x18) = *(u32 *)&tmpxy[3];\n {\n u32 *op2 = (u32 *)(((g.opz >> 2) << 2) + ot);\n *(u32 *)pkt = (*op2 & 0xFFFFFF) | 0x6000000;\n *op2 = (*op2 & 0xFF000000) | ((u32)pkt & 0xFFFFFF);\n }\n pkt += 0x1C;\n }\n }\n }\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n D_800A5E60 = pkt;\n}\n"} +{"ts": "2026-09-11 03:53:50", "label": "s104_e22", "rung": "E", "calib": {"head": "4792daaae", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_029/ov_SC06_029_jr_8017C954.c", "fn": "func_80181708", "addr": 2149062408, "aliases": null, "header": false, "includers": 0, "nhash_before": "2dc0d8a94d47bd70427d3691f809b71d21f3af2d", "nhash_after": "a9c05827f4ea916c87d3e891198d780adeee94f6", "source": ".run/P36/agents/ov_SC06_029__func_80181708/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.214, "objects": ["build/src/ov_SC06_029/ov_SC06_029_jr_8017C954.o"], "before_text": "void func_80181708(int param_1) {\n s16 *psVar1;\n register s16 *psVar2 __asm__(\"$3\"); // !FAKE: pin $3 \u2014 NEEDED DIFFERS (P36 rung B tus10)\n s16 *psVar5;\n s16 sVar4;\n s32 t;\n s32 acc;\n\n psVar1 = (s16 *)D_801DFD8C;\n psVar2 = (s16 *)D_801DFD90;\n *(s32 *)(param_1 + 0x48) = psVar1[0];\n *(s32 *)(param_1 + 0x50) = psVar1[2];\n *(s32 *)(param_1 + 0x3C) = psVar2[0];\n *(s32 *)(param_1 + 0x44) = psVar2[2];\n sVar4 = func_80012CB8(D_801904C6, psVar1[1], 0xC0);\n acc = *(s32 *)(param_1 + 0x4C) + sVar4;\n __asm__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus10)\n t = D_801DFD90;\n *(s32 *)(param_1 + 0x4C) = acc;\n sVar4 = func_80012CB8(D_801904CE, *(s16 *)(t + 2), 0xC0);\n psVar5 = (s16 *)D_801DFD8C;\n *(s32 *)(param_1 + 0x40) += sVar4;\n if (*(s32 *)(param_1 + 0x4C) < psVar5[1])\n *(s32 *)(param_1 + 0x4C) = psVar5[1];\n if (*(s32 *)(param_1 + 0x40) < *(s16 *)(D_801DFD90 + 2))\n *(s32 *)(param_1 + 0x40) = *(s16 *)(D_801DFD90 + 2);\n}\n", "after_text": "void func_80181708(int param_1) {\n typedef struct { s16 vx, vy, vz, pad; } SV;\n typedef struct { u8 pad[0x3C]; s32 x3C; s32 x40; s32 x44; s32 x48; s32 x4C; s32 x50; } OB;\n extern s16 D_801904C6_a[] __asm__(\"D_801904C6\");\n extern s16 D_801904CE_a[] __asm__(\"D_801904CE\");\n SV *p1 = (SV *)D_801DFD8C;\n SV *p2 = (SV *)D_801DFD90;\n\n ((OB *)param_1)->x48 = p1->vx;\n ((OB *)param_1)->x50 = p1->vz;\n ((OB *)param_1)->x3C = p2->vx;\n ((OB *)param_1)->x44 = p2->vz;\n ((OB *)param_1)->x4C += (s16)func_80012CB8(D_801904C6_a[0], p1->vy, 0xC0);\n ((OB *)param_1)->x40 += (s16)func_80012CB8(D_801904CE_a[0], ((SV *)D_801DFD90)->vy, 0xC0);\n if (((OB *)param_1)->x4C < ((SV *)D_801DFD8C)->vy)\n ((OB *)param_1)->x4C = ((SV *)D_801DFD8C)->vy;\n if (((OB *)param_1)->x40 < ((SV *)D_801DFD90)->vy)\n ((OB *)param_1)->x40 = ((SV *)D_801DFD90)->vy;\n}\n"} diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c index c9d216889..4d00aac75 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c @@ -5657,31 +5657,23 @@ extern s32 D_801DFD90; extern s32 func_80012CB8(s32 a0, s32 a1, s32 a2); void func_80181708(int param_1) { - s16 *psVar1; - register s16 *psVar2 __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B tus10) - s16 *psVar5; - s16 sVar4; - s32 t; - s32 acc; + typedef struct { s16 vx, vy, vz, pad; } SV; + typedef struct { u8 pad[0x3C]; s32 x3C; s32 x40; s32 x44; s32 x48; s32 x4C; s32 x50; } OB; + extern s16 D_801904C6_a[] __asm__("D_801904C6"); + extern s16 D_801904CE_a[] __asm__("D_801904CE"); + SV *p1 = (SV *)D_801DFD8C; + SV *p2 = (SV *)D_801DFD90; - psVar1 = (s16 *)D_801DFD8C; - psVar2 = (s16 *)D_801DFD90; - *(s32 *)(param_1 + 0x48) = psVar1[0]; - *(s32 *)(param_1 + 0x50) = psVar1[2]; - *(s32 *)(param_1 + 0x3C) = psVar2[0]; - *(s32 *)(param_1 + 0x44) = psVar2[2]; - sVar4 = func_80012CB8(D_801904C6, psVar1[1], 0xC0); - acc = *(s32 *)(param_1 + 0x4C) + sVar4; - __asm__(""); // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus10) - t = D_801DFD90; - *(s32 *)(param_1 + 0x4C) = acc; - sVar4 = func_80012CB8(D_801904CE, *(s16 *)(t + 2), 0xC0); - psVar5 = (s16 *)D_801DFD8C; - *(s32 *)(param_1 + 0x40) += sVar4; - if (*(s32 *)(param_1 + 0x4C) < psVar5[1]) - *(s32 *)(param_1 + 0x4C) = psVar5[1]; - if (*(s32 *)(param_1 + 0x40) < *(s16 *)(D_801DFD90 + 2)) - *(s32 *)(param_1 + 0x40) = *(s16 *)(D_801DFD90 + 2); + ((OB *)param_1)->x48 = p1->vx; + ((OB *)param_1)->x50 = p1->vz; + ((OB *)param_1)->x3C = p2->vx; + ((OB *)param_1)->x44 = p2->vz; + ((OB *)param_1)->x4C += (s16)func_80012CB8(D_801904C6_a[0], p1->vy, 0xC0); + ((OB *)param_1)->x40 += (s16)func_80012CB8(D_801904CE_a[0], ((SV *)D_801DFD90)->vy, 0xC0); + if (((OB *)param_1)->x4C < ((SV *)D_801DFD8C)->vy) + ((OB *)param_1)->x4C = ((SV *)D_801DFD8C)->vy; + if (((OB *)param_1)->x40 < ((SV *)D_801DFD90)->vy) + ((OB *)param_1)->x40 = ((SV *)D_801DFD90)->vy; }