From 015ebff536b8a22f16b2b880a681a6dd2c02db7b Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 26 Jul 2026 16:48:56 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-29):=20=C2=A784=20family=20fully=20h?= =?UTF-8?q?arvested=20=E2=80=94=20123/123=20members,=200=20failed=20(+29,2?= =?UTF-8?q?80=20ins,=20+27,840=20distinct)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The derived-offset recompute swept the whole func_8013D53C family: 119 banked / 0 failed on top of the 4 earlier; func_8013D53C is now stubbed in ZERO overlays. R22 clean-fleet 140/140 BYTE-IDENTICAL; tools-health OK; dedup 1886/0; 0 NON_MATCHING (G4). RECIPE (and it is NOT the return-axis recipe — sampling caught this): §84 derived-offset -> per-member literal recompute AND the gate_stage ladder. With the recompute alone the sample was 0/8; through the ladder it was 3/3, then 119/119. Had I reused the return-axis recipe (plain harvest_verify, which banked 272/272 there) I would have swept 123 members to zero banks and mis-concluded the fix was wrong. Probe-before-scale. METRIC FINDING worth carrying: this harvest moved instr +29,280 AND distinct-code +27,840, while the return-axis harvest moved instr +26,928 and distinct-code +0. §84-class members are byte-VARIANTS so each is a new unique function; propagation-class members were already counted once via their shared exemplar. => §84-class work moves the RE-COMPLETENESS number; propagation moves only the DISPLAY one. Session fleet: 80.6 -> 81.0% instr · 68.2 -> 68.8% distinct-code · 89.18 -> 89.30% fn-count. --- docs/progress.fleet.md | 256 +++++++++++----------- src/ov_SC01_001/ov_SC01_001_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_001/ov_SC01_001_jr_8013F350.c | 2 +- src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c | 2 +- src/ov_SC01_001/ov_SC01_001_jr_80140608.c | 2 +- src/ov_SC01_004/ov_SC01_004_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_004/ov_SC01_004_jr_8013F350.c | 2 +- src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c | 2 +- src/ov_SC01_004/ov_SC01_004_jr_80140608.c | 2 +- src/ov_SC01_005/ov_SC01_005_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_005/ov_SC01_005_jr_8013F350.c | 2 +- src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c | 2 +- src/ov_SC01_005/ov_SC01_005_jr_80140608.c | 2 +- src/ov_SC01_006/ov_SC01_006_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_006/ov_SC01_006_jr_8013F350.c | 2 +- src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c | 2 +- src/ov_SC01_006/ov_SC01_006_jr_80140608.c | 2 +- src/ov_SC01_008/ov_SC01_008_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_008/ov_SC01_008_jr_8013F350.c | 2 +- src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c | 2 +- src/ov_SC01_008/ov_SC01_008_jr_80140608.c | 2 +- src/ov_SC01_009/ov_SC01_009_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_009/ov_SC01_009_jr_8013F350.c | 2 +- src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c | 2 +- src/ov_SC01_009/ov_SC01_009_jr_80140608.c | 2 +- src/ov_SC01_074/ov_SC01_074_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_074/ov_SC01_074_jr_8013F350.c | 2 +- src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c | 2 +- src/ov_SC01_074/ov_SC01_074_jr_80140608.c | 2 +- src/ov_SC01_080/ov_SC01_080_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_080/ov_SC01_080_jr_8013F350.c | 2 +- src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c | 2 +- src/ov_SC01_080/ov_SC01_080_jr_80140608.c | 2 +- src/ov_SC01_084/ov_SC01_084_jr_801380E0.c | 135 +++++++++++- src/ov_SC01_084/ov_SC01_084_jr_8013F350.c | 2 +- src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c | 2 +- src/ov_SC01_084/ov_SC01_084_jr_80140608.c | 2 +- src/ov_SC02_000/ov_SC02_000_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_000/ov_SC02_000_jr_8013F350.c | 2 +- src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c | 2 +- src/ov_SC02_000/ov_SC02_000_jr_80140608.c | 2 +- src/ov_SC02_003/ov_SC02_003_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_003/ov_SC02_003_jr_8013F350.c | 2 +- src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c | 2 +- src/ov_SC02_003/ov_SC02_003_jr_80140608.c | 2 +- src/ov_SC02_004/ov_SC02_004_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_004/ov_SC02_004_jr_8013F350.c | 2 +- src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c | 2 +- src/ov_SC02_004/ov_SC02_004_jr_80140608.c | 2 +- src/ov_SC02_005/ov_SC02_005_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_005/ov_SC02_005_jr_8013F350.c | 2 +- src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c | 2 +- src/ov_SC02_005/ov_SC02_005_jr_80140608.c | 2 +- src/ov_SC02_011/ov_SC02_011_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_011/ov_SC02_011_jr_8013F350.c | 2 +- src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c | 2 +- src/ov_SC02_011/ov_SC02_011_jr_80140608.c | 2 +- src/ov_SC02_015/ov_SC02_015_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_015/ov_SC02_015_jr_8013F350.c | 2 +- src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c | 2 +- src/ov_SC02_015/ov_SC02_015_jr_80140608.c | 2 +- src/ov_SC02_016/ov_SC02_016_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_016/ov_SC02_016_jr_8013F350.c | 2 +- src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c | 2 +- src/ov_SC02_016/ov_SC02_016_jr_80140608.c | 2 +- src/ov_SC02_017/ov_SC02_017_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_017/ov_SC02_017_jr_8013F350.c | 2 +- src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c | 2 +- src/ov_SC02_017/ov_SC02_017_jr_80140608.c | 2 +- src/ov_SC02_021/ov_SC02_021_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_021/ov_SC02_021_jr_8013F350.c | 2 +- src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c | 2 +- src/ov_SC02_021/ov_SC02_021_jr_80140608.c | 2 +- src/ov_SC02_026/ov_SC02_026_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_026/ov_SC02_026_jr_8013F350.c | 2 +- src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c | 2 +- src/ov_SC02_026/ov_SC02_026_jr_80140608.c | 2 +- src/ov_SC02_027/ov_SC02_027_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_027/ov_SC02_027_jr_8013F350.c | 2 +- src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c | 2 +- src/ov_SC02_027/ov_SC02_027_jr_80140608.c | 2 +- src/ov_SC02_028/ov_SC02_028_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_028/ov_SC02_028_jr_8013F350.c | 2 +- src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c | 2 +- src/ov_SC02_028/ov_SC02_028_jr_80140608.c | 2 +- src/ov_SC02_031/ov_SC02_031_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_031/ov_SC02_031_jr_8013F350.c | 2 +- src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c | 2 +- src/ov_SC02_031/ov_SC02_031_jr_80140608.c | 2 +- src/ov_SC02_035/ov_SC02_035_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_035/ov_SC02_035_jr_8013F350.c | 2 +- src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c | 2 +- src/ov_SC02_035/ov_SC02_035_jr_80140608.c | 2 +- src/ov_SC02_039/ov_SC02_039_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_039/ov_SC02_039_jr_8013F350.c | 2 +- src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c | 2 +- src/ov_SC02_039/ov_SC02_039_jr_80140608.c | 2 +- src/ov_SC02_041/ov_SC02_041_jr_801380E0.c | 135 +++++++++++- src/ov_SC02_041/ov_SC02_041_jr_8013F350.c | 2 +- src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c | 2 +- src/ov_SC02_041/ov_SC02_041_jr_80140608.c | 2 +- src/ov_SC03_003/ov_SC03_003_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_003/ov_SC03_003_jr_8013F350.c | 2 +- src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c | 2 +- src/ov_SC03_003/ov_SC03_003_jr_80140608.c | 2 +- src/ov_SC03_006/ov_SC03_006_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_006/ov_SC03_006_jr_8013F350.c | 2 +- src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c | 2 +- src/ov_SC03_006/ov_SC03_006_jr_80140608.c | 2 +- src/ov_SC03_007/ov_SC03_007_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_007/ov_SC03_007_jr_8013F350.c | 2 +- src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c | 2 +- src/ov_SC03_007/ov_SC03_007_jr_80140608.c | 2 +- src/ov_SC03_010/ov_SC03_010_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_010/ov_SC03_010_jr_8013F350.c | 2 +- src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c | 2 +- src/ov_SC03_010/ov_SC03_010_jr_80140608.c | 2 +- src/ov_SC03_011/ov_SC03_011_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_011/ov_SC03_011_jr_8013F350.c | 2 +- src/ov_SC03_011/ov_SC03_011_jr_80140608.c | 2 +- src/ov_SC03_012/ov_SC03_012_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_012/ov_SC03_012_jr_8013F350.c | 2 +- src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c | 2 +- src/ov_SC03_012/ov_SC03_012_jr_80140608.c | 2 +- src/ov_SC03_013/ov_SC03_013_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_013/ov_SC03_013_jr_8013F350.c | 2 +- src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c | 2 +- src/ov_SC03_013/ov_SC03_013_jr_80140608.c | 2 +- src/ov_SC03_014/ov_SC03_014_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_014/ov_SC03_014_jr_8013F350.c | 2 +- src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c | 2 +- src/ov_SC03_014/ov_SC03_014_jr_80140608.c | 2 +- src/ov_SC03_015/ov_SC03_015_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_015/ov_SC03_015_jr_8013F350.c | 2 +- src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c | 2 +- src/ov_SC03_015/ov_SC03_015_jr_80140608.c | 2 +- src/ov_SC03_023/ov_SC03_023_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_023/ov_SC03_023_jr_8013F350.c | 2 +- src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c | 2 +- src/ov_SC03_023/ov_SC03_023_jr_80140608.c | 2 +- src/ov_SC03_024/ov_SC03_024_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_024/ov_SC03_024_jr_8013F350.c | 2 +- src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c | 2 +- src/ov_SC03_024/ov_SC03_024_jr_80140608.c | 2 +- src/ov_SC03_028/ov_SC03_028_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_028/ov_SC03_028_jr_8013F350.c | 2 +- src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c | 2 +- src/ov_SC03_028/ov_SC03_028_jr_80140608.c | 2 +- src/ov_SC03_029/ov_SC03_029_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_029/ov_SC03_029_jr_8013F350.c | 2 +- src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c | 2 +- src/ov_SC03_029/ov_SC03_029_jr_80140608.c | 2 +- src/ov_SC03_030/ov_SC03_030_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_030/ov_SC03_030_jr_8013F350.c | 2 +- src/ov_SC03_030/ov_SC03_030_jr_80140608.c | 2 +- src/ov_SC03_031/ov_SC03_031_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_031/ov_SC03_031_jr_8013F350.c | 2 +- src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c | 2 +- src/ov_SC03_031/ov_SC03_031_jr_80140608.c | 2 +- src/ov_SC03_089/ov_SC03_089_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_089/ov_SC03_089_jr_8013F350.c | 2 +- src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c | 2 +- src/ov_SC03_089/ov_SC03_089_jr_80140608.c | 2 +- src/ov_SC03_090/ov_SC03_090_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_090/ov_SC03_090_jr_8013F350.c | 2 +- src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c | 2 +- src/ov_SC03_090/ov_SC03_090_jr_80140608.c | 2 +- src/ov_SC03_091/ov_SC03_091_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_091/ov_SC03_091_jr_8013F350.c | 2 +- src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c | 2 +- src/ov_SC03_091/ov_SC03_091_jr_80140608.c | 2 +- src/ov_SC03_092/ov_SC03_092_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_092/ov_SC03_092_jr_8013F350.c | 2 +- src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c | 2 +- src/ov_SC03_092/ov_SC03_092_jr_80140608.c | 2 +- src/ov_SC03_093/ov_SC03_093_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_093/ov_SC03_093_jr_8013F350.c | 2 +- src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c | 2 +- src/ov_SC03_093/ov_SC03_093_jr_80140608.c | 2 +- src/ov_SC03_094/ov_SC03_094_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_094/ov_SC03_094_jr_8013F350.c | 2 +- src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c | 2 +- src/ov_SC03_094/ov_SC03_094_jr_80140608.c | 2 +- src/ov_SC03_095/ov_SC03_095_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_095/ov_SC03_095_jr_8013F350.c | 2 +- src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c | 2 +- src/ov_SC03_095/ov_SC03_095_jr_80140608.c | 2 +- src/ov_SC03_096/ov_SC03_096_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_096/ov_SC03_096_jr_8013F350.c | 2 +- src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c | 2 +- src/ov_SC03_096/ov_SC03_096_jr_80140608.c | 2 +- src/ov_SC03_097/ov_SC03_097_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_097/ov_SC03_097_jr_8013F350.c | 2 +- src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c | 2 +- src/ov_SC03_097/ov_SC03_097_jr_80140608.c | 2 +- src/ov_SC03_098/ov_SC03_098_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_098/ov_SC03_098_jr_8013F350.c | 2 +- src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c | 2 +- src/ov_SC03_098/ov_SC03_098_jr_80140608.c | 2 +- src/ov_SC03_099/ov_SC03_099_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_099/ov_SC03_099_jr_8013F350.c | 2 +- src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c | 2 +- src/ov_SC03_099/ov_SC03_099_jr_80140608.c | 2 +- src/ov_SC03_100/ov_SC03_100_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_100/ov_SC03_100_jr_8013F350.c | 2 +- src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c | 2 +- src/ov_SC03_100/ov_SC03_100_jr_80140608.c | 2 +- src/ov_SC03_101/ov_SC03_101_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_101/ov_SC03_101_jr_8013F350.c | 2 +- src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c | 2 +- src/ov_SC03_101/ov_SC03_101_jr_80140608.c | 2 +- src/ov_SC03_102/ov_SC03_102_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_102/ov_SC03_102_jr_8013F350.c | 2 +- src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c | 2 +- src/ov_SC03_102/ov_SC03_102_jr_80140608.c | 2 +- src/ov_SC03_103/ov_SC03_103_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_103/ov_SC03_103_jr_8013F350.c | 2 +- src/ov_SC03_103/ov_SC03_103_jr_80140608.c | 2 +- src/ov_SC03_104/ov_SC03_104_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_104/ov_SC03_104_jr_8013F350.c | 2 +- src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c | 2 +- src/ov_SC03_104/ov_SC03_104_jr_80140608.c | 2 +- src/ov_SC03_108/ov_SC03_108_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_108/ov_SC03_108_jr_8013F350.c | 2 +- src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c | 2 +- src/ov_SC03_108/ov_SC03_108_jr_80140608.c | 2 +- src/ov_SC03_109/ov_SC03_109_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_109/ov_SC03_109_jr_8013F350.c | 2 +- src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c | 2 +- src/ov_SC03_109/ov_SC03_109_jr_80140608.c | 2 +- src/ov_SC03_110/ov_SC03_110_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_110/ov_SC03_110_jr_8013F350.c | 2 +- src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c | 2 +- src/ov_SC03_110/ov_SC03_110_jr_80140608.c | 2 +- src/ov_SC03_111/ov_SC03_111_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_111/ov_SC03_111_jr_8013F350.c | 2 +- src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c | 2 +- src/ov_SC03_111/ov_SC03_111_jr_80140608.c | 2 +- src/ov_SC03_112/ov_SC03_112_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_112/ov_SC03_112_jr_8013F350.c | 2 +- src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c | 2 +- src/ov_SC03_112/ov_SC03_112_jr_80140608.c | 2 +- src/ov_SC03_113/ov_SC03_113_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_113/ov_SC03_113_jr_8013F350.c | 2 +- src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c | 2 +- src/ov_SC03_113/ov_SC03_113_jr_80140608.c | 2 +- src/ov_SC03_114/ov_SC03_114_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_114/ov_SC03_114_jr_8013F350.c | 2 +- src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c | 2 +- src/ov_SC03_114/ov_SC03_114_jr_80140608.c | 2 +- src/ov_SC03_115/ov_SC03_115_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_115/ov_SC03_115_jr_8013F350.c | 2 +- src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c | 2 +- src/ov_SC03_115/ov_SC03_115_jr_80140608.c | 2 +- src/ov_SC03_116/ov_SC03_116_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_116/ov_SC03_116_jr_8013F350.c | 2 +- src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c | 2 +- src/ov_SC03_116/ov_SC03_116_jr_80140608.c | 2 +- src/ov_SC03_117/ov_SC03_117_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_117/ov_SC03_117_jr_8013F350.c | 2 +- src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c | 2 +- src/ov_SC03_117/ov_SC03_117_jr_80140608.c | 2 +- src/ov_SC03_118/ov_SC03_118_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_118/ov_SC03_118_jr_8013F350.c | 2 +- src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c | 2 +- src/ov_SC03_118/ov_SC03_118_jr_80140608.c | 2 +- src/ov_SC03_119/ov_SC03_119_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_119/ov_SC03_119_jr_8013F350.c | 2 +- src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c | 2 +- src/ov_SC03_119/ov_SC03_119_jr_80140608.c | 2 +- src/ov_SC03_121/ov_SC03_121_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_121/ov_SC03_121_jr_8013F350.c | 2 +- src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c | 2 +- src/ov_SC03_121/ov_SC03_121_jr_80140608.c | 2 +- src/ov_SC03_126/ov_SC03_126_jr_801380E0.c | 135 +++++++++++- src/ov_SC03_126/ov_SC03_126_jr_8013F350.c | 2 +- src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c | 2 +- src/ov_SC03_126/ov_SC03_126_jr_80140608.c | 2 +- src/ov_SC04_000/ov_SC04_000_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_000/ov_SC04_000_jr_8013F350.c | 2 +- src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c | 2 +- src/ov_SC04_000/ov_SC04_000_jr_80140608.c | 2 +- src/ov_SC04_002/ov_SC04_002_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_002/ov_SC04_002_jr_8013F350.c | 2 +- src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c | 2 +- src/ov_SC04_002/ov_SC04_002_jr_80140608.c | 2 +- src/ov_SC04_003/ov_SC04_003_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_003/ov_SC04_003_jr_8013F350.c | 2 +- src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c | 2 +- src/ov_SC04_003/ov_SC04_003_jr_80140608.c | 2 +- src/ov_SC04_004/ov_SC04_004_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_004/ov_SC04_004_jr_8013F350.c | 2 +- src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c | 2 +- src/ov_SC04_004/ov_SC04_004_jr_80140608.c | 2 +- src/ov_SC04_005/ov_SC04_005_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_005/ov_SC04_005_jr_8013F350.c | 2 +- src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c | 2 +- src/ov_SC04_005/ov_SC04_005_jr_80140608.c | 2 +- src/ov_SC04_006/ov_SC04_006_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_006/ov_SC04_006_jr_8013F350.c | 2 +- src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c | 2 +- src/ov_SC04_006/ov_SC04_006_jr_80140608.c | 2 +- src/ov_SC04_007/ov_SC04_007_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_007/ov_SC04_007_jr_8013F350.c | 2 +- src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c | 2 +- src/ov_SC04_007/ov_SC04_007_jr_80140608.c | 2 +- src/ov_SC04_008/ov_SC04_008_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_008/ov_SC04_008_jr_8013F350.c | 2 +- src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c | 2 +- src/ov_SC04_008/ov_SC04_008_jr_80140608.c | 2 +- src/ov_SC04_009/ov_SC04_009_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_009/ov_SC04_009_jr_8013F350.c | 2 +- src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c | 2 +- src/ov_SC04_009/ov_SC04_009_jr_80140608.c | 2 +- src/ov_SC04_010/ov_SC04_010_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_010/ov_SC04_010_jr_8013F350.c | 2 +- src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c | 2 +- src/ov_SC04_010/ov_SC04_010_jr_80140608.c | 2 +- src/ov_SC04_011/ov_SC04_011_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_011/ov_SC04_011_jr_8013F350.c | 2 +- src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c | 2 +- src/ov_SC04_011/ov_SC04_011_jr_80140608.c | 2 +- src/ov_SC04_012/ov_SC04_012_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_012/ov_SC04_012_jr_8013F350.c | 2 +- src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c | 2 +- src/ov_SC04_012/ov_SC04_012_jr_80140608.c | 2 +- src/ov_SC04_016/ov_SC04_016_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_016/ov_SC04_016_jr_8013F350.c | 2 +- src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c | 2 +- src/ov_SC04_016/ov_SC04_016_jr_80140608.c | 2 +- src/ov_SC04_021/ov_SC04_021_jr_801380E0.c | 135 +++++++++++- src/ov_SC04_021/ov_SC04_021_jr_8013F350.c | 2 +- src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c | 2 +- src/ov_SC04_021/ov_SC04_021_jr_80140608.c | 2 +- src/ov_SC05_000/ov_SC05_000_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_000/ov_SC05_000_jr_8013F350.c | 2 +- src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c | 2 +- src/ov_SC05_000/ov_SC05_000_jr_80140608.c | 2 +- src/ov_SC05_001/ov_SC05_001_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_001/ov_SC05_001_jr_8013F350.c | 2 +- src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c | 2 +- src/ov_SC05_001/ov_SC05_001_jr_80140608.c | 2 +- src/ov_SC05_002/ov_SC05_002_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_002/ov_SC05_002_jr_8013F350.c | 2 +- src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c | 2 +- src/ov_SC05_002/ov_SC05_002_jr_80140608.c | 2 +- src/ov_SC05_003/ov_SC05_003_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_003/ov_SC05_003_jr_8013F350.c | 2 +- src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c | 2 +- src/ov_SC05_003/ov_SC05_003_jr_80140608.c | 2 +- src/ov_SC05_004/ov_SC05_004_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_004/ov_SC05_004_jr_8013F350.c | 2 +- src/ov_SC05_004/ov_SC05_004_jr_80140608.c | 2 +- src/ov_SC05_005/ov_SC05_005_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_005/ov_SC05_005_jr_8013F350.c | 2 +- src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c | 2 +- src/ov_SC05_005/ov_SC05_005_jr_80140608.c | 2 +- src/ov_SC05_006/ov_SC05_006_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_006/ov_SC05_006_jr_8013F350.c | 2 +- src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c | 2 +- src/ov_SC05_006/ov_SC05_006_jr_80140608.c | 2 +- src/ov_SC05_007/ov_SC05_007_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_007/ov_SC05_007_jr_8013F350.c | 2 +- src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c | 2 +- src/ov_SC05_007/ov_SC05_007_jr_80140608.c | 2 +- src/ov_SC05_008/ov_SC05_008_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_008/ov_SC05_008_jr_8013F350.c | 2 +- src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c | 2 +- src/ov_SC05_008/ov_SC05_008_jr_80140608.c | 2 +- src/ov_SC05_009/ov_SC05_009_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_009/ov_SC05_009_jr_8013F350.c | 2 +- src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c | 2 +- src/ov_SC05_009/ov_SC05_009_jr_80140608.c | 2 +- src/ov_SC05_010/ov_SC05_010_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_010/ov_SC05_010_jr_8013F350.c | 2 +- src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c | 2 +- src/ov_SC05_010/ov_SC05_010_jr_80140608.c | 2 +- src/ov_SC05_011/ov_SC05_011_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_011/ov_SC05_011_jr_8013F350.c | 2 +- src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c | 2 +- src/ov_SC05_011/ov_SC05_011_jr_80140608.c | 2 +- src/ov_SC05_019/ov_SC05_019_jr_801380E0.c | 135 +++++++++++- src/ov_SC05_019/ov_SC05_019_jr_8013F350.c | 2 +- src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c | 2 +- src/ov_SC05_019/ov_SC05_019_jr_80140608.c | 2 +- src/ov_SC06_000/ov_SC06_000_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_000/ov_SC06_000_jr_8013F350.c | 2 +- src/ov_SC06_000/ov_SC06_000_jr_80140608.c | 2 +- src/ov_SC06_006/ov_SC06_006_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_006/ov_SC06_006_jr_8013F350.c | 2 +- src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c | 2 +- src/ov_SC06_006/ov_SC06_006_jr_80140608.c | 2 +- src/ov_SC06_008/ov_SC06_008_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_008/ov_SC06_008_jr_8013F350.c | 2 +- src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c | 2 +- src/ov_SC06_008/ov_SC06_008_jr_80140608.c | 2 +- src/ov_SC06_010/ov_SC06_010_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_010/ov_SC06_010_jr_8013F350.c | 2 +- src/ov_SC06_010/ov_SC06_010_jr_80140608.c | 2 +- src/ov_SC06_013/ov_SC06_013_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_013/ov_SC06_013_jr_8013F350.c | 2 +- src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c | 2 +- src/ov_SC06_013/ov_SC06_013_jr_80140608.c | 2 +- src/ov_SC06_014/ov_SC06_014_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_014/ov_SC06_014_jr_8013F350.c | 2 +- src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c | 2 +- src/ov_SC06_014/ov_SC06_014_jr_80140608.c | 2 +- src/ov_SC06_015/ov_SC06_015_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_015/ov_SC06_015_jr_8013F350.c | 2 +- src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c | 2 +- src/ov_SC06_015/ov_SC06_015_jr_80140608.c | 2 +- src/ov_SC06_016/ov_SC06_016_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_016/ov_SC06_016_jr_8013F350.c | 2 +- src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c | 2 +- src/ov_SC06_016/ov_SC06_016_jr_80140608.c | 2 +- src/ov_SC06_018/ov_SC06_018_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_018/ov_SC06_018_jr_8013F350.c | 2 +- src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c | 2 +- src/ov_SC06_018/ov_SC06_018_jr_80140608.c | 2 +- src/ov_SC06_020/ov_SC06_020_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_020/ov_SC06_020_jr_8013F350.c | 2 +- src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c | 2 +- src/ov_SC06_020/ov_SC06_020_jr_80140608.c | 2 +- src/ov_SC06_022/ov_SC06_022_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_022/ov_SC06_022_jr_8013F350.c | 2 +- src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c | 2 +- src/ov_SC06_022/ov_SC06_022_jr_80140608.c | 2 +- src/ov_SC06_024/ov_SC06_024_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_024/ov_SC06_024_jr_8013F350.c | 2 +- src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c | 2 +- src/ov_SC06_024/ov_SC06_024_jr_80140608.c | 2 +- src/ov_SC06_025/ov_SC06_025_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_025/ov_SC06_025_jr_8013F350.c | 2 +- src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c | 2 +- src/ov_SC06_025/ov_SC06_025_jr_80140608.c | 2 +- src/ov_SC06_027/ov_SC06_027_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_027/ov_SC06_027_jr_8013F350.c | 2 +- src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c | 2 +- src/ov_SC06_027/ov_SC06_027_jr_80140608.c | 2 +- src/ov_SC06_029/ov_SC06_029_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_029/ov_SC06_029_jr_8013F350.c | 2 +- src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c | 2 +- src/ov_SC06_029/ov_SC06_029_jr_80140608.c | 2 +- src/ov_SC06_030/ov_SC06_030_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_030/ov_SC06_030_jr_8013F350.c | 2 +- src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c | 2 +- src/ov_SC06_030/ov_SC06_030_jr_80140608.c | 2 +- src/ov_SC06_032/ov_SC06_032_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_032/ov_SC06_032_jr_8013F350.c | 2 +- src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c | 2 +- src/ov_SC06_032/ov_SC06_032_jr_80140608.c | 2 +- src/ov_SC06_033/ov_SC06_033_jr_801380E0.c | 135 +++++++++++- src/ov_SC06_033/ov_SC06_033_jr_8013F350.c | 2 +- src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c | 2 +- src/ov_SC06_033/ov_SC06_033_jr_80140608.c | 2 +- src/ov_SC07_001/ov_SC07_001_jr_801380E0.c | 135 +++++++++++- src/ov_SC07_001/ov_SC07_001_jr_8013F350.c | 2 +- src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c | 2 +- src/ov_SC07_001/ov_SC07_001_jr_80140608.c | 2 +- src/ov_SC07_002/ov_SC07_002_jr_801380E0.c | 135 +++++++++++- src/ov_SC07_002/ov_SC07_002_jr_8013F350.c | 2 +- src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c | 2 +- src/ov_SC07_002/ov_SC07_002_jr_80140608.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_80135D20.c | 135 +++++++++++- src/ov_SC07_006/ov_SC07_006_jr_8013F350.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_80140608.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_80154C24.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_801588CC.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_8017AE2C.c | 2 +- src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c | 2 +- src/ov_SC07_008/ov_SC07_008_jr_801380E0.c | 135 +++++++++++- src/ov_SC07_008/ov_SC07_008_jr_8013F350.c | 2 +- src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c | 2 +- src/ov_SC07_008/ov_SC07_008_jr_80140608.c | 2 +- src/ov_SC07_009/ov_SC07_009_jr_801380E0.c | 135 +++++++++++- src/ov_SC07_009/ov_SC07_009_jr_8013F350.c | 2 +- src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c | 2 +- src/ov_SC07_009/ov_SC07_009_jr_80140608.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_8013F350.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_80140608.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_80154C24.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_801588CC.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c | 2 +- src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c | 2 +- src/ov_SC07_010/ov_SC07_010_o2b.c | 135 +++++++++++- src/ov_SC07_011/ov_SC07_011_jr_80135D20.c | 135 +++++++++++- src/ov_SC07_011/ov_SC07_011_jr_8013F350.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_80140608.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_80154C24.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_801588CC.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_8017AE2C.c | 2 +- src/ov_SC07_011/ov_SC07_011_jr_8017BEBC.c | 2 +- 494 files changed, 16725 insertions(+), 743 deletions(-) diff --git a/docs/progress.fleet.md b/docs/progress.fleet.md index 40314060d..ddffb0e58 100644 --- a/docs/progress.fleet.md +++ b/docs/progress.fleet.md @@ -4,16 +4,16 @@ # cross-binary collapsible-byte leverage: docs/duplicates.cross.md. # THREE progress metrics (all matter — see the labels): -FLEET fn-count byte-ident: 315742 / 353719 = 89.26% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) -FLEET instr-weighted : 10616431 / 13141652 = 80.8% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) -FLEET distinct-code(uniq): 3846656 / 5634875 = 68.3% (64912/87459 unique fns; the DISTINCT-RE number) +FLEET fn-count byte-ident: 315864 / 353719 = 89.30% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) +FLEET instr-weighted : 10645711 / 13141652 = 81.0% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) +FLEET distinct-code(uniq): 3874496 / 5634875 = 68.8% (65028/87459 unique fns; the DISTINCT-RE number) MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift) - (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10615995 / 13081451 = 81.2%) + (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10645275 / 13081451 = 81.4%) -FLEET REAL substantive : 313887 (of which dedup-shared 239530 via 1886 groups / 239604 instances) +FLEET REAL substantive : 314009 (of which dedup-shared 239530 via 1886 groups / 239604 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) -FLEET INCLUDE_ASM stubs : 37970 +FLEET INCLUDE_ASM stubs : 37848 FLEET matchable : 353719 | binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % | @@ -21,140 +21,140 @@ FLEET matchable : 353719 | main | 54 | 2 | 959 | 1055 | 2096 | 50.3% | | resident | 129 | 0 | 0 | 131 | 145 | 90.3% | | ov_SC01_000 | 2253 | 1742 | 0 | 2253 | 2403 | 93.8% | -| ov_SC01_001 | 2255 | 1743 | 0 | 2257 | 2466 | 91.5% | -| ov_SC01_004 | 2244 | 1734 | 0 | 2245 | 2414 | 93.0% | -| ov_SC01_005 | 2274 | 1757 | 0 | 2274 | 2503 | 90.9% | -| ov_SC01_006 | 2274 | 1757 | 0 | 2274 | 2503 | 90.9% | -| ov_SC01_008 | 2244 | 1734 | 0 | 2246 | 2426 | 92.6% | -| ov_SC01_009 | 2270 | 1735 | 0 | 2271 | 2507 | 90.6% | -| ov_SC01_074 | 2248 | 1735 | 0 | 2250 | 2425 | 92.8% | +| ov_SC01_001 | 2256 | 1743 | 0 | 2258 | 2466 | 91.6% | +| ov_SC01_004 | 2245 | 1734 | 0 | 2246 | 2414 | 93.0% | +| ov_SC01_005 | 2275 | 1757 | 0 | 2275 | 2503 | 90.9% | +| ov_SC01_006 | 2275 | 1757 | 0 | 2275 | 2503 | 90.9% | +| ov_SC01_008 | 2245 | 1734 | 0 | 2247 | 2426 | 92.6% | +| ov_SC01_009 | 2271 | 1735 | 0 | 2272 | 2507 | 90.6% | +| ov_SC01_074 | 2249 | 1735 | 0 | 2251 | 2425 | 92.8% | | ov_SC01_077 | 2430 | 1702 | 0 | 2432 | 2585 | 94.1% | -| ov_SC01_080 | 2286 | 1738 | 0 | 2286 | 2512 | 91.0% | -| ov_SC01_084 | 2293 | 1738 | 0 | 2298 | 2579 | 89.1% | -| ov_SC02_000 | 2346 | 1773 | 0 | 2346 | 2683 | 87.4% | -| ov_SC02_003 | 2346 | 1773 | 0 | 2346 | 2683 | 87.4% | -| ov_SC02_004 | 2252 | 1738 | 0 | 2252 | 2401 | 93.8% | -| ov_SC02_005 | 2360 | 1734 | 0 | 2370 | 2927 | 81.0% | -| ov_SC02_011 | 2372 | 1741 | 0 | 2383 | 2893 | 82.4% | -| ov_SC02_015 | 2253 | 1740 | 0 | 2253 | 2414 | 93.3% | -| ov_SC02_016 | 2287 | 1740 | 0 | 2290 | 2545 | 90.0% | -| ov_SC02_017 | 2330 | 1740 | 0 | 2338 | 2732 | 85.6% | -| ov_SC02_021 | 2259 | 1740 | 0 | 2259 | 2437 | 92.7% | -| ov_SC02_026 | 2275 | 1738 | 0 | 2281 | 2572 | 88.7% | -| ov_SC02_027 | 2298 | 1738 | 0 | 2307 | 2692 | 85.7% | -| ov_SC02_028 | 2300 | 1738 | 0 | 2310 | 2701 | 85.5% | -| ov_SC02_031 | 2286 | 1739 | 0 | 2291 | 2562 | 89.4% | -| ov_SC02_035 | 2261 | 1738 | 0 | 2264 | 2520 | 89.8% | -| ov_SC02_039 | 2245 | 1738 | 0 | 2245 | 2416 | 92.9% | -| ov_SC02_041 | 2283 | 1738 | 0 | 2286 | 2561 | 89.3% | +| ov_SC01_080 | 2287 | 1738 | 0 | 2287 | 2512 | 91.0% | +| ov_SC01_084 | 2294 | 1738 | 0 | 2299 | 2579 | 89.1% | +| ov_SC02_000 | 2347 | 1773 | 0 | 2347 | 2683 | 87.5% | +| ov_SC02_003 | 2347 | 1773 | 0 | 2347 | 2683 | 87.5% | +| ov_SC02_004 | 2253 | 1738 | 0 | 2253 | 2401 | 93.8% | +| ov_SC02_005 | 2361 | 1734 | 0 | 2371 | 2927 | 81.0% | +| ov_SC02_011 | 2373 | 1741 | 0 | 2384 | 2893 | 82.4% | +| ov_SC02_015 | 2254 | 1740 | 0 | 2254 | 2414 | 93.4% | +| ov_SC02_016 | 2288 | 1740 | 0 | 2291 | 2545 | 90.0% | +| ov_SC02_017 | 2331 | 1740 | 0 | 2339 | 2732 | 85.6% | +| ov_SC02_021 | 2260 | 1740 | 0 | 2260 | 2437 | 92.7% | +| ov_SC02_026 | 2276 | 1738 | 0 | 2282 | 2572 | 88.7% | +| ov_SC02_027 | 2299 | 1738 | 0 | 2308 | 2692 | 85.7% | +| ov_SC02_028 | 2301 | 1738 | 0 | 2311 | 2701 | 85.6% | +| ov_SC02_031 | 2287 | 1739 | 0 | 2292 | 2562 | 89.5% | +| ov_SC02_035 | 2262 | 1738 | 0 | 2265 | 2520 | 89.9% | +| ov_SC02_039 | 2246 | 1738 | 0 | 2246 | 2416 | 93.0% | +| ov_SC02_041 | 2284 | 1738 | 0 | 2287 | 2561 | 89.3% | | ov_SC03_001 | 2381 | 1739 | 0 | 2398 | 2869 | 83.6% | | ov_SC03_002 | 2307 | 1743 | 0 | 2322 | 2631 | 88.3% | -| ov_SC03_003 | 2255 | 1738 | 0 | 2256 | 2423 | 93.1% | -| ov_SC03_006 | 2321 | 1744 | 0 | 2330 | 2767 | 84.2% | -| ov_SC03_007 | 2300 | 1738 | 0 | 2304 | 2623 | 87.8% | -| ov_SC03_010 | 2263 | 1738 | 0 | 2263 | 2471 | 91.6% | -| ov_SC03_011 | 2269 | 1738 | 0 | 2275 | 2527 | 90.0% | -| ov_SC03_012 | 2247 | 1738 | 0 | 2248 | 2406 | 93.4% | -| ov_SC03_013 | 2268 | 1738 | 0 | 2268 | 2493 | 91.0% | -| ov_SC03_014 | 2326 | 1763 | 0 | 2326 | 2685 | 86.6% | -| ov_SC03_015 | 2326 | 1763 | 0 | 2326 | 2685 | 86.6% | -| ov_SC03_023 | 2254 | 1738 | 0 | 2255 | 2435 | 92.6% | -| ov_SC03_024 | 2314 | 1743 | 0 | 2321 | 2641 | 87.9% | -| ov_SC03_028 | 2294 | 1738 | 0 | 2298 | 2664 | 86.3% | -| ov_SC03_029 | 2295 | 1740 | 0 | 2305 | 2644 | 87.2% | -| ov_SC03_030 | 2268 | 1743 | 0 | 2270 | 2495 | 91.0% | -| ov_SC03_031 | 2265 | 1738 | 0 | 2268 | 2514 | 90.2% | -| ov_SC03_089 | 2282 | 1738 | 0 | 2289 | 2581 | 88.7% | -| ov_SC03_090 | 2283 | 1738 | 0 | 2291 | 2625 | 87.3% | -| ov_SC03_091 | 2286 | 1738 | 0 | 2294 | 2640 | 86.9% | -| ov_SC03_092 | 2296 | 1738 | 0 | 2308 | 2587 | 89.2% | -| ov_SC03_093 | 2272 | 1738 | 0 | 2276 | 2563 | 88.8% | -| ov_SC03_094 | 2267 | 1738 | 0 | 2273 | 2577 | 88.2% | -| ov_SC03_095 | 2257 | 1738 | 0 | 2260 | 2474 | 91.4% | -| ov_SC03_096 | 2257 | 1738 | 0 | 2260 | 2465 | 91.7% | -| ov_SC03_097 | 2287 | 1738 | 0 | 2294 | 2603 | 88.1% | -| ov_SC03_098 | 2265 | 1738 | 0 | 2268 | 2541 | 89.3% | -| ov_SC03_099 | 2258 | 1738 | 0 | 2261 | 2504 | 90.3% | -| ov_SC03_100 | 2268 | 1738 | 0 | 2272 | 2539 | 89.5% | -| ov_SC03_101 | 2268 | 1738 | 0 | 2272 | 2528 | 89.9% | -| ov_SC03_102 | 2261 | 1738 | 0 | 2264 | 2492 | 90.9% | -| ov_SC03_103 | 2263 | 1740 | 0 | 2266 | 2510 | 90.3% | -| ov_SC03_104 | 2290 | 1738 | 0 | 2297 | 2616 | 87.8% | +| ov_SC03_003 | 2256 | 1738 | 0 | 2257 | 2423 | 93.1% | +| ov_SC03_006 | 2322 | 1744 | 0 | 2331 | 2767 | 84.2% | +| ov_SC03_007 | 2301 | 1738 | 0 | 2305 | 2623 | 87.9% | +| ov_SC03_010 | 2264 | 1738 | 0 | 2264 | 2471 | 91.6% | +| ov_SC03_011 | 2270 | 1738 | 0 | 2276 | 2527 | 90.1% | +| ov_SC03_012 | 2248 | 1738 | 0 | 2249 | 2406 | 93.5% | +| ov_SC03_013 | 2269 | 1738 | 0 | 2269 | 2493 | 91.0% | +| ov_SC03_014 | 2327 | 1763 | 0 | 2327 | 2685 | 86.7% | +| ov_SC03_015 | 2327 | 1763 | 0 | 2327 | 2685 | 86.7% | +| ov_SC03_023 | 2255 | 1738 | 0 | 2256 | 2435 | 92.6% | +| ov_SC03_024 | 2315 | 1743 | 0 | 2322 | 2641 | 87.9% | +| ov_SC03_028 | 2295 | 1738 | 0 | 2299 | 2664 | 86.3% | +| ov_SC03_029 | 2296 | 1740 | 0 | 2306 | 2644 | 87.2% | +| ov_SC03_030 | 2269 | 1743 | 0 | 2271 | 2495 | 91.0% | +| ov_SC03_031 | 2266 | 1738 | 0 | 2269 | 2514 | 90.3% | +| ov_SC03_089 | 2283 | 1738 | 0 | 2290 | 2581 | 88.7% | +| ov_SC03_090 | 2284 | 1738 | 0 | 2292 | 2625 | 87.3% | +| ov_SC03_091 | 2287 | 1738 | 0 | 2295 | 2640 | 86.9% | +| ov_SC03_092 | 2297 | 1738 | 0 | 2309 | 2587 | 89.3% | +| ov_SC03_093 | 2273 | 1738 | 0 | 2277 | 2563 | 88.8% | +| ov_SC03_094 | 2268 | 1738 | 0 | 2274 | 2577 | 88.2% | +| ov_SC03_095 | 2258 | 1738 | 0 | 2261 | 2474 | 91.4% | +| ov_SC03_096 | 2258 | 1738 | 0 | 2261 | 2465 | 91.7% | +| ov_SC03_097 | 2288 | 1738 | 0 | 2295 | 2603 | 88.2% | +| ov_SC03_098 | 2266 | 1738 | 0 | 2269 | 2541 | 89.3% | +| ov_SC03_099 | 2259 | 1738 | 0 | 2262 | 2504 | 90.3% | +| ov_SC03_100 | 2269 | 1738 | 0 | 2273 | 2539 | 89.5% | +| ov_SC03_101 | 2269 | 1738 | 0 | 2273 | 2528 | 89.9% | +| ov_SC03_102 | 2262 | 1738 | 0 | 2265 | 2492 | 90.9% | +| ov_SC03_103 | 2264 | 1740 | 0 | 2267 | 2510 | 90.3% | +| ov_SC03_104 | 2291 | 1738 | 0 | 2298 | 2616 | 87.8% | | ov_SC03_105 | 2282 | 1738 | 0 | 2289 | 2597 | 88.1% | -| ov_SC03_108 | 2249 | 1738 | 0 | 2249 | 2443 | 92.1% | -| ov_SC03_109 | 2252 | 1738 | 0 | 2254 | 2424 | 93.0% | -| ov_SC03_110 | 2256 | 1738 | 0 | 2256 | 2468 | 91.4% | -| ov_SC03_111 | 2267 | 1738 | 0 | 2270 | 2510 | 90.4% | -| ov_SC03_112 | 2261 | 1740 | 0 | 2263 | 2526 | 89.6% | -| ov_SC03_113 | 2254 | 1740 | 0 | 2257 | 2468 | 91.5% | -| ov_SC03_114 | 2244 | 1738 | 0 | 2246 | 2415 | 93.0% | -| ov_SC03_115 | 2261 | 1738 | 0 | 2263 | 2472 | 91.5% | -| ov_SC03_116 | 2252 | 1738 | 0 | 2255 | 2438 | 92.5% | -| ov_SC03_117 | 2279 | 1738 | 0 | 2285 | 2557 | 89.4% | -| ov_SC03_118 | 2325 | 1762 | 0 | 2326 | 2685 | 86.6% | -| ov_SC03_119 | 2324 | 1762 | 0 | 2325 | 2685 | 86.6% | -| ov_SC03_121 | 2259 | 1738 | 0 | 2262 | 2459 | 92.0% | +| ov_SC03_108 | 2250 | 1738 | 0 | 2250 | 2443 | 92.1% | +| ov_SC03_109 | 2253 | 1738 | 0 | 2255 | 2424 | 93.0% | +| ov_SC03_110 | 2257 | 1738 | 0 | 2257 | 2468 | 91.5% | +| ov_SC03_111 | 2268 | 1738 | 0 | 2271 | 2510 | 90.5% | +| ov_SC03_112 | 2262 | 1740 | 0 | 2264 | 2526 | 89.6% | +| ov_SC03_113 | 2255 | 1740 | 0 | 2258 | 2468 | 91.5% | +| ov_SC03_114 | 2245 | 1738 | 0 | 2247 | 2415 | 93.0% | +| ov_SC03_115 | 2262 | 1738 | 0 | 2264 | 2472 | 91.6% | +| ov_SC03_116 | 2253 | 1738 | 0 | 2256 | 2438 | 92.5% | +| ov_SC03_117 | 2280 | 1738 | 0 | 2286 | 2557 | 89.4% | +| ov_SC03_118 | 2326 | 1762 | 0 | 2327 | 2685 | 86.7% | +| ov_SC03_119 | 2325 | 1762 | 0 | 2326 | 2685 | 86.6% | +| ov_SC03_121 | 2260 | 1738 | 0 | 2263 | 2459 | 92.0% | | ov_SC03_124 | 2338 | 1734 | 0 | 2358 | 2741 | 86.0% | | ov_SC03_125 | 2294 | 1738 | 0 | 2306 | 2588 | 89.1% | -| ov_SC03_126 | 2256 | 1740 | 0 | 2256 | 2423 | 93.1% | -| ov_SC04_000 | 2272 | 1742 | 0 | 2281 | 2546 | 89.6% | -| ov_SC04_002 | 2291 | 1738 | 0 | 2295 | 2636 | 87.1% | -| ov_SC04_003 | 2267 | 1738 | 0 | 2271 | 2502 | 90.8% | -| ov_SC04_004 | 2276 | 1738 | 0 | 2278 | 2558 | 89.1% | -| ov_SC04_005 | 2286 | 1738 | 0 | 2292 | 2612 | 87.7% | -| ov_SC04_006 | 2256 | 1738 | 0 | 2258 | 2454 | 92.0% | -| ov_SC04_007 | 2280 | 1738 | 0 | 2284 | 2569 | 88.9% | -| ov_SC04_008 | 2248 | 1738 | 0 | 2248 | 2415 | 93.1% | -| ov_SC04_009 | 2263 | 1738 | 0 | 2266 | 2441 | 92.8% | -| ov_SC04_010 | 2253 | 1738 | 0 | 2254 | 2419 | 93.2% | -| ov_SC04_011 | 2311 | 1738 | 0 | 2317 | 2803 | 82.7% | -| ov_SC04_012 | 2250 | 1738 | 0 | 2251 | 2420 | 93.0% | +| ov_SC03_126 | 2257 | 1740 | 0 | 2257 | 2423 | 93.1% | +| ov_SC04_000 | 2273 | 1742 | 0 | 2282 | 2546 | 89.6% | +| ov_SC04_002 | 2292 | 1738 | 0 | 2296 | 2636 | 87.1% | +| ov_SC04_003 | 2268 | 1738 | 0 | 2272 | 2502 | 90.8% | +| ov_SC04_004 | 2277 | 1738 | 0 | 2279 | 2558 | 89.1% | +| ov_SC04_005 | 2287 | 1738 | 0 | 2293 | 2612 | 87.8% | +| ov_SC04_006 | 2257 | 1738 | 0 | 2259 | 2454 | 92.1% | +| ov_SC04_007 | 2281 | 1738 | 0 | 2285 | 2569 | 88.9% | +| ov_SC04_008 | 2249 | 1738 | 0 | 2249 | 2415 | 93.1% | +| ov_SC04_009 | 2264 | 1738 | 0 | 2267 | 2441 | 92.9% | +| ov_SC04_010 | 2254 | 1738 | 0 | 2255 | 2419 | 93.2% | +| ov_SC04_011 | 2312 | 1738 | 0 | 2318 | 2803 | 82.7% | +| ov_SC04_012 | 2251 | 1738 | 0 | 2252 | 2420 | 93.1% | | ov_SC04_015 | 2316 | 1739 | 0 | 2327 | 2611 | 89.1% | -| ov_SC04_016 | 2253 | 1738 | 0 | 2255 | 2440 | 92.4% | +| ov_SC04_016 | 2254 | 1738 | 0 | 2256 | 2440 | 92.5% | | ov_SC04_018 | 2364 | 1773 | 0 | 2364 | 2857 | 82.7% | | ov_SC04_019 | 2370 | 1773 | 0 | 2370 | 2857 | 83.0% | | ov_SC04_020 | 2281 | 1738 | 0 | 2293 | 2567 | 89.3% | -| ov_SC04_021 | 2257 | 1740 | 0 | 2257 | 2423 | 93.1% | -| ov_SC05_000 | 2254 | 1742 | 0 | 2257 | 2422 | 93.2% | -| ov_SC05_001 | 2276 | 1738 | 0 | 2281 | 2574 | 88.6% | -| ov_SC05_002 | 2259 | 1738 | 0 | 2262 | 2442 | 92.6% | -| ov_SC05_003 | 2256 | 1738 | 0 | 2257 | 2481 | 91.0% | -| ov_SC05_004 | 2252 | 1738 | 0 | 2254 | 2464 | 91.5% | -| ov_SC05_005 | 2257 | 1738 | 0 | 2258 | 2491 | 90.6% | -| ov_SC05_006 | 2250 | 1738 | 0 | 2250 | 2430 | 92.6% | -| ov_SC05_007 | 2260 | 1738 | 0 | 2265 | 2482 | 91.3% | -| ov_SC05_008 | 2277 | 1738 | 0 | 2279 | 2543 | 89.6% | -| ov_SC05_009 | 2256 | 1738 | 0 | 2260 | 2438 | 92.7% | -| ov_SC05_010 | 2283 | 1738 | 0 | 2287 | 2588 | 88.4% | -| ov_SC05_011 | 2252 | 1738 | 0 | 2253 | 2409 | 93.5% | +| ov_SC04_021 | 2258 | 1740 | 0 | 2258 | 2423 | 93.2% | +| ov_SC05_000 | 2255 | 1742 | 0 | 2258 | 2422 | 93.2% | +| ov_SC05_001 | 2277 | 1738 | 0 | 2282 | 2574 | 88.7% | +| ov_SC05_002 | 2260 | 1738 | 0 | 2263 | 2442 | 92.7% | +| ov_SC05_003 | 2257 | 1738 | 0 | 2258 | 2481 | 91.0% | +| ov_SC05_004 | 2253 | 1738 | 0 | 2255 | 2464 | 91.5% | +| ov_SC05_005 | 2258 | 1738 | 0 | 2259 | 2491 | 90.7% | +| ov_SC05_006 | 2251 | 1738 | 0 | 2251 | 2430 | 92.6% | +| ov_SC05_007 | 2261 | 1738 | 0 | 2266 | 2482 | 91.3% | +| ov_SC05_008 | 2278 | 1738 | 0 | 2280 | 2543 | 89.7% | +| ov_SC05_009 | 2257 | 1738 | 0 | 2261 | 2438 | 92.7% | +| ov_SC05_010 | 2284 | 1738 | 0 | 2288 | 2588 | 88.4% | +| ov_SC05_011 | 2253 | 1738 | 0 | 2254 | 2409 | 93.6% | | ov_SC05_017 | 2360 | 1735 | 0 | 2371 | 2842 | 83.4% | | ov_SC05_018 | 2307 | 1738 | 0 | 2320 | 2673 | 86.8% | -| ov_SC05_019 | 2257 | 1740 | 0 | 2257 | 2423 | 93.1% | -| ov_SC06_000 | 2321 | 1747 | 0 | 2324 | 2691 | 86.4% | -| ov_SC06_006 | 2273 | 1738 | 0 | 2274 | 2511 | 90.6% | -| ov_SC06_008 | 2292 | 1740 | 0 | 2298 | 2542 | 90.4% | -| ov_SC06_010 | 2273 | 1738 | 0 | 2278 | 2517 | 90.5% | +| ov_SC05_019 | 2258 | 1740 | 0 | 2258 | 2423 | 93.2% | +| ov_SC06_000 | 2322 | 1747 | 0 | 2325 | 2691 | 86.4% | +| ov_SC06_006 | 2274 | 1738 | 0 | 2275 | 2511 | 90.6% | +| ov_SC06_008 | 2293 | 1740 | 0 | 2299 | 2542 | 90.4% | +| ov_SC06_010 | 2274 | 1738 | 0 | 2279 | 2517 | 90.5% | | ov_SC06_011 | 2262 | 1738 | 0 | 2266 | 2468 | 91.8% | -| ov_SC06_013 | 2255 | 1738 | 0 | 2256 | 2425 | 93.0% | -| ov_SC06_014 | 2261 | 1738 | 0 | 2263 | 2453 | 92.3% | -| ov_SC06_015 | 2258 | 1738 | 0 | 2258 | 2421 | 93.3% | -| ov_SC06_016 | 2276 | 1738 | 0 | 2278 | 2549 | 89.4% | -| ov_SC06_018 | 2288 | 1740 | 0 | 2295 | 2665 | 86.1% | -| ov_SC06_020 | 2265 | 1740 | 0 | 2266 | 2518 | 90.0% | -| ov_SC06_022 | 2284 | 1738 | 0 | 2292 | 2642 | 86.8% | -| ov_SC06_024 | 2294 | 1738 | 0 | 2300 | 2667 | 86.2% | -| ov_SC06_025 | 2278 | 1738 | 0 | 2283 | 2572 | 88.8% | -| ov_SC06_027 | 2243 | 1738 | 0 | 2244 | 2408 | 93.2% | -| ov_SC06_029 | 2304 | 1738 | 0 | 2316 | 2662 | 87.0% | -| ov_SC06_030 | 2257 | 1738 | 0 | 2257 | 2456 | 91.9% | -| ov_SC06_032 | 2279 | 1739 | 0 | 2286 | 2658 | 86.0% | -| ov_SC06_033 | 2281 | 1739 | 0 | 2288 | 2631 | 87.0% | +| ov_SC06_013 | 2256 | 1738 | 0 | 2257 | 2425 | 93.1% | +| ov_SC06_014 | 2262 | 1738 | 0 | 2264 | 2453 | 92.3% | +| ov_SC06_015 | 2259 | 1738 | 0 | 2259 | 2421 | 93.3% | +| ov_SC06_016 | 2277 | 1738 | 0 | 2279 | 2549 | 89.4% | +| ov_SC06_018 | 2289 | 1740 | 0 | 2296 | 2665 | 86.2% | +| ov_SC06_020 | 2266 | 1740 | 0 | 2267 | 2518 | 90.0% | +| ov_SC06_022 | 2285 | 1738 | 0 | 2293 | 2642 | 86.8% | +| ov_SC06_024 | 2295 | 1738 | 0 | 2301 | 2667 | 86.3% | +| ov_SC06_025 | 2279 | 1738 | 0 | 2284 | 2572 | 88.8% | +| ov_SC06_027 | 2244 | 1738 | 0 | 2245 | 2408 | 93.2% | +| ov_SC06_029 | 2305 | 1738 | 0 | 2317 | 2662 | 87.0% | +| ov_SC06_030 | 2258 | 1738 | 0 | 2258 | 2456 | 91.9% | +| ov_SC06_032 | 2280 | 1739 | 0 | 2287 | 2658 | 86.0% | +| ov_SC06_033 | 2282 | 1739 | 0 | 2289 | 2631 | 87.0% | | ov_SC07_000 | 2273 | 1742 | 0 | 2275 | 2521 | 90.2% | -| ov_SC07_001 | 2256 | 1738 | 0 | 2258 | 2454 | 92.0% | -| ov_SC07_002 | 2284 | 1738 | 0 | 2288 | 2579 | 88.7% | -| ov_SC07_006 | 2051 | 1555 | 0 | 2131 | 2455 | 86.8% | +| ov_SC07_001 | 2257 | 1738 | 0 | 2259 | 2454 | 92.1% | +| ov_SC07_002 | 2285 | 1738 | 0 | 2289 | 2579 | 88.8% | +| ov_SC07_006 | 2052 | 1555 | 0 | 2132 | 2455 | 86.8% | | ov_SC07_007 | 2045 | 1586 | 0 | 2129 | 2613 | 81.5% | -| ov_SC07_008 | 2241 | 1738 | 0 | 2241 | 2386 | 93.9% | -| ov_SC07_009 | 2250 | 1738 | 0 | 2252 | 2430 | 92.7% | -| ov_SC07_010 | 2076 | 1608 | 0 | 2159 | 2524 | 85.5% | -| ov_SC07_011 | 2044 | 1585 | 0 | 2124 | 2449 | 86.7% | +| ov_SC07_008 | 2242 | 1738 | 0 | 2242 | 2386 | 94.0% | +| ov_SC07_009 | 2251 | 1738 | 0 | 2253 | 2430 | 92.7% | +| ov_SC07_010 | 2077 | 1608 | 0 | 2160 | 2524 | 85.6% | +| ov_SC07_011 | 2045 | 1585 | 0 | 2125 | 2449 | 86.8% | diff --git a/src/ov_SC01_001/ov_SC01_001_jr_801380E0.c b/src/ov_SC01_001/ov_SC01_001_jr_801380E0.c index 699801648..32e98be5d 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_801380E0.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_801380E0.c @@ -1891,7 +1891,7 @@ extern u8 D_801840EC[]; extern u8 D_8018416C[]; extern u8 D_80184044[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1936,7 +1936,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801EC788; +extern s32 D_801EC770; + + +extern u8 D_801F3152; +extern u8 D_801F31C6; +extern u8 D_801F307A; +extern u8 D_801F3134; +extern u8 D_801F3058; +extern u8 D_801F3079; + + +extern s32 D_801F3138; +extern s32 D_801EC784; +extern s32 D_801EC780; +extern s32 D_801EC768; +extern s32 D_801EC774; +extern s32 D_801EC778; + +extern void *D_801EC758; +extern s32 D_801EC790; +extern void *D_801EC760; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80184188[]; + extern Rec12 D_801841C0[]; + extern u8 D_80078EAF; + extern u8 D_801F3110; + extern s32 D_801EC77C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801841C4[]; + extern u8 D_801841C8[]; + extern unsigned char D_801F3070; + extern s16 *D_801EC764; + extern s32 D_801EC794; + extern s32 D_801EC798; + extern s32 D_801EC79C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801EC788 & 1)) { + D_801EC770 = 1; + } else { + D_801EC770 = D_80078EAF; + } + + b0 = ((u8 *)D_801841C0)[D_801EC770 * 12]; + D_801F3152 = b0; + D_801F31C6 = b0; + b1 = D_801841C4[D_801EC770 * 12]; + D_801F307A = b1; + D_801F3134 = b1; + b2 = D_801841C8[D_801EC770 * 12]; + D_801F3058 = b2; + D_801F3079 = b2; + + (*(S9 *)&D_801F3070) = ((S9 *)D_80184188)[D_801EC770]; + (*(S9 *)&D_801F3110) = *(S9 *)(&D_801F3058 + 0x18); /* same addr as (*(S9 *)&D_801F3070); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F3138 = 1; + D_801EC784 = -1; + D_801EC780 = 0; + D_801EC77C = -1; + D_801EC768 = 0; + D_801EC774 = 0; + D_801EC778 = 0; + + if ((D_801EC788 & 2) && (D_801EC770 == 4)) { + s0v = (*(s32 * *)&D_801EC758)[18]; + t9v = (*(s32 * *)&D_801EC758)[19]; + t8v = (*(s32 * *)&D_801EC758)[20]; + } else { + s32 *p = (s32 *)(D_801EC770 * 12 + (s32) (*(s32 * *)&D_801EC758)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801EC764) = arg0; + if (arg0 != 0) { + if (D_801EC790 != 0) { + s32 *p = (s32 *)(D_801EC770 * 12 + (s32) (*(s32 * *)&D_801EC760)); + D_801EC794 = p[0]; + D_801EC798 = p[1]; + D_801EC79C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8013F350.c b/src/ov_SC01_001/ov_SC01_001_jr_8013F350.c index 8740b576d..0bb127249 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8013F350.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_80183FF0[]; extern u8 D_801840EC[]; extern u8 D_8018416C[]; extern u8 D_80184044[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c b/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c index 2be5b017f..ed57268d5 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_80183FF0[]; extern u8 D_801840EC[]; extern u8 D_8018416C[]; extern u8 D_80184044[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_001/ov_SC01_001_jr_80140608.c b/src/ov_SC01_001/ov_SC01_001_jr_80140608.c index 8b9fbc130..5960f9020 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_80140608.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_80183FF0[]; extern u8 D_801840EC[]; extern u8 D_8018416C[]; extern u8 D_80184044[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_004/ov_SC01_004_jr_801380E0.c b/src/ov_SC01_004/ov_SC01_004_jr_801380E0.c index 3a96607fc..8bcc22172 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_801380E0.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_8017FAB0[]; extern u8 D_8017FB30[]; extern u8 D_8017FA08[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018EEF0; +extern s32 D_8018EED8; + + +extern u8 D_8019035A; +extern u8 D_801903CE; +extern u8 D_80190282; +extern u8 D_8019033C; +extern u8 D_80190260; +extern u8 D_80190281; + + +extern s32 D_80190340; +extern s32 D_8018EEEC; +extern s32 D_8018EEE8; +extern s32 D_8018EED0; +extern s32 D_8018EEDC; +extern s32 D_8018EEE0; + +extern void *D_8018EEC0; +extern s32 D_8018EEF8; +extern void *D_8018EEC8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FB4C[]; + extern Rec12 D_8017FB84[]; + extern u8 D_80078EAF; + extern u8 D_80190318; + extern s32 D_8018EEE4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FB88[]; + extern u8 D_8017FB8C[]; + extern unsigned char D_80190278; + extern s16 *D_8018EECC; + extern s32 D_8018EEFC; + extern s32 D_8018EF00; + extern s32 D_8018EF04; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018EEF0 & 1)) { + D_8018EED8 = 1; + } else { + D_8018EED8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FB84)[D_8018EED8 * 12]; + D_8019035A = b0; + D_801903CE = b0; + b1 = D_8017FB88[D_8018EED8 * 12]; + D_80190282 = b1; + D_8019033C = b1; + b2 = D_8017FB8C[D_8018EED8 * 12]; + D_80190260 = b2; + D_80190281 = b2; + + (*(S9 *)&D_80190278) = ((S9 *)D_8017FB4C)[D_8018EED8]; + (*(S9 *)&D_80190318) = *(S9 *)(&D_80190260 + 0x18); /* same addr as (*(S9 *)&D_80190278); distinct sym defeats cse, keeps %hi/%lo */ + + D_80190340 = 1; + D_8018EEEC = -1; + D_8018EEE8 = 0; + D_8018EEE4 = -1; + D_8018EED0 = 0; + D_8018EEDC = 0; + D_8018EEE0 = 0; + + if ((D_8018EEF0 & 2) && (D_8018EED8 == 4)) { + s0v = (*(s32 * *)&D_8018EEC0)[18]; + t9v = (*(s32 * *)&D_8018EEC0)[19]; + t8v = (*(s32 * *)&D_8018EEC0)[20]; + } else { + s32 *p = (s32 *)(D_8018EED8 * 12 + (s32) (*(s32 * *)&D_8018EEC0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018EECC) = arg0; + if (arg0 != 0) { + if (D_8018EEF8 != 0) { + s32 *p = (s32 *)(D_8018EED8 * 12 + (s32) (*(s32 * *)&D_8018EEC8)); + D_8018EEFC = p[0]; + D_8018EF00 = p[1]; + D_8018EF04 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8013F350.c b/src/ov_SC01_004/ov_SC01_004_jr_8013F350.c index dd8e4f467..9f1c3fe75 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8013F350.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8017F9B4[]; extern u8 D_8017FAB0[]; extern u8 D_8017FB30[]; extern u8 D_8017FA08[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c b/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c index f168f09ef..57ec357dc 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8017F9B4[]; extern u8 D_8017FAB0[]; extern u8 D_8017FB30[]; extern u8 D_8017FA08[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_004/ov_SC01_004_jr_80140608.c b/src/ov_SC01_004/ov_SC01_004_jr_80140608.c index 34cdfb09a..1ee1c2c54 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_80140608.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8017F9B4[]; extern u8 D_8017FAB0[]; extern u8 D_8017FB30[]; extern u8 D_8017FA08[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_005/ov_SC01_005_jr_801380E0.c b/src/ov_SC01_005/ov_SC01_005_jr_801380E0.c index bd360976a..a7056ccc3 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_801380E0.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CC650; +extern s32 D_801CC638; + + +extern u8 D_801CDFBA; +extern u8 D_801CE060; +extern u8 D_801CDEE2; +extern u8 D_801CDF9C; +extern u8 D_801CDEC0; +extern u8 D_801CDEE1; + + +extern s32 D_801CDFA0; +extern s32 D_801CC64C; +extern s32 D_801CC648; +extern s32 D_801CC630; +extern s32 D_801CC63C; +extern s32 D_801CC640; + +extern void *D_801CC620; +extern s32 D_801CC658; +extern void *D_801CC628; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182CE0[]; + extern Rec12 D_80182D18[]; + extern u8 D_80078EAF; + extern u8 D_801CDF78; + extern s32 D_801CC644; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182D1C[]; + extern u8 D_80182D20[]; + extern unsigned char D_801CDED8; + extern s16 *D_801CC62C; + extern s32 D_801CC65C; + extern s32 D_801CC660; + extern s32 D_801CC664; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CC650 & 1)) { + D_801CC638 = 1; + } else { + D_801CC638 = D_80078EAF; + } + + b0 = ((u8 *)D_80182D18)[D_801CC638 * 12]; + D_801CDFBA = b0; + D_801CE060 = b0; + b1 = D_80182D1C[D_801CC638 * 12]; + D_801CDEE2 = b1; + D_801CDF9C = b1; + b2 = D_80182D20[D_801CC638 * 12]; + D_801CDEC0 = b2; + D_801CDEE1 = b2; + + (*(S9 *)&D_801CDED8) = ((S9 *)D_80182CE0)[D_801CC638]; + (*(S9 *)&D_801CDF78) = *(S9 *)(&D_801CDEC0 + 0x18); /* same addr as (*(S9 *)&D_801CDED8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801CDFA0 = 1; + D_801CC64C = -1; + D_801CC648 = 0; + D_801CC644 = -1; + D_801CC630 = 0; + D_801CC63C = 0; + D_801CC640 = 0; + + if ((D_801CC650 & 2) && (D_801CC638 == 4)) { + s0v = (*(s32 * *)&D_801CC620)[18]; + t9v = (*(s32 * *)&D_801CC620)[19]; + t8v = (*(s32 * *)&D_801CC620)[20]; + } else { + s32 *p = (s32 *)(D_801CC638 * 12 + (s32) (*(s32 * *)&D_801CC620)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CC62C) = arg0; + if (arg0 != 0) { + if (D_801CC658 != 0) { + s32 *p = (s32 *)(D_801CC638 * 12 + (s32) (*(s32 * *)&D_801CC628)); + D_801CC65C = p[0]; + D_801CC660 = p[1]; + D_801CC664 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8013F350.c b/src/ov_SC01_005/ov_SC01_005_jr_8013F350.c index 0d4a820bb..b76732645 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8013F350.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c b/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c index 6d8e20113..3f1737f86 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_005/ov_SC01_005_jr_80140608.c b/src/ov_SC01_005/ov_SC01_005_jr_80140608.c index 546791027..8735e6f9b 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_80140608.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_006/ov_SC01_006_jr_801380E0.c b/src/ov_SC01_006/ov_SC01_006_jr_801380E0.c index 9d54e0c37..7e0dbdcc2 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_801380E0.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CC650; +extern s32 D_801CC638; + + +extern u8 D_801CDFBA; +extern u8 D_801CE060; +extern u8 D_801CDEE2; +extern u8 D_801CDF9C; +extern u8 D_801CDEC0; +extern u8 D_801CDEE1; + + +extern s32 D_801CDFA0; +extern s32 D_801CC64C; +extern s32 D_801CC648; +extern s32 D_801CC630; +extern s32 D_801CC63C; +extern s32 D_801CC640; + +extern void *D_801CC620; +extern s32 D_801CC658; +extern void *D_801CC628; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182CE0[]; + extern Rec12 D_80182D18[]; + extern u8 D_80078EAF; + extern u8 D_801CDF78; + extern s32 D_801CC644; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182D1C[]; + extern u8 D_80182D20[]; + extern unsigned char D_801CDED8; + extern s16 *D_801CC62C; + extern s32 D_801CC65C; + extern s32 D_801CC660; + extern s32 D_801CC664; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CC650 & 1)) { + D_801CC638 = 1; + } else { + D_801CC638 = D_80078EAF; + } + + b0 = ((u8 *)D_80182D18)[D_801CC638 * 12]; + D_801CDFBA = b0; + D_801CE060 = b0; + b1 = D_80182D1C[D_801CC638 * 12]; + D_801CDEE2 = b1; + D_801CDF9C = b1; + b2 = D_80182D20[D_801CC638 * 12]; + D_801CDEC0 = b2; + D_801CDEE1 = b2; + + (*(S9 *)&D_801CDED8) = ((S9 *)D_80182CE0)[D_801CC638]; + (*(S9 *)&D_801CDF78) = *(S9 *)(&D_801CDEC0 + 0x18); /* same addr as (*(S9 *)&D_801CDED8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801CDFA0 = 1; + D_801CC64C = -1; + D_801CC648 = 0; + D_801CC644 = -1; + D_801CC630 = 0; + D_801CC63C = 0; + D_801CC640 = 0; + + if ((D_801CC650 & 2) && (D_801CC638 == 4)) { + s0v = (*(s32 * *)&D_801CC620)[18]; + t9v = (*(s32 * *)&D_801CC620)[19]; + t8v = (*(s32 * *)&D_801CC620)[20]; + } else { + s32 *p = (s32 *)(D_801CC638 * 12 + (s32) (*(s32 * *)&D_801CC620)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CC62C) = arg0; + if (arg0 != 0) { + if (D_801CC658 != 0) { + s32 *p = (s32 *)(D_801CC638 * 12 + (s32) (*(s32 * *)&D_801CC628)); + D_801CC65C = p[0]; + D_801CC660 = p[1]; + D_801CC664 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8013F350.c b/src/ov_SC01_006/ov_SC01_006_jr_8013F350.c index 0d4a820bb..b76732645 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8013F350.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c b/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c index c7d3895db..a259d8fb3 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_006/ov_SC01_006_jr_80140608.c b/src/ov_SC01_006/ov_SC01_006_jr_80140608.c index daed40a39..7e01266f5 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_80140608.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80182B48[]; extern u8 D_80182C44[]; extern u8 D_80182CC4[]; extern u8 D_80182B9C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_008/ov_SC01_008_jr_801380E0.c b/src/ov_SC01_008/ov_SC01_008_jr_801380E0.c index 4cc43e5a1..75cd235f0 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_801380E0.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_80180024[]; extern u8 D_801800A4[]; extern u8 D_8017FF7C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A2100; +extern s32 D_801A20E8; + + +extern u8 D_801A356A; +extern u8 D_801A35DE; +extern u8 D_801A3492; +extern u8 D_801A354C; +extern u8 D_801A3470; +extern u8 D_801A3491; + + +extern s32 D_801A3550; +extern s32 D_801A20FC; +extern s32 D_801A20F8; +extern s32 D_801A20E0; +extern s32 D_801A20EC; +extern s32 D_801A20F0; + +extern void *D_801A20D0; +extern s32 D_801A2108; +extern void *D_801A20D8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801800C0[]; + extern Rec12 D_801800F8[]; + extern u8 D_80078EAF; + extern u8 D_801A3528; + extern s32 D_801A20F4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801800FC[]; + extern u8 D_80180100[]; + extern unsigned char D_801A3488; + extern s16 *D_801A20DC; + extern s32 D_801A210C; + extern s32 D_801A2110; + extern s32 D_801A2114; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A2100 & 1)) { + D_801A20E8 = 1; + } else { + D_801A20E8 = D_80078EAF; + } + + b0 = ((u8 *)D_801800F8)[D_801A20E8 * 12]; + D_801A356A = b0; + D_801A35DE = b0; + b1 = D_801800FC[D_801A20E8 * 12]; + D_801A3492 = b1; + D_801A354C = b1; + b2 = D_80180100[D_801A20E8 * 12]; + D_801A3470 = b2; + D_801A3491 = b2; + + (*(S9 *)&D_801A3488) = ((S9 *)D_801800C0)[D_801A20E8]; + (*(S9 *)&D_801A3528) = *(S9 *)(&D_801A3470 + 0x18); /* same addr as (*(S9 *)&D_801A3488); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A3550 = 1; + D_801A20FC = -1; + D_801A20F8 = 0; + D_801A20F4 = -1; + D_801A20E0 = 0; + D_801A20EC = 0; + D_801A20F0 = 0; + + if ((D_801A2100 & 2) && (D_801A20E8 == 4)) { + s0v = (*(s32 * *)&D_801A20D0)[18]; + t9v = (*(s32 * *)&D_801A20D0)[19]; + t8v = (*(s32 * *)&D_801A20D0)[20]; + } else { + s32 *p = (s32 *)(D_801A20E8 * 12 + (s32) (*(s32 * *)&D_801A20D0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A20DC) = arg0; + if (arg0 != 0) { + if (D_801A2108 != 0) { + s32 *p = (s32 *)(D_801A20E8 * 12 + (s32) (*(s32 * *)&D_801A20D8)); + D_801A210C = p[0]; + D_801A2110 = p[1]; + D_801A2114 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8013F350.c b/src/ov_SC01_008/ov_SC01_008_jr_8013F350.c index 9698581fb..836b93e12 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8013F350.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8017FF28[]; extern u8 D_80180024[]; extern u8 D_801800A4[]; extern u8 D_8017FF7C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c b/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c index 4fece0104..a1ddca36e 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8017FF28[]; extern u8 D_80180024[]; extern u8 D_801800A4[]; extern u8 D_8017FF7C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_008/ov_SC01_008_jr_80140608.c b/src/ov_SC01_008/ov_SC01_008_jr_80140608.c index 2cbe67201..6d0bfda69 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_80140608.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8017FF28[]; extern u8 D_80180024[]; extern u8 D_801800A4[]; extern u8 D_8017FF7C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_009/ov_SC01_009_jr_801380E0.c b/src/ov_SC01_009/ov_SC01_009_jr_801380E0.c index 584ecae43..53b12dab3 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_801380E0.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_8018320C[]; extern u8 D_8018328C[]; extern u8 D_80183164[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801F1F60; +extern s32 D_801F1F48; + + +extern u8 D_801F33EA; +extern u8 D_801F345E; +extern u8 D_801F3312; +extern u8 D_801F33CC; +extern u8 D_801F32F0; +extern u8 D_801F3311; + + +extern s32 D_801F33D0; +extern s32 D_801F1F5C; +extern s32 D_801F1F58; +extern s32 D_801F1F40; +extern s32 D_801F1F4C; +extern s32 D_801F1F50; + +extern void *D_801F1F30; +extern s32 D_801F1F68; +extern void *D_801F1F38; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801832A8[]; + extern Rec12 D_801832E0[]; + extern u8 D_80078EAF; + extern u8 D_801F33A8; + extern s32 D_801F1F54; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801832E4[]; + extern u8 D_801832E8[]; + extern unsigned char D_801F3308; + extern s16 *D_801F1F3C; + extern s32 D_801F1F6C; + extern s32 D_801F1F70; + extern s32 D_801F1F74; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801F1F60 & 1)) { + D_801F1F48 = 1; + } else { + D_801F1F48 = D_80078EAF; + } + + b0 = ((u8 *)D_801832E0)[D_801F1F48 * 12]; + D_801F33EA = b0; + D_801F345E = b0; + b1 = D_801832E4[D_801F1F48 * 12]; + D_801F3312 = b1; + D_801F33CC = b1; + b2 = D_801832E8[D_801F1F48 * 12]; + D_801F32F0 = b2; + D_801F3311 = b2; + + (*(S9 *)&D_801F3308) = ((S9 *)D_801832A8)[D_801F1F48]; + (*(S9 *)&D_801F33A8) = *(S9 *)(&D_801F32F0 + 0x18); /* same addr as (*(S9 *)&D_801F3308); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F33D0 = 1; + D_801F1F5C = -1; + D_801F1F58 = 0; + D_801F1F54 = -1; + D_801F1F40 = 0; + D_801F1F4C = 0; + D_801F1F50 = 0; + + if ((D_801F1F60 & 2) && (D_801F1F48 == 4)) { + s0v = (*(s32 * *)&D_801F1F30)[18]; + t9v = (*(s32 * *)&D_801F1F30)[19]; + t8v = (*(s32 * *)&D_801F1F30)[20]; + } else { + s32 *p = (s32 *)(D_801F1F48 * 12 + (s32) (*(s32 * *)&D_801F1F30)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801F1F3C) = arg0; + if (arg0 != 0) { + if (D_801F1F68 != 0) { + s32 *p = (s32 *)(D_801F1F48 * 12 + (s32) (*(s32 * *)&D_801F1F38)); + D_801F1F6C = p[0]; + D_801F1F70 = p[1]; + D_801F1F74 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8013F350.c b/src/ov_SC01_009/ov_SC01_009_jr_8013F350.c index b4b2cd433..b57e4566e 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8013F350.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_80183110[]; extern u8 D_8018320C[]; extern u8 D_8018328C[]; extern u8 D_80183164[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c b/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c index 48f3664b9..b5507f6a1 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_80183110[]; extern u8 D_8018320C[]; extern u8 D_8018328C[]; extern u8 D_80183164[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_009/ov_SC01_009_jr_80140608.c b/src/ov_SC01_009/ov_SC01_009_jr_80140608.c index 0ddbf5d32..1d9743831 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_80140608.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_80183110[]; extern u8 D_8018320C[]; extern u8 D_8018328C[]; extern u8 D_80183164[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_074/ov_SC01_074_jr_801380E0.c b/src/ov_SC01_074/ov_SC01_074_jr_801380E0.c index ed8fcf3da..e820cbc96 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_801380E0.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8017EE8C[]; extern u8 D_8017EF0C[]; extern u8 D_8017EDE4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019A9E0; +extern s32 D_8019A9C8; + + +extern u8 D_8019BCFA; +extern u8 D_8019BD6E; +extern u8 D_8019BC22; +extern u8 D_8019BCDC; +extern u8 D_8019BC00; +extern u8 D_8019BC21; + + +extern s32 D_8019BCE0; +extern s32 D_8019A9DC; +extern s32 D_8019A9D8; +extern s32 D_8019A9C0; +extern s32 D_8019A9CC; +extern s32 D_8019A9D0; + +extern void *D_8019A9B0; +extern s32 D_8019A9E8; +extern void *D_8019A9B8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EF28[]; + extern Rec12 D_8017EF60[]; + extern u8 D_80078EAF; + extern u8 D_8019BCB8; + extern s32 D_8019A9D4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EF64[]; + extern u8 D_8017EF68[]; + extern unsigned char D_8019BC18; + extern s16 *D_8019A9BC; + extern s32 D_8019A9EC; + extern s32 D_8019A9F0; + extern s32 D_8019A9F4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019A9E0 & 1)) { + D_8019A9C8 = 1; + } else { + D_8019A9C8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EF60)[D_8019A9C8 * 12]; + D_8019BCFA = b0; + D_8019BD6E = b0; + b1 = D_8017EF64[D_8019A9C8 * 12]; + D_8019BC22 = b1; + D_8019BCDC = b1; + b2 = D_8017EF68[D_8019A9C8 * 12]; + D_8019BC00 = b2; + D_8019BC21 = b2; + + (*(S9 *)&D_8019BC18) = ((S9 *)D_8017EF28)[D_8019A9C8]; + (*(S9 *)&D_8019BCB8) = *(S9 *)(&D_8019BC00 + 0x18); /* same addr as (*(S9 *)&D_8019BC18); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019BCE0 = 1; + D_8019A9DC = -1; + D_8019A9D8 = 0; + D_8019A9D4 = -1; + D_8019A9C0 = 0; + D_8019A9CC = 0; + D_8019A9D0 = 0; + + if ((D_8019A9E0 & 2) && (D_8019A9C8 == 4)) { + s0v = (*(s32 * *)&D_8019A9B0)[18]; + t9v = (*(s32 * *)&D_8019A9B0)[19]; + t8v = (*(s32 * *)&D_8019A9B0)[20]; + } else { + s32 *p = (s32 *)(D_8019A9C8 * 12 + (s32) (*(s32 * *)&D_8019A9B0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019A9BC) = arg0; + if (arg0 != 0) { + if (D_8019A9E8 != 0) { + s32 *p = (s32 *)(D_8019A9C8 * 12 + (s32) (*(s32 * *)&D_8019A9B8)); + D_8019A9EC = p[0]; + D_8019A9F0 = p[1]; + D_8019A9F4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8013F350.c b/src/ov_SC01_074/ov_SC01_074_jr_8013F350.c index 77613a750..55477429b 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8013F350.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8017ED90[]; extern u8 D_8017EE8C[]; extern u8 D_8017EF0C[]; extern u8 D_8017EDE4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c b/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c index 793f133a7..47b9f1d50 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8017ED90[]; extern u8 D_8017EE8C[]; extern u8 D_8017EF0C[]; extern u8 D_8017EDE4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_074/ov_SC01_074_jr_80140608.c b/src/ov_SC01_074/ov_SC01_074_jr_80140608.c index 9f307f85b..b3e63c4c6 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_80140608.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8017ED90[]; extern u8 D_8017EE8C[]; extern u8 D_8017EF0C[]; extern u8 D_8017EDE4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_080/ov_SC01_080_jr_801380E0.c b/src/ov_SC01_080/ov_SC01_080_jr_801380E0.c index 0d23ba90c..76aa6efac 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_801380E0.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_80183DEC[]; extern u8 D_80183E6C[]; extern u8 D_80183D44[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C4810; +extern s32 D_801C47F8; + + +extern u8 D_801C7EDE; +extern u8 D_801C7F4E; +extern u8 D_801C7E00; +extern u8 D_801C7EBC; +extern u8 D_801C75D8; +extern u8 D_801C75F9; + + +extern s32 D_801C7EC4; +extern s32 D_801C480C; +extern s32 D_801C4808; +extern s32 D_801C47F0; +extern s32 D_801C47FC; +extern s32 D_801C4800; + +extern void *D_801C47E0; +extern s32 D_801C4818; +extern void *D_801C47E8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80183E88[]; + extern Rec12 D_80183EC0[]; + extern u8 D_80078EAF; + extern u8 D_801C7E98; + extern s32 D_801C4804; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80183EC4[]; + extern u8 D_80183EC8[]; + extern unsigned char D_801C75F0; + extern s16 *D_801C47EC; + extern s32 D_801C481C; + extern s32 D_801C4820; + extern s32 D_801C4824; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C4810 & 1)) { + D_801C47F8 = 1; + } else { + D_801C47F8 = D_80078EAF; + } + + b0 = ((u8 *)D_80183EC0)[D_801C47F8 * 12]; + D_801C7EDE = b0; + D_801C7F4E = b0; + b1 = D_80183EC4[D_801C47F8 * 12]; + D_801C7E00 = b1; + D_801C7EBC = b1; + b2 = D_80183EC8[D_801C47F8 * 12]; + D_801C75D8 = b2; + D_801C75F9 = b2; + + (*(S9 *)&D_801C75F0) = ((S9 *)D_80183E88)[D_801C47F8]; + (*(S9 *)&D_801C7E98) = *(S9 *)(&D_801C75D8 + 0x18); /* same addr as (*(S9 *)&D_801C75F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C7EC4 = 1; + D_801C480C = -1; + D_801C4808 = 0; + D_801C4804 = -1; + D_801C47F0 = 0; + D_801C47FC = 0; + D_801C4800 = 0; + + if ((D_801C4810 & 2) && (D_801C47F8 == 4)) { + s0v = (*(s32 * *)&D_801C47E0)[18]; + t9v = (*(s32 * *)&D_801C47E0)[19]; + t8v = (*(s32 * *)&D_801C47E0)[20]; + } else { + s32 *p = (s32 *)(D_801C47F8 * 12 + (s32) (*(s32 * *)&D_801C47E0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C47EC) = arg0; + if (arg0 != 0) { + if (D_801C4818 != 0) { + s32 *p = (s32 *)(D_801C47F8 * 12 + (s32) (*(s32 * *)&D_801C47E8)); + D_801C481C = p[0]; + D_801C4820 = p[1]; + D_801C4824 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8013F350.c b/src/ov_SC01_080/ov_SC01_080_jr_8013F350.c index f79db1f89..e026073c7 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8013F350.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80183CF0[]; extern u8 D_80183DEC[]; extern u8 D_80183E6C[]; extern u8 D_80183D44[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c b/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c index efabc0d56..b1c2e31dc 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80183CF0[]; extern u8 D_80183DEC[]; extern u8 D_80183E6C[]; extern u8 D_80183D44[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_080/ov_SC01_080_jr_80140608.c b/src/ov_SC01_080/ov_SC01_080_jr_80140608.c index 435d8e5ec..fdb22c233 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_80140608.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80183CF0[]; extern u8 D_80183DEC[]; extern u8 D_80183E6C[]; extern u8 D_80183D44[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_084/ov_SC01_084_jr_801380E0.c b/src/ov_SC01_084/ov_SC01_084_jr_801380E0.c index ac4362d32..b95c52284 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_801380E0.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_801870E0[]; extern u8 D_80187160[]; extern u8 D_80187038[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C62B8; +extern s32 D_801C62A0; + + +extern u8 D_801C7ABA; +extern u8 D_801C7BF6; +extern u8 D_801C7762; +extern u8 D_801C781C; +extern u8 D_801C7730; +extern u8 D_801C7761; + + +extern s32 D_801C7820; +extern s32 D_801C62B4; +extern s32 D_801C62B0; +extern s32 D_801C6298; +extern s32 D_801C62A4; +extern s32 D_801C62A8; + +extern void *D_801C6288; +extern s32 D_801C62C0; +extern void *D_801C6290; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018717C[]; + extern Rec12 D_801871B4[]; + extern u8 D_80078EAF; + extern u8 D_801C77F8; + extern s32 D_801C62AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801871B8[]; + extern u8 D_801871BC[]; + extern unsigned char D_801C7758; + extern s16 *D_801C6294; + extern s32 D_801C62C4; + extern s32 D_801C62C8; + extern s32 D_801C62CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C62B8 & 1)) { + D_801C62A0 = 1; + } else { + D_801C62A0 = D_80078EAF; + } + + b0 = ((u8 *)D_801871B4)[D_801C62A0 * 12]; + D_801C7ABA = b0; + D_801C7BF6 = b0; + b1 = D_801871B8[D_801C62A0 * 12]; + D_801C7762 = b1; + D_801C781C = b1; + b2 = D_801871BC[D_801C62A0 * 12]; + D_801C7730 = b2; + D_801C7761 = b2; + + (*(S9 *)&D_801C7758) = ((S9 *)D_8018717C)[D_801C62A0]; + (*(S9 *)&D_801C77F8) = *(S9 *)(&D_801C7730 + 0x28); /* same addr as (*(S9 *)&D_801C7758); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C7820 = 1; + D_801C62B4 = -1; + D_801C62B0 = 0; + D_801C62AC = -1; + D_801C6298 = 0; + D_801C62A4 = 0; + D_801C62A8 = 0; + + if ((D_801C62B8 & 2) && (D_801C62A0 == 4)) { + s0v = (*(s32 * *)&D_801C6288)[18]; + t9v = (*(s32 * *)&D_801C6288)[19]; + t8v = (*(s32 * *)&D_801C6288)[20]; + } else { + s32 *p = (s32 *)(D_801C62A0 * 12 + (s32) (*(s32 * *)&D_801C6288)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C6294) = arg0; + if (arg0 != 0) { + if (D_801C62C0 != 0) { + s32 *p = (s32 *)(D_801C62A0 * 12 + (s32) (*(s32 * *)&D_801C6290)); + D_801C62C4 = p[0]; + D_801C62C8 = p[1]; + D_801C62CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8013F350.c b/src/ov_SC01_084/ov_SC01_084_jr_8013F350.c index 66ce31bd3..37e7af7ba 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8013F350.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80186FE4[]; extern u8 D_801870E0[]; extern u8 D_80187160[]; extern u8 D_80187038[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c b/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c index dfc6fb0b8..0870b4608 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80186FE4[]; extern u8 D_801870E0[]; extern u8 D_80187160[]; extern u8 D_80187038[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC01_084/ov_SC01_084_jr_80140608.c b/src/ov_SC01_084/ov_SC01_084_jr_80140608.c index de3bc1b8d..f9134605f 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_80140608.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80186FE4[]; extern u8 D_801870E0[]; extern u8 D_80187160[]; extern u8 D_80187038[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_000/ov_SC02_000_jr_801380E0.c b/src/ov_SC02_000/ov_SC02_000_jr_801380E0.c index b54a54d47..be9d3ac7b 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_801380E0.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E6DE8; +extern s32 D_801E6DD0; + + +extern u8 D_801E87BE; +extern u8 D_801E8866; +extern u8 D_801E8692; +extern u8 D_801E876C; +extern u8 D_801E8670; +extern u8 D_801E8691; + + +extern s32 D_801E8774; +extern s32 D_801E6DE4; +extern s32 D_801E6DE0; +extern s32 D_801E6DC8; +extern s32 D_801E6DD4; +extern s32 D_801E6DD8; + +extern void *D_801E6DB8; +extern s32 D_801E6DF0; +extern void *D_801E6DC0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018B52C[]; + extern Rec12 D_8018B564[]; + extern u8 D_80078EAF; + extern u8 D_801E8740; + extern s32 D_801E6DDC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018B568[]; + extern u8 D_8018B56C[]; + extern unsigned char D_801E8688; + extern s16 *D_801E6DC4; + extern s32 D_801E6DF4; + extern s32 D_801E6DF8; + extern s32 D_801E6DFC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E6DE8 & 1)) { + D_801E6DD0 = 1; + } else { + D_801E6DD0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018B564)[D_801E6DD0 * 12]; + D_801E87BE = b0; + D_801E8866 = b0; + b1 = D_8018B568[D_801E6DD0 * 12]; + D_801E8692 = b1; + D_801E876C = b1; + b2 = D_8018B56C[D_801E6DD0 * 12]; + D_801E8670 = b2; + D_801E8691 = b2; + + (*(S9 *)&D_801E8688) = ((S9 *)D_8018B52C)[D_801E6DD0]; + (*(S9 *)&D_801E8740) = *(S9 *)(&D_801E8670 + 0x18); /* same addr as (*(S9 *)&D_801E8688); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E8774 = 1; + D_801E6DE4 = -1; + D_801E6DE0 = 0; + D_801E6DDC = -1; + D_801E6DC8 = 0; + D_801E6DD4 = 0; + D_801E6DD8 = 0; + + if ((D_801E6DE8 & 2) && (D_801E6DD0 == 4)) { + s0v = (*(s32 * *)&D_801E6DB8)[18]; + t9v = (*(s32 * *)&D_801E6DB8)[19]; + t8v = (*(s32 * *)&D_801E6DB8)[20]; + } else { + s32 *p = (s32 *)(D_801E6DD0 * 12 + (s32) (*(s32 * *)&D_801E6DB8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E6DC4) = arg0; + if (arg0 != 0) { + if (D_801E6DF0 != 0) { + s32 *p = (s32 *)(D_801E6DD0 * 12 + (s32) (*(s32 * *)&D_801E6DC0)); + D_801E6DF4 = p[0]; + D_801E6DF8 = p[1]; + D_801E6DFC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8013F350.c b/src/ov_SC02_000/ov_SC02_000_jr_8013F350.c index c63106ac3..7ab769680 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8013F350.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c b/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c index f53d1f1ef..ebe8945eb 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_000/ov_SC02_000_jr_80140608.c b/src/ov_SC02_000/ov_SC02_000_jr_80140608.c index aeabaeb76..c42988112 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_80140608.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_003/ov_SC02_003_jr_801380E0.c b/src/ov_SC02_003/ov_SC02_003_jr_801380E0.c index 368472f0a..1b3e24217 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_801380E0.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E6DE8; +extern s32 D_801E6DD0; + + +extern u8 D_801E87BE; +extern u8 D_801E8866; +extern u8 D_801E8692; +extern u8 D_801E876C; +extern u8 D_801E8670; +extern u8 D_801E8691; + + +extern s32 D_801E8774; +extern s32 D_801E6DE4; +extern s32 D_801E6DE0; +extern s32 D_801E6DC8; +extern s32 D_801E6DD4; +extern s32 D_801E6DD8; + +extern void *D_801E6DB8; +extern s32 D_801E6DF0; +extern void *D_801E6DC0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018B52C[]; + extern Rec12 D_8018B564[]; + extern u8 D_80078EAF; + extern u8 D_801E8740; + extern s32 D_801E6DDC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018B568[]; + extern u8 D_8018B56C[]; + extern unsigned char D_801E8688; + extern s16 *D_801E6DC4; + extern s32 D_801E6DF4; + extern s32 D_801E6DF8; + extern s32 D_801E6DFC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E6DE8 & 1)) { + D_801E6DD0 = 1; + } else { + D_801E6DD0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018B564)[D_801E6DD0 * 12]; + D_801E87BE = b0; + D_801E8866 = b0; + b1 = D_8018B568[D_801E6DD0 * 12]; + D_801E8692 = b1; + D_801E876C = b1; + b2 = D_8018B56C[D_801E6DD0 * 12]; + D_801E8670 = b2; + D_801E8691 = b2; + + (*(S9 *)&D_801E8688) = ((S9 *)D_8018B52C)[D_801E6DD0]; + (*(S9 *)&D_801E8740) = *(S9 *)(&D_801E8670 + 0x18); /* same addr as (*(S9 *)&D_801E8688); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E8774 = 1; + D_801E6DE4 = -1; + D_801E6DE0 = 0; + D_801E6DDC = -1; + D_801E6DC8 = 0; + D_801E6DD4 = 0; + D_801E6DD8 = 0; + + if ((D_801E6DE8 & 2) && (D_801E6DD0 == 4)) { + s0v = (*(s32 * *)&D_801E6DB8)[18]; + t9v = (*(s32 * *)&D_801E6DB8)[19]; + t8v = (*(s32 * *)&D_801E6DB8)[20]; + } else { + s32 *p = (s32 *)(D_801E6DD0 * 12 + (s32) (*(s32 * *)&D_801E6DB8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E6DC4) = arg0; + if (arg0 != 0) { + if (D_801E6DF0 != 0) { + s32 *p = (s32 *)(D_801E6DD0 * 12 + (s32) (*(s32 * *)&D_801E6DC0)); + D_801E6DF4 = p[0]; + D_801E6DF8 = p[1]; + D_801E6DFC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8013F350.c b/src/ov_SC02_003/ov_SC02_003_jr_8013F350.c index c63106ac3..7ab769680 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8013F350.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c b/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c index fa15d2011..dcb4945a3 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_003/ov_SC02_003_jr_80140608.c b/src/ov_SC02_003/ov_SC02_003_jr_80140608.c index 21763a6d1..1ca532fd6 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_80140608.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8018B394[]; extern u8 D_8018B490[]; extern u8 D_8018B510[]; extern u8 D_8018B3E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_004/ov_SC02_004_jr_801380E0.c b/src/ov_SC02_004/ov_SC02_004_jr_801380E0.c index b549b2063..208d618e1 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_801380E0.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8017E570[]; extern u8 D_8017E5F0[]; extern u8 D_8017E4C8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80195038; +extern s32 D_80195020; + + +extern u8 D_80196352; +extern u8 D_801963C6; +extern u8 D_8019627A; +extern u8 D_80196334; +extern u8 D_80196258; +extern u8 D_80196279; + + +extern s32 D_80196338; +extern s32 D_80195034; +extern s32 D_80195030; +extern s32 D_80195018; +extern s32 D_80195024; +extern s32 D_80195028; + +extern void *D_80195008; +extern s32 D_80195040; +extern void *D_80195010; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017E60C[]; + extern Rec12 D_8017E644[]; + extern u8 D_80078EAF; + extern u8 D_80196310; + extern s32 D_8019502C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017E648[]; + extern u8 D_8017E64C[]; + extern unsigned char D_80196270; + extern s16 *D_80195014; + extern s32 D_80195044; + extern s32 D_80195048; + extern s32 D_8019504C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80195038 & 1)) { + D_80195020 = 1; + } else { + D_80195020 = D_80078EAF; + } + + b0 = ((u8 *)D_8017E644)[D_80195020 * 12]; + D_80196352 = b0; + D_801963C6 = b0; + b1 = D_8017E648[D_80195020 * 12]; + D_8019627A = b1; + D_80196334 = b1; + b2 = D_8017E64C[D_80195020 * 12]; + D_80196258 = b2; + D_80196279 = b2; + + (*(S9 *)&D_80196270) = ((S9 *)D_8017E60C)[D_80195020]; + (*(S9 *)&D_80196310) = *(S9 *)(&D_80196258 + 0x18); /* same addr as (*(S9 *)&D_80196270); distinct sym defeats cse, keeps %hi/%lo */ + + D_80196338 = 1; + D_80195034 = -1; + D_80195030 = 0; + D_8019502C = -1; + D_80195018 = 0; + D_80195024 = 0; + D_80195028 = 0; + + if ((D_80195038 & 2) && (D_80195020 == 4)) { + s0v = (*(s32 * *)&D_80195008)[18]; + t9v = (*(s32 * *)&D_80195008)[19]; + t8v = (*(s32 * *)&D_80195008)[20]; + } else { + s32 *p = (s32 *)(D_80195020 * 12 + (s32) (*(s32 * *)&D_80195008)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80195014) = arg0; + if (arg0 != 0) { + if (D_80195040 != 0) { + s32 *p = (s32 *)(D_80195020 * 12 + (s32) (*(s32 * *)&D_80195010)); + D_80195044 = p[0]; + D_80195048 = p[1]; + D_8019504C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8013F350.c b/src/ov_SC02_004/ov_SC02_004_jr_8013F350.c index 775c4b471..2b3236714 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8013F350.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8017E474[]; extern u8 D_8017E570[]; extern u8 D_8017E5F0[]; extern u8 D_8017E4C8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c b/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c index c62b71215..7e2e13252 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8017E474[]; extern u8 D_8017E570[]; extern u8 D_8017E5F0[]; extern u8 D_8017E4C8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_004/ov_SC02_004_jr_80140608.c b/src/ov_SC02_004/ov_SC02_004_jr_80140608.c index 27c48e2f9..2ef33332a 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_80140608.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8017E474[]; extern u8 D_8017E570[]; extern u8 D_8017E5F0[]; extern u8 D_8017E4C8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_005/ov_SC02_005_jr_801380E0.c b/src/ov_SC02_005/ov_SC02_005_jr_801380E0.c index 030ff6a45..5e2d8a9f2 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_801380E0.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_80191174[]; extern u8 D_801911F4[]; extern u8 D_801910CC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E30B0; +extern s32 D_801E3098; + + +extern u8 D_801E4BDA; +extern u8 D_801E4C58; +extern u8 D_801E4B00; +extern u8 D_801E4BBE; +extern u8 D_801E4A40; +extern u8 D_801E4A99; + + +extern s32 D_801E4BC0; +extern s32 D_801E30AC; +extern s32 D_801E30A8; +extern s32 D_801E3090; +extern s32 D_801E309C; +extern s32 D_801E30A0; + +extern void *D_801E3080; +extern s32 D_801E30B8; +extern void *D_801E3088; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80191210[]; + extern Rec12 D_80191248[]; + extern u8 D_80078EAF; + extern u8 D_801E4B98; + extern s32 D_801E30A4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8019124C[]; + extern u8 D_80191250[]; + extern unsigned char D_801E4A90; + extern s16 *D_801E308C; + extern s32 D_801E30BC; + extern s32 D_801E30C0; + extern s32 D_801E30C4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E30B0 & 1)) { + D_801E3098 = 1; + } else { + D_801E3098 = D_80078EAF; + } + + b0 = ((u8 *)D_80191248)[D_801E3098 * 12]; + D_801E4BDA = b0; + D_801E4C58 = b0; + b1 = D_8019124C[D_801E3098 * 12]; + D_801E4B00 = b1; + D_801E4BBE = b1; + b2 = D_80191250[D_801E3098 * 12]; + D_801E4A40 = b2; + D_801E4A99 = b2; + + (*(S9 *)&D_801E4A90) = ((S9 *)D_80191210)[D_801E3098]; + (*(S9 *)&D_801E4B98) = *(S9 *)(&D_801E4A40 + 0x50); /* same addr as (*(S9 *)&D_801E4A90); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E4BC0 = 1; + D_801E30AC = -1; + D_801E30A8 = 0; + D_801E30A4 = -1; + D_801E3090 = 0; + D_801E309C = 0; + D_801E30A0 = 0; + + if ((D_801E30B0 & 2) && (D_801E3098 == 4)) { + s0v = (*(s32 * *)&D_801E3080)[18]; + t9v = (*(s32 * *)&D_801E3080)[19]; + t8v = (*(s32 * *)&D_801E3080)[20]; + } else { + s32 *p = (s32 *)(D_801E3098 * 12 + (s32) (*(s32 * *)&D_801E3080)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E308C) = arg0; + if (arg0 != 0) { + if (D_801E30B8 != 0) { + s32 *p = (s32 *)(D_801E3098 * 12 + (s32) (*(s32 * *)&D_801E3088)); + D_801E30BC = p[0]; + D_801E30C0 = p[1]; + D_801E30C4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8013F350.c b/src/ov_SC02_005/ov_SC02_005_jr_8013F350.c index 9e8c23c4f..00b6b0037 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8013F350.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80191078[]; extern u8 D_80191174[]; extern u8 D_801911F4[]; extern u8 D_801910CC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c b/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c index 27d436e84..257c62a5b 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80191078[]; extern u8 D_80191174[]; extern u8 D_801911F4[]; extern u8 D_801910CC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_005/ov_SC02_005_jr_80140608.c b/src/ov_SC02_005/ov_SC02_005_jr_80140608.c index 4697f2626..4eaaa6447 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_80140608.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80191078[]; extern u8 D_80191174[]; extern u8 D_801911F4[]; extern u8 D_801910CC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_011/ov_SC02_011_jr_801380E0.c b/src/ov_SC02_011/ov_SC02_011_jr_801380E0.c index 6408f1a2f..fd3a110ac 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_801380E0.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_801915C4[]; extern u8 D_80191644[]; extern u8 D_8019151C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E9F90; +extern s32 D_801E9F78; + + +extern u8 D_801EBA0A; +extern u8 D_801EBA7E; +extern u8 D_801EB932; +extern u8 D_801EB9EC; +extern u8 D_801EB910; +extern u8 D_801EB931; + + +extern s32 D_801EB9F0; +extern s32 D_801E9F8C; +extern s32 D_801E9F88; +extern s32 D_801E9F70; +extern s32 D_801E9F7C; +extern s32 D_801E9F80; + +extern void *D_801E9F60; +extern s32 D_801E9F98; +extern void *D_801E9F68; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80191660[]; + extern Rec12 D_80191698[]; + extern u8 D_80078EAF; + extern u8 D_801EB9C8; + extern s32 D_801E9F84; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8019169C[]; + extern u8 D_801916A0[]; + extern unsigned char D_801EB928; + extern s16 *D_801E9F6C; + extern s32 D_801E9F9C; + extern s32 D_801E9FA0; + extern s32 D_801E9FA4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E9F90 & 1)) { + D_801E9F78 = 1; + } else { + D_801E9F78 = D_80078EAF; + } + + b0 = ((u8 *)D_80191698)[D_801E9F78 * 12]; + D_801EBA0A = b0; + D_801EBA7E = b0; + b1 = D_8019169C[D_801E9F78 * 12]; + D_801EB932 = b1; + D_801EB9EC = b1; + b2 = D_801916A0[D_801E9F78 * 12]; + D_801EB910 = b2; + D_801EB931 = b2; + + (*(S9 *)&D_801EB928) = ((S9 *)D_80191660)[D_801E9F78]; + (*(S9 *)&D_801EB9C8) = *(S9 *)(&D_801EB910 + 0x18); /* same addr as (*(S9 *)&D_801EB928); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EB9F0 = 1; + D_801E9F8C = -1; + D_801E9F88 = 0; + D_801E9F84 = -1; + D_801E9F70 = 0; + D_801E9F7C = 0; + D_801E9F80 = 0; + + if ((D_801E9F90 & 2) && (D_801E9F78 == 4)) { + s0v = (*(s32 * *)&D_801E9F60)[18]; + t9v = (*(s32 * *)&D_801E9F60)[19]; + t8v = (*(s32 * *)&D_801E9F60)[20]; + } else { + s32 *p = (s32 *)(D_801E9F78 * 12 + (s32) (*(s32 * *)&D_801E9F60)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E9F6C) = arg0; + if (arg0 != 0) { + if (D_801E9F98 != 0) { + s32 *p = (s32 *)(D_801E9F78 * 12 + (s32) (*(s32 * *)&D_801E9F68)); + D_801E9F9C = p[0]; + D_801E9FA0 = p[1]; + D_801E9FA4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8013F350.c b/src/ov_SC02_011/ov_SC02_011_jr_8013F350.c index 7a0da8b4b..f27c787ef 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8013F350.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_801914C8[]; extern u8 D_801915C4[]; extern u8 D_80191644[]; extern u8 D_8019151C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c b/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c index cf3b5108b..d032a0d32 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_801914C8[]; extern u8 D_801915C4[]; extern u8 D_80191644[]; extern u8 D_8019151C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_011/ov_SC02_011_jr_80140608.c b/src/ov_SC02_011/ov_SC02_011_jr_80140608.c index 9c4db43a6..4e464490f 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_80140608.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_801914C8[]; extern u8 D_801915C4[]; extern u8 D_80191644[]; extern u8 D_8019151C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_015/ov_SC02_015_jr_801380E0.c b/src/ov_SC02_015/ov_SC02_015_jr_801380E0.c index df76a1ae1..79755eb24 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_801380E0.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8017EAD8[]; extern u8 D_8017EB58[]; extern u8 D_8017EA30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018F110; +extern s32 D_8018F0F8; + + +extern u8 D_8019062A; +extern u8 D_8019069E; +extern u8 D_80190552; +extern u8 D_8019060C; +extern u8 D_80190530; +extern u8 D_80190551; + + +extern s32 D_80190610; +extern s32 D_8018F10C; +extern s32 D_8018F108; +extern s32 D_8018F0F0; +extern s32 D_8018F0FC; +extern s32 D_8018F100; + +extern void *D_8018F0E0; +extern s32 D_8018F118; +extern void *D_8018F0E8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EB74[]; + extern Rec12 D_8017EBAC[]; + extern u8 D_80078EAF; + extern u8 D_801905E8; + extern s32 D_8018F104; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EBB0[]; + extern u8 D_8017EBB4[]; + extern unsigned char D_80190548; + extern s16 *D_8018F0EC; + extern s32 D_8018F11C; + extern s32 D_8018F120; + extern s32 D_8018F124; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018F110 & 1)) { + D_8018F0F8 = 1; + } else { + D_8018F0F8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EBAC)[D_8018F0F8 * 12]; + D_8019062A = b0; + D_8019069E = b0; + b1 = D_8017EBB0[D_8018F0F8 * 12]; + D_80190552 = b1; + D_8019060C = b1; + b2 = D_8017EBB4[D_8018F0F8 * 12]; + D_80190530 = b2; + D_80190551 = b2; + + (*(S9 *)&D_80190548) = ((S9 *)D_8017EB74)[D_8018F0F8]; + (*(S9 *)&D_801905E8) = *(S9 *)(&D_80190530 + 0x18); /* same addr as (*(S9 *)&D_80190548); distinct sym defeats cse, keeps %hi/%lo */ + + D_80190610 = 1; + D_8018F10C = -1; + D_8018F108 = 0; + D_8018F104 = -1; + D_8018F0F0 = 0; + D_8018F0FC = 0; + D_8018F100 = 0; + + if ((D_8018F110 & 2) && (D_8018F0F8 == 4)) { + s0v = (*(s32 * *)&D_8018F0E0)[18]; + t9v = (*(s32 * *)&D_8018F0E0)[19]; + t8v = (*(s32 * *)&D_8018F0E0)[20]; + } else { + s32 *p = (s32 *)(D_8018F0F8 * 12 + (s32) (*(s32 * *)&D_8018F0E0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018F0EC) = arg0; + if (arg0 != 0) { + if (D_8018F118 != 0) { + s32 *p = (s32 *)(D_8018F0F8 * 12 + (s32) (*(s32 * *)&D_8018F0E8)); + D_8018F11C = p[0]; + D_8018F120 = p[1]; + D_8018F124 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8013F350.c b/src/ov_SC02_015/ov_SC02_015_jr_8013F350.c index 8642540db..c9bfc2994 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8013F350.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8017E9DC[]; extern u8 D_8017EAD8[]; extern u8 D_8017EB58[]; extern u8 D_8017EA30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c b/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c index ae738a355..58acd4d5d 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8017E9DC[]; extern u8 D_8017EAD8[]; extern u8 D_8017EB58[]; extern u8 D_8017EA30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_015/ov_SC02_015_jr_80140608.c b/src/ov_SC02_015/ov_SC02_015_jr_80140608.c index f4e749908..515b2327f 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_80140608.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8017E9DC[]; extern u8 D_8017EAD8[]; extern u8 D_8017EB58[]; extern u8 D_8017EA30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_016/ov_SC02_016_jr_801380E0.c b/src/ov_SC02_016/ov_SC02_016_jr_801380E0.c index 5bb24cdd2..567ad4920 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_801380E0.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_80184D10[]; extern u8 D_80184D90[]; extern u8 D_80184C68[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B2D28; +extern s32 D_801B2D10; + + +extern u8 D_801B4A62; +extern u8 D_801B4AD6; +extern u8 D_801B498A; +extern u8 D_801B4A44; +extern u8 D_801B4968; +extern u8 D_801B4989; + + +extern s32 D_801B4A48; +extern s32 D_801B2D24; +extern s32 D_801B2D20; +extern s32 D_801B2D08; +extern s32 D_801B2D14; +extern s32 D_801B2D18; + +extern void *D_801B2CF8; +extern s32 D_801B2D30; +extern void *D_801B2D00; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80184DAC[]; + extern Rec12 D_80184DE4[]; + extern u8 D_80078EAF; + extern u8 D_801B4A20; + extern s32 D_801B2D1C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80184DE8[]; + extern u8 D_80184DEC[]; + extern unsigned char D_801B4980; + extern s16 *D_801B2D04; + extern s32 D_801B2D34; + extern s32 D_801B2D38; + extern s32 D_801B2D3C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B2D28 & 1)) { + D_801B2D10 = 1; + } else { + D_801B2D10 = D_80078EAF; + } + + b0 = ((u8 *)D_80184DE4)[D_801B2D10 * 12]; + D_801B4A62 = b0; + D_801B4AD6 = b0; + b1 = D_80184DE8[D_801B2D10 * 12]; + D_801B498A = b1; + D_801B4A44 = b1; + b2 = D_80184DEC[D_801B2D10 * 12]; + D_801B4968 = b2; + D_801B4989 = b2; + + (*(S9 *)&D_801B4980) = ((S9 *)D_80184DAC)[D_801B2D10]; + (*(S9 *)&D_801B4A20) = *(S9 *)(&D_801B4968 + 0x18); /* same addr as (*(S9 *)&D_801B4980); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B4A48 = 1; + D_801B2D24 = -1; + D_801B2D20 = 0; + D_801B2D1C = -1; + D_801B2D08 = 0; + D_801B2D14 = 0; + D_801B2D18 = 0; + + if ((D_801B2D28 & 2) && (D_801B2D10 == 4)) { + s0v = (*(s32 * *)&D_801B2CF8)[18]; + t9v = (*(s32 * *)&D_801B2CF8)[19]; + t8v = (*(s32 * *)&D_801B2CF8)[20]; + } else { + s32 *p = (s32 *)(D_801B2D10 * 12 + (s32) (*(s32 * *)&D_801B2CF8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B2D04) = arg0; + if (arg0 != 0) { + if (D_801B2D30 != 0) { + s32 *p = (s32 *)(D_801B2D10 * 12 + (s32) (*(s32 * *)&D_801B2D00)); + D_801B2D34 = p[0]; + D_801B2D38 = p[1]; + D_801B2D3C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8013F350.c b/src/ov_SC02_016/ov_SC02_016_jr_8013F350.c index 927a27bcd..b74827d63 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8013F350.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80184C14[]; extern u8 D_80184D10[]; extern u8 D_80184D90[]; extern u8 D_80184C68[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c b/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c index db8383405..64d1f0a64 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80184C14[]; extern u8 D_80184D10[]; extern u8 D_80184D90[]; extern u8 D_80184C68[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_016/ov_SC02_016_jr_80140608.c b/src/ov_SC02_016/ov_SC02_016_jr_80140608.c index 30a81f6ae..b937837b8 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_80140608.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80184C14[]; extern u8 D_80184D10[]; extern u8 D_80184D90[]; extern u8 D_80184C68[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_017/ov_SC02_017_jr_801380E0.c b/src/ov_SC02_017/ov_SC02_017_jr_801380E0.c index 747f9a107..ffaae9a79 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_801380E0.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8018AD68[]; extern u8 D_8018ADE8[]; extern u8 D_8018ACC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801EE550; +extern s32 D_801EE538; + + +extern u8 D_801EFCC2; +extern u8 D_801EFD36; +extern u8 D_801EFBEA; +extern u8 D_801EFCA4; +extern u8 D_801EFBC8; +extern u8 D_801EFBE9; + + +extern s32 D_801EFCA8; +extern s32 D_801EE54C; +extern s32 D_801EE548; +extern s32 D_801EE530; +extern s32 D_801EE53C; +extern s32 D_801EE540; + +extern void *D_801EE520; +extern s32 D_801EE558; +extern void *D_801EE528; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018AE04[]; + extern Rec12 D_8018AE3C[]; + extern u8 D_80078EAF; + extern u8 D_801EFC80; + extern s32 D_801EE544; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018AE40[]; + extern u8 D_8018AE44[]; + extern unsigned char D_801EFBE0; + extern s16 *D_801EE52C; + extern s32 D_801EE55C; + extern s32 D_801EE560; + extern s32 D_801EE564; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801EE550 & 1)) { + D_801EE538 = 1; + } else { + D_801EE538 = D_80078EAF; + } + + b0 = ((u8 *)D_8018AE3C)[D_801EE538 * 12]; + D_801EFCC2 = b0; + D_801EFD36 = b0; + b1 = D_8018AE40[D_801EE538 * 12]; + D_801EFBEA = b1; + D_801EFCA4 = b1; + b2 = D_8018AE44[D_801EE538 * 12]; + D_801EFBC8 = b2; + D_801EFBE9 = b2; + + (*(S9 *)&D_801EFBE0) = ((S9 *)D_8018AE04)[D_801EE538]; + (*(S9 *)&D_801EFC80) = *(S9 *)(&D_801EFBC8 + 0x18); /* same addr as (*(S9 *)&D_801EFBE0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EFCA8 = 1; + D_801EE54C = -1; + D_801EE548 = 0; + D_801EE544 = -1; + D_801EE530 = 0; + D_801EE53C = 0; + D_801EE540 = 0; + + if ((D_801EE550 & 2) && (D_801EE538 == 4)) { + s0v = (*(s32 * *)&D_801EE520)[18]; + t9v = (*(s32 * *)&D_801EE520)[19]; + t8v = (*(s32 * *)&D_801EE520)[20]; + } else { + s32 *p = (s32 *)(D_801EE538 * 12 + (s32) (*(s32 * *)&D_801EE520)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801EE52C) = arg0; + if (arg0 != 0) { + if (D_801EE558 != 0) { + s32 *p = (s32 *)(D_801EE538 * 12 + (s32) (*(s32 * *)&D_801EE528)); + D_801EE55C = p[0]; + D_801EE560 = p[1]; + D_801EE564 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8013F350.c b/src/ov_SC02_017/ov_SC02_017_jr_8013F350.c index ded8dc362..e4f4dde67 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8013F350.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8018AC6C[]; extern u8 D_8018AD68[]; extern u8 D_8018ADE8[]; extern u8 D_8018ACC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c b/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c index a343d27e7..d58ba46af 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8018AC6C[]; extern u8 D_8018AD68[]; extern u8 D_8018ADE8[]; extern u8 D_8018ACC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_017/ov_SC02_017_jr_80140608.c b/src/ov_SC02_017/ov_SC02_017_jr_80140608.c index 2a34d4ee3..a59533878 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_80140608.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8018AC6C[]; extern u8 D_8018AD68[]; extern u8 D_8018ADE8[]; extern u8 D_8018ACC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_021/ov_SC02_021_jr_801380E0.c b/src/ov_SC02_021/ov_SC02_021_jr_801380E0.c index a5dd8b207..98b223788 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_801380E0.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8018035C[]; extern u8 D_801803DC[]; extern u8 D_801802B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80191AC0; +extern s32 D_80191AA8; + + +extern u8 D_8019382A; +extern u8 D_8019389E; +extern u8 D_80193752; +extern u8 D_8019380C; +extern u8 D_80193730; +extern u8 D_80193751; + + +extern s32 D_80193810; +extern s32 D_80191ABC; +extern s32 D_80191AB8; +extern s32 D_80191AA0; +extern s32 D_80191AAC; +extern s32 D_80191AB0; + +extern void *D_80191A90; +extern s32 D_80191AC8; +extern void *D_80191A98; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801803F8[]; + extern Rec12 D_80180430[]; + extern u8 D_80078EAF; + extern u8 D_801937E8; + extern s32 D_80191AB4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180434[]; + extern u8 D_80180438[]; + extern unsigned char D_80193748; + extern s16 *D_80191A9C; + extern s32 D_80191ACC; + extern s32 D_80191AD0; + extern s32 D_80191AD4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80191AC0 & 1)) { + D_80191AA8 = 1; + } else { + D_80191AA8 = D_80078EAF; + } + + b0 = ((u8 *)D_80180430)[D_80191AA8 * 12]; + D_8019382A = b0; + D_8019389E = b0; + b1 = D_80180434[D_80191AA8 * 12]; + D_80193752 = b1; + D_8019380C = b1; + b2 = D_80180438[D_80191AA8 * 12]; + D_80193730 = b2; + D_80193751 = b2; + + (*(S9 *)&D_80193748) = ((S9 *)D_801803F8)[D_80191AA8]; + (*(S9 *)&D_801937E8) = *(S9 *)(&D_80193730 + 0x18); /* same addr as (*(S9 *)&D_80193748); distinct sym defeats cse, keeps %hi/%lo */ + + D_80193810 = 1; + D_80191ABC = -1; + D_80191AB8 = 0; + D_80191AB4 = -1; + D_80191AA0 = 0; + D_80191AAC = 0; + D_80191AB0 = 0; + + if ((D_80191AC0 & 2) && (D_80191AA8 == 4)) { + s0v = (*(s32 * *)&D_80191A90)[18]; + t9v = (*(s32 * *)&D_80191A90)[19]; + t8v = (*(s32 * *)&D_80191A90)[20]; + } else { + s32 *p = (s32 *)(D_80191AA8 * 12 + (s32) (*(s32 * *)&D_80191A90)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80191A9C) = arg0; + if (arg0 != 0) { + if (D_80191AC8 != 0) { + s32 *p = (s32 *)(D_80191AA8 * 12 + (s32) (*(s32 * *)&D_80191A98)); + D_80191ACC = p[0]; + D_80191AD0 = p[1]; + D_80191AD4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8013F350.c b/src/ov_SC02_021/ov_SC02_021_jr_8013F350.c index cb2d46fc8..c94250e79 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8013F350.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80180260[]; extern u8 D_8018035C[]; extern u8 D_801803DC[]; extern u8 D_801802B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c b/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c index 8604c5ea6..885f93d25 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80180260[]; extern u8 D_8018035C[]; extern u8 D_801803DC[]; extern u8 D_801802B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_021/ov_SC02_021_jr_80140608.c b/src/ov_SC02_021/ov_SC02_021_jr_80140608.c index 3ac210ec1..5c29ca8b5 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_80140608.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80180260[]; extern u8 D_8018035C[]; extern u8 D_801803DC[]; extern u8 D_801802B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_026/ov_SC02_026_jr_801380E0.c b/src/ov_SC02_026/ov_SC02_026_jr_801380E0.c index af38fbadd..9c48dd30d 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_801380E0.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_801869B0[]; extern u8 D_80186A30[]; extern u8 D_80186908[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CEF00; +extern s32 D_801CEEE8; + + +extern u8 D_801D024A; +extern u8 D_801D02BE; +extern u8 D_801D0172; +extern u8 D_801D022C; +extern u8 D_801D0150; +extern u8 D_801D0171; + + +extern s32 D_801D0230; +extern s32 D_801CEEFC; +extern s32 D_801CEEF8; +extern s32 D_801CEEE0; +extern s32 D_801CEEEC; +extern s32 D_801CEEF0; + +extern void *D_801CEED0; +extern s32 D_801CEF08; +extern void *D_801CEED8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186A4C[]; + extern Rec12 D_80186A84[]; + extern u8 D_80078EAF; + extern u8 D_801D0208; + extern s32 D_801CEEF4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186A88[]; + extern u8 D_80186A8C[]; + extern unsigned char D_801D0168; + extern s16 *D_801CEEDC; + extern s32 D_801CEF0C; + extern s32 D_801CEF10; + extern s32 D_801CEF14; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CEF00 & 1)) { + D_801CEEE8 = 1; + } else { + D_801CEEE8 = D_80078EAF; + } + + b0 = ((u8 *)D_80186A84)[D_801CEEE8 * 12]; + D_801D024A = b0; + D_801D02BE = b0; + b1 = D_80186A88[D_801CEEE8 * 12]; + D_801D0172 = b1; + D_801D022C = b1; + b2 = D_80186A8C[D_801CEEE8 * 12]; + D_801D0150 = b2; + D_801D0171 = b2; + + (*(S9 *)&D_801D0168) = ((S9 *)D_80186A4C)[D_801CEEE8]; + (*(S9 *)&D_801D0208) = *(S9 *)(&D_801D0150 + 0x18); /* same addr as (*(S9 *)&D_801D0168); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D0230 = 1; + D_801CEEFC = -1; + D_801CEEF8 = 0; + D_801CEEF4 = -1; + D_801CEEE0 = 0; + D_801CEEEC = 0; + D_801CEEF0 = 0; + + if ((D_801CEF00 & 2) && (D_801CEEE8 == 4)) { + s0v = (*(s32 * *)&D_801CEED0)[18]; + t9v = (*(s32 * *)&D_801CEED0)[19]; + t8v = (*(s32 * *)&D_801CEED0)[20]; + } else { + s32 *p = (s32 *)(D_801CEEE8 * 12 + (s32) (*(s32 * *)&D_801CEED0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CEEDC) = arg0; + if (arg0 != 0) { + if (D_801CEF08 != 0) { + s32 *p = (s32 *)(D_801CEEE8 * 12 + (s32) (*(s32 * *)&D_801CEED8)); + D_801CEF0C = p[0]; + D_801CEF10 = p[1]; + D_801CEF14 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8013F350.c b/src/ov_SC02_026/ov_SC02_026_jr_8013F350.c index 8e5e812a1..85bf04938 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8013F350.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_801868B4[]; extern u8 D_801869B0[]; extern u8 D_80186A30[]; extern u8 D_80186908[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c b/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c index 8bf54fcba..ab71659da 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_801868B4[]; extern u8 D_801869B0[]; extern u8 D_80186A30[]; extern u8 D_80186908[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_026/ov_SC02_026_jr_80140608.c b/src/ov_SC02_026/ov_SC02_026_jr_80140608.c index 5f92b3f8d..aebe7651d 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_80140608.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_801868B4[]; extern u8 D_801869B0[]; extern u8 D_80186A30[]; extern u8 D_80186908[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_027/ov_SC02_027_jr_801380E0.c b/src/ov_SC02_027/ov_SC02_027_jr_801380E0.c index 65b865c44..f05ec05d6 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_801380E0.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8018BAD4[]; extern u8 D_8018BB54[]; extern u8 D_8018BA2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D8C70; +extern s32 D_801D8C58; + + +extern u8 D_801DA9CA; +extern u8 D_801DAA3E; +extern u8 D_801DA8F2; +extern u8 D_801DA9AC; +extern u8 D_801DA8D0; +extern u8 D_801DA8F1; + + +extern s32 D_801DA9B0; +extern s32 D_801D8C6C; +extern s32 D_801D8C68; +extern s32 D_801D8C50; +extern s32 D_801D8C5C; +extern s32 D_801D8C60; + +extern void *D_801D8C40; +extern s32 D_801D8C78; +extern void *D_801D8C48; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018BB70[]; + extern Rec12 D_8018BBA8[]; + extern u8 D_80078EAF; + extern u8 D_801DA988; + extern s32 D_801D8C64; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018BBAC[]; + extern u8 D_8018BBB0[]; + extern unsigned char D_801DA8E8; + extern s16 *D_801D8C4C; + extern s32 D_801D8C7C; + extern s32 D_801D8C80; + extern s32 D_801D8C84; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D8C70 & 1)) { + D_801D8C58 = 1; + } else { + D_801D8C58 = D_80078EAF; + } + + b0 = ((u8 *)D_8018BBA8)[D_801D8C58 * 12]; + D_801DA9CA = b0; + D_801DAA3E = b0; + b1 = D_8018BBAC[D_801D8C58 * 12]; + D_801DA8F2 = b1; + D_801DA9AC = b1; + b2 = D_8018BBB0[D_801D8C58 * 12]; + D_801DA8D0 = b2; + D_801DA8F1 = b2; + + (*(S9 *)&D_801DA8E8) = ((S9 *)D_8018BB70)[D_801D8C58]; + (*(S9 *)&D_801DA988) = *(S9 *)(&D_801DA8D0 + 0x18); /* same addr as (*(S9 *)&D_801DA8E8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801DA9B0 = 1; + D_801D8C6C = -1; + D_801D8C68 = 0; + D_801D8C64 = -1; + D_801D8C50 = 0; + D_801D8C5C = 0; + D_801D8C60 = 0; + + if ((D_801D8C70 & 2) && (D_801D8C58 == 4)) { + s0v = (*(s32 * *)&D_801D8C40)[18]; + t9v = (*(s32 * *)&D_801D8C40)[19]; + t8v = (*(s32 * *)&D_801D8C40)[20]; + } else { + s32 *p = (s32 *)(D_801D8C58 * 12 + (s32) (*(s32 * *)&D_801D8C40)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D8C4C) = arg0; + if (arg0 != 0) { + if (D_801D8C78 != 0) { + s32 *p = (s32 *)(D_801D8C58 * 12 + (s32) (*(s32 * *)&D_801D8C48)); + D_801D8C7C = p[0]; + D_801D8C80 = p[1]; + D_801D8C84 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8013F350.c b/src/ov_SC02_027/ov_SC02_027_jr_8013F350.c index eada06cfe..5bf615377 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8013F350.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8018B9D8[]; extern u8 D_8018BAD4[]; extern u8 D_8018BB54[]; extern u8 D_8018BA2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c b/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c index 91c4fd4f0..5d9067908 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8018B9D8[]; extern u8 D_8018BAD4[]; extern u8 D_8018BB54[]; extern u8 D_8018BA2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_027/ov_SC02_027_jr_80140608.c b/src/ov_SC02_027/ov_SC02_027_jr_80140608.c index ee392798f..489a2cd9b 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_80140608.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8018B9D8[]; extern u8 D_8018BAD4[]; extern u8 D_8018BB54[]; extern u8 D_8018BA2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_028/ov_SC02_028_jr_801380E0.c b/src/ov_SC02_028/ov_SC02_028_jr_801380E0.c index 358b7c37a..0d7dd4348 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_801380E0.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_8018BCD8[]; extern u8 D_8018BD58[]; extern u8 D_8018BC30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D1C10; +extern s32 D_801D1BF8; + + +extern u8 D_801D35CA; +extern u8 D_801D363E; +extern u8 D_801D34F2; +extern u8 D_801D35AC; +extern u8 D_801D34D0; +extern u8 D_801D34F1; + + +extern s32 D_801D35B0; +extern s32 D_801D1C0C; +extern s32 D_801D1C08; +extern s32 D_801D1BF0; +extern s32 D_801D1BFC; +extern s32 D_801D1C00; + +extern void *D_801D1BE0; +extern s32 D_801D1C18; +extern void *D_801D1BE8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018BD74[]; + extern Rec12 D_8018BDAC[]; + extern u8 D_80078EAF; + extern u8 D_801D3588; + extern s32 D_801D1C04; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018BDB0[]; + extern u8 D_8018BDB4[]; + extern unsigned char D_801D34E8; + extern s16 *D_801D1BEC; + extern s32 D_801D1C1C; + extern s32 D_801D1C20; + extern s32 D_801D1C24; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D1C10 & 1)) { + D_801D1BF8 = 1; + } else { + D_801D1BF8 = D_80078EAF; + } + + b0 = ((u8 *)D_8018BDAC)[D_801D1BF8 * 12]; + D_801D35CA = b0; + D_801D363E = b0; + b1 = D_8018BDB0[D_801D1BF8 * 12]; + D_801D34F2 = b1; + D_801D35AC = b1; + b2 = D_8018BDB4[D_801D1BF8 * 12]; + D_801D34D0 = b2; + D_801D34F1 = b2; + + (*(S9 *)&D_801D34E8) = ((S9 *)D_8018BD74)[D_801D1BF8]; + (*(S9 *)&D_801D3588) = *(S9 *)(&D_801D34D0 + 0x18); /* same addr as (*(S9 *)&D_801D34E8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D35B0 = 1; + D_801D1C0C = -1; + D_801D1C08 = 0; + D_801D1C04 = -1; + D_801D1BF0 = 0; + D_801D1BFC = 0; + D_801D1C00 = 0; + + if ((D_801D1C10 & 2) && (D_801D1BF8 == 4)) { + s0v = (*(s32 * *)&D_801D1BE0)[18]; + t9v = (*(s32 * *)&D_801D1BE0)[19]; + t8v = (*(s32 * *)&D_801D1BE0)[20]; + } else { + s32 *p = (s32 *)(D_801D1BF8 * 12 + (s32) (*(s32 * *)&D_801D1BE0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D1BEC) = arg0; + if (arg0 != 0) { + if (D_801D1C18 != 0) { + s32 *p = (s32 *)(D_801D1BF8 * 12 + (s32) (*(s32 * *)&D_801D1BE8)); + D_801D1C1C = p[0]; + D_801D1C20 = p[1]; + D_801D1C24 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8013F350.c b/src/ov_SC02_028/ov_SC02_028_jr_8013F350.c index f837ddaa1..80ec99a36 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8013F350.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_8018BBDC[]; extern u8 D_8018BCD8[]; extern u8 D_8018BD58[]; extern u8 D_8018BC30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c b/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c index 1348916cb..11c1f39de 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_8018BBDC[]; extern u8 D_8018BCD8[]; extern u8 D_8018BD58[]; extern u8 D_8018BC30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_028/ov_SC02_028_jr_80140608.c b/src/ov_SC02_028/ov_SC02_028_jr_80140608.c index 2fcb2aa97..181d17a01 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_80140608.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_8018BBDC[]; extern u8 D_8018BCD8[]; extern u8 D_8018BD58[]; extern u8 D_8018BC30[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_031/ov_SC02_031_jr_801380E0.c b/src/ov_SC02_031/ov_SC02_031_jr_801380E0.c index b689c8ebe..b8be6070f 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_801380E0.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_80185504[]; extern u8 D_80185584[]; extern u8 D_8018545C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B6388; +extern s32 D_801B6370; + + +extern u8 D_801B7A9A; +extern u8 D_801B7B0E; +extern u8 D_801B79C2; +extern u8 D_801B7A7C; +extern u8 D_801B79A0; +extern u8 D_801B79C1; + + +extern s32 D_801B7A80; +extern s32 D_801B6384; +extern s32 D_801B6380; +extern s32 D_801B6368; +extern s32 D_801B6374; +extern s32 D_801B6378; + +extern void *D_801B6358; +extern s32 D_801B6390; +extern void *D_801B6360; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801855A0[]; + extern Rec12 D_801855D8[]; + extern u8 D_80078EAF; + extern u8 D_801B7A58; + extern s32 D_801B637C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801855DC[]; + extern u8 D_801855E0[]; + extern unsigned char D_801B79B8; + extern s16 *D_801B6364; + extern s32 D_801B6394; + extern s32 D_801B6398; + extern s32 D_801B639C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B6388 & 1)) { + D_801B6370 = 1; + } else { + D_801B6370 = D_80078EAF; + } + + b0 = ((u8 *)D_801855D8)[D_801B6370 * 12]; + D_801B7A9A = b0; + D_801B7B0E = b0; + b1 = D_801855DC[D_801B6370 * 12]; + D_801B79C2 = b1; + D_801B7A7C = b1; + b2 = D_801855E0[D_801B6370 * 12]; + D_801B79A0 = b2; + D_801B79C1 = b2; + + (*(S9 *)&D_801B79B8) = ((S9 *)D_801855A0)[D_801B6370]; + (*(S9 *)&D_801B7A58) = *(S9 *)(&D_801B79A0 + 0x18); /* same addr as (*(S9 *)&D_801B79B8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B7A80 = 1; + D_801B6384 = -1; + D_801B6380 = 0; + D_801B637C = -1; + D_801B6368 = 0; + D_801B6374 = 0; + D_801B6378 = 0; + + if ((D_801B6388 & 2) && (D_801B6370 == 4)) { + s0v = (*(s32 * *)&D_801B6358)[18]; + t9v = (*(s32 * *)&D_801B6358)[19]; + t8v = (*(s32 * *)&D_801B6358)[20]; + } else { + s32 *p = (s32 *)(D_801B6370 * 12 + (s32) (*(s32 * *)&D_801B6358)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B6364) = arg0; + if (arg0 != 0) { + if (D_801B6390 != 0) { + s32 *p = (s32 *)(D_801B6370 * 12 + (s32) (*(s32 * *)&D_801B6360)); + D_801B6394 = p[0]; + D_801B6398 = p[1]; + D_801B639C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8013F350.c b/src/ov_SC02_031/ov_SC02_031_jr_8013F350.c index e77b6af98..95037796f 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8013F350.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80185408[]; extern u8 D_80185504[]; extern u8 D_80185584[]; extern u8 D_8018545C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c b/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c index 9c2c610f3..a69344466 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80185408[]; extern u8 D_80185504[]; extern u8 D_80185584[]; extern u8 D_8018545C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_031/ov_SC02_031_jr_80140608.c b/src/ov_SC02_031/ov_SC02_031_jr_80140608.c index 255c945cb..6bfed235a 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_80140608.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80185408[]; extern u8 D_80185504[]; extern u8 D_80185584[]; extern u8 D_8018545C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_035/ov_SC02_035_jr_801380E0.c b/src/ov_SC02_035/ov_SC02_035_jr_801380E0.c index 403e3d821..d9d013307 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_801380E0.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_801380E0.c @@ -1901,7 +1901,7 @@ extern u8 D_80184D64[]; extern u8 D_80184DE4[]; extern u8 D_80184CBC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1946,7 +1946,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801BD6B8; +extern s32 D_801BD6A0; + + +extern u8 D_801BE9D2; +extern u8 D_801BEA46; +extern u8 D_801BE8FA; +extern u8 D_801BE9B4; +extern u8 D_801BE8D8; +extern u8 D_801BE8F9; + + +extern s32 D_801BE9B8; +extern s32 D_801BD6B4; +extern s32 D_801BD6B0; +extern s32 D_801BD698; +extern s32 D_801BD6A4; +extern s32 D_801BD6A8; + +extern void *D_801BD688; +extern s32 D_801BD6C0; +extern void *D_801BD690; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80184E00[]; + extern Rec12 D_80184E38[]; + extern u8 D_80078EAF; + extern u8 D_801BE990; + extern s32 D_801BD6AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80184E3C[]; + extern u8 D_80184E40[]; + extern unsigned char D_801BE8F0; + extern s16 *D_801BD694; + extern s32 D_801BD6C4; + extern s32 D_801BD6C8; + extern s32 D_801BD6CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801BD6B8 & 1)) { + D_801BD6A0 = 1; + } else { + D_801BD6A0 = D_80078EAF; + } + + b0 = ((u8 *)D_80184E38)[D_801BD6A0 * 12]; + D_801BE9D2 = b0; + D_801BEA46 = b0; + b1 = D_80184E3C[D_801BD6A0 * 12]; + D_801BE8FA = b1; + D_801BE9B4 = b1; + b2 = D_80184E40[D_801BD6A0 * 12]; + D_801BE8D8 = b2; + D_801BE8F9 = b2; + + (*(S9 *)&D_801BE8F0) = ((S9 *)D_80184E00)[D_801BD6A0]; + (*(S9 *)&D_801BE990) = *(S9 *)(&D_801BE8D8 + 0x18); /* same addr as (*(S9 *)&D_801BE8F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801BE9B8 = 1; + D_801BD6B4 = -1; + D_801BD6B0 = 0; + D_801BD6AC = -1; + D_801BD698 = 0; + D_801BD6A4 = 0; + D_801BD6A8 = 0; + + if ((D_801BD6B8 & 2) && (D_801BD6A0 == 4)) { + s0v = (*(s32 * *)&D_801BD688)[18]; + t9v = (*(s32 * *)&D_801BD688)[19]; + t8v = (*(s32 * *)&D_801BD688)[20]; + } else { + s32 *p = (s32 *)(D_801BD6A0 * 12 + (s32) (*(s32 * *)&D_801BD688)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801BD694) = arg0; + if (arg0 != 0) { + if (D_801BD6C0 != 0) { + s32 *p = (s32 *)(D_801BD6A0 * 12 + (s32) (*(s32 * *)&D_801BD690)); + D_801BD6C4 = p[0]; + D_801BD6C8 = p[1]; + D_801BD6CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8013F350.c b/src/ov_SC02_035/ov_SC02_035_jr_8013F350.c index f4ad91f4b..70c416e32 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8013F350.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80184C68[]; extern u8 D_80184D64[]; extern u8 D_80184DE4[]; extern u8 D_80184CBC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c b/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c index 023f1ba77..aa401adb3 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8013FFD8.c @@ -819,7 +819,7 @@ extern u8 D_80184C68[]; extern u8 D_80184D64[]; extern u8 D_80184DE4[]; extern u8 D_80184CBC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_035/ov_SC02_035_jr_80140608.c b/src/ov_SC02_035/ov_SC02_035_jr_80140608.c index af7c5cbb1..a53f069b3 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_80140608.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80184C68[]; extern u8 D_80184D64[]; extern u8 D_80184DE4[]; extern u8 D_80184CBC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_039/ov_SC02_039_jr_801380E0.c b/src/ov_SC02_039/ov_SC02_039_jr_801380E0.c index 815ccd791..392682388 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_801380E0.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F990[]; extern u8 D_8017FA10[]; extern u8 D_8017F8E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019FA68; +extern s32 D_8019FA50; + + +extern u8 D_801A0D8A; +extern u8 D_801A0DFE; +extern u8 D_801A0CB2; +extern u8 D_801A0D6C; +extern u8 D_801A0C90; +extern u8 D_801A0CB1; + + +extern s32 D_801A0D70; +extern s32 D_8019FA64; +extern s32 D_8019FA60; +extern s32 D_8019FA48; +extern s32 D_8019FA54; +extern s32 D_8019FA58; + +extern void *D_8019FA38; +extern s32 D_8019FA70; +extern void *D_8019FA40; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FA2C[]; + extern Rec12 D_8017FA64[]; + extern u8 D_80078EAF; + extern u8 D_801A0D48; + extern s32 D_8019FA5C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FA68[]; + extern u8 D_8017FA6C[]; + extern unsigned char D_801A0CA8; + extern s16 *D_8019FA44; + extern s32 D_8019FA74; + extern s32 D_8019FA78; + extern s32 D_8019FA7C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019FA68 & 1)) { + D_8019FA50 = 1; + } else { + D_8019FA50 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FA64)[D_8019FA50 * 12]; + D_801A0D8A = b0; + D_801A0DFE = b0; + b1 = D_8017FA68[D_8019FA50 * 12]; + D_801A0CB2 = b1; + D_801A0D6C = b1; + b2 = D_8017FA6C[D_8019FA50 * 12]; + D_801A0C90 = b2; + D_801A0CB1 = b2; + + (*(S9 *)&D_801A0CA8) = ((S9 *)D_8017FA2C)[D_8019FA50]; + (*(S9 *)&D_801A0D48) = *(S9 *)(&D_801A0C90 + 0x18); /* same addr as (*(S9 *)&D_801A0CA8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A0D70 = 1; + D_8019FA64 = -1; + D_8019FA60 = 0; + D_8019FA5C = -1; + D_8019FA48 = 0; + D_8019FA54 = 0; + D_8019FA58 = 0; + + if ((D_8019FA68 & 2) && (D_8019FA50 == 4)) { + s0v = (*(s32 * *)&D_8019FA38)[18]; + t9v = (*(s32 * *)&D_8019FA38)[19]; + t8v = (*(s32 * *)&D_8019FA38)[20]; + } else { + s32 *p = (s32 *)(D_8019FA50 * 12 + (s32) (*(s32 * *)&D_8019FA38)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019FA44) = arg0; + if (arg0 != 0) { + if (D_8019FA70 != 0) { + s32 *p = (s32 *)(D_8019FA50 * 12 + (s32) (*(s32 * *)&D_8019FA40)); + D_8019FA74 = p[0]; + D_8019FA78 = p[1]; + D_8019FA7C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8013F350.c b/src/ov_SC02_039/ov_SC02_039_jr_8013F350.c index a6fe82fa3..bbbc1ec3b 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8013F350.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F894[]; extern u8 D_8017F990[]; extern u8 D_8017FA10[]; extern u8 D_8017F8E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c b/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c index 14c26b516..67a2027b6 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F894[]; extern u8 D_8017F990[]; extern u8 D_8017FA10[]; extern u8 D_8017F8E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_039/ov_SC02_039_jr_80140608.c b/src/ov_SC02_039/ov_SC02_039_jr_80140608.c index 82cc87c66..909500ce0 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_80140608.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F894[]; extern u8 D_8017F990[]; extern u8 D_8017FA10[]; extern u8 D_8017F8E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_041/ov_SC02_041_jr_801380E0.c b/src/ov_SC02_041/ov_SC02_041_jr_801380E0.c index ab02ee0f7..b9fb5c933 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_801380E0.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185660[]; extern u8 D_801856E0[]; extern u8 D_801855B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B7DE0; +extern s32 D_801B7DC8; + + +extern u8 D_801B9662; +extern u8 D_801B96D6; +extern u8 D_801B958A; +extern u8 D_801B9644; +extern u8 D_801B9568; +extern u8 D_801B9589; + + +extern s32 D_801B9648; +extern s32 D_801B7DDC; +extern s32 D_801B7DD8; +extern s32 D_801B7DC0; +extern s32 D_801B7DCC; +extern s32 D_801B7DD0; + +extern void *D_801B7DB0; +extern s32 D_801B7DE8; +extern void *D_801B7DB8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801856FC[]; + extern Rec12 D_80185734[]; + extern u8 D_80078EAF; + extern u8 D_801B9620; + extern s32 D_801B7DD4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185738[]; + extern u8 D_8018573C[]; + extern unsigned char D_801B9580; + extern s16 *D_801B7DBC; + extern s32 D_801B7DEC; + extern s32 D_801B7DF0; + extern s32 D_801B7DF4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B7DE0 & 1)) { + D_801B7DC8 = 1; + } else { + D_801B7DC8 = D_80078EAF; + } + + b0 = ((u8 *)D_80185734)[D_801B7DC8 * 12]; + D_801B9662 = b0; + D_801B96D6 = b0; + b1 = D_80185738[D_801B7DC8 * 12]; + D_801B958A = b1; + D_801B9644 = b1; + b2 = D_8018573C[D_801B7DC8 * 12]; + D_801B9568 = b2; + D_801B9589 = b2; + + (*(S9 *)&D_801B9580) = ((S9 *)D_801856FC)[D_801B7DC8]; + (*(S9 *)&D_801B9620) = *(S9 *)(&D_801B9568 + 0x18); /* same addr as (*(S9 *)&D_801B9580); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B9648 = 1; + D_801B7DDC = -1; + D_801B7DD8 = 0; + D_801B7DD4 = -1; + D_801B7DC0 = 0; + D_801B7DCC = 0; + D_801B7DD0 = 0; + + if ((D_801B7DE0 & 2) && (D_801B7DC8 == 4)) { + s0v = (*(s32 * *)&D_801B7DB0)[18]; + t9v = (*(s32 * *)&D_801B7DB0)[19]; + t8v = (*(s32 * *)&D_801B7DB0)[20]; + } else { + s32 *p = (s32 *)(D_801B7DC8 * 12 + (s32) (*(s32 * *)&D_801B7DB0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B7DBC) = arg0; + if (arg0 != 0) { + if (D_801B7DE8 != 0) { + s32 *p = (s32 *)(D_801B7DC8 * 12 + (s32) (*(s32 * *)&D_801B7DB8)); + D_801B7DEC = p[0]; + D_801B7DF0 = p[1]; + D_801B7DF4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8013F350.c b/src/ov_SC02_041/ov_SC02_041_jr_8013F350.c index 96a150917..1b7106b54 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8013F350.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185564[]; extern u8 D_80185660[]; extern u8 D_801856E0[]; extern u8 D_801855B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c b/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c index b87b52b2e..4b6704668 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185564[]; extern u8 D_80185660[]; extern u8 D_801856E0[]; extern u8 D_801855B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC02_041/ov_SC02_041_jr_80140608.c b/src/ov_SC02_041/ov_SC02_041_jr_80140608.c index fb99cfbc4..c080d7778 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_80140608.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185564[]; extern u8 D_80185660[]; extern u8 D_801856E0[]; extern u8 D_801855B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_003/ov_SC03_003_jr_801380E0.c b/src/ov_SC03_003/ov_SC03_003_jr_801380E0.c index b31f4e653..730827b48 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_801380E0.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017FB58[]; extern u8 D_8017FBD8[]; extern u8 D_8017FAB0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018E7E8; +extern s32 D_8018E7D0; + + +extern u8 D_8018FB02; +extern u8 D_8018FB7C; +extern u8 D_8018FA2A; +extern u8 D_8018FAE4; +extern u8 D_8018FA08; +extern u8 D_8018FA29; + + +extern s32 D_8018FAE8; +extern s32 D_8018E7E4; +extern s32 D_8018E7E0; +extern s32 D_8018E7C8; +extern s32 D_8018E7D4; +extern s32 D_8018E7D8; + +extern void *D_8018E7B8; +extern s32 D_8018E7F0; +extern void *D_8018E7C0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FBF4[]; + extern Rec12 D_8017FC2C[]; + extern u8 D_80078EAF; + extern u8 D_8018FAC0; + extern s32 D_8018E7DC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FC30[]; + extern u8 D_8017FC34[]; + extern unsigned char D_8018FA20; + extern s16 *D_8018E7C4; + extern s32 D_8018E7F4; + extern s32 D_8018E7F8; + extern s32 D_8018E7FC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018E7E8 & 1)) { + D_8018E7D0 = 1; + } else { + D_8018E7D0 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FC2C)[D_8018E7D0 * 12]; + D_8018FB02 = b0; + D_8018FB7C = b0; + b1 = D_8017FC30[D_8018E7D0 * 12]; + D_8018FA2A = b1; + D_8018FAE4 = b1; + b2 = D_8017FC34[D_8018E7D0 * 12]; + D_8018FA08 = b2; + D_8018FA29 = b2; + + (*(S9 *)&D_8018FA20) = ((S9 *)D_8017FBF4)[D_8018E7D0]; + (*(S9 *)&D_8018FAC0) = *(S9 *)(&D_8018FA08 + 0x18); /* same addr as (*(S9 *)&D_8018FA20); distinct sym defeats cse, keeps %hi/%lo */ + + D_8018FAE8 = 1; + D_8018E7E4 = -1; + D_8018E7E0 = 0; + D_8018E7DC = -1; + D_8018E7C8 = 0; + D_8018E7D4 = 0; + D_8018E7D8 = 0; + + if ((D_8018E7E8 & 2) && (D_8018E7D0 == 4)) { + s0v = (*(s32 * *)&D_8018E7B8)[18]; + t9v = (*(s32 * *)&D_8018E7B8)[19]; + t8v = (*(s32 * *)&D_8018E7B8)[20]; + } else { + s32 *p = (s32 *)(D_8018E7D0 * 12 + (s32) (*(s32 * *)&D_8018E7B8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018E7C4) = arg0; + if (arg0 != 0) { + if (D_8018E7F0 != 0) { + s32 *p = (s32 *)(D_8018E7D0 * 12 + (s32) (*(s32 * *)&D_8018E7C0)); + D_8018E7F4 = p[0]; + D_8018E7F8 = p[1]; + D_8018E7FC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8013F350.c b/src/ov_SC03_003/ov_SC03_003_jr_8013F350.c index bc34c6e6b..d46414b00 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8013F350.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017FA5C[]; extern u8 D_8017FB58[]; extern u8 D_8017FBD8[]; extern u8 D_8017FAB0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c b/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c index f9396e176..c7a1c44b0 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017FA5C[]; extern u8 D_8017FB58[]; extern u8 D_8017FBD8[]; extern u8 D_8017FAB0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_003/ov_SC03_003_jr_80140608.c b/src/ov_SC03_003/ov_SC03_003_jr_80140608.c index c4fc5e1c1..346830092 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_80140608.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017FA5C[]; extern u8 D_8017FB58[]; extern u8 D_8017FBD8[]; extern u8 D_8017FAB0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_006/ov_SC03_006_jr_801380E0.c b/src/ov_SC03_006/ov_SC03_006_jr_801380E0.c index c82df3527..2caef7544 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_801380E0.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_8018CE74[]; extern u8 D_8018CEF4[]; extern u8 D_8018CDCC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801F6160; +extern s32 D_801F6148; + + +extern u8 D_801F7842; +extern u8 D_801F78B6; +extern u8 D_801F776A; +extern u8 D_801F7824; +extern u8 D_801F7748; +extern u8 D_801F7769; + + +extern s32 D_801F7828; +extern s32 D_801F615C; +extern s32 D_801F6158; +extern s32 D_801F6140; +extern s32 D_801F614C; +extern s32 D_801F6150; + +extern void *D_801F6130; +extern s32 D_801F6168; +extern void *D_801F6138; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018CF10[]; + extern Rec12 D_8018CF48[]; + extern u8 D_80078EAF; + extern u8 D_801F7800; + extern s32 D_801F6154; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018CF4C[]; + extern u8 D_8018CF50[]; + extern unsigned char D_801F7760; + extern s16 *D_801F613C; + extern s32 D_801F616C; + extern s32 D_801F6170; + extern s32 D_801F6174; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801F6160 & 1)) { + D_801F6148 = 1; + } else { + D_801F6148 = D_80078EAF; + } + + b0 = ((u8 *)D_8018CF48)[D_801F6148 * 12]; + D_801F7842 = b0; + D_801F78B6 = b0; + b1 = D_8018CF4C[D_801F6148 * 12]; + D_801F776A = b1; + D_801F7824 = b1; + b2 = D_8018CF50[D_801F6148 * 12]; + D_801F7748 = b2; + D_801F7769 = b2; + + (*(S9 *)&D_801F7760) = ((S9 *)D_8018CF10)[D_801F6148]; + (*(S9 *)&D_801F7800) = *(S9 *)(&D_801F7748 + 0x18); /* same addr as (*(S9 *)&D_801F7760); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F7828 = 1; + D_801F615C = -1; + D_801F6158 = 0; + D_801F6154 = -1; + D_801F6140 = 0; + D_801F614C = 0; + D_801F6150 = 0; + + if ((D_801F6160 & 2) && (D_801F6148 == 4)) { + s0v = (*(s32 * *)&D_801F6130)[18]; + t9v = (*(s32 * *)&D_801F6130)[19]; + t8v = (*(s32 * *)&D_801F6130)[20]; + } else { + s32 *p = (s32 *)(D_801F6148 * 12 + (s32) (*(s32 * *)&D_801F6130)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801F613C) = arg0; + if (arg0 != 0) { + if (D_801F6168 != 0) { + s32 *p = (s32 *)(D_801F6148 * 12 + (s32) (*(s32 * *)&D_801F6138)); + D_801F616C = p[0]; + D_801F6170 = p[1]; + D_801F6174 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8013F350.c b/src/ov_SC03_006/ov_SC03_006_jr_8013F350.c index ac629189c..375d8447f 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8013F350.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8018CD78[]; extern u8 D_8018CE74[]; extern u8 D_8018CEF4[]; extern u8 D_8018CDCC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c b/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c index 2559dd8ac..d1cfe60d0 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8018CD78[]; extern u8 D_8018CE74[]; extern u8 D_8018CEF4[]; extern u8 D_8018CDCC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_006/ov_SC03_006_jr_80140608.c b/src/ov_SC03_006/ov_SC03_006_jr_80140608.c index be7d0f841..b23d44513 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_80140608.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8018CD78[]; extern u8 D_8018CE74[]; extern u8 D_8018CEF4[]; extern u8 D_8018CDCC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_007/ov_SC03_007_jr_801380E0.c b/src/ov_SC03_007/ov_SC03_007_jr_801380E0.c index bcbd95f0e..573421852 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_801380E0.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80187C6C[]; extern u8 D_80187CEC[]; extern u8 D_80187BC4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E8AB8; +extern s32 D_801E8AA0; + + +extern u8 D_801EB252; +extern u8 D_801EB2C6; +extern u8 D_801EB17A; +extern u8 D_801EB234; +extern u8 D_801EB158; +extern u8 D_801EB179; + + +extern s32 D_801EB238; +extern s32 D_801E8AB4; +extern s32 D_801E8AB0; +extern s32 D_801E8A98; +extern s32 D_801E8AA4; +extern s32 D_801E8AA8; + +extern void *D_801E8A88; +extern s32 D_801E8AC0; +extern void *D_801E8A90; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80187D08[]; + extern Rec12 D_80187D40[]; + extern u8 D_80078EAF; + extern u8 D_801EB210; + extern s32 D_801E8AAC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80187D44[]; + extern u8 D_80187D48[]; + extern unsigned char D_801EB170; + extern s16 *D_801E8A94; + extern s32 D_801E8AC4; + extern s32 D_801E8AC8; + extern s32 D_801E8ACC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E8AB8 & 1)) { + D_801E8AA0 = 1; + } else { + D_801E8AA0 = D_80078EAF; + } + + b0 = ((u8 *)D_80187D40)[D_801E8AA0 * 12]; + D_801EB252 = b0; + D_801EB2C6 = b0; + b1 = D_80187D44[D_801E8AA0 * 12]; + D_801EB17A = b1; + D_801EB234 = b1; + b2 = D_80187D48[D_801E8AA0 * 12]; + D_801EB158 = b2; + D_801EB179 = b2; + + (*(S9 *)&D_801EB170) = ((S9 *)D_80187D08)[D_801E8AA0]; + (*(S9 *)&D_801EB210) = *(S9 *)(&D_801EB158 + 0x18); /* same addr as (*(S9 *)&D_801EB170); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EB238 = 1; + D_801E8AB4 = -1; + D_801E8AB0 = 0; + D_801E8AAC = -1; + D_801E8A98 = 0; + D_801E8AA4 = 0; + D_801E8AA8 = 0; + + if ((D_801E8AB8 & 2) && (D_801E8AA0 == 4)) { + s0v = (*(s32 * *)&D_801E8A88)[18]; + t9v = (*(s32 * *)&D_801E8A88)[19]; + t8v = (*(s32 * *)&D_801E8A88)[20]; + } else { + s32 *p = (s32 *)(D_801E8AA0 * 12 + (s32) (*(s32 * *)&D_801E8A88)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E8A94) = arg0; + if (arg0 != 0) { + if (D_801E8AC0 != 0) { + s32 *p = (s32 *)(D_801E8AA0 * 12 + (s32) (*(s32 * *)&D_801E8A90)); + D_801E8AC4 = p[0]; + D_801E8AC8 = p[1]; + D_801E8ACC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8013F350.c b/src/ov_SC03_007/ov_SC03_007_jr_8013F350.c index e0475a5b5..edd08e4af 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8013F350.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80187B70[]; extern u8 D_80187C6C[]; extern u8 D_80187CEC[]; extern u8 D_80187BC4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c b/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c index 20d9d5334..5a75b5518 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80187B70[]; extern u8 D_80187C6C[]; extern u8 D_80187CEC[]; extern u8 D_80187BC4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_007/ov_SC03_007_jr_80140608.c b/src/ov_SC03_007/ov_SC03_007_jr_80140608.c index cdccc17b9..918907e22 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_80140608.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80187B70[]; extern u8 D_80187C6C[]; extern u8 D_80187CEC[]; extern u8 D_80187BC4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_010/ov_SC03_010_jr_801380E0.c b/src/ov_SC03_010/ov_SC03_010_jr_801380E0.c index a5919f6cb..bddda007b 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_801380E0.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018078C[]; extern u8 D_8018080C[]; extern u8 D_801806E4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019ED18; +extern s32 D_8019ED00; + + +extern u8 D_801A015A; +extern u8 D_801A01CE; +extern u8 D_801A0082; +extern u8 D_801A013C; +extern u8 D_801A0060; +extern u8 D_801A0081; + + +extern s32 D_801A0140; +extern s32 D_8019ED14; +extern s32 D_8019ED10; +extern s32 D_8019ECF8; +extern s32 D_8019ED04; +extern s32 D_8019ED08; + +extern void *D_8019ECE8; +extern s32 D_8019ED20; +extern void *D_8019ECF0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80180828[]; + extern Rec12 D_80180860[]; + extern u8 D_80078EAF; + extern u8 D_801A0118; + extern s32 D_8019ED0C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180864[]; + extern u8 D_80180868[]; + extern unsigned char D_801A0078; + extern s16 *D_8019ECF4; + extern s32 D_8019ED24; + extern s32 D_8019ED28; + extern s32 D_8019ED2C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019ED18 & 1)) { + D_8019ED00 = 1; + } else { + D_8019ED00 = D_80078EAF; + } + + b0 = ((u8 *)D_80180860)[D_8019ED00 * 12]; + D_801A015A = b0; + D_801A01CE = b0; + b1 = D_80180864[D_8019ED00 * 12]; + D_801A0082 = b1; + D_801A013C = b1; + b2 = D_80180868[D_8019ED00 * 12]; + D_801A0060 = b2; + D_801A0081 = b2; + + (*(S9 *)&D_801A0078) = ((S9 *)D_80180828)[D_8019ED00]; + (*(S9 *)&D_801A0118) = *(S9 *)(&D_801A0060 + 0x18); /* same addr as (*(S9 *)&D_801A0078); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A0140 = 1; + D_8019ED14 = -1; + D_8019ED10 = 0; + D_8019ED0C = -1; + D_8019ECF8 = 0; + D_8019ED04 = 0; + D_8019ED08 = 0; + + if ((D_8019ED18 & 2) && (D_8019ED00 == 4)) { + s0v = (*(s32 * *)&D_8019ECE8)[18]; + t9v = (*(s32 * *)&D_8019ECE8)[19]; + t8v = (*(s32 * *)&D_8019ECE8)[20]; + } else { + s32 *p = (s32 *)(D_8019ED00 * 12 + (s32) (*(s32 * *)&D_8019ECE8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019ECF4) = arg0; + if (arg0 != 0) { + if (D_8019ED20 != 0) { + s32 *p = (s32 *)(D_8019ED00 * 12 + (s32) (*(s32 * *)&D_8019ECF0)); + D_8019ED24 = p[0]; + D_8019ED28 = p[1]; + D_8019ED2C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8013F350.c b/src/ov_SC03_010/ov_SC03_010_jr_8013F350.c index 8e3540c3d..ca0ba471a 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8013F350.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80180690[]; extern u8 D_8018078C[]; extern u8 D_8018080C[]; extern u8 D_801806E4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c b/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c index 3dd4b195d..8855bc9ff 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80180690[]; extern u8 D_8018078C[]; extern u8 D_8018080C[]; extern u8 D_801806E4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_010/ov_SC03_010_jr_80140608.c b/src/ov_SC03_010/ov_SC03_010_jr_80140608.c index ba55d162b..d0801d50d 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_80140608.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80180690[]; extern u8 D_8018078C[]; extern u8 D_8018080C[]; extern u8 D_801806E4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_011/ov_SC03_011_jr_801380E0.c b/src/ov_SC03_011/ov_SC03_011_jr_801380E0.c index 2861758af..064991d00 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_801380E0.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_80181AFC[]; extern u8 D_80181B7C[]; extern u8 D_80181A54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A0FB0; +extern s32 D_801A0F98; + + +extern u8 D_801A238A; +extern u8 D_801A2402; +extern u8 D_801A22B2; +extern u8 D_801A236C; +extern u8 D_801A2290; +extern u8 D_801A22B1; + + +extern s32 D_801A2370; +extern s32 D_801A0FAC; +extern s32 D_801A0FA8; +extern s32 D_801A0F90; +extern s32 D_801A0F9C; +extern s32 D_801A0FA0; + +extern void *D_801A0F80; +extern s32 D_801A0FB8; +extern void *D_801A0F88; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80181B98[]; + extern Rec12 D_80181BD0[]; + extern u8 D_80078EAF; + extern u8 D_801A2348; + extern s32 D_801A0FA4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80181BD4[]; + extern u8 D_80181BD8[]; + extern unsigned char D_801A22A8; + extern s16 *D_801A0F8C; + extern s32 D_801A0FBC; + extern s32 D_801A0FC0; + extern s32 D_801A0FC4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A0FB0 & 1)) { + D_801A0F98 = 1; + } else { + D_801A0F98 = D_80078EAF; + } + + b0 = ((u8 *)D_80181BD0)[D_801A0F98 * 12]; + D_801A238A = b0; + D_801A2402 = b0; + b1 = D_80181BD4[D_801A0F98 * 12]; + D_801A22B2 = b1; + D_801A236C = b1; + b2 = D_80181BD8[D_801A0F98 * 12]; + D_801A2290 = b2; + D_801A22B1 = b2; + + (*(S9 *)&D_801A22A8) = ((S9 *)D_80181B98)[D_801A0F98]; + (*(S9 *)&D_801A2348) = *(S9 *)(&D_801A2290 + 0x18); /* same addr as (*(S9 *)&D_801A22A8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A2370 = 1; + D_801A0FAC = -1; + D_801A0FA8 = 0; + D_801A0FA4 = -1; + D_801A0F90 = 0; + D_801A0F9C = 0; + D_801A0FA0 = 0; + + if ((D_801A0FB0 & 2) && (D_801A0F98 == 4)) { + s0v = (*(s32 * *)&D_801A0F80)[18]; + t9v = (*(s32 * *)&D_801A0F80)[19]; + t8v = (*(s32 * *)&D_801A0F80)[20]; + } else { + s32 *p = (s32 *)(D_801A0F98 * 12 + (s32) (*(s32 * *)&D_801A0F80)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A0F8C) = arg0; + if (arg0 != 0) { + if (D_801A0FB8 != 0) { + s32 *p = (s32 *)(D_801A0F98 * 12 + (s32) (*(s32 * *)&D_801A0F88)); + D_801A0FBC = p[0]; + D_801A0FC0 = p[1]; + D_801A0FC4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c b/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c index 05bcf5a3d..672e8bab7 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80181A00[]; extern u8 D_80181AFC[]; extern u8 D_80181B7C[]; extern u8 D_80181A54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_011/ov_SC03_011_jr_80140608.c b/src/ov_SC03_011/ov_SC03_011_jr_80140608.c index be3a0e4c8..b06977aa8 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_80140608.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80181A00[]; extern u8 D_80181AFC[]; extern u8 D_80181B7C[]; extern u8 D_80181A54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_012/ov_SC03_012_jr_801380E0.c b/src/ov_SC03_012/ov_SC03_012_jr_801380E0.c index 1d4fb3fab..966ff7c00 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_801380E0.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017E9DC[]; extern u8 D_8017EA5C[]; extern u8 D_8017E934[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80193DD0; +extern s32 D_80193DB8; + + +extern u8 D_801950EA; +extern u8 D_8019515E; +extern u8 D_80195012; +extern u8 D_801950CC; +extern u8 D_80194FF0; +extern u8 D_80195011; + + +extern s32 D_801950D0; +extern s32 D_80193DCC; +extern s32 D_80193DC8; +extern s32 D_80193DB0; +extern s32 D_80193DBC; +extern s32 D_80193DC0; + +extern void *D_80193DA0; +extern s32 D_80193DD8; +extern void *D_80193DA8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EA78[]; + extern Rec12 D_8017EAB0[]; + extern u8 D_80078EAF; + extern u8 D_801950A8; + extern s32 D_80193DC4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EAB4[]; + extern u8 D_8017EAB8[]; + extern unsigned char D_80195008; + extern s16 *D_80193DAC; + extern s32 D_80193DDC; + extern s32 D_80193DE0; + extern s32 D_80193DE4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80193DD0 & 1)) { + D_80193DB8 = 1; + } else { + D_80193DB8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EAB0)[D_80193DB8 * 12]; + D_801950EA = b0; + D_8019515E = b0; + b1 = D_8017EAB4[D_80193DB8 * 12]; + D_80195012 = b1; + D_801950CC = b1; + b2 = D_8017EAB8[D_80193DB8 * 12]; + D_80194FF0 = b2; + D_80195011 = b2; + + (*(S9 *)&D_80195008) = ((S9 *)D_8017EA78)[D_80193DB8]; + (*(S9 *)&D_801950A8) = *(S9 *)(&D_80194FF0 + 0x18); /* same addr as (*(S9 *)&D_80195008); distinct sym defeats cse, keeps %hi/%lo */ + + D_801950D0 = 1; + D_80193DCC = -1; + D_80193DC8 = 0; + D_80193DC4 = -1; + D_80193DB0 = 0; + D_80193DBC = 0; + D_80193DC0 = 0; + + if ((D_80193DD0 & 2) && (D_80193DB8 == 4)) { + s0v = (*(s32 * *)&D_80193DA0)[18]; + t9v = (*(s32 * *)&D_80193DA0)[19]; + t8v = (*(s32 * *)&D_80193DA0)[20]; + } else { + s32 *p = (s32 *)(D_80193DB8 * 12 + (s32) (*(s32 * *)&D_80193DA0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80193DAC) = arg0; + if (arg0 != 0) { + if (D_80193DD8 != 0) { + s32 *p = (s32 *)(D_80193DB8 * 12 + (s32) (*(s32 * *)&D_80193DA8)); + D_80193DDC = p[0]; + D_80193DE0 = p[1]; + D_80193DE4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8013F350.c b/src/ov_SC03_012/ov_SC03_012_jr_8013F350.c index 89d78bf9b..7cb1862e9 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8013F350.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017E8E0[]; extern u8 D_8017E9DC[]; extern u8 D_8017EA5C[]; extern u8 D_8017E934[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c b/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c index fa7385e6a..c5792dc2c 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017E8E0[]; extern u8 D_8017E9DC[]; extern u8 D_8017EA5C[]; extern u8 D_8017E934[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_012/ov_SC03_012_jr_80140608.c b/src/ov_SC03_012/ov_SC03_012_jr_80140608.c index daabefc20..97ff535c6 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_80140608.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017E8E0[]; extern u8 D_8017E9DC[]; extern u8 D_8017EA5C[]; extern u8 D_8017E934[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_013/ov_SC03_013_jr_801380E0.c b/src/ov_SC03_013/ov_SC03_013_jr_801380E0.c index a929da084..b286f52a7 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_801380E0.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801817C4[]; extern u8 D_80181844[]; extern u8 D_8018171C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801AC0A0; +extern s32 D_801AC088; + + +extern u8 D_801AD4E2; +extern u8 D_801AD556; +extern u8 D_801AD40A; +extern u8 D_801AD4C4; +extern u8 D_801AD3E8; +extern u8 D_801AD409; + + +extern s32 D_801AD4C8; +extern s32 D_801AC09C; +extern s32 D_801AC098; +extern s32 D_801AC080; +extern s32 D_801AC08C; +extern s32 D_801AC090; + +extern void *D_801AC070; +extern s32 D_801AC0A8; +extern void *D_801AC078; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80181860[]; + extern Rec12 D_80181898[]; + extern u8 D_80078EAF; + extern u8 D_801AD4A0; + extern s32 D_801AC094; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018189C[]; + extern u8 D_801818A0[]; + extern unsigned char D_801AD400; + extern s16 *D_801AC07C; + extern s32 D_801AC0AC; + extern s32 D_801AC0B0; + extern s32 D_801AC0B4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801AC0A0 & 1)) { + D_801AC088 = 1; + } else { + D_801AC088 = D_80078EAF; + } + + b0 = ((u8 *)D_80181898)[D_801AC088 * 12]; + D_801AD4E2 = b0; + D_801AD556 = b0; + b1 = D_8018189C[D_801AC088 * 12]; + D_801AD40A = b1; + D_801AD4C4 = b1; + b2 = D_801818A0[D_801AC088 * 12]; + D_801AD3E8 = b2; + D_801AD409 = b2; + + (*(S9 *)&D_801AD400) = ((S9 *)D_80181860)[D_801AC088]; + (*(S9 *)&D_801AD4A0) = *(S9 *)(&D_801AD3E8 + 0x18); /* same addr as (*(S9 *)&D_801AD400); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AD4C8 = 1; + D_801AC09C = -1; + D_801AC098 = 0; + D_801AC094 = -1; + D_801AC080 = 0; + D_801AC08C = 0; + D_801AC090 = 0; + + if ((D_801AC0A0 & 2) && (D_801AC088 == 4)) { + s0v = (*(s32 * *)&D_801AC070)[18]; + t9v = (*(s32 * *)&D_801AC070)[19]; + t8v = (*(s32 * *)&D_801AC070)[20]; + } else { + s32 *p = (s32 *)(D_801AC088 * 12 + (s32) (*(s32 * *)&D_801AC070)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801AC07C) = arg0; + if (arg0 != 0) { + if (D_801AC0A8 != 0) { + s32 *p = (s32 *)(D_801AC088 * 12 + (s32) (*(s32 * *)&D_801AC078)); + D_801AC0AC = p[0]; + D_801AC0B0 = p[1]; + D_801AC0B4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8013F350.c b/src/ov_SC03_013/ov_SC03_013_jr_8013F350.c index 98cae94eb..92a9d5462 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8013F350.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801816C8[]; extern u8 D_801817C4[]; extern u8 D_80181844[]; extern u8 D_8018171C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c b/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c index d0c838cdf..0f38c42da 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801816C8[]; extern u8 D_801817C4[]; extern u8 D_80181844[]; extern u8 D_8018171C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_013/ov_SC03_013_jr_80140608.c b/src/ov_SC03_013/ov_SC03_013_jr_80140608.c index f661be109..43c740297 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_80140608.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801816C8[]; extern u8 D_801817C4[]; extern u8 D_80181844[]; extern u8 D_8018171C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_014/ov_SC03_014_jr_801380E0.c b/src/ov_SC03_014/ov_SC03_014_jr_801380E0.c index 1b393750a..03002bc98 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_801380E0.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E9620; +extern s32 D_801E9608; + + +extern u8 D_801EAFCA; +extern u8 D_801EB03E; +extern u8 D_801EAEF2; +extern u8 D_801EAFAC; +extern u8 D_801EAED0; +extern u8 D_801EAEF1; + + +extern s32 D_801EAFB0; +extern s32 D_801E961C; +extern s32 D_801E9618; +extern s32 D_801E9600; +extern s32 D_801E960C; +extern s32 D_801E9610; + +extern void *D_801E95F0; +extern s32 D_801E9628; +extern void *D_801E95F8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018BE9C[]; + extern Rec12 D_8018BED4[]; + extern u8 D_80078EAF; + extern u8 D_801EAF88; + extern s32 D_801E9614; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018BED8[]; + extern u8 D_8018BEDC[]; + extern unsigned char D_801EAEE8; + extern s16 *D_801E95FC; + extern s32 D_801E962C; + extern s32 D_801E9630; + extern s32 D_801E9634; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E9620 & 1)) { + D_801E9608 = 1; + } else { + D_801E9608 = D_80078EAF; + } + + b0 = ((u8 *)D_8018BED4)[D_801E9608 * 12]; + D_801EAFCA = b0; + D_801EB03E = b0; + b1 = D_8018BED8[D_801E9608 * 12]; + D_801EAEF2 = b1; + D_801EAFAC = b1; + b2 = D_8018BEDC[D_801E9608 * 12]; + D_801EAED0 = b2; + D_801EAEF1 = b2; + + (*(S9 *)&D_801EAEE8) = ((S9 *)D_8018BE9C)[D_801E9608]; + (*(S9 *)&D_801EAF88) = *(S9 *)(&D_801EAED0 + 0x18); /* same addr as (*(S9 *)&D_801EAEE8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EAFB0 = 1; + D_801E961C = -1; + D_801E9618 = 0; + D_801E9614 = -1; + D_801E9600 = 0; + D_801E960C = 0; + D_801E9610 = 0; + + if ((D_801E9620 & 2) && (D_801E9608 == 4)) { + s0v = (*(s32 * *)&D_801E95F0)[18]; + t9v = (*(s32 * *)&D_801E95F0)[19]; + t8v = (*(s32 * *)&D_801E95F0)[20]; + } else { + s32 *p = (s32 *)(D_801E9608 * 12 + (s32) (*(s32 * *)&D_801E95F0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E95FC) = arg0; + if (arg0 != 0) { + if (D_801E9628 != 0) { + s32 *p = (s32 *)(D_801E9608 * 12 + (s32) (*(s32 * *)&D_801E95F8)); + D_801E962C = p[0]; + D_801E9630 = p[1]; + D_801E9634 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8013F350.c b/src/ov_SC03_014/ov_SC03_014_jr_8013F350.c index d32298519..264d7723a 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8013F350.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c b/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c index fb790474f..de9cd1b5b 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_014/ov_SC03_014_jr_80140608.c b/src/ov_SC03_014/ov_SC03_014_jr_80140608.c index 392d338b7..9218a1547 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_80140608.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_015/ov_SC03_015_jr_801380E0.c b/src/ov_SC03_015/ov_SC03_015_jr_801380E0.c index cf5e91d41..f8c2f1b95 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_801380E0.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E9620; +extern s32 D_801E9608; + + +extern u8 D_801EAFCA; +extern u8 D_801EB03E; +extern u8 D_801EAEF2; +extern u8 D_801EAFAC; +extern u8 D_801EAED0; +extern u8 D_801EAEF1; + + +extern s32 D_801EAFB0; +extern s32 D_801E961C; +extern s32 D_801E9618; +extern s32 D_801E9600; +extern s32 D_801E960C; +extern s32 D_801E9610; + +extern void *D_801E95F0; +extern s32 D_801E9628; +extern void *D_801E95F8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018BE9C[]; + extern Rec12 D_8018BED4[]; + extern u8 D_80078EAF; + extern u8 D_801EAF88; + extern s32 D_801E9614; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018BED8[]; + extern u8 D_8018BEDC[]; + extern unsigned char D_801EAEE8; + extern s16 *D_801E95FC; + extern s32 D_801E962C; + extern s32 D_801E9630; + extern s32 D_801E9634; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E9620 & 1)) { + D_801E9608 = 1; + } else { + D_801E9608 = D_80078EAF; + } + + b0 = ((u8 *)D_8018BED4)[D_801E9608 * 12]; + D_801EAFCA = b0; + D_801EB03E = b0; + b1 = D_8018BED8[D_801E9608 * 12]; + D_801EAEF2 = b1; + D_801EAFAC = b1; + b2 = D_8018BEDC[D_801E9608 * 12]; + D_801EAED0 = b2; + D_801EAEF1 = b2; + + (*(S9 *)&D_801EAEE8) = ((S9 *)D_8018BE9C)[D_801E9608]; + (*(S9 *)&D_801EAF88) = *(S9 *)(&D_801EAED0 + 0x18); /* same addr as (*(S9 *)&D_801EAEE8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EAFB0 = 1; + D_801E961C = -1; + D_801E9618 = 0; + D_801E9614 = -1; + D_801E9600 = 0; + D_801E960C = 0; + D_801E9610 = 0; + + if ((D_801E9620 & 2) && (D_801E9608 == 4)) { + s0v = (*(s32 * *)&D_801E95F0)[18]; + t9v = (*(s32 * *)&D_801E95F0)[19]; + t8v = (*(s32 * *)&D_801E95F0)[20]; + } else { + s32 *p = (s32 *)(D_801E9608 * 12 + (s32) (*(s32 * *)&D_801E95F0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E95FC) = arg0; + if (arg0 != 0) { + if (D_801E9628 != 0) { + s32 *p = (s32 *)(D_801E9608 * 12 + (s32) (*(s32 * *)&D_801E95F8)); + D_801E962C = p[0]; + D_801E9630 = p[1]; + D_801E9634 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8013F350.c b/src/ov_SC03_015/ov_SC03_015_jr_8013F350.c index d32298519..264d7723a 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8013F350.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c b/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c index a1690c3a7..b29be42b1 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_015/ov_SC03_015_jr_80140608.c b/src/ov_SC03_015/ov_SC03_015_jr_80140608.c index b18173963..cdb2307b5 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_80140608.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018BD04[]; extern u8 D_8018BE00[]; extern u8 D_8018BE80[]; extern u8 D_8018BD58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_023/ov_SC03_023_jr_801380E0.c b/src/ov_SC03_023/ov_SC03_023_jr_801380E0.c index 87337f55e..822a49411 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_801380E0.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F77C[]; extern u8 D_8017F7FC[]; extern u8 D_8017F6D4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801979F8; +extern s32 D_801979E0; + + +extern u8 D_80198D12; +extern u8 D_80198D86; +extern u8 D_80198C3A; +extern u8 D_80198CF4; +extern u8 D_80198C18; +extern u8 D_80198C39; + + +extern s32 D_80198CF8; +extern s32 D_801979F4; +extern s32 D_801979F0; +extern s32 D_801979D8; +extern s32 D_801979E4; +extern s32 D_801979E8; + +extern void *D_801979C8; +extern s32 D_80197A00; +extern void *D_801979D0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F818[]; + extern Rec12 D_8017F850[]; + extern u8 D_80078EAF; + extern u8 D_80198CD0; + extern s32 D_801979EC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F854[]; + extern u8 D_8017F858[]; + extern unsigned char D_80198C30; + extern s16 *D_801979D4; + extern s32 D_80197A04; + extern s32 D_80197A08; + extern s32 D_80197A0C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801979F8 & 1)) { + D_801979E0 = 1; + } else { + D_801979E0 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F850)[D_801979E0 * 12]; + D_80198D12 = b0; + D_80198D86 = b0; + b1 = D_8017F854[D_801979E0 * 12]; + D_80198C3A = b1; + D_80198CF4 = b1; + b2 = D_8017F858[D_801979E0 * 12]; + D_80198C18 = b2; + D_80198C39 = b2; + + (*(S9 *)&D_80198C30) = ((S9 *)D_8017F818)[D_801979E0]; + (*(S9 *)&D_80198CD0) = *(S9 *)(&D_80198C18 + 0x18); /* same addr as (*(S9 *)&D_80198C30); distinct sym defeats cse, keeps %hi/%lo */ + + D_80198CF8 = 1; + D_801979F4 = -1; + D_801979F0 = 0; + D_801979EC = -1; + D_801979D8 = 0; + D_801979E4 = 0; + D_801979E8 = 0; + + if ((D_801979F8 & 2) && (D_801979E0 == 4)) { + s0v = (*(s32 * *)&D_801979C8)[18]; + t9v = (*(s32 * *)&D_801979C8)[19]; + t8v = (*(s32 * *)&D_801979C8)[20]; + } else { + s32 *p = (s32 *)(D_801979E0 * 12 + (s32) (*(s32 * *)&D_801979C8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801979D4) = arg0; + if (arg0 != 0) { + if (D_80197A00 != 0) { + s32 *p = (s32 *)(D_801979E0 * 12 + (s32) (*(s32 * *)&D_801979D0)); + D_80197A04 = p[0]; + D_80197A08 = p[1]; + D_80197A0C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8013F350.c b/src/ov_SC03_023/ov_SC03_023_jr_8013F350.c index 803093837..8822e24be 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8013F350.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F680[]; extern u8 D_8017F77C[]; extern u8 D_8017F7FC[]; extern u8 D_8017F6D4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c b/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c index 5d7c8bd7a..38850f1c3 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F680[]; extern u8 D_8017F77C[]; extern u8 D_8017F7FC[]; extern u8 D_8017F6D4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_023/ov_SC03_023_jr_80140608.c b/src/ov_SC03_023/ov_SC03_023_jr_80140608.c index 363b59619..de90622de 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_80140608.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F680[]; extern u8 D_8017F77C[]; extern u8 D_8017F7FC[]; extern u8 D_8017F6D4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_024/ov_SC03_024_jr_801380E0.c b/src/ov_SC03_024/ov_SC03_024_jr_801380E0.c index ef70bd866..08e955cc7 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_801380E0.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801877A0[]; extern u8 D_80187820[]; extern u8 D_801876F8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801BFF90; +extern s32 D_801BFF78; + + +extern u8 D_801C17DA; +extern u8 D_801C184E; +extern u8 D_801C1702; +extern u8 D_801C17BC; +extern u8 D_801C16E0; +extern u8 D_801C1701; + + +extern s32 D_801C17C0; +extern s32 D_801BFF8C; +extern s32 D_801BFF88; +extern s32 D_801BFF70; +extern s32 D_801BFF7C; +extern s32 D_801BFF80; + +extern void *D_801BFF60; +extern s32 D_801BFF98; +extern void *D_801BFF68; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018783C[]; + extern Rec12 D_80187874[]; + extern u8 D_80078EAF; + extern u8 D_801C1798; + extern s32 D_801BFF84; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80187878[]; + extern u8 D_8018787C[]; + extern unsigned char D_801C16F8; + extern s16 *D_801BFF6C; + extern s32 D_801BFF9C; + extern s32 D_801BFFA0; + extern s32 D_801BFFA4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801BFF90 & 1)) { + D_801BFF78 = 1; + } else { + D_801BFF78 = D_80078EAF; + } + + b0 = ((u8 *)D_80187874)[D_801BFF78 * 12]; + D_801C17DA = b0; + D_801C184E = b0; + b1 = D_80187878[D_801BFF78 * 12]; + D_801C1702 = b1; + D_801C17BC = b1; + b2 = D_8018787C[D_801BFF78 * 12]; + D_801C16E0 = b2; + D_801C1701 = b2; + + (*(S9 *)&D_801C16F8) = ((S9 *)D_8018783C)[D_801BFF78]; + (*(S9 *)&D_801C1798) = *(S9 *)(&D_801C16E0 + 0x18); /* same addr as (*(S9 *)&D_801C16F8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C17C0 = 1; + D_801BFF8C = -1; + D_801BFF88 = 0; + D_801BFF84 = -1; + D_801BFF70 = 0; + D_801BFF7C = 0; + D_801BFF80 = 0; + + if ((D_801BFF90 & 2) && (D_801BFF78 == 4)) { + s0v = (*(s32 * *)&D_801BFF60)[18]; + t9v = (*(s32 * *)&D_801BFF60)[19]; + t8v = (*(s32 * *)&D_801BFF60)[20]; + } else { + s32 *p = (s32 *)(D_801BFF78 * 12 + (s32) (*(s32 * *)&D_801BFF60)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801BFF6C) = arg0; + if (arg0 != 0) { + if (D_801BFF98 != 0) { + s32 *p = (s32 *)(D_801BFF78 * 12 + (s32) (*(s32 * *)&D_801BFF68)); + D_801BFF9C = p[0]; + D_801BFFA0 = p[1]; + D_801BFFA4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8013F350.c b/src/ov_SC03_024/ov_SC03_024_jr_8013F350.c index da11c449e..0a1d8d23c 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8013F350.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801876A4[]; extern u8 D_801877A0[]; extern u8 D_80187820[]; extern u8 D_801876F8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c b/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c index 2f605a8bc..dfc9c329c 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801876A4[]; extern u8 D_801877A0[]; extern u8 D_80187820[]; extern u8 D_801876F8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_024/ov_SC03_024_jr_80140608.c b/src/ov_SC03_024/ov_SC03_024_jr_80140608.c index 6c65a09b7..80d2e78d2 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_80140608.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801876A4[]; extern u8 D_801877A0[]; extern u8 D_80187820[]; extern u8 D_801876F8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_028/ov_SC03_028_jr_801380E0.c b/src/ov_SC03_028/ov_SC03_028_jr_801380E0.c index 1a7b4f6e0..61a26742a 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_801380E0.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018C26C[]; extern u8 D_8018C2EC[]; extern u8 D_8018C1C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801EA2C8; +extern s32 D_801EA2B0; + + +extern u8 D_801EC592; +extern u8 D_801EC606; +extern u8 D_801EC4BA; +extern u8 D_801EC574; +extern u8 D_801EC498; +extern u8 D_801EC4B9; + + +extern s32 D_801EC578; +extern s32 D_801EA2C4; +extern s32 D_801EA2C0; +extern s32 D_801EA2A8; +extern s32 D_801EA2B4; +extern s32 D_801EA2B8; + +extern void *D_801EA298; +extern s32 D_801EA2D0; +extern void *D_801EA2A0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018C308[]; + extern Rec12 D_8018C340[]; + extern u8 D_80078EAF; + extern u8 D_801EC550; + extern s32 D_801EA2BC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018C344[]; + extern u8 D_8018C348[]; + extern unsigned char D_801EC4B0; + extern s16 *D_801EA2A4; + extern s32 D_801EA2D4; + extern s32 D_801EA2D8; + extern s32 D_801EA2DC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801EA2C8 & 1)) { + D_801EA2B0 = 1; + } else { + D_801EA2B0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018C340)[D_801EA2B0 * 12]; + D_801EC592 = b0; + D_801EC606 = b0; + b1 = D_8018C344[D_801EA2B0 * 12]; + D_801EC4BA = b1; + D_801EC574 = b1; + b2 = D_8018C348[D_801EA2B0 * 12]; + D_801EC498 = b2; + D_801EC4B9 = b2; + + (*(S9 *)&D_801EC4B0) = ((S9 *)D_8018C308)[D_801EA2B0]; + (*(S9 *)&D_801EC550) = *(S9 *)(&D_801EC498 + 0x18); /* same addr as (*(S9 *)&D_801EC4B0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801EC578 = 1; + D_801EA2C4 = -1; + D_801EA2C0 = 0; + D_801EA2BC = -1; + D_801EA2A8 = 0; + D_801EA2B4 = 0; + D_801EA2B8 = 0; + + if ((D_801EA2C8 & 2) && (D_801EA2B0 == 4)) { + s0v = (*(s32 * *)&D_801EA298)[18]; + t9v = (*(s32 * *)&D_801EA298)[19]; + t8v = (*(s32 * *)&D_801EA298)[20]; + } else { + s32 *p = (s32 *)(D_801EA2B0 * 12 + (s32) (*(s32 * *)&D_801EA298)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801EA2A4) = arg0; + if (arg0 != 0) { + if (D_801EA2D0 != 0) { + s32 *p = (s32 *)(D_801EA2B0 * 12 + (s32) (*(s32 * *)&D_801EA2A0)); + D_801EA2D4 = p[0]; + D_801EA2D8 = p[1]; + D_801EA2DC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8013F350.c b/src/ov_SC03_028/ov_SC03_028_jr_8013F350.c index 5afd07b10..ea617d555 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8013F350.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018C170[]; extern u8 D_8018C26C[]; extern u8 D_8018C2EC[]; extern u8 D_8018C1C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c b/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c index 199a5f7d0..acd258664 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018C170[]; extern u8 D_8018C26C[]; extern u8 D_8018C2EC[]; extern u8 D_8018C1C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_028/ov_SC03_028_jr_80140608.c b/src/ov_SC03_028/ov_SC03_028_jr_80140608.c index 735ddecf3..ddc3b1e21 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_80140608.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018C170[]; extern u8 D_8018C26C[]; extern u8 D_8018C2EC[]; extern u8 D_8018C1C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_029/ov_SC03_029_jr_801380E0.c b/src/ov_SC03_029/ov_SC03_029_jr_801380E0.c index 404f817ea..2458617ba 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_801380E0.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801880A4[]; extern u8 D_80188124[]; extern u8 D_80187FFC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D82A0; +extern s32 D_801D8288; + + +extern u8 D_801D99D2; +extern u8 D_801D9A46; +extern u8 D_801D98FA; +extern u8 D_801D99B4; +extern u8 D_801D98D8; +extern u8 D_801D98F9; + + +extern s32 D_801D99B8; +extern s32 D_801D829C; +extern s32 D_801D8298; +extern s32 D_801D8280; +extern s32 D_801D828C; +extern s32 D_801D8290; + +extern void *D_801D8270; +extern s32 D_801D82A8; +extern void *D_801D8278; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80188140[]; + extern Rec12 D_80188178[]; + extern u8 D_80078EAF; + extern u8 D_801D9990; + extern s32 D_801D8294; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018817C[]; + extern u8 D_80188180[]; + extern unsigned char D_801D98F0; + extern s16 *D_801D827C; + extern s32 D_801D82AC; + extern s32 D_801D82B0; + extern s32 D_801D82B4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D82A0 & 1)) { + D_801D8288 = 1; + } else { + D_801D8288 = D_80078EAF; + } + + b0 = ((u8 *)D_80188178)[D_801D8288 * 12]; + D_801D99D2 = b0; + D_801D9A46 = b0; + b1 = D_8018817C[D_801D8288 * 12]; + D_801D98FA = b1; + D_801D99B4 = b1; + b2 = D_80188180[D_801D8288 * 12]; + D_801D98D8 = b2; + D_801D98F9 = b2; + + (*(S9 *)&D_801D98F0) = ((S9 *)D_80188140)[D_801D8288]; + (*(S9 *)&D_801D9990) = *(S9 *)(&D_801D98D8 + 0x18); /* same addr as (*(S9 *)&D_801D98F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D99B8 = 1; + D_801D829C = -1; + D_801D8298 = 0; + D_801D8294 = -1; + D_801D8280 = 0; + D_801D828C = 0; + D_801D8290 = 0; + + if ((D_801D82A0 & 2) && (D_801D8288 == 4)) { + s0v = (*(s32 * *)&D_801D8270)[18]; + t9v = (*(s32 * *)&D_801D8270)[19]; + t8v = (*(s32 * *)&D_801D8270)[20]; + } else { + s32 *p = (s32 *)(D_801D8288 * 12 + (s32) (*(s32 * *)&D_801D8270)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D827C) = arg0; + if (arg0 != 0) { + if (D_801D82A8 != 0) { + s32 *p = (s32 *)(D_801D8288 * 12 + (s32) (*(s32 * *)&D_801D8278)); + D_801D82AC = p[0]; + D_801D82B0 = p[1]; + D_801D82B4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8013F350.c b/src/ov_SC03_029/ov_SC03_029_jr_8013F350.c index 3cab7cdec..6ded2bb9d 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8013F350.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80187FA8[]; extern u8 D_801880A4[]; extern u8 D_80188124[]; extern u8 D_80187FFC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c b/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c index a59190703..5fba8cb18 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80187FA8[]; extern u8 D_801880A4[]; extern u8 D_80188124[]; extern u8 D_80187FFC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_029/ov_SC03_029_jr_80140608.c b/src/ov_SC03_029/ov_SC03_029_jr_80140608.c index bb62b8b3b..3e2e086ca 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_80140608.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80187FA8[]; extern u8 D_801880A4[]; extern u8 D_80188124[]; extern u8 D_80187FFC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_030/ov_SC03_030_jr_801380E0.c b/src/ov_SC03_030/ov_SC03_030_jr_801380E0.c index 752d8d6de..85c1d4cb9 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_801380E0.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_801826E0[]; extern u8 D_80182760[]; extern u8 D_80182638[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E0898; +extern s32 D_801E0880; + + +extern u8 D_801E1BCA; +extern u8 D_801E1C3E; +extern u8 D_801E1AF2; +extern u8 D_801E1BAC; +extern u8 D_801E1AD0; +extern u8 D_801E1AF1; + + +extern s32 D_801E1BB0; +extern s32 D_801E0894; +extern s32 D_801E0890; +extern s32 D_801E0878; +extern s32 D_801E0884; +extern s32 D_801E0888; + +extern void *D_801E0868; +extern s32 D_801E08A0; +extern void *D_801E0870; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018277C[]; + extern Rec12 D_801827B4[]; + extern u8 D_80078EAF; + extern u8 D_801E1B88; + extern s32 D_801E088C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801827B8[]; + extern u8 D_801827BC[]; + extern unsigned char D_801E1AE8; + extern s16 *D_801E0874; + extern s32 D_801E08A4; + extern s32 D_801E08A8; + extern s32 D_801E08AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E0898 & 1)) { + D_801E0880 = 1; + } else { + D_801E0880 = D_80078EAF; + } + + b0 = ((u8 *)D_801827B4)[D_801E0880 * 12]; + D_801E1BCA = b0; + D_801E1C3E = b0; + b1 = D_801827B8[D_801E0880 * 12]; + D_801E1AF2 = b1; + D_801E1BAC = b1; + b2 = D_801827BC[D_801E0880 * 12]; + D_801E1AD0 = b2; + D_801E1AF1 = b2; + + (*(S9 *)&D_801E1AE8) = ((S9 *)D_8018277C)[D_801E0880]; + (*(S9 *)&D_801E1B88) = *(S9 *)(&D_801E1AD0 + 0x18); /* same addr as (*(S9 *)&D_801E1AE8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E1BB0 = 1; + D_801E0894 = -1; + D_801E0890 = 0; + D_801E088C = -1; + D_801E0878 = 0; + D_801E0884 = 0; + D_801E0888 = 0; + + if ((D_801E0898 & 2) && (D_801E0880 == 4)) { + s0v = (*(s32 * *)&D_801E0868)[18]; + t9v = (*(s32 * *)&D_801E0868)[19]; + t8v = (*(s32 * *)&D_801E0868)[20]; + } else { + s32 *p = (s32 *)(D_801E0880 * 12 + (s32) (*(s32 * *)&D_801E0868)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E0874) = arg0; + if (arg0 != 0) { + if (D_801E08A0 != 0) { + s32 *p = (s32 *)(D_801E0880 * 12 + (s32) (*(s32 * *)&D_801E0870)); + D_801E08A4 = p[0]; + D_801E08A8 = p[1]; + D_801E08AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c b/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c index 80b3c056e..45db93f45 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_801825E4[]; extern u8 D_801826E0[]; extern u8 D_80182760[]; extern u8 D_80182638[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_030/ov_SC03_030_jr_80140608.c b/src/ov_SC03_030/ov_SC03_030_jr_80140608.c index c00e26c1b..809452f59 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_80140608.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_801825E4[]; extern u8 D_801826E0[]; extern u8 D_80182760[]; extern u8 D_80182638[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_031/ov_SC03_031_jr_801380E0.c b/src/ov_SC03_031/ov_SC03_031_jr_801380E0.c index ab9257af7..e10f475de 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_801380E0.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182BFC[]; extern u8 D_80182C7C[]; extern u8 D_80182B54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C4C98; +extern s32 D_801C4C80; + + +extern u8 D_801C6232; +extern u8 D_801C62A6; +extern u8 D_801C615A; +extern u8 D_801C6214; +extern u8 D_801C6138; +extern u8 D_801C6159; + + +extern s32 D_801C6218; +extern s32 D_801C4C94; +extern s32 D_801C4C90; +extern s32 D_801C4C78; +extern s32 D_801C4C84; +extern s32 D_801C4C88; + +extern void *D_801C4C68; +extern s32 D_801C4CA0; +extern void *D_801C4C70; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182C98[]; + extern Rec12 D_80182CD0[]; + extern u8 D_80078EAF; + extern u8 D_801C61F0; + extern s32 D_801C4C8C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182CD4[]; + extern u8 D_80182CD8[]; + extern unsigned char D_801C6150; + extern s16 *D_801C4C74; + extern s32 D_801C4CA4; + extern s32 D_801C4CA8; + extern s32 D_801C4CAC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C4C98 & 1)) { + D_801C4C80 = 1; + } else { + D_801C4C80 = D_80078EAF; + } + + b0 = ((u8 *)D_80182CD0)[D_801C4C80 * 12]; + D_801C6232 = b0; + D_801C62A6 = b0; + b1 = D_80182CD4[D_801C4C80 * 12]; + D_801C615A = b1; + D_801C6214 = b1; + b2 = D_80182CD8[D_801C4C80 * 12]; + D_801C6138 = b2; + D_801C6159 = b2; + + (*(S9 *)&D_801C6150) = ((S9 *)D_80182C98)[D_801C4C80]; + (*(S9 *)&D_801C61F0) = *(S9 *)(&D_801C6138 + 0x18); /* same addr as (*(S9 *)&D_801C6150); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C6218 = 1; + D_801C4C94 = -1; + D_801C4C90 = 0; + D_801C4C8C = -1; + D_801C4C78 = 0; + D_801C4C84 = 0; + D_801C4C88 = 0; + + if ((D_801C4C98 & 2) && (D_801C4C80 == 4)) { + s0v = (*(s32 * *)&D_801C4C68)[18]; + t9v = (*(s32 * *)&D_801C4C68)[19]; + t8v = (*(s32 * *)&D_801C4C68)[20]; + } else { + s32 *p = (s32 *)(D_801C4C80 * 12 + (s32) (*(s32 * *)&D_801C4C68)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C4C74) = arg0; + if (arg0 != 0) { + if (D_801C4CA0 != 0) { + s32 *p = (s32 *)(D_801C4C80 * 12 + (s32) (*(s32 * *)&D_801C4C70)); + D_801C4CA4 = p[0]; + D_801C4CA8 = p[1]; + D_801C4CAC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8013F350.c b/src/ov_SC03_031/ov_SC03_031_jr_8013F350.c index 3ff2132b2..2b016bf51 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8013F350.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182B00[]; extern u8 D_80182BFC[]; extern u8 D_80182C7C[]; extern u8 D_80182B54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c b/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c index ad56056b7..8a2eb0b0f 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182B00[]; extern u8 D_80182BFC[]; extern u8 D_80182C7C[]; extern u8 D_80182B54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_031/ov_SC03_031_jr_80140608.c b/src/ov_SC03_031/ov_SC03_031_jr_80140608.c index 7c2f4d00d..8cfd30678 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_80140608.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182B00[]; extern u8 D_80182BFC[]; extern u8 D_80182C7C[]; extern u8 D_80182B54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_089/ov_SC03_089_jr_801380E0.c b/src/ov_SC03_089/ov_SC03_089_jr_801380E0.c index 4770dfbd9..8108aee39 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_801380E0.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80189EF8[]; extern u8 D_80189F78[]; extern u8 D_80189E50[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C5550; +extern s32 D_801C5538; + + +extern u8 D_801C68AA; +extern u8 D_801C691E; +extern u8 D_801C67D2; +extern u8 D_801C688C; +extern u8 D_801C67B0; +extern u8 D_801C67D1; + + +extern s32 D_801C6890; +extern s32 D_801C554C; +extern s32 D_801C5548; +extern s32 D_801C5530; +extern s32 D_801C553C; +extern s32 D_801C5540; + +extern void *D_801C5520; +extern s32 D_801C5558; +extern void *D_801C5528; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80189F94[]; + extern Rec12 D_80189FCC[]; + extern u8 D_80078EAF; + extern u8 D_801C6868; + extern s32 D_801C5544; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80189FD0[]; + extern u8 D_80189FD4[]; + extern unsigned char D_801C67C8; + extern s16 *D_801C552C; + extern s32 D_801C555C; + extern s32 D_801C5560; + extern s32 D_801C5564; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C5550 & 1)) { + D_801C5538 = 1; + } else { + D_801C5538 = D_80078EAF; + } + + b0 = ((u8 *)D_80189FCC)[D_801C5538 * 12]; + D_801C68AA = b0; + D_801C691E = b0; + b1 = D_80189FD0[D_801C5538 * 12]; + D_801C67D2 = b1; + D_801C688C = b1; + b2 = D_80189FD4[D_801C5538 * 12]; + D_801C67B0 = b2; + D_801C67D1 = b2; + + (*(S9 *)&D_801C67C8) = ((S9 *)D_80189F94)[D_801C5538]; + (*(S9 *)&D_801C6868) = *(S9 *)(&D_801C67B0 + 0x18); /* same addr as (*(S9 *)&D_801C67C8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C6890 = 1; + D_801C554C = -1; + D_801C5548 = 0; + D_801C5544 = -1; + D_801C5530 = 0; + D_801C553C = 0; + D_801C5540 = 0; + + if ((D_801C5550 & 2) && (D_801C5538 == 4)) { + s0v = (*(s32 * *)&D_801C5520)[18]; + t9v = (*(s32 * *)&D_801C5520)[19]; + t8v = (*(s32 * *)&D_801C5520)[20]; + } else { + s32 *p = (s32 *)(D_801C5538 * 12 + (s32) (*(s32 * *)&D_801C5520)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C552C) = arg0; + if (arg0 != 0) { + if (D_801C5558 != 0) { + s32 *p = (s32 *)(D_801C5538 * 12 + (s32) (*(s32 * *)&D_801C5528)); + D_801C555C = p[0]; + D_801C5560 = p[1]; + D_801C5564 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8013F350.c b/src/ov_SC03_089/ov_SC03_089_jr_8013F350.c index f5e0c7c26..7bc271523 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8013F350.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80189DFC[]; extern u8 D_80189EF8[]; extern u8 D_80189F78[]; extern u8 D_80189E50[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c b/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c index 1547f8d25..f9a031d07 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80189DFC[]; extern u8 D_80189EF8[]; extern u8 D_80189F78[]; extern u8 D_80189E50[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_089/ov_SC03_089_jr_80140608.c b/src/ov_SC03_089/ov_SC03_089_jr_80140608.c index 39d34fded..4162bf393 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_80140608.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80189DFC[]; extern u8 D_80189EF8[]; extern u8 D_80189F78[]; extern u8 D_80189E50[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_090/ov_SC03_090_jr_801380E0.c b/src/ov_SC03_090/ov_SC03_090_jr_801380E0.c index 25f1efe3d..bd7b560fb 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_801380E0.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018C31C[]; extern u8 D_8018C39C[]; extern u8 D_8018C274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CA9B8; +extern s32 D_801CA9A0; + + +extern u8 D_801CBD1A; +extern u8 D_801CBD8E; +extern u8 D_801CBC42; +extern u8 D_801CBCFC; +extern u8 D_801CBC20; +extern u8 D_801CBC41; + + +extern s32 D_801CBD00; +extern s32 D_801CA9B4; +extern s32 D_801CA9B0; +extern s32 D_801CA998; +extern s32 D_801CA9A4; +extern s32 D_801CA9A8; + +extern void *D_801CA988; +extern s32 D_801CA9C0; +extern void *D_801CA990; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018C3B8[]; + extern Rec12 D_8018C3F0[]; + extern u8 D_80078EAF; + extern u8 D_801CBCD8; + extern s32 D_801CA9AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018C3F4[]; + extern u8 D_8018C3F8[]; + extern unsigned char D_801CBC38; + extern s16 *D_801CA994; + extern s32 D_801CA9C4; + extern s32 D_801CA9C8; + extern s32 D_801CA9CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CA9B8 & 1)) { + D_801CA9A0 = 1; + } else { + D_801CA9A0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018C3F0)[D_801CA9A0 * 12]; + D_801CBD1A = b0; + D_801CBD8E = b0; + b1 = D_8018C3F4[D_801CA9A0 * 12]; + D_801CBC42 = b1; + D_801CBCFC = b1; + b2 = D_8018C3F8[D_801CA9A0 * 12]; + D_801CBC20 = b2; + D_801CBC41 = b2; + + (*(S9 *)&D_801CBC38) = ((S9 *)D_8018C3B8)[D_801CA9A0]; + (*(S9 *)&D_801CBCD8) = *(S9 *)(&D_801CBC20 + 0x18); /* same addr as (*(S9 *)&D_801CBC38); distinct sym defeats cse, keeps %hi/%lo */ + + D_801CBD00 = 1; + D_801CA9B4 = -1; + D_801CA9B0 = 0; + D_801CA9AC = -1; + D_801CA998 = 0; + D_801CA9A4 = 0; + D_801CA9A8 = 0; + + if ((D_801CA9B8 & 2) && (D_801CA9A0 == 4)) { + s0v = (*(s32 * *)&D_801CA988)[18]; + t9v = (*(s32 * *)&D_801CA988)[19]; + t8v = (*(s32 * *)&D_801CA988)[20]; + } else { + s32 *p = (s32 *)(D_801CA9A0 * 12 + (s32) (*(s32 * *)&D_801CA988)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CA994) = arg0; + if (arg0 != 0) { + if (D_801CA9C0 != 0) { + s32 *p = (s32 *)(D_801CA9A0 * 12 + (s32) (*(s32 * *)&D_801CA990)); + D_801CA9C4 = p[0]; + D_801CA9C8 = p[1]; + D_801CA9CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8013F350.c b/src/ov_SC03_090/ov_SC03_090_jr_8013F350.c index b54ee3906..5b56a4948 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8013F350.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018C220[]; extern u8 D_8018C31C[]; extern u8 D_8018C39C[]; extern u8 D_8018C274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c b/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c index 9c8b8c7a3..268bc6236 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018C220[]; extern u8 D_8018C31C[]; extern u8 D_8018C39C[]; extern u8 D_8018C274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_090/ov_SC03_090_jr_80140608.c b/src/ov_SC03_090/ov_SC03_090_jr_80140608.c index a757276e8..7ac2cee2e 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_80140608.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018C220[]; extern u8 D_8018C31C[]; extern u8 D_8018C39C[]; extern u8 D_8018C274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_091/ov_SC03_091_jr_801380E0.c b/src/ov_SC03_091/ov_SC03_091_jr_801380E0.c index 9be7663ec..a85ac868e 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_801380E0.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018D1C4[]; extern u8 D_8018D244[]; extern u8 D_8018D11C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D1088; +extern s32 D_801D1070; + + +extern u8 D_801D266A; +extern u8 D_801D26DE; +extern u8 D_801D2592; +extern u8 D_801D264C; +extern u8 D_801D2570; +extern u8 D_801D2591; + + +extern s32 D_801D2650; +extern s32 D_801D1084; +extern s32 D_801D1080; +extern s32 D_801D1068; +extern s32 D_801D1074; +extern s32 D_801D1078; + +extern void *D_801D1058; +extern s32 D_801D1090; +extern void *D_801D1060; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018D260[]; + extern Rec12 D_8018D298[]; + extern u8 D_80078EAF; + extern u8 D_801D2628; + extern s32 D_801D107C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018D29C[]; + extern u8 D_8018D2A0[]; + extern unsigned char D_801D2588; + extern s16 *D_801D1064; + extern s32 D_801D1094; + extern s32 D_801D1098; + extern s32 D_801D109C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D1088 & 1)) { + D_801D1070 = 1; + } else { + D_801D1070 = D_80078EAF; + } + + b0 = ((u8 *)D_8018D298)[D_801D1070 * 12]; + D_801D266A = b0; + D_801D26DE = b0; + b1 = D_8018D29C[D_801D1070 * 12]; + D_801D2592 = b1; + D_801D264C = b1; + b2 = D_8018D2A0[D_801D1070 * 12]; + D_801D2570 = b2; + D_801D2591 = b2; + + (*(S9 *)&D_801D2588) = ((S9 *)D_8018D260)[D_801D1070]; + (*(S9 *)&D_801D2628) = *(S9 *)(&D_801D2570 + 0x18); /* same addr as (*(S9 *)&D_801D2588); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D2650 = 1; + D_801D1084 = -1; + D_801D1080 = 0; + D_801D107C = -1; + D_801D1068 = 0; + D_801D1074 = 0; + D_801D1078 = 0; + + if ((D_801D1088 & 2) && (D_801D1070 == 4)) { + s0v = (*(s32 * *)&D_801D1058)[18]; + t9v = (*(s32 * *)&D_801D1058)[19]; + t8v = (*(s32 * *)&D_801D1058)[20]; + } else { + s32 *p = (s32 *)(D_801D1070 * 12 + (s32) (*(s32 * *)&D_801D1058)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D1064) = arg0; + if (arg0 != 0) { + if (D_801D1090 != 0) { + s32 *p = (s32 *)(D_801D1070 * 12 + (s32) (*(s32 * *)&D_801D1060)); + D_801D1094 = p[0]; + D_801D1098 = p[1]; + D_801D109C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8013F350.c b/src/ov_SC03_091/ov_SC03_091_jr_8013F350.c index a70999207..808529c68 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8013F350.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018D0C8[]; extern u8 D_8018D1C4[]; extern u8 D_8018D244[]; extern u8 D_8018D11C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c b/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c index 831383290..027b4580b 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018D0C8[]; extern u8 D_8018D1C4[]; extern u8 D_8018D244[]; extern u8 D_8018D11C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_091/ov_SC03_091_jr_80140608.c b/src/ov_SC03_091/ov_SC03_091_jr_80140608.c index de09912cd..06439b503 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_80140608.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018D0C8[]; extern u8 D_8018D1C4[]; extern u8 D_8018D244[]; extern u8 D_8018D11C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_092/ov_SC03_092_jr_801380E0.c b/src/ov_SC03_092/ov_SC03_092_jr_801380E0.c index a8ee9e27e..096751538 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_801380E0.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185594[]; extern u8 D_80185614[]; extern u8 D_801854EC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B1C50; +extern s32 D_801B1C38; + + +extern u8 D_801B3012; +extern u8 D_801B3086; +extern u8 D_801B2F3A; +extern u8 D_801B2FF4; +extern u8 D_801B2F18; +extern u8 D_801B2F39; + + +extern s32 D_801B2FF8; +extern s32 D_801B1C4C; +extern s32 D_801B1C48; +extern s32 D_801B1C30; +extern s32 D_801B1C3C; +extern s32 D_801B1C40; + +extern void *D_801B1C20; +extern s32 D_801B1C58; +extern void *D_801B1C28; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80185630[]; + extern Rec12 D_80185668[]; + extern u8 D_80078EAF; + extern u8 D_801B2FD0; + extern s32 D_801B1C44; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018566C[]; + extern u8 D_80185670[]; + extern unsigned char D_801B2F30; + extern s16 *D_801B1C2C; + extern s32 D_801B1C5C; + extern s32 D_801B1C60; + extern s32 D_801B1C64; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B1C50 & 1)) { + D_801B1C38 = 1; + } else { + D_801B1C38 = D_80078EAF; + } + + b0 = ((u8 *)D_80185668)[D_801B1C38 * 12]; + D_801B3012 = b0; + D_801B3086 = b0; + b1 = D_8018566C[D_801B1C38 * 12]; + D_801B2F3A = b1; + D_801B2FF4 = b1; + b2 = D_80185670[D_801B1C38 * 12]; + D_801B2F18 = b2; + D_801B2F39 = b2; + + (*(S9 *)&D_801B2F30) = ((S9 *)D_80185630)[D_801B1C38]; + (*(S9 *)&D_801B2FD0) = *(S9 *)(&D_801B2F18 + 0x18); /* same addr as (*(S9 *)&D_801B2F30); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B2FF8 = 1; + D_801B1C4C = -1; + D_801B1C48 = 0; + D_801B1C44 = -1; + D_801B1C30 = 0; + D_801B1C3C = 0; + D_801B1C40 = 0; + + if ((D_801B1C50 & 2) && (D_801B1C38 == 4)) { + s0v = (*(s32 * *)&D_801B1C20)[18]; + t9v = (*(s32 * *)&D_801B1C20)[19]; + t8v = (*(s32 * *)&D_801B1C20)[20]; + } else { + s32 *p = (s32 *)(D_801B1C38 * 12 + (s32) (*(s32 * *)&D_801B1C20)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B1C2C) = arg0; + if (arg0 != 0) { + if (D_801B1C58 != 0) { + s32 *p = (s32 *)(D_801B1C38 * 12 + (s32) (*(s32 * *)&D_801B1C28)); + D_801B1C5C = p[0]; + D_801B1C60 = p[1]; + D_801B1C64 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8013F350.c b/src/ov_SC03_092/ov_SC03_092_jr_8013F350.c index 387708b81..43b6056e0 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8013F350.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185498[]; extern u8 D_80185594[]; extern u8 D_80185614[]; extern u8 D_801854EC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c b/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c index 28efb5ff1..24615fe3e 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185498[]; extern u8 D_80185594[]; extern u8 D_80185614[]; extern u8 D_801854EC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_092/ov_SC03_092_jr_80140608.c b/src/ov_SC03_092/ov_SC03_092_jr_80140608.c index b44c314c3..3dfa47367 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_80140608.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185498[]; extern u8 D_80185594[]; extern u8 D_80185614[]; extern u8 D_801854EC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_093/ov_SC03_093_jr_801380E0.c b/src/ov_SC03_093/ov_SC03_093_jr_801380E0.c index 570f36d73..220013cd2 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_801380E0.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018676C[]; extern u8 D_801867EC[]; extern u8 D_801866C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CB0C0; +extern s32 D_801CB0A8; + + +extern u8 D_801CC66A; +extern u8 D_801CC6DE; +extern u8 D_801CC592; +extern u8 D_801CC64C; +extern u8 D_801CC570; +extern u8 D_801CC591; + + +extern s32 D_801CC650; +extern s32 D_801CB0BC; +extern s32 D_801CB0B8; +extern s32 D_801CB0A0; +extern s32 D_801CB0AC; +extern s32 D_801CB0B0; + +extern void *D_801CB090; +extern s32 D_801CB0C8; +extern void *D_801CB098; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186808[]; + extern Rec12 D_80186840[]; + extern u8 D_80078EAF; + extern u8 D_801CC628; + extern s32 D_801CB0B4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186844[]; + extern u8 D_80186848[]; + extern unsigned char D_801CC588; + extern s16 *D_801CB09C; + extern s32 D_801CB0CC; + extern s32 D_801CB0D0; + extern s32 D_801CB0D4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CB0C0 & 1)) { + D_801CB0A8 = 1; + } else { + D_801CB0A8 = D_80078EAF; + } + + b0 = ((u8 *)D_80186840)[D_801CB0A8 * 12]; + D_801CC66A = b0; + D_801CC6DE = b0; + b1 = D_80186844[D_801CB0A8 * 12]; + D_801CC592 = b1; + D_801CC64C = b1; + b2 = D_80186848[D_801CB0A8 * 12]; + D_801CC570 = b2; + D_801CC591 = b2; + + (*(S9 *)&D_801CC588) = ((S9 *)D_80186808)[D_801CB0A8]; + (*(S9 *)&D_801CC628) = *(S9 *)(&D_801CC570 + 0x18); /* same addr as (*(S9 *)&D_801CC588); distinct sym defeats cse, keeps %hi/%lo */ + + D_801CC650 = 1; + D_801CB0BC = -1; + D_801CB0B8 = 0; + D_801CB0B4 = -1; + D_801CB0A0 = 0; + D_801CB0AC = 0; + D_801CB0B0 = 0; + + if ((D_801CB0C0 & 2) && (D_801CB0A8 == 4)) { + s0v = (*(s32 * *)&D_801CB090)[18]; + t9v = (*(s32 * *)&D_801CB090)[19]; + t8v = (*(s32 * *)&D_801CB090)[20]; + } else { + s32 *p = (s32 *)(D_801CB0A8 * 12 + (s32) (*(s32 * *)&D_801CB090)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CB09C) = arg0; + if (arg0 != 0) { + if (D_801CB0C8 != 0) { + s32 *p = (s32 *)(D_801CB0A8 * 12 + (s32) (*(s32 * *)&D_801CB098)); + D_801CB0CC = p[0]; + D_801CB0D0 = p[1]; + D_801CB0D4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8013F350.c b/src/ov_SC03_093/ov_SC03_093_jr_8013F350.c index 7a054398a..455dd4929 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8013F350.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80186670[]; extern u8 D_8018676C[]; extern u8 D_801867EC[]; extern u8 D_801866C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c b/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c index e0bbb053d..e706f2cf6 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80186670[]; extern u8 D_8018676C[]; extern u8 D_801867EC[]; extern u8 D_801866C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_093/ov_SC03_093_jr_80140608.c b/src/ov_SC03_093/ov_SC03_093_jr_80140608.c index 41b2a85d1..372948a38 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_80140608.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80186670[]; extern u8 D_8018676C[]; extern u8 D_801867EC[]; extern u8 D_801866C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_094/ov_SC03_094_jr_801380E0.c b/src/ov_SC03_094/ov_SC03_094_jr_801380E0.c index 15a238369..803b45b1b 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_801380E0.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80188168[]; extern u8 D_801881E8[]; extern u8 D_801880C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D1F00; +extern s32 D_801D1EE8; + + +extern u8 D_801D3222; +extern u8 D_801D3296; +extern u8 D_801D314A; +extern u8 D_801D3204; +extern u8 D_801D3128; +extern u8 D_801D3149; + + +extern s32 D_801D3208; +extern s32 D_801D1EFC; +extern s32 D_801D1EF8; +extern s32 D_801D1EE0; +extern s32 D_801D1EEC; +extern s32 D_801D1EF0; + +extern void *D_801D1ED0; +extern s32 D_801D1F08; +extern void *D_801D1ED8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80188204[]; + extern Rec12 D_8018823C[]; + extern u8 D_80078EAF; + extern u8 D_801D31E0; + extern s32 D_801D1EF4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80188240[]; + extern u8 D_80188244[]; + extern unsigned char D_801D3140; + extern s16 *D_801D1EDC; + extern s32 D_801D1F0C; + extern s32 D_801D1F10; + extern s32 D_801D1F14; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D1F00 & 1)) { + D_801D1EE8 = 1; + } else { + D_801D1EE8 = D_80078EAF; + } + + b0 = ((u8 *)D_8018823C)[D_801D1EE8 * 12]; + D_801D3222 = b0; + D_801D3296 = b0; + b1 = D_80188240[D_801D1EE8 * 12]; + D_801D314A = b1; + D_801D3204 = b1; + b2 = D_80188244[D_801D1EE8 * 12]; + D_801D3128 = b2; + D_801D3149 = b2; + + (*(S9 *)&D_801D3140) = ((S9 *)D_80188204)[D_801D1EE8]; + (*(S9 *)&D_801D31E0) = *(S9 *)(&D_801D3128 + 0x18); /* same addr as (*(S9 *)&D_801D3140); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D3208 = 1; + D_801D1EFC = -1; + D_801D1EF8 = 0; + D_801D1EF4 = -1; + D_801D1EE0 = 0; + D_801D1EEC = 0; + D_801D1EF0 = 0; + + if ((D_801D1F00 & 2) && (D_801D1EE8 == 4)) { + s0v = (*(s32 * *)&D_801D1ED0)[18]; + t9v = (*(s32 * *)&D_801D1ED0)[19]; + t8v = (*(s32 * *)&D_801D1ED0)[20]; + } else { + s32 *p = (s32 *)(D_801D1EE8 * 12 + (s32) (*(s32 * *)&D_801D1ED0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D1EDC) = arg0; + if (arg0 != 0) { + if (D_801D1F08 != 0) { + s32 *p = (s32 *)(D_801D1EE8 * 12 + (s32) (*(s32 * *)&D_801D1ED8)); + D_801D1F0C = p[0]; + D_801D1F10 = p[1]; + D_801D1F14 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8013F350.c b/src/ov_SC03_094/ov_SC03_094_jr_8013F350.c index 7203305e0..1fb9fa4d6 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8013F350.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018806C[]; extern u8 D_80188168[]; extern u8 D_801881E8[]; extern u8 D_801880C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c b/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c index b41163a76..97ae959d5 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018806C[]; extern u8 D_80188168[]; extern u8 D_801881E8[]; extern u8 D_801880C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_094/ov_SC03_094_jr_80140608.c b/src/ov_SC03_094/ov_SC03_094_jr_80140608.c index 9d4e5ff60..56b8220ac 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_80140608.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018806C[]; extern u8 D_80188168[]; extern u8 D_801881E8[]; extern u8 D_801880C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_095/ov_SC03_095_jr_801380E0.c b/src/ov_SC03_095/ov_SC03_095_jr_801380E0.c index fa4c98d43..d7468adf3 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_801380E0.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801817C8[]; extern u8 D_80181848[]; extern u8 D_80181720[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019AAF8; +extern s32 D_8019AAE0; + + +extern u8 D_8019BE22; +extern u8 D_8019BE96; +extern u8 D_8019BD4A; +extern u8 D_8019BE04; +extern u8 D_8019BD28; +extern u8 D_8019BD49; + + +extern s32 D_8019BE08; +extern s32 D_8019AAF4; +extern s32 D_8019AAF0; +extern s32 D_8019AAD8; +extern s32 D_8019AAE4; +extern s32 D_8019AAE8; + +extern void *D_8019AAC8; +extern s32 D_8019AB00; +extern void *D_8019AAD0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80181864[]; + extern Rec12 D_8018189C[]; + extern u8 D_80078EAF; + extern u8 D_8019BDE0; + extern s32 D_8019AAEC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801818A0[]; + extern u8 D_801818A4[]; + extern unsigned char D_8019BD40; + extern s16 *D_8019AAD4; + extern s32 D_8019AB04; + extern s32 D_8019AB08; + extern s32 D_8019AB0C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019AAF8 & 1)) { + D_8019AAE0 = 1; + } else { + D_8019AAE0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018189C)[D_8019AAE0 * 12]; + D_8019BE22 = b0; + D_8019BE96 = b0; + b1 = D_801818A0[D_8019AAE0 * 12]; + D_8019BD4A = b1; + D_8019BE04 = b1; + b2 = D_801818A4[D_8019AAE0 * 12]; + D_8019BD28 = b2; + D_8019BD49 = b2; + + (*(S9 *)&D_8019BD40) = ((S9 *)D_80181864)[D_8019AAE0]; + (*(S9 *)&D_8019BDE0) = *(S9 *)(&D_8019BD28 + 0x18); /* same addr as (*(S9 *)&D_8019BD40); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019BE08 = 1; + D_8019AAF4 = -1; + D_8019AAF0 = 0; + D_8019AAEC = -1; + D_8019AAD8 = 0; + D_8019AAE4 = 0; + D_8019AAE8 = 0; + + if ((D_8019AAF8 & 2) && (D_8019AAE0 == 4)) { + s0v = (*(s32 * *)&D_8019AAC8)[18]; + t9v = (*(s32 * *)&D_8019AAC8)[19]; + t8v = (*(s32 * *)&D_8019AAC8)[20]; + } else { + s32 *p = (s32 *)(D_8019AAE0 * 12 + (s32) (*(s32 * *)&D_8019AAC8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019AAD4) = arg0; + if (arg0 != 0) { + if (D_8019AB00 != 0) { + s32 *p = (s32 *)(D_8019AAE0 * 12 + (s32) (*(s32 * *)&D_8019AAD0)); + D_8019AB04 = p[0]; + D_8019AB08 = p[1]; + D_8019AB0C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8013F350.c b/src/ov_SC03_095/ov_SC03_095_jr_8013F350.c index b01511c87..435b2ceaf 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8013F350.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801816CC[]; extern u8 D_801817C8[]; extern u8 D_80181848[]; extern u8 D_80181720[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c b/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c index d8d929608..f2ce3eec9 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801816CC[]; extern u8 D_801817C8[]; extern u8 D_80181848[]; extern u8 D_80181720[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_095/ov_SC03_095_jr_80140608.c b/src/ov_SC03_095/ov_SC03_095_jr_80140608.c index 8e77f1ddf..ad7d99b64 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_80140608.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801816CC[]; extern u8 D_801817C8[]; extern u8 D_80181848[]; extern u8 D_80181720[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_096/ov_SC03_096_jr_801380E0.c b/src/ov_SC03_096/ov_SC03_096_jr_801380E0.c index 900881e81..b5fc8656d 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_801380E0.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80181348[]; extern u8 D_801813C8[]; extern u8 D_801812A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801995B0; +extern s32 D_80199598; + + +extern u8 D_8019A8DA; +extern u8 D_8019A94E; +extern u8 D_8019A802; +extern u8 D_8019A8BC; +extern u8 D_8019A7E0; +extern u8 D_8019A801; + + +extern s32 D_8019A8C0; +extern s32 D_801995AC; +extern s32 D_801995A8; +extern s32 D_80199590; +extern s32 D_8019959C; +extern s32 D_801995A0; + +extern void *D_80199580; +extern s32 D_801995B8; +extern void *D_80199588; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801813E4[]; + extern Rec12 D_8018141C[]; + extern u8 D_80078EAF; + extern u8 D_8019A898; + extern s32 D_801995A4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80181420[]; + extern u8 D_80181424[]; + extern unsigned char D_8019A7F8; + extern s16 *D_8019958C; + extern s32 D_801995BC; + extern s32 D_801995C0; + extern s32 D_801995C4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801995B0 & 1)) { + D_80199598 = 1; + } else { + D_80199598 = D_80078EAF; + } + + b0 = ((u8 *)D_8018141C)[D_80199598 * 12]; + D_8019A8DA = b0; + D_8019A94E = b0; + b1 = D_80181420[D_80199598 * 12]; + D_8019A802 = b1; + D_8019A8BC = b1; + b2 = D_80181424[D_80199598 * 12]; + D_8019A7E0 = b2; + D_8019A801 = b2; + + (*(S9 *)&D_8019A7F8) = ((S9 *)D_801813E4)[D_80199598]; + (*(S9 *)&D_8019A898) = *(S9 *)(&D_8019A7E0 + 0x18); /* same addr as (*(S9 *)&D_8019A7F8); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019A8C0 = 1; + D_801995AC = -1; + D_801995A8 = 0; + D_801995A4 = -1; + D_80199590 = 0; + D_8019959C = 0; + D_801995A0 = 0; + + if ((D_801995B0 & 2) && (D_80199598 == 4)) { + s0v = (*(s32 * *)&D_80199580)[18]; + t9v = (*(s32 * *)&D_80199580)[19]; + t8v = (*(s32 * *)&D_80199580)[20]; + } else { + s32 *p = (s32 *)(D_80199598 * 12 + (s32) (*(s32 * *)&D_80199580)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019958C) = arg0; + if (arg0 != 0) { + if (D_801995B8 != 0) { + s32 *p = (s32 *)(D_80199598 * 12 + (s32) (*(s32 * *)&D_80199588)); + D_801995BC = p[0]; + D_801995C0 = p[1]; + D_801995C4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8013F350.c b/src/ov_SC03_096/ov_SC03_096_jr_8013F350.c index a94cf4ecd..821e12fbb 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8013F350.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018124C[]; extern u8 D_80181348[]; extern u8 D_801813C8[]; extern u8 D_801812A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c b/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c index 88a3875e0..a42776bcd 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018124C[]; extern u8 D_80181348[]; extern u8 D_801813C8[]; extern u8 D_801812A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_096/ov_SC03_096_jr_80140608.c b/src/ov_SC03_096/ov_SC03_096_jr_80140608.c index 0da0a5d05..fc7c59c5a 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_80140608.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018124C[]; extern u8 D_80181348[]; extern u8 D_801813C8[]; extern u8 D_801812A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_097/ov_SC03_097_jr_801380E0.c b/src/ov_SC03_097/ov_SC03_097_jr_801380E0.c index bd22305c2..85a0088e9 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_801380E0.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80186728[]; extern u8 D_801867A8[]; extern u8 D_80186680[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A9638; +extern s32 D_801A9620; + + +extern u8 D_801AAE5A; +extern u8 D_801AAECE; +extern u8 D_801AAD82; +extern u8 D_801AAE3C; +extern u8 D_801AAD60; +extern u8 D_801AAD81; + + +extern s32 D_801AAE40; +extern s32 D_801A9634; +extern s32 D_801A9630; +extern s32 D_801A9618; +extern s32 D_801A9624; +extern s32 D_801A9628; + +extern void *D_801A9608; +extern s32 D_801A9640; +extern void *D_801A9610; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801867C4[]; + extern Rec12 D_801867FC[]; + extern u8 D_80078EAF; + extern u8 D_801AAE18; + extern s32 D_801A962C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186800[]; + extern u8 D_80186804[]; + extern unsigned char D_801AAD78; + extern s16 *D_801A9614; + extern s32 D_801A9644; + extern s32 D_801A9648; + extern s32 D_801A964C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A9638 & 1)) { + D_801A9620 = 1; + } else { + D_801A9620 = D_80078EAF; + } + + b0 = ((u8 *)D_801867FC)[D_801A9620 * 12]; + D_801AAE5A = b0; + D_801AAECE = b0; + b1 = D_80186800[D_801A9620 * 12]; + D_801AAD82 = b1; + D_801AAE3C = b1; + b2 = D_80186804[D_801A9620 * 12]; + D_801AAD60 = b2; + D_801AAD81 = b2; + + (*(S9 *)&D_801AAD78) = ((S9 *)D_801867C4)[D_801A9620]; + (*(S9 *)&D_801AAE18) = *(S9 *)(&D_801AAD60 + 0x18); /* same addr as (*(S9 *)&D_801AAD78); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AAE40 = 1; + D_801A9634 = -1; + D_801A9630 = 0; + D_801A962C = -1; + D_801A9618 = 0; + D_801A9624 = 0; + D_801A9628 = 0; + + if ((D_801A9638 & 2) && (D_801A9620 == 4)) { + s0v = (*(s32 * *)&D_801A9608)[18]; + t9v = (*(s32 * *)&D_801A9608)[19]; + t8v = (*(s32 * *)&D_801A9608)[20]; + } else { + s32 *p = (s32 *)(D_801A9620 * 12 + (s32) (*(s32 * *)&D_801A9608)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A9614) = arg0; + if (arg0 != 0) { + if (D_801A9640 != 0) { + s32 *p = (s32 *)(D_801A9620 * 12 + (s32) (*(s32 * *)&D_801A9610)); + D_801A9644 = p[0]; + D_801A9648 = p[1]; + D_801A964C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8013F350.c b/src/ov_SC03_097/ov_SC03_097_jr_8013F350.c index 0c241d93c..9300acdda 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8013F350.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018662C[]; extern u8 D_80186728[]; extern u8 D_801867A8[]; extern u8 D_80186680[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c b/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c index 59276f1ce..4e343ec86 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018662C[]; extern u8 D_80186728[]; extern u8 D_801867A8[]; extern u8 D_80186680[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_097/ov_SC03_097_jr_80140608.c b/src/ov_SC03_097/ov_SC03_097_jr_80140608.c index 8938a4c52..e934cee7b 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_80140608.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018662C[]; extern u8 D_80186728[]; extern u8 D_801867A8[]; extern u8 D_80186680[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_098/ov_SC03_098_jr_801380E0.c b/src/ov_SC03_098/ov_SC03_098_jr_801380E0.c index 77704e36d..ba16c1414 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_801380E0.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185BB4[]; extern u8 D_80185C34[]; extern u8 D_80185B0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C42A8; +extern s32 D_801C4290; + + +extern u8 D_801C5842; +extern u8 D_801C58B6; +extern u8 D_801C576A; +extern u8 D_801C5824; +extern u8 D_801C5748; +extern u8 D_801C5769; + + +extern s32 D_801C5828; +extern s32 D_801C42A4; +extern s32 D_801C42A0; +extern s32 D_801C4288; +extern s32 D_801C4294; +extern s32 D_801C4298; + +extern void *D_801C4278; +extern s32 D_801C42B0; +extern void *D_801C4280; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80185C50[]; + extern Rec12 D_80185C88[]; + extern u8 D_80078EAF; + extern u8 D_801C5800; + extern s32 D_801C429C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185C8C[]; + extern u8 D_80185C90[]; + extern unsigned char D_801C5760; + extern s16 *D_801C4284; + extern s32 D_801C42B4; + extern s32 D_801C42B8; + extern s32 D_801C42BC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C42A8 & 1)) { + D_801C4290 = 1; + } else { + D_801C4290 = D_80078EAF; + } + + b0 = ((u8 *)D_80185C88)[D_801C4290 * 12]; + D_801C5842 = b0; + D_801C58B6 = b0; + b1 = D_80185C8C[D_801C4290 * 12]; + D_801C576A = b1; + D_801C5824 = b1; + b2 = D_80185C90[D_801C4290 * 12]; + D_801C5748 = b2; + D_801C5769 = b2; + + (*(S9 *)&D_801C5760) = ((S9 *)D_80185C50)[D_801C4290]; + (*(S9 *)&D_801C5800) = *(S9 *)(&D_801C5748 + 0x18); /* same addr as (*(S9 *)&D_801C5760); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C5828 = 1; + D_801C42A4 = -1; + D_801C42A0 = 0; + D_801C429C = -1; + D_801C4288 = 0; + D_801C4294 = 0; + D_801C4298 = 0; + + if ((D_801C42A8 & 2) && (D_801C4290 == 4)) { + s0v = (*(s32 * *)&D_801C4278)[18]; + t9v = (*(s32 * *)&D_801C4278)[19]; + t8v = (*(s32 * *)&D_801C4278)[20]; + } else { + s32 *p = (s32 *)(D_801C4290 * 12 + (s32) (*(s32 * *)&D_801C4278)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C4284) = arg0; + if (arg0 != 0) { + if (D_801C42B0 != 0) { + s32 *p = (s32 *)(D_801C4290 * 12 + (s32) (*(s32 * *)&D_801C4280)); + D_801C42B4 = p[0]; + D_801C42B8 = p[1]; + D_801C42BC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8013F350.c b/src/ov_SC03_098/ov_SC03_098_jr_8013F350.c index 57f79e55e..316a24403 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8013F350.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185AB8[]; extern u8 D_80185BB4[]; extern u8 D_80185C34[]; extern u8 D_80185B0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c b/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c index 6b65df2ab..4ba3f7c96 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185AB8[]; extern u8 D_80185BB4[]; extern u8 D_80185C34[]; extern u8 D_80185B0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_098/ov_SC03_098_jr_80140608.c b/src/ov_SC03_098/ov_SC03_098_jr_80140608.c index a7f953ddb..074c419c2 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_80140608.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185AB8[]; extern u8 D_80185BB4[]; extern u8 D_80185C34[]; extern u8 D_80185B0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_099/ov_SC03_099_jr_801380E0.c b/src/ov_SC03_099/ov_SC03_099_jr_801380E0.c index 08e306c10..8c312b422 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_801380E0.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80183CB4[]; extern u8 D_80183D34[]; extern u8 D_80183C0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801BDF78; +extern s32 D_801BDF60; + + +extern u8 D_801BF3EA; +extern u8 D_801BF45E; +extern u8 D_801BF312; +extern u8 D_801BF3CC; +extern u8 D_801BF2F0; +extern u8 D_801BF311; + + +extern s32 D_801BF3D0; +extern s32 D_801BDF74; +extern s32 D_801BDF70; +extern s32 D_801BDF58; +extern s32 D_801BDF64; +extern s32 D_801BDF68; + +extern void *D_801BDF48; +extern s32 D_801BDF80; +extern void *D_801BDF50; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80183D50[]; + extern Rec12 D_80183D88[]; + extern u8 D_80078EAF; + extern u8 D_801BF3A8; + extern s32 D_801BDF6C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80183D8C[]; + extern u8 D_80183D90[]; + extern unsigned char D_801BF308; + extern s16 *D_801BDF54; + extern s32 D_801BDF84; + extern s32 D_801BDF88; + extern s32 D_801BDF8C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801BDF78 & 1)) { + D_801BDF60 = 1; + } else { + D_801BDF60 = D_80078EAF; + } + + b0 = ((u8 *)D_80183D88)[D_801BDF60 * 12]; + D_801BF3EA = b0; + D_801BF45E = b0; + b1 = D_80183D8C[D_801BDF60 * 12]; + D_801BF312 = b1; + D_801BF3CC = b1; + b2 = D_80183D90[D_801BDF60 * 12]; + D_801BF2F0 = b2; + D_801BF311 = b2; + + (*(S9 *)&D_801BF308) = ((S9 *)D_80183D50)[D_801BDF60]; + (*(S9 *)&D_801BF3A8) = *(S9 *)(&D_801BF2F0 + 0x18); /* same addr as (*(S9 *)&D_801BF308); distinct sym defeats cse, keeps %hi/%lo */ + + D_801BF3D0 = 1; + D_801BDF74 = -1; + D_801BDF70 = 0; + D_801BDF6C = -1; + D_801BDF58 = 0; + D_801BDF64 = 0; + D_801BDF68 = 0; + + if ((D_801BDF78 & 2) && (D_801BDF60 == 4)) { + s0v = (*(s32 * *)&D_801BDF48)[18]; + t9v = (*(s32 * *)&D_801BDF48)[19]; + t8v = (*(s32 * *)&D_801BDF48)[20]; + } else { + s32 *p = (s32 *)(D_801BDF60 * 12 + (s32) (*(s32 * *)&D_801BDF48)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801BDF54) = arg0; + if (arg0 != 0) { + if (D_801BDF80 != 0) { + s32 *p = (s32 *)(D_801BDF60 * 12 + (s32) (*(s32 * *)&D_801BDF50)); + D_801BDF84 = p[0]; + D_801BDF88 = p[1]; + D_801BDF8C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8013F350.c b/src/ov_SC03_099/ov_SC03_099_jr_8013F350.c index 4a484318a..a18df1418 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8013F350.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80183BB8[]; extern u8 D_80183CB4[]; extern u8 D_80183D34[]; extern u8 D_80183C0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c b/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c index 6dcc60f3e..7bd2666cd 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80183BB8[]; extern u8 D_80183CB4[]; extern u8 D_80183D34[]; extern u8 D_80183C0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_099/ov_SC03_099_jr_80140608.c b/src/ov_SC03_099/ov_SC03_099_jr_80140608.c index 725214032..587e1f6ac 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_80140608.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80183BB8[]; extern u8 D_80183CB4[]; extern u8 D_80183D34[]; extern u8 D_80183C0C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_100/ov_SC03_100_jr_801380E0.c b/src/ov_SC03_100/ov_SC03_100_jr_801380E0.c index e1d803873..383046245 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_801380E0.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185180[]; extern u8 D_80185200[]; extern u8 D_801850D8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C7200; +extern s32 D_801C71E8; + + +extern u8 D_801C88F2; +extern u8 D_801C8966; +extern u8 D_801C881A; +extern u8 D_801C88D4; +extern u8 D_801C87F8; +extern u8 D_801C8819; + + +extern s32 D_801C88D8; +extern s32 D_801C71FC; +extern s32 D_801C71F8; +extern s32 D_801C71E0; +extern s32 D_801C71EC; +extern s32 D_801C71F0; + +extern void *D_801C71D0; +extern s32 D_801C7208; +extern void *D_801C71D8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018521C[]; + extern Rec12 D_80185254[]; + extern u8 D_80078EAF; + extern u8 D_801C88B0; + extern s32 D_801C71F4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185258[]; + extern u8 D_8018525C[]; + extern unsigned char D_801C8810; + extern s16 *D_801C71DC; + extern s32 D_801C720C; + extern s32 D_801C7210; + extern s32 D_801C7214; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C7200 & 1)) { + D_801C71E8 = 1; + } else { + D_801C71E8 = D_80078EAF; + } + + b0 = ((u8 *)D_80185254)[D_801C71E8 * 12]; + D_801C88F2 = b0; + D_801C8966 = b0; + b1 = D_80185258[D_801C71E8 * 12]; + D_801C881A = b1; + D_801C88D4 = b1; + b2 = D_8018525C[D_801C71E8 * 12]; + D_801C87F8 = b2; + D_801C8819 = b2; + + (*(S9 *)&D_801C8810) = ((S9 *)D_8018521C)[D_801C71E8]; + (*(S9 *)&D_801C88B0) = *(S9 *)(&D_801C87F8 + 0x18); /* same addr as (*(S9 *)&D_801C8810); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C88D8 = 1; + D_801C71FC = -1; + D_801C71F8 = 0; + D_801C71F4 = -1; + D_801C71E0 = 0; + D_801C71EC = 0; + D_801C71F0 = 0; + + if ((D_801C7200 & 2) && (D_801C71E8 == 4)) { + s0v = (*(s32 * *)&D_801C71D0)[18]; + t9v = (*(s32 * *)&D_801C71D0)[19]; + t8v = (*(s32 * *)&D_801C71D0)[20]; + } else { + s32 *p = (s32 *)(D_801C71E8 * 12 + (s32) (*(s32 * *)&D_801C71D0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C71DC) = arg0; + if (arg0 != 0) { + if (D_801C7208 != 0) { + s32 *p = (s32 *)(D_801C71E8 * 12 + (s32) (*(s32 * *)&D_801C71D8)); + D_801C720C = p[0]; + D_801C7210 = p[1]; + D_801C7214 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8013F350.c b/src/ov_SC03_100/ov_SC03_100_jr_8013F350.c index f71e1ffc7..f36dca8d4 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8013F350.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185084[]; extern u8 D_80185180[]; extern u8 D_80185200[]; extern u8 D_801850D8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c b/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c index e872f128c..5646703cb 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185084[]; extern u8 D_80185180[]; extern u8 D_80185200[]; extern u8 D_801850D8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_100/ov_SC03_100_jr_80140608.c b/src/ov_SC03_100/ov_SC03_100_jr_80140608.c index b2af6b416..893d5dd86 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_80140608.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185084[]; extern u8 D_80185180[]; extern u8 D_80185200[]; extern u8 D_801850D8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_101/ov_SC03_101_jr_801380E0.c b/src/ov_SC03_101/ov_SC03_101_jr_801380E0.c index ab3c4a004..eb66ac522 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_801380E0.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018415C[]; extern u8 D_801841DC[]; extern u8 D_801840B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019CAC8; +extern s32 D_8019CAB0; + + +extern u8 D_8019E1B2; +extern u8 D_8019E226; +extern u8 D_8019E0DA; +extern u8 D_8019E194; +extern u8 D_8019E0B8; +extern u8 D_8019E0D9; + + +extern s32 D_8019E198; +extern s32 D_8019CAC4; +extern s32 D_8019CAC0; +extern s32 D_8019CAA8; +extern s32 D_8019CAB4; +extern s32 D_8019CAB8; + +extern void *D_8019CA98; +extern s32 D_8019CAD0; +extern void *D_8019CAA0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801841F8[]; + extern Rec12 D_80184230[]; + extern u8 D_80078EAF; + extern u8 D_8019E170; + extern s32 D_8019CABC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80184234[]; + extern u8 D_80184238[]; + extern unsigned char D_8019E0D0; + extern s16 *D_8019CAA4; + extern s32 D_8019CAD4; + extern s32 D_8019CAD8; + extern s32 D_8019CADC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019CAC8 & 1)) { + D_8019CAB0 = 1; + } else { + D_8019CAB0 = D_80078EAF; + } + + b0 = ((u8 *)D_80184230)[D_8019CAB0 * 12]; + D_8019E1B2 = b0; + D_8019E226 = b0; + b1 = D_80184234[D_8019CAB0 * 12]; + D_8019E0DA = b1; + D_8019E194 = b1; + b2 = D_80184238[D_8019CAB0 * 12]; + D_8019E0B8 = b2; + D_8019E0D9 = b2; + + (*(S9 *)&D_8019E0D0) = ((S9 *)D_801841F8)[D_8019CAB0]; + (*(S9 *)&D_8019E170) = *(S9 *)(&D_8019E0B8 + 0x18); /* same addr as (*(S9 *)&D_8019E0D0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019E198 = 1; + D_8019CAC4 = -1; + D_8019CAC0 = 0; + D_8019CABC = -1; + D_8019CAA8 = 0; + D_8019CAB4 = 0; + D_8019CAB8 = 0; + + if ((D_8019CAC8 & 2) && (D_8019CAB0 == 4)) { + s0v = (*(s32 * *)&D_8019CA98)[18]; + t9v = (*(s32 * *)&D_8019CA98)[19]; + t8v = (*(s32 * *)&D_8019CA98)[20]; + } else { + s32 *p = (s32 *)(D_8019CAB0 * 12 + (s32) (*(s32 * *)&D_8019CA98)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019CAA4) = arg0; + if (arg0 != 0) { + if (D_8019CAD0 != 0) { + s32 *p = (s32 *)(D_8019CAB0 * 12 + (s32) (*(s32 * *)&D_8019CAA0)); + D_8019CAD4 = p[0]; + D_8019CAD8 = p[1]; + D_8019CADC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8013F350.c b/src/ov_SC03_101/ov_SC03_101_jr_8013F350.c index 3563b730a..ac08414b0 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8013F350.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80184060[]; extern u8 D_8018415C[]; extern u8 D_801841DC[]; extern u8 D_801840B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c b/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c index d5d03d4f3..0b3c47baf 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80184060[]; extern u8 D_8018415C[]; extern u8 D_801841DC[]; extern u8 D_801840B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_101/ov_SC03_101_jr_80140608.c b/src/ov_SC03_101/ov_SC03_101_jr_80140608.c index 7089fbc14..879eeacdb 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_80140608.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80184060[]; extern u8 D_8018415C[]; extern u8 D_801841DC[]; extern u8 D_801840B4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_102/ov_SC03_102_jr_801380E0.c b/src/ov_SC03_102/ov_SC03_102_jr_801380E0.c index a1968622c..8594d489e 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_801380E0.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80186A14[]; extern u8 D_80186A94[]; extern u8 D_8018696C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B8740; +extern s32 D_801B8728; + + +extern u8 D_801B9BB2; +extern u8 D_801B9C26; +extern u8 D_801B9ADA; +extern u8 D_801B9B94; +extern u8 D_801B9AB8; +extern u8 D_801B9AD9; + + +extern s32 D_801B9B98; +extern s32 D_801B873C; +extern s32 D_801B8738; +extern s32 D_801B8720; +extern s32 D_801B872C; +extern s32 D_801B8730; + +extern void *D_801B8710; +extern s32 D_801B8748; +extern void *D_801B8718; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186AB0[]; + extern Rec12 D_80186AE8[]; + extern u8 D_80078EAF; + extern u8 D_801B9B70; + extern s32 D_801B8734; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186AEC[]; + extern u8 D_80186AF0[]; + extern unsigned char D_801B9AD0; + extern s16 *D_801B871C; + extern s32 D_801B874C; + extern s32 D_801B8750; + extern s32 D_801B8754; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B8740 & 1)) { + D_801B8728 = 1; + } else { + D_801B8728 = D_80078EAF; + } + + b0 = ((u8 *)D_80186AE8)[D_801B8728 * 12]; + D_801B9BB2 = b0; + D_801B9C26 = b0; + b1 = D_80186AEC[D_801B8728 * 12]; + D_801B9ADA = b1; + D_801B9B94 = b1; + b2 = D_80186AF0[D_801B8728 * 12]; + D_801B9AB8 = b2; + D_801B9AD9 = b2; + + (*(S9 *)&D_801B9AD0) = ((S9 *)D_80186AB0)[D_801B8728]; + (*(S9 *)&D_801B9B70) = *(S9 *)(&D_801B9AB8 + 0x18); /* same addr as (*(S9 *)&D_801B9AD0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B9B98 = 1; + D_801B873C = -1; + D_801B8738 = 0; + D_801B8734 = -1; + D_801B8720 = 0; + D_801B872C = 0; + D_801B8730 = 0; + + if ((D_801B8740 & 2) && (D_801B8728 == 4)) { + s0v = (*(s32 * *)&D_801B8710)[18]; + t9v = (*(s32 * *)&D_801B8710)[19]; + t8v = (*(s32 * *)&D_801B8710)[20]; + } else { + s32 *p = (s32 *)(D_801B8728 * 12 + (s32) (*(s32 * *)&D_801B8710)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B871C) = arg0; + if (arg0 != 0) { + if (D_801B8748 != 0) { + s32 *p = (s32 *)(D_801B8728 * 12 + (s32) (*(s32 * *)&D_801B8718)); + D_801B874C = p[0]; + D_801B8750 = p[1]; + D_801B8754 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8013F350.c b/src/ov_SC03_102/ov_SC03_102_jr_8013F350.c index d2db3cb94..abaae6f27 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8013F350.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80186918[]; extern u8 D_80186A14[]; extern u8 D_80186A94[]; extern u8 D_8018696C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c b/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c index 3b8136952..5d264607e 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80186918[]; extern u8 D_80186A14[]; extern u8 D_80186A94[]; extern u8 D_8018696C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_102/ov_SC03_102_jr_80140608.c b/src/ov_SC03_102/ov_SC03_102_jr_80140608.c index 0944a0134..eabd9dad2 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_80140608.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80186918[]; extern u8 D_80186A14[]; extern u8 D_80186A94[]; extern u8 D_8018696C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_103/ov_SC03_103_jr_801380E0.c b/src/ov_SC03_103/ov_SC03_103_jr_801380E0.c index 887887381..a68417b63 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_801380E0.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_801849C4[]; extern u8 D_80184A44[]; extern u8 D_8018491C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C38F8; +extern s32 D_801C38E0; + + +extern u8 D_801C4D62; +extern u8 D_801C4DD6; +extern u8 D_801C4C8A; +extern u8 D_801C4D44; +extern u8 D_801C4C68; +extern u8 D_801C4C89; + + +extern s32 D_801C4D48; +extern s32 D_801C38F4; +extern s32 D_801C38F0; +extern s32 D_801C38D8; +extern s32 D_801C38E4; +extern s32 D_801C38E8; + +extern void *D_801C38C8; +extern s32 D_801C3900; +extern void *D_801C38D0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80184A60[]; + extern Rec12 D_80184A98[]; + extern u8 D_80078EAF; + extern u8 D_801C4D20; + extern s32 D_801C38EC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80184A9C[]; + extern u8 D_80184AA0[]; + extern unsigned char D_801C4C80; + extern s16 *D_801C38D4; + extern s32 D_801C3904; + extern s32 D_801C3908; + extern s32 D_801C390C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C38F8 & 1)) { + D_801C38E0 = 1; + } else { + D_801C38E0 = D_80078EAF; + } + + b0 = ((u8 *)D_80184A98)[D_801C38E0 * 12]; + D_801C4D62 = b0; + D_801C4DD6 = b0; + b1 = D_80184A9C[D_801C38E0 * 12]; + D_801C4C8A = b1; + D_801C4D44 = b1; + b2 = D_80184AA0[D_801C38E0 * 12]; + D_801C4C68 = b2; + D_801C4C89 = b2; + + (*(S9 *)&D_801C4C80) = ((S9 *)D_80184A60)[D_801C38E0]; + (*(S9 *)&D_801C4D20) = *(S9 *)(&D_801C4C68 + 0x18); /* same addr as (*(S9 *)&D_801C4C80); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C4D48 = 1; + D_801C38F4 = -1; + D_801C38F0 = 0; + D_801C38EC = -1; + D_801C38D8 = 0; + D_801C38E4 = 0; + D_801C38E8 = 0; + + if ((D_801C38F8 & 2) && (D_801C38E0 == 4)) { + s0v = (*(s32 * *)&D_801C38C8)[18]; + t9v = (*(s32 * *)&D_801C38C8)[19]; + t8v = (*(s32 * *)&D_801C38C8)[20]; + } else { + s32 *p = (s32 *)(D_801C38E0 * 12 + (s32) (*(s32 * *)&D_801C38C8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C38D4) = arg0; + if (arg0 != 0) { + if (D_801C3900 != 0) { + s32 *p = (s32 *)(D_801C38E0 * 12 + (s32) (*(s32 * *)&D_801C38D0)); + D_801C3904 = p[0]; + D_801C3908 = p[1]; + D_801C390C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c b/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c index a13d57b23..ff1d2aeb2 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_801848C8[]; extern u8 D_801849C4[]; extern u8 D_80184A44[]; extern u8 D_8018491C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_103/ov_SC03_103_jr_80140608.c b/src/ov_SC03_103/ov_SC03_103_jr_80140608.c index 581df79d6..786b8c554 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_80140608.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_801848C8[]; extern u8 D_801849C4[]; extern u8 D_80184A44[]; extern u8 D_8018491C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_104/ov_SC03_104_jr_801380E0.c b/src/ov_SC03_104/ov_SC03_104_jr_801380E0.c index 900c7a081..b646662da 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_801380E0.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018B554[]; extern u8 D_8018B5D4[]; extern u8 D_8018B4AC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801BEE90; +extern s32 D_801BEE78; + + +extern u8 D_801C0422; +extern u8 D_801C0496; +extern u8 D_801C034A; +extern u8 D_801C0404; +extern u8 D_801C0328; +extern u8 D_801C0349; + + +extern s32 D_801C0408; +extern s32 D_801BEE8C; +extern s32 D_801BEE88; +extern s32 D_801BEE70; +extern s32 D_801BEE7C; +extern s32 D_801BEE80; + +extern void *D_801BEE60; +extern s32 D_801BEE98; +extern void *D_801BEE68; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018B5F0[]; + extern Rec12 D_8018B628[]; + extern u8 D_80078EAF; + extern u8 D_801C03E0; + extern s32 D_801BEE84; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018B62C[]; + extern u8 D_8018B630[]; + extern unsigned char D_801C0340; + extern s16 *D_801BEE6C; + extern s32 D_801BEE9C; + extern s32 D_801BEEA0; + extern s32 D_801BEEA4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801BEE90 & 1)) { + D_801BEE78 = 1; + } else { + D_801BEE78 = D_80078EAF; + } + + b0 = ((u8 *)D_8018B628)[D_801BEE78 * 12]; + D_801C0422 = b0; + D_801C0496 = b0; + b1 = D_8018B62C[D_801BEE78 * 12]; + D_801C034A = b1; + D_801C0404 = b1; + b2 = D_8018B630[D_801BEE78 * 12]; + D_801C0328 = b2; + D_801C0349 = b2; + + (*(S9 *)&D_801C0340) = ((S9 *)D_8018B5F0)[D_801BEE78]; + (*(S9 *)&D_801C03E0) = *(S9 *)(&D_801C0328 + 0x18); /* same addr as (*(S9 *)&D_801C0340); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C0408 = 1; + D_801BEE8C = -1; + D_801BEE88 = 0; + D_801BEE84 = -1; + D_801BEE70 = 0; + D_801BEE7C = 0; + D_801BEE80 = 0; + + if ((D_801BEE90 & 2) && (D_801BEE78 == 4)) { + s0v = (*(s32 * *)&D_801BEE60)[18]; + t9v = (*(s32 * *)&D_801BEE60)[19]; + t8v = (*(s32 * *)&D_801BEE60)[20]; + } else { + s32 *p = (s32 *)(D_801BEE78 * 12 + (s32) (*(s32 * *)&D_801BEE60)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801BEE6C) = arg0; + if (arg0 != 0) { + if (D_801BEE98 != 0) { + s32 *p = (s32 *)(D_801BEE78 * 12 + (s32) (*(s32 * *)&D_801BEE68)); + D_801BEE9C = p[0]; + D_801BEEA0 = p[1]; + D_801BEEA4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8013F350.c b/src/ov_SC03_104/ov_SC03_104_jr_8013F350.c index 11e5db865..4ec1b3660 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8013F350.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018B458[]; extern u8 D_8018B554[]; extern u8 D_8018B5D4[]; extern u8 D_8018B4AC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c b/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c index 84b519328..a325ba950 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018B458[]; extern u8 D_8018B554[]; extern u8 D_8018B5D4[]; extern u8 D_8018B4AC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_104/ov_SC03_104_jr_80140608.c b/src/ov_SC03_104/ov_SC03_104_jr_80140608.c index 4f67f38b3..dbe9e2802 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_80140608.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018B458[]; extern u8 D_8018B554[]; extern u8 D_8018B5D4[]; extern u8 D_8018B4AC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_108/ov_SC03_108_jr_801380E0.c b/src/ov_SC03_108/ov_SC03_108_jr_801380E0.c index ceb08ad6d..3faaa87dd 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_801380E0.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80181534[]; extern u8 D_801815B4[]; extern u8 D_8018148C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A0710; +extern s32 D_801A06F8; + + +extern u8 D_801A1A32; +extern u8 D_801A1AA6; +extern u8 D_801A195A; +extern u8 D_801A1A14; +extern u8 D_801A1938; +extern u8 D_801A1959; + + +extern s32 D_801A1A18; +extern s32 D_801A070C; +extern s32 D_801A0708; +extern s32 D_801A06F0; +extern s32 D_801A06FC; +extern s32 D_801A0700; + +extern void *D_801A06E0; +extern s32 D_801A0718; +extern void *D_801A06E8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801815D0[]; + extern Rec12 D_80181608[]; + extern u8 D_80078EAF; + extern u8 D_801A19F0; + extern s32 D_801A0704; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018160C[]; + extern u8 D_80181610[]; + extern unsigned char D_801A1950; + extern s16 *D_801A06EC; + extern s32 D_801A071C; + extern s32 D_801A0720; + extern s32 D_801A0724; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A0710 & 1)) { + D_801A06F8 = 1; + } else { + D_801A06F8 = D_80078EAF; + } + + b0 = ((u8 *)D_80181608)[D_801A06F8 * 12]; + D_801A1A32 = b0; + D_801A1AA6 = b0; + b1 = D_8018160C[D_801A06F8 * 12]; + D_801A195A = b1; + D_801A1A14 = b1; + b2 = D_80181610[D_801A06F8 * 12]; + D_801A1938 = b2; + D_801A1959 = b2; + + (*(S9 *)&D_801A1950) = ((S9 *)D_801815D0)[D_801A06F8]; + (*(S9 *)&D_801A19F0) = *(S9 *)(&D_801A1938 + 0x18); /* same addr as (*(S9 *)&D_801A1950); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A1A18 = 1; + D_801A070C = -1; + D_801A0708 = 0; + D_801A0704 = -1; + D_801A06F0 = 0; + D_801A06FC = 0; + D_801A0700 = 0; + + if ((D_801A0710 & 2) && (D_801A06F8 == 4)) { + s0v = (*(s32 * *)&D_801A06E0)[18]; + t9v = (*(s32 * *)&D_801A06E0)[19]; + t8v = (*(s32 * *)&D_801A06E0)[20]; + } else { + s32 *p = (s32 *)(D_801A06F8 * 12 + (s32) (*(s32 * *)&D_801A06E0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A06EC) = arg0; + if (arg0 != 0) { + if (D_801A0718 != 0) { + s32 *p = (s32 *)(D_801A06F8 * 12 + (s32) (*(s32 * *)&D_801A06E8)); + D_801A071C = p[0]; + D_801A0720 = p[1]; + D_801A0724 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8013F350.c b/src/ov_SC03_108/ov_SC03_108_jr_8013F350.c index f022d794c..ebc90f996 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8013F350.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80181438[]; extern u8 D_80181534[]; extern u8 D_801815B4[]; extern u8 D_8018148C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c b/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c index 662191db6..aa7afbe02 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80181438[]; extern u8 D_80181534[]; extern u8 D_801815B4[]; extern u8 D_8018148C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_108/ov_SC03_108_jr_80140608.c b/src/ov_SC03_108/ov_SC03_108_jr_80140608.c index 583baacc8..f5e8343dc 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_80140608.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80181438[]; extern u8 D_80181534[]; extern u8 D_801815B4[]; extern u8 D_8018148C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_109/ov_SC03_109_jr_801380E0.c b/src/ov_SC03_109/ov_SC03_109_jr_801380E0.c index 933903b94..f446fd62e 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_801380E0.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017EBE0[]; extern u8 D_8017EC60[]; extern u8 D_8017EB38[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80199120; +extern s32 D_80199108; + + +extern u8 D_8019A43A; +extern u8 D_8019A4AE; +extern u8 D_8019A362; +extern u8 D_8019A41C; +extern u8 D_8019A340; +extern u8 D_8019A361; + + +extern s32 D_8019A420; +extern s32 D_8019911C; +extern s32 D_80199118; +extern s32 D_80199100; +extern s32 D_8019910C; +extern s32 D_80199110; + +extern void *D_801990F0; +extern s32 D_80199128; +extern void *D_801990F8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EC7C[]; + extern Rec12 D_8017ECB4[]; + extern u8 D_80078EAF; + extern u8 D_8019A3F8; + extern s32 D_80199114; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017ECB8[]; + extern u8 D_8017ECBC[]; + extern unsigned char D_8019A358; + extern s16 *D_801990FC; + extern s32 D_8019912C; + extern s32 D_80199130; + extern s32 D_80199134; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80199120 & 1)) { + D_80199108 = 1; + } else { + D_80199108 = D_80078EAF; + } + + b0 = ((u8 *)D_8017ECB4)[D_80199108 * 12]; + D_8019A43A = b0; + D_8019A4AE = b0; + b1 = D_8017ECB8[D_80199108 * 12]; + D_8019A362 = b1; + D_8019A41C = b1; + b2 = D_8017ECBC[D_80199108 * 12]; + D_8019A340 = b2; + D_8019A361 = b2; + + (*(S9 *)&D_8019A358) = ((S9 *)D_8017EC7C)[D_80199108]; + (*(S9 *)&D_8019A3F8) = *(S9 *)(&D_8019A340 + 0x18); /* same addr as (*(S9 *)&D_8019A358); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019A420 = 1; + D_8019911C = -1; + D_80199118 = 0; + D_80199114 = -1; + D_80199100 = 0; + D_8019910C = 0; + D_80199110 = 0; + + if ((D_80199120 & 2) && (D_80199108 == 4)) { + s0v = (*(s32 * *)&D_801990F0)[18]; + t9v = (*(s32 * *)&D_801990F0)[19]; + t8v = (*(s32 * *)&D_801990F0)[20]; + } else { + s32 *p = (s32 *)(D_80199108 * 12 + (s32) (*(s32 * *)&D_801990F0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801990FC) = arg0; + if (arg0 != 0) { + if (D_80199128 != 0) { + s32 *p = (s32 *)(D_80199108 * 12 + (s32) (*(s32 * *)&D_801990F8)); + D_8019912C = p[0]; + D_80199130 = p[1]; + D_80199134 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8013F350.c b/src/ov_SC03_109/ov_SC03_109_jr_8013F350.c index af575c7ce..dada56255 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8013F350.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017EAE4[]; extern u8 D_8017EBE0[]; extern u8 D_8017EC60[]; extern u8 D_8017EB38[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c b/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c index d0062290f..31259c3ec 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017EAE4[]; extern u8 D_8017EBE0[]; extern u8 D_8017EC60[]; extern u8 D_8017EB38[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_109/ov_SC03_109_jr_80140608.c b/src/ov_SC03_109/ov_SC03_109_jr_80140608.c index 502575fdd..c4f592a83 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_80140608.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017EAE4[]; extern u8 D_8017EBE0[]; extern u8 D_8017EC60[]; extern u8 D_8017EB38[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_110/ov_SC03_110_jr_801380E0.c b/src/ov_SC03_110/ov_SC03_110_jr_801380E0.c index 0369f17c6..061b75d85 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_801380E0.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182600[]; extern u8 D_80182680[]; extern u8 D_80182558[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A0EC8; +extern s32 D_801A0EB0; + + +extern u8 D_801A246A; +extern u8 D_801A24DE; +extern u8 D_801A2392; +extern u8 D_801A244C; +extern u8 D_801A2370; +extern u8 D_801A2391; + + +extern s32 D_801A2450; +extern s32 D_801A0EC4; +extern s32 D_801A0EC0; +extern s32 D_801A0EA8; +extern s32 D_801A0EB4; +extern s32 D_801A0EB8; + +extern void *D_801A0E98; +extern s32 D_801A0ED0; +extern void *D_801A0EA0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018269C[]; + extern Rec12 D_801826D4[]; + extern u8 D_80078EAF; + extern u8 D_801A2428; + extern s32 D_801A0EBC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801826D8[]; + extern u8 D_801826DC[]; + extern unsigned char D_801A2388; + extern s16 *D_801A0EA4; + extern s32 D_801A0ED4; + extern s32 D_801A0ED8; + extern s32 D_801A0EDC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A0EC8 & 1)) { + D_801A0EB0 = 1; + } else { + D_801A0EB0 = D_80078EAF; + } + + b0 = ((u8 *)D_801826D4)[D_801A0EB0 * 12]; + D_801A246A = b0; + D_801A24DE = b0; + b1 = D_801826D8[D_801A0EB0 * 12]; + D_801A2392 = b1; + D_801A244C = b1; + b2 = D_801826DC[D_801A0EB0 * 12]; + D_801A2370 = b2; + D_801A2391 = b2; + + (*(S9 *)&D_801A2388) = ((S9 *)D_8018269C)[D_801A0EB0]; + (*(S9 *)&D_801A2428) = *(S9 *)(&D_801A2370 + 0x18); /* same addr as (*(S9 *)&D_801A2388); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A2450 = 1; + D_801A0EC4 = -1; + D_801A0EC0 = 0; + D_801A0EBC = -1; + D_801A0EA8 = 0; + D_801A0EB4 = 0; + D_801A0EB8 = 0; + + if ((D_801A0EC8 & 2) && (D_801A0EB0 == 4)) { + s0v = (*(s32 * *)&D_801A0E98)[18]; + t9v = (*(s32 * *)&D_801A0E98)[19]; + t8v = (*(s32 * *)&D_801A0E98)[20]; + } else { + s32 *p = (s32 *)(D_801A0EB0 * 12 + (s32) (*(s32 * *)&D_801A0E98)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A0EA4) = arg0; + if (arg0 != 0) { + if (D_801A0ED0 != 0) { + s32 *p = (s32 *)(D_801A0EB0 * 12 + (s32) (*(s32 * *)&D_801A0EA0)); + D_801A0ED4 = p[0]; + D_801A0ED8 = p[1]; + D_801A0EDC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8013F350.c b/src/ov_SC03_110/ov_SC03_110_jr_8013F350.c index 9c96f0bd3..811f0d1aa 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8013F350.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182504[]; extern u8 D_80182600[]; extern u8 D_80182680[]; extern u8 D_80182558[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c b/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c index c2415ce68..416dc92cf 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182504[]; extern u8 D_80182600[]; extern u8 D_80182680[]; extern u8 D_80182558[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_110/ov_SC03_110_jr_80140608.c b/src/ov_SC03_110/ov_SC03_110_jr_80140608.c index f489faf9d..97c3ab71c 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_80140608.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182504[]; extern u8 D_80182600[]; extern u8 D_80182680[]; extern u8 D_80182558[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_111/ov_SC03_111_jr_801380E0.c b/src/ov_SC03_111/ov_SC03_111_jr_801380E0.c index 3a79c0a95..baadeeb68 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_801380E0.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801851B4[]; extern u8 D_80185234[]; extern u8 D_8018510C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B83D0; +extern s32 D_801B83B8; + + +extern u8 D_801B9B12; +extern u8 D_801B9B86; +extern u8 D_801B9A3A; +extern u8 D_801B9AF4; +extern u8 D_801B9A18; +extern u8 D_801B9A39; + + +extern s32 D_801B9AF8; +extern s32 D_801B83CC; +extern s32 D_801B83C8; +extern s32 D_801B83B0; +extern s32 D_801B83BC; +extern s32 D_801B83C0; + +extern void *D_801B83A0; +extern s32 D_801B83D8; +extern void *D_801B83A8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80185250[]; + extern Rec12 D_80185288[]; + extern u8 D_80078EAF; + extern u8 D_801B9AD0; + extern s32 D_801B83C4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018528C[]; + extern u8 D_80185290[]; + extern unsigned char D_801B9A30; + extern s16 *D_801B83AC; + extern s32 D_801B83DC; + extern s32 D_801B83E0; + extern s32 D_801B83E4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B83D0 & 1)) { + D_801B83B8 = 1; + } else { + D_801B83B8 = D_80078EAF; + } + + b0 = ((u8 *)D_80185288)[D_801B83B8 * 12]; + D_801B9B12 = b0; + D_801B9B86 = b0; + b1 = D_8018528C[D_801B83B8 * 12]; + D_801B9A3A = b1; + D_801B9AF4 = b1; + b2 = D_80185290[D_801B83B8 * 12]; + D_801B9A18 = b2; + D_801B9A39 = b2; + + (*(S9 *)&D_801B9A30) = ((S9 *)D_80185250)[D_801B83B8]; + (*(S9 *)&D_801B9AD0) = *(S9 *)(&D_801B9A18 + 0x18); /* same addr as (*(S9 *)&D_801B9A30); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B9AF8 = 1; + D_801B83CC = -1; + D_801B83C8 = 0; + D_801B83C4 = -1; + D_801B83B0 = 0; + D_801B83BC = 0; + D_801B83C0 = 0; + + if ((D_801B83D0 & 2) && (D_801B83B8 == 4)) { + s0v = (*(s32 * *)&D_801B83A0)[18]; + t9v = (*(s32 * *)&D_801B83A0)[19]; + t8v = (*(s32 * *)&D_801B83A0)[20]; + } else { + s32 *p = (s32 *)(D_801B83B8 * 12 + (s32) (*(s32 * *)&D_801B83A0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B83AC) = arg0; + if (arg0 != 0) { + if (D_801B83D8 != 0) { + s32 *p = (s32 *)(D_801B83B8 * 12 + (s32) (*(s32 * *)&D_801B83A8)); + D_801B83DC = p[0]; + D_801B83E0 = p[1]; + D_801B83E4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8013F350.c b/src/ov_SC03_111/ov_SC03_111_jr_8013F350.c index 99807c481..20cb5e551 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8013F350.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801850B8[]; extern u8 D_801851B4[]; extern u8 D_80185234[]; extern u8 D_8018510C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c b/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c index 44e90df56..961bfb2dd 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801850B8[]; extern u8 D_801851B4[]; extern u8 D_80185234[]; extern u8 D_8018510C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_111/ov_SC03_111_jr_80140608.c b/src/ov_SC03_111/ov_SC03_111_jr_80140608.c index 338681627..d59c2658a 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_80140608.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801850B8[]; extern u8 D_801851B4[]; extern u8 D_80185234[]; extern u8 D_8018510C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_112/ov_SC03_112_jr_801380E0.c b/src/ov_SC03_112/ov_SC03_112_jr_801380E0.c index 0fca82e5f..1b035ded8 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_801380E0.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185FBC[]; extern u8 D_8018603C[]; extern u8 D_80185F14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801ABC30; +extern s32 D_801ABC18; + + +extern u8 D_801AD0DA; +extern u8 D_801AD14E; +extern u8 D_801AD002; +extern u8 D_801AD0BC; +extern u8 D_801ACFE0; +extern u8 D_801AD001; + + +extern s32 D_801AD0C0; +extern s32 D_801ABC2C; +extern s32 D_801ABC28; +extern s32 D_801ABC10; +extern s32 D_801ABC1C; +extern s32 D_801ABC20; + +extern void *D_801ABC00; +extern s32 D_801ABC38; +extern void *D_801ABC08; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186058[]; + extern Rec12 D_80186090[]; + extern u8 D_80078EAF; + extern u8 D_801AD098; + extern s32 D_801ABC24; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186094[]; + extern u8 D_80186098[]; + extern unsigned char D_801ACFF8; + extern s16 *D_801ABC0C; + extern s32 D_801ABC3C; + extern s32 D_801ABC40; + extern s32 D_801ABC44; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801ABC30 & 1)) { + D_801ABC18 = 1; + } else { + D_801ABC18 = D_80078EAF; + } + + b0 = ((u8 *)D_80186090)[D_801ABC18 * 12]; + D_801AD0DA = b0; + D_801AD14E = b0; + b1 = D_80186094[D_801ABC18 * 12]; + D_801AD002 = b1; + D_801AD0BC = b1; + b2 = D_80186098[D_801ABC18 * 12]; + D_801ACFE0 = b2; + D_801AD001 = b2; + + (*(S9 *)&D_801ACFF8) = ((S9 *)D_80186058)[D_801ABC18]; + (*(S9 *)&D_801AD098) = *(S9 *)(&D_801ACFE0 + 0x18); /* same addr as (*(S9 *)&D_801ACFF8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AD0C0 = 1; + D_801ABC2C = -1; + D_801ABC28 = 0; + D_801ABC24 = -1; + D_801ABC10 = 0; + D_801ABC1C = 0; + D_801ABC20 = 0; + + if ((D_801ABC30 & 2) && (D_801ABC18 == 4)) { + s0v = (*(s32 * *)&D_801ABC00)[18]; + t9v = (*(s32 * *)&D_801ABC00)[19]; + t8v = (*(s32 * *)&D_801ABC00)[20]; + } else { + s32 *p = (s32 *)(D_801ABC18 * 12 + (s32) (*(s32 * *)&D_801ABC00)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801ABC0C) = arg0; + if (arg0 != 0) { + if (D_801ABC38 != 0) { + s32 *p = (s32 *)(D_801ABC18 * 12 + (s32) (*(s32 * *)&D_801ABC08)); + D_801ABC3C = p[0]; + D_801ABC40 = p[1]; + D_801ABC44 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8013F350.c b/src/ov_SC03_112/ov_SC03_112_jr_8013F350.c index 29e0206cd..778ed4cb5 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8013F350.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185EC0[]; extern u8 D_80185FBC[]; extern u8 D_8018603C[]; extern u8 D_80185F14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c b/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c index 6c218eb2a..f49986816 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185EC0[]; extern u8 D_80185FBC[]; extern u8 D_8018603C[]; extern u8 D_80185F14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80140608.c b/src/ov_SC03_112/ov_SC03_112_jr_80140608.c index 5bdb1f768..de581cf2e 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_80140608.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185EC0[]; extern u8 D_80185FBC[]; extern u8 D_8018603C[]; extern u8 D_80185F14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_113/ov_SC03_113_jr_801380E0.c b/src/ov_SC03_113/ov_SC03_113_jr_801380E0.c index 7f52771e2..05453a271 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_801380E0.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018366C[]; extern u8 D_801836EC[]; extern u8 D_801835C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A47C0; +extern s32 D_801A47A8; + + +extern u8 D_801A5C7A; +extern u8 D_801A5CEE; +extern u8 D_801A5BA2; +extern u8 D_801A5C5C; +extern u8 D_801A5B80; +extern u8 D_801A5BA1; + + +extern s32 D_801A5C60; +extern s32 D_801A47BC; +extern s32 D_801A47B8; +extern s32 D_801A47A0; +extern s32 D_801A47AC; +extern s32 D_801A47B0; + +extern void *D_801A4790; +extern s32 D_801A47C8; +extern void *D_801A4798; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80183708[]; + extern Rec12 D_80183740[]; + extern u8 D_80078EAF; + extern u8 D_801A5C38; + extern s32 D_801A47B4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80183744[]; + extern u8 D_80183748[]; + extern unsigned char D_801A5B98; + extern s16 *D_801A479C; + extern s32 D_801A47CC; + extern s32 D_801A47D0; + extern s32 D_801A47D4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A47C0 & 1)) { + D_801A47A8 = 1; + } else { + D_801A47A8 = D_80078EAF; + } + + b0 = ((u8 *)D_80183740)[D_801A47A8 * 12]; + D_801A5C7A = b0; + D_801A5CEE = b0; + b1 = D_80183744[D_801A47A8 * 12]; + D_801A5BA2 = b1; + D_801A5C5C = b1; + b2 = D_80183748[D_801A47A8 * 12]; + D_801A5B80 = b2; + D_801A5BA1 = b2; + + (*(S9 *)&D_801A5B98) = ((S9 *)D_80183708)[D_801A47A8]; + (*(S9 *)&D_801A5C38) = *(S9 *)(&D_801A5B80 + 0x18); /* same addr as (*(S9 *)&D_801A5B98); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A5C60 = 1; + D_801A47BC = -1; + D_801A47B8 = 0; + D_801A47B4 = -1; + D_801A47A0 = 0; + D_801A47AC = 0; + D_801A47B0 = 0; + + if ((D_801A47C0 & 2) && (D_801A47A8 == 4)) { + s0v = (*(s32 * *)&D_801A4790)[18]; + t9v = (*(s32 * *)&D_801A4790)[19]; + t8v = (*(s32 * *)&D_801A4790)[20]; + } else { + s32 *p = (s32 *)(D_801A47A8 * 12 + (s32) (*(s32 * *)&D_801A4790)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A479C) = arg0; + if (arg0 != 0) { + if (D_801A47C8 != 0) { + s32 *p = (s32 *)(D_801A47A8 * 12 + (s32) (*(s32 * *)&D_801A4798)); + D_801A47CC = p[0]; + D_801A47D0 = p[1]; + D_801A47D4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8013F350.c b/src/ov_SC03_113/ov_SC03_113_jr_8013F350.c index 4f872ea49..21e378374 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8013F350.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80183570[]; extern u8 D_8018366C[]; extern u8 D_801836EC[]; extern u8 D_801835C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c b/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c index c97981e99..abb33edcf 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80183570[]; extern u8 D_8018366C[]; extern u8 D_801836EC[]; extern u8 D_801835C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_113/ov_SC03_113_jr_80140608.c b/src/ov_SC03_113/ov_SC03_113_jr_80140608.c index c2876cbe2..4aeebdf8d 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_80140608.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80183570[]; extern u8 D_8018366C[]; extern u8 D_801836EC[]; extern u8 D_801835C4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_114/ov_SC03_114_jr_801380E0.c b/src/ov_SC03_114/ov_SC03_114_jr_801380E0.c index c5628de91..ae14da8c9 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_801380E0.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F2D4[]; extern u8 D_8017F354[]; extern u8 D_8017F22C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A8458; +extern s32 D_801A8440; + + +extern u8 D_801A97F2; +extern u8 D_801A9866; +extern u8 D_801A971A; +extern u8 D_801A97D4; +extern u8 D_801A96F8; +extern u8 D_801A9719; + + +extern s32 D_801A97D8; +extern s32 D_801A8454; +extern s32 D_801A8450; +extern s32 D_801A8438; +extern s32 D_801A8444; +extern s32 D_801A8448; + +extern void *D_801A8428; +extern s32 D_801A8460; +extern void *D_801A8430; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F370[]; + extern Rec12 D_8017F3A8[]; + extern u8 D_80078EAF; + extern u8 D_801A97B0; + extern s32 D_801A844C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F3AC[]; + extern u8 D_8017F3B0[]; + extern unsigned char D_801A9710; + extern s16 *D_801A8434; + extern s32 D_801A8464; + extern s32 D_801A8468; + extern s32 D_801A846C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A8458 & 1)) { + D_801A8440 = 1; + } else { + D_801A8440 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F3A8)[D_801A8440 * 12]; + D_801A97F2 = b0; + D_801A9866 = b0; + b1 = D_8017F3AC[D_801A8440 * 12]; + D_801A971A = b1; + D_801A97D4 = b1; + b2 = D_8017F3B0[D_801A8440 * 12]; + D_801A96F8 = b2; + D_801A9719 = b2; + + (*(S9 *)&D_801A9710) = ((S9 *)D_8017F370)[D_801A8440]; + (*(S9 *)&D_801A97B0) = *(S9 *)(&D_801A96F8 + 0x18); /* same addr as (*(S9 *)&D_801A9710); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A97D8 = 1; + D_801A8454 = -1; + D_801A8450 = 0; + D_801A844C = -1; + D_801A8438 = 0; + D_801A8444 = 0; + D_801A8448 = 0; + + if ((D_801A8458 & 2) && (D_801A8440 == 4)) { + s0v = (*(s32 * *)&D_801A8428)[18]; + t9v = (*(s32 * *)&D_801A8428)[19]; + t8v = (*(s32 * *)&D_801A8428)[20]; + } else { + s32 *p = (s32 *)(D_801A8440 * 12 + (s32) (*(s32 * *)&D_801A8428)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A8434) = arg0; + if (arg0 != 0) { + if (D_801A8460 != 0) { + s32 *p = (s32 *)(D_801A8440 * 12 + (s32) (*(s32 * *)&D_801A8430)); + D_801A8464 = p[0]; + D_801A8468 = p[1]; + D_801A846C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8013F350.c b/src/ov_SC03_114/ov_SC03_114_jr_8013F350.c index 52ad54cd9..3fb36bbd9 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8013F350.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F1D8[]; extern u8 D_8017F2D4[]; extern u8 D_8017F354[]; extern u8 D_8017F22C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c b/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c index f635bdec2..0e2da9e4d 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F1D8[]; extern u8 D_8017F2D4[]; extern u8 D_8017F354[]; extern u8 D_8017F22C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_114/ov_SC03_114_jr_80140608.c b/src/ov_SC03_114/ov_SC03_114_jr_80140608.c index fae7c1481..d9524c362 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_80140608.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F1D8[]; extern u8 D_8017F2D4[]; extern u8 D_8017F354[]; extern u8 D_8017F22C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_115/ov_SC03_115_jr_801380E0.c b/src/ov_SC03_115/ov_SC03_115_jr_801380E0.c index f7f15e63f..604b5bd30 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_801380E0.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80180D40[]; extern u8 D_80180DC0[]; extern u8 D_80180C98[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80193DB0; +extern s32 D_80193D98; + + +extern u8 D_801950CA; +extern u8 D_8019513E; +extern u8 D_80194FF2; +extern u8 D_801950AC; +extern u8 D_80194FD0; +extern u8 D_80194FF1; + + +extern s32 D_801950B0; +extern s32 D_80193DAC; +extern s32 D_80193DA8; +extern s32 D_80193D90; +extern s32 D_80193D9C; +extern s32 D_80193DA0; + +extern void *D_80193D80; +extern s32 D_80193DB8; +extern void *D_80193D88; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80180DDC[]; + extern Rec12 D_80180E14[]; + extern u8 D_80078EAF; + extern u8 D_80195088; + extern s32 D_80193DA4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180E18[]; + extern u8 D_80180E1C[]; + extern unsigned char D_80194FE8; + extern s16 *D_80193D8C; + extern s32 D_80193DBC; + extern s32 D_80193DC0; + extern s32 D_80193DC4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80193DB0 & 1)) { + D_80193D98 = 1; + } else { + D_80193D98 = D_80078EAF; + } + + b0 = ((u8 *)D_80180E14)[D_80193D98 * 12]; + D_801950CA = b0; + D_8019513E = b0; + b1 = D_80180E18[D_80193D98 * 12]; + D_80194FF2 = b1; + D_801950AC = b1; + b2 = D_80180E1C[D_80193D98 * 12]; + D_80194FD0 = b2; + D_80194FF1 = b2; + + (*(S9 *)&D_80194FE8) = ((S9 *)D_80180DDC)[D_80193D98]; + (*(S9 *)&D_80195088) = *(S9 *)(&D_80194FD0 + 0x18); /* same addr as (*(S9 *)&D_80194FE8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801950B0 = 1; + D_80193DAC = -1; + D_80193DA8 = 0; + D_80193DA4 = -1; + D_80193D90 = 0; + D_80193D9C = 0; + D_80193DA0 = 0; + + if ((D_80193DB0 & 2) && (D_80193D98 == 4)) { + s0v = (*(s32 * *)&D_80193D80)[18]; + t9v = (*(s32 * *)&D_80193D80)[19]; + t8v = (*(s32 * *)&D_80193D80)[20]; + } else { + s32 *p = (s32 *)(D_80193D98 * 12 + (s32) (*(s32 * *)&D_80193D80)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80193D8C) = arg0; + if (arg0 != 0) { + if (D_80193DB8 != 0) { + s32 *p = (s32 *)(D_80193D98 * 12 + (s32) (*(s32 * *)&D_80193D88)); + D_80193DBC = p[0]; + D_80193DC0 = p[1]; + D_80193DC4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8013F350.c b/src/ov_SC03_115/ov_SC03_115_jr_8013F350.c index ceb0e6736..b92f30d80 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8013F350.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80180C44[]; extern u8 D_80180D40[]; extern u8 D_80180DC0[]; extern u8 D_80180C98[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c b/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c index 89760ed28..495f8ffb5 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80180C44[]; extern u8 D_80180D40[]; extern u8 D_80180DC0[]; extern u8 D_80180C98[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_115/ov_SC03_115_jr_80140608.c b/src/ov_SC03_115/ov_SC03_115_jr_80140608.c index 2322c7d4c..1e3614d57 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_80140608.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80180C44[]; extern u8 D_80180D40[]; extern u8 D_80180DC0[]; extern u8 D_80180C98[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_116/ov_SC03_116_jr_801380E0.c b/src/ov_SC03_116/ov_SC03_116_jr_801380E0.c index ae813cf42..2d758e899 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_801380E0.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80183144[]; extern u8 D_801831C4[]; extern u8 D_8018309C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80196940; +extern s32 D_80196928; + + +extern u8 D_80197CDA; +extern u8 D_80197D4E; +extern u8 D_80197C02; +extern u8 D_80197CBC; +extern u8 D_80197BE0; +extern u8 D_80197C01; + + +extern s32 D_80197CC0; +extern s32 D_8019693C; +extern s32 D_80196938; +extern s32 D_80196920; +extern s32 D_8019692C; +extern s32 D_80196930; + +extern void *D_80196910; +extern s32 D_80196948; +extern void *D_80196918; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801831E0[]; + extern Rec12 D_80183218[]; + extern u8 D_80078EAF; + extern u8 D_80197C98; + extern s32 D_80196934; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018321C[]; + extern u8 D_80183220[]; + extern unsigned char D_80197BF8; + extern s16 *D_8019691C; + extern s32 D_8019694C; + extern s32 D_80196950; + extern s32 D_80196954; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80196940 & 1)) { + D_80196928 = 1; + } else { + D_80196928 = D_80078EAF; + } + + b0 = ((u8 *)D_80183218)[D_80196928 * 12]; + D_80197CDA = b0; + D_80197D4E = b0; + b1 = D_8018321C[D_80196928 * 12]; + D_80197C02 = b1; + D_80197CBC = b1; + b2 = D_80183220[D_80196928 * 12]; + D_80197BE0 = b2; + D_80197C01 = b2; + + (*(S9 *)&D_80197BF8) = ((S9 *)D_801831E0)[D_80196928]; + (*(S9 *)&D_80197C98) = *(S9 *)(&D_80197BE0 + 0x18); /* same addr as (*(S9 *)&D_80197BF8); distinct sym defeats cse, keeps %hi/%lo */ + + D_80197CC0 = 1; + D_8019693C = -1; + D_80196938 = 0; + D_80196934 = -1; + D_80196920 = 0; + D_8019692C = 0; + D_80196930 = 0; + + if ((D_80196940 & 2) && (D_80196928 == 4)) { + s0v = (*(s32 * *)&D_80196910)[18]; + t9v = (*(s32 * *)&D_80196910)[19]; + t8v = (*(s32 * *)&D_80196910)[20]; + } else { + s32 *p = (s32 *)(D_80196928 * 12 + (s32) (*(s32 * *)&D_80196910)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019691C) = arg0; + if (arg0 != 0) { + if (D_80196948 != 0) { + s32 *p = (s32 *)(D_80196928 * 12 + (s32) (*(s32 * *)&D_80196918)); + D_8019694C = p[0]; + D_80196950 = p[1]; + D_80196954 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8013F350.c b/src/ov_SC03_116/ov_SC03_116_jr_8013F350.c index 6a0c2cba8..0009d8c67 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8013F350.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80183048[]; extern u8 D_80183144[]; extern u8 D_801831C4[]; extern u8 D_8018309C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c b/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c index 1f61cca9b..113a7ce10 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80183048[]; extern u8 D_80183144[]; extern u8 D_801831C4[]; extern u8 D_8018309C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_116/ov_SC03_116_jr_80140608.c b/src/ov_SC03_116/ov_SC03_116_jr_80140608.c index 17ca4d28d..182ba671e 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_80140608.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80183048[]; extern u8 D_80183144[]; extern u8 D_801831C4[]; extern u8 D_8018309C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_117/ov_SC03_117_jr_801380E0.c b/src/ov_SC03_117/ov_SC03_117_jr_801380E0.c index a5218e461..4e5a5109d 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_801380E0.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185150[]; extern u8 D_801851D0[]; extern u8 D_801850A8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CD0B8; +extern s32 D_801CD0A0; + + +extern u8 D_801CE8D2; +extern u8 D_801CE946; +extern u8 D_801CE7FA; +extern u8 D_801CE8B4; +extern u8 D_801CE7D8; +extern u8 D_801CE7F9; + + +extern s32 D_801CE8B8; +extern s32 D_801CD0B4; +extern s32 D_801CD0B0; +extern s32 D_801CD098; +extern s32 D_801CD0A4; +extern s32 D_801CD0A8; + +extern void *D_801CD088; +extern s32 D_801CD0C0; +extern void *D_801CD090; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801851EC[]; + extern Rec12 D_80185224[]; + extern u8 D_80078EAF; + extern u8 D_801CE890; + extern s32 D_801CD0AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185228[]; + extern u8 D_8018522C[]; + extern unsigned char D_801CE7F0; + extern s16 *D_801CD094; + extern s32 D_801CD0C4; + extern s32 D_801CD0C8; + extern s32 D_801CD0CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CD0B8 & 1)) { + D_801CD0A0 = 1; + } else { + D_801CD0A0 = D_80078EAF; + } + + b0 = ((u8 *)D_80185224)[D_801CD0A0 * 12]; + D_801CE8D2 = b0; + D_801CE946 = b0; + b1 = D_80185228[D_801CD0A0 * 12]; + D_801CE7FA = b1; + D_801CE8B4 = b1; + b2 = D_8018522C[D_801CD0A0 * 12]; + D_801CE7D8 = b2; + D_801CE7F9 = b2; + + (*(S9 *)&D_801CE7F0) = ((S9 *)D_801851EC)[D_801CD0A0]; + (*(S9 *)&D_801CE890) = *(S9 *)(&D_801CE7D8 + 0x18); /* same addr as (*(S9 *)&D_801CE7F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801CE8B8 = 1; + D_801CD0B4 = -1; + D_801CD0B0 = 0; + D_801CD0AC = -1; + D_801CD098 = 0; + D_801CD0A4 = 0; + D_801CD0A8 = 0; + + if ((D_801CD0B8 & 2) && (D_801CD0A0 == 4)) { + s0v = (*(s32 * *)&D_801CD088)[18]; + t9v = (*(s32 * *)&D_801CD088)[19]; + t8v = (*(s32 * *)&D_801CD088)[20]; + } else { + s32 *p = (s32 *)(D_801CD0A0 * 12 + (s32) (*(s32 * *)&D_801CD088)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CD094) = arg0; + if (arg0 != 0) { + if (D_801CD0C0 != 0) { + s32 *p = (s32 *)(D_801CD0A0 * 12 + (s32) (*(s32 * *)&D_801CD090)); + D_801CD0C4 = p[0]; + D_801CD0C8 = p[1]; + D_801CD0CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8013F350.c b/src/ov_SC03_117/ov_SC03_117_jr_8013F350.c index 8ffe47c0e..899eac8d5 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8013F350.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185054[]; extern u8 D_80185150[]; extern u8 D_801851D0[]; extern u8 D_801850A8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c b/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c index 5a6428ead..e1f438080 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185054[]; extern u8 D_80185150[]; extern u8 D_801851D0[]; extern u8 D_801850A8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_117/ov_SC03_117_jr_80140608.c b/src/ov_SC03_117/ov_SC03_117_jr_80140608.c index 8dc028386..9344f53e2 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_80140608.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185054[]; extern u8 D_80185150[]; extern u8 D_801851D0[]; extern u8 D_801850A8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_118/ov_SC03_118_jr_801380E0.c b/src/ov_SC03_118/ov_SC03_118_jr_801380E0.c index 0808b22eb..34917d238 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_801380E0.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D3008; +extern s32 D_801D2FF0; + + +extern u8 D_801D47DA; +extern u8 D_801D484E; +extern u8 D_801D4702; +extern u8 D_801D47BC; +extern u8 D_801D46E0; +extern u8 D_801D4701; + + +extern s32 D_801D47C0; +extern s32 D_801D3004; +extern s32 D_801D3000; +extern s32 D_801D2FE8; +extern s32 D_801D2FF4; +extern s32 D_801D2FF8; + +extern void *D_801D2FD8; +extern s32 D_801D3010; +extern void *D_801D2FE0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018A298[]; + extern Rec12 D_8018A2D0[]; + extern u8 D_80078EAF; + extern u8 D_801D4798; + extern s32 D_801D2FFC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018A2D4[]; + extern u8 D_8018A2D8[]; + extern unsigned char D_801D46F8; + extern s16 *D_801D2FE4; + extern s32 D_801D3014; + extern s32 D_801D3018; + extern s32 D_801D301C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D3008 & 1)) { + D_801D2FF0 = 1; + } else { + D_801D2FF0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018A2D0)[D_801D2FF0 * 12]; + D_801D47DA = b0; + D_801D484E = b0; + b1 = D_8018A2D4[D_801D2FF0 * 12]; + D_801D4702 = b1; + D_801D47BC = b1; + b2 = D_8018A2D8[D_801D2FF0 * 12]; + D_801D46E0 = b2; + D_801D4701 = b2; + + (*(S9 *)&D_801D46F8) = ((S9 *)D_8018A298)[D_801D2FF0]; + (*(S9 *)&D_801D4798) = *(S9 *)(&D_801D46E0 + 0x18); /* same addr as (*(S9 *)&D_801D46F8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D47C0 = 1; + D_801D3004 = -1; + D_801D3000 = 0; + D_801D2FFC = -1; + D_801D2FE8 = 0; + D_801D2FF4 = 0; + D_801D2FF8 = 0; + + if ((D_801D3008 & 2) && (D_801D2FF0 == 4)) { + s0v = (*(s32 * *)&D_801D2FD8)[18]; + t9v = (*(s32 * *)&D_801D2FD8)[19]; + t8v = (*(s32 * *)&D_801D2FD8)[20]; + } else { + s32 *p = (s32 *)(D_801D2FF0 * 12 + (s32) (*(s32 * *)&D_801D2FD8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D2FE4) = arg0; + if (arg0 != 0) { + if (D_801D3010 != 0) { + s32 *p = (s32 *)(D_801D2FF0 * 12 + (s32) (*(s32 * *)&D_801D2FE0)); + D_801D3014 = p[0]; + D_801D3018 = p[1]; + D_801D301C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8013F350.c b/src/ov_SC03_118/ov_SC03_118_jr_8013F350.c index 925102104..244e43786 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8013F350.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c b/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c index 21de694d0..c2507f1ea 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_118/ov_SC03_118_jr_80140608.c b/src/ov_SC03_118/ov_SC03_118_jr_80140608.c index 7249034bb..38c25bff7 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_80140608.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_119/ov_SC03_119_jr_801380E0.c b/src/ov_SC03_119/ov_SC03_119_jr_801380E0.c index 00d1540f4..51bc9c669 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_801380E0.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D3008; +extern s32 D_801D2FF0; + + +extern u8 D_801D47DA; +extern u8 D_801D484E; +extern u8 D_801D4702; +extern u8 D_801D47BC; +extern u8 D_801D46E0; +extern u8 D_801D4701; + + +extern s32 D_801D47C0; +extern s32 D_801D3004; +extern s32 D_801D3000; +extern s32 D_801D2FE8; +extern s32 D_801D2FF4; +extern s32 D_801D2FF8; + +extern void *D_801D2FD8; +extern s32 D_801D3010; +extern void *D_801D2FE0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018A298[]; + extern Rec12 D_8018A2D0[]; + extern u8 D_80078EAF; + extern u8 D_801D4798; + extern s32 D_801D2FFC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018A2D4[]; + extern u8 D_8018A2D8[]; + extern unsigned char D_801D46F8; + extern s16 *D_801D2FE4; + extern s32 D_801D3014; + extern s32 D_801D3018; + extern s32 D_801D301C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D3008 & 1)) { + D_801D2FF0 = 1; + } else { + D_801D2FF0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018A2D0)[D_801D2FF0 * 12]; + D_801D47DA = b0; + D_801D484E = b0; + b1 = D_8018A2D4[D_801D2FF0 * 12]; + D_801D4702 = b1; + D_801D47BC = b1; + b2 = D_8018A2D8[D_801D2FF0 * 12]; + D_801D46E0 = b2; + D_801D4701 = b2; + + (*(S9 *)&D_801D46F8) = ((S9 *)D_8018A298)[D_801D2FF0]; + (*(S9 *)&D_801D4798) = *(S9 *)(&D_801D46E0 + 0x18); /* same addr as (*(S9 *)&D_801D46F8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D47C0 = 1; + D_801D3004 = -1; + D_801D3000 = 0; + D_801D2FFC = -1; + D_801D2FE8 = 0; + D_801D2FF4 = 0; + D_801D2FF8 = 0; + + if ((D_801D3008 & 2) && (D_801D2FF0 == 4)) { + s0v = (*(s32 * *)&D_801D2FD8)[18]; + t9v = (*(s32 * *)&D_801D2FD8)[19]; + t8v = (*(s32 * *)&D_801D2FD8)[20]; + } else { + s32 *p = (s32 *)(D_801D2FF0 * 12 + (s32) (*(s32 * *)&D_801D2FD8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D2FE4) = arg0; + if (arg0 != 0) { + if (D_801D3010 != 0) { + s32 *p = (s32 *)(D_801D2FF0 * 12 + (s32) (*(s32 * *)&D_801D2FE0)); + D_801D3014 = p[0]; + D_801D3018 = p[1]; + D_801D301C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8013F350.c b/src/ov_SC03_119/ov_SC03_119_jr_8013F350.c index 925102104..244e43786 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8013F350.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c b/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c index ad2d4febe..7352c7412 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_119/ov_SC03_119_jr_80140608.c b/src/ov_SC03_119/ov_SC03_119_jr_80140608.c index 2143c40e5..1203d7d93 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_80140608.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018A100[]; extern u8 D_8018A1FC[]; extern u8 D_8018A27C[]; extern u8 D_8018A154[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_121/ov_SC03_121_jr_801380E0.c b/src/ov_SC03_121/ov_SC03_121_jr_801380E0.c index 74112d28e..c36dbfe17 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_801380E0.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182A18[]; extern u8 D_80182A98[]; extern u8 D_80182970[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801ADAB0; +extern s32 D_801ADA98; + + +extern u8 D_801AEF3A; +extern u8 D_801AEFAE; +extern u8 D_801AEE62; +extern u8 D_801AEF1C; +extern u8 D_801AEE40; +extern u8 D_801AEE61; + + +extern s32 D_801AEF20; +extern s32 D_801ADAAC; +extern s32 D_801ADAA8; +extern s32 D_801ADA90; +extern s32 D_801ADA9C; +extern s32 D_801ADAA0; + +extern void *D_801ADA80; +extern s32 D_801ADAB8; +extern void *D_801ADA88; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182AB4[]; + extern Rec12 D_80182AEC[]; + extern u8 D_80078EAF; + extern u8 D_801AEEF8; + extern s32 D_801ADAA4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182AF0[]; + extern u8 D_80182AF4[]; + extern unsigned char D_801AEE58; + extern s16 *D_801ADA8C; + extern s32 D_801ADABC; + extern s32 D_801ADAC0; + extern s32 D_801ADAC4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801ADAB0 & 1)) { + D_801ADA98 = 1; + } else { + D_801ADA98 = D_80078EAF; + } + + b0 = ((u8 *)D_80182AEC)[D_801ADA98 * 12]; + D_801AEF3A = b0; + D_801AEFAE = b0; + b1 = D_80182AF0[D_801ADA98 * 12]; + D_801AEE62 = b1; + D_801AEF1C = b1; + b2 = D_80182AF4[D_801ADA98 * 12]; + D_801AEE40 = b2; + D_801AEE61 = b2; + + (*(S9 *)&D_801AEE58) = ((S9 *)D_80182AB4)[D_801ADA98]; + (*(S9 *)&D_801AEEF8) = *(S9 *)(&D_801AEE40 + 0x18); /* same addr as (*(S9 *)&D_801AEE58); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AEF20 = 1; + D_801ADAAC = -1; + D_801ADAA8 = 0; + D_801ADAA4 = -1; + D_801ADA90 = 0; + D_801ADA9C = 0; + D_801ADAA0 = 0; + + if ((D_801ADAB0 & 2) && (D_801ADA98 == 4)) { + s0v = (*(s32 * *)&D_801ADA80)[18]; + t9v = (*(s32 * *)&D_801ADA80)[19]; + t8v = (*(s32 * *)&D_801ADA80)[20]; + } else { + s32 *p = (s32 *)(D_801ADA98 * 12 + (s32) (*(s32 * *)&D_801ADA80)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801ADA8C) = arg0; + if (arg0 != 0) { + if (D_801ADAB8 != 0) { + s32 *p = (s32 *)(D_801ADA98 * 12 + (s32) (*(s32 * *)&D_801ADA88)); + D_801ADABC = p[0]; + D_801ADAC0 = p[1]; + D_801ADAC4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8013F350.c b/src/ov_SC03_121/ov_SC03_121_jr_8013F350.c index 3a18ff8d9..be8d9b65d 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8013F350.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018291C[]; extern u8 D_80182A18[]; extern u8 D_80182A98[]; extern u8 D_80182970[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c b/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c index 208732772..2a1856e56 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018291C[]; extern u8 D_80182A18[]; extern u8 D_80182A98[]; extern u8 D_80182970[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_121/ov_SC03_121_jr_80140608.c b/src/ov_SC03_121/ov_SC03_121_jr_80140608.c index df13c2fff..5f6ffd217 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_80140608.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018291C[]; extern u8 D_80182A18[]; extern u8 D_80182A98[]; extern u8 D_80182970[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_126/ov_SC03_126_jr_801380E0.c b/src/ov_SC03_126/ov_SC03_126_jr_801380E0.c index a3f22d810..80b925a59 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_801380E0.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018E798; +extern s32 D_8018E780; + + +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; + + +extern s32 D_8018FA98; +extern s32 D_8018E794; +extern s32 D_8018E790; +extern s32 D_8018E778; +extern s32 D_8018E784; +extern s32 D_8018E788; + +extern void *D_8018E768; +extern s32 D_8018E7A0; +extern void *D_8018E770; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FBA8[]; + extern Rec12 D_8017FBE0[]; + extern u8 D_80078EAF; + extern u8 D_8018FA70; + extern s32 D_8018E78C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FBE4[]; + extern u8 D_8017FBE8[]; + extern unsigned char D_8018F9D0; + extern s16 *D_8018E774; + extern s32 D_8018E7A4; + extern s32 D_8018E7A8; + extern s32 D_8018E7AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018E798 & 1)) { + D_8018E780 = 1; + } else { + D_8018E780 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FBE0)[D_8018E780 * 12]; + D_8018FAB2 = b0; + D_8018FB2C = b0; + b1 = D_8017FBE4[D_8018E780 * 12]; + D_8018F9DA = b1; + D_8018FA94 = b1; + b2 = D_8017FBE8[D_8018E780 * 12]; + D_8018F9B8 = b2; + D_8018F9D9 = b2; + + (*(S9 *)&D_8018F9D0) = ((S9 *)D_8017FBA8)[D_8018E780]; + (*(S9 *)&D_8018FA70) = *(S9 *)(&D_8018F9B8 + 0x18); /* same addr as (*(S9 *)&D_8018F9D0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8018FA98 = 1; + D_8018E794 = -1; + D_8018E790 = 0; + D_8018E78C = -1; + D_8018E778 = 0; + D_8018E784 = 0; + D_8018E788 = 0; + + if ((D_8018E798 & 2) && (D_8018E780 == 4)) { + s0v = (*(s32 * *)&D_8018E768)[18]; + t9v = (*(s32 * *)&D_8018E768)[19]; + t8v = (*(s32 * *)&D_8018E768)[20]; + } else { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E768)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018E774) = arg0; + if (arg0 != 0) { + if (D_8018E7A0 != 0) { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E770)); + D_8018E7A4 = p[0]; + D_8018E7A8 = p[1]; + D_8018E7AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8013F350.c b/src/ov_SC03_126/ov_SC03_126_jr_8013F350.c index 6a75b5dd5..fa0bf8b4e 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8013F350.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c b/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c index 6681c99a7..8d8530f3a 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC03_126/ov_SC03_126_jr_80140608.c b/src/ov_SC03_126/ov_SC03_126_jr_80140608.c index 8bf62aad9..3600bb01f 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_80140608.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_000/ov_SC04_000_jr_801380E0.c b/src/ov_SC04_000/ov_SC04_000_jr_801380E0.c index ba00d0ca7..9c5637b52 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_801380E0.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_80183B18[]; extern u8 D_80183B98[]; extern u8 D_80183A70[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A8848; +extern s32 D_801A8830; + + +extern u8 D_801AAFE2; +extern u8 D_801AB056; +extern u8 D_801AAF0A; +extern u8 D_801AAFC4; +extern u8 D_801AAEE8; +extern u8 D_801AAF09; + + +extern s32 D_801AAFC8; +extern s32 D_801A8844; +extern s32 D_801A8840; +extern s32 D_801A8828; +extern s32 D_801A8834; +extern s32 D_801A8838; + +extern void *D_801A8818; +extern s32 D_801A8850; +extern void *D_801A8820; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80183BB4[]; + extern Rec12 D_80183BEC[]; + extern u8 D_80078EAF; + extern u8 D_801AAFA0; + extern s32 D_801A883C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80183BF0[]; + extern u8 D_80183BF4[]; + extern unsigned char D_801AAF00; + extern s16 *D_801A8824; + extern s32 D_801A8854; + extern s32 D_801A8858; + extern s32 D_801A885C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A8848 & 1)) { + D_801A8830 = 1; + } else { + D_801A8830 = D_80078EAF; + } + + b0 = ((u8 *)D_80183BEC)[D_801A8830 * 12]; + D_801AAFE2 = b0; + D_801AB056 = b0; + b1 = D_80183BF0[D_801A8830 * 12]; + D_801AAF0A = b1; + D_801AAFC4 = b1; + b2 = D_80183BF4[D_801A8830 * 12]; + D_801AAEE8 = b2; + D_801AAF09 = b2; + + (*(S9 *)&D_801AAF00) = ((S9 *)D_80183BB4)[D_801A8830]; + (*(S9 *)&D_801AAFA0) = *(S9 *)(&D_801AAEE8 + 0x18); /* same addr as (*(S9 *)&D_801AAF00); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AAFC8 = 1; + D_801A8844 = -1; + D_801A8840 = 0; + D_801A883C = -1; + D_801A8828 = 0; + D_801A8834 = 0; + D_801A8838 = 0; + + if ((D_801A8848 & 2) && (D_801A8830 == 4)) { + s0v = (*(s32 * *)&D_801A8818)[18]; + t9v = (*(s32 * *)&D_801A8818)[19]; + t8v = (*(s32 * *)&D_801A8818)[20]; + } else { + s32 *p = (s32 *)(D_801A8830 * 12 + (s32) (*(s32 * *)&D_801A8818)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A8824) = arg0; + if (arg0 != 0) { + if (D_801A8850 != 0) { + s32 *p = (s32 *)(D_801A8830 * 12 + (s32) (*(s32 * *)&D_801A8820)); + D_801A8854 = p[0]; + D_801A8858 = p[1]; + D_801A885C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8013F350.c b/src/ov_SC04_000/ov_SC04_000_jr_8013F350.c index 0cf563d76..c02df7d8a 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8013F350.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_80183A1C[]; extern u8 D_80183B18[]; extern u8 D_80183B98[]; extern u8 D_80183A70[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c b/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c index 01a9fabc8..59467ddae 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_80183A1C[]; extern u8 D_80183B18[]; extern u8 D_80183B98[]; extern u8 D_80183A70[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_000/ov_SC04_000_jr_80140608.c b/src/ov_SC04_000/ov_SC04_000_jr_80140608.c index 94a96a989..fe0e62a51 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_80140608.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_80183A1C[]; extern u8 D_80183B18[]; extern u8 D_80183B98[]; extern u8 D_80183A70[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_002/ov_SC04_002_jr_801380E0.c b/src/ov_SC04_002/ov_SC04_002_jr_801380E0.c index 0ae186f05..37e490688 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_801380E0.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80188C84[]; extern u8 D_80188D04[]; extern u8 D_80188BDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801BFB58; +extern s32 D_801BFB40; + + +extern u8 D_801C16C0; +extern u8 D_801C1736; +extern u8 D_801C15E2; +extern u8 D_801C169C; +extern u8 D_801C15C0; +extern u8 D_801C15E1; + + +extern s32 D_801C16A0; +extern s32 D_801BFB54; +extern s32 D_801BFB50; +extern s32 D_801BFB38; +extern s32 D_801BFB44; +extern s32 D_801BFB48; + +extern void *D_801BFB28; +extern s32 D_801BFB60; +extern void *D_801BFB30; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80188D20[]; + extern Rec12 D_80188D58[]; + extern u8 D_80078EAF; + extern u8 D_801C1678; + extern s32 D_801BFB4C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80188D5C[]; + extern u8 D_80188D60[]; + extern unsigned char D_801C15D8; + extern s16 *D_801BFB34; + extern s32 D_801BFB64; + extern s32 D_801BFB68; + extern s32 D_801BFB6C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801BFB58 & 1)) { + D_801BFB40 = 1; + } else { + D_801BFB40 = D_80078EAF; + } + + b0 = ((u8 *)D_80188D58)[D_801BFB40 * 12]; + D_801C16C0 = b0; + D_801C1736 = b0; + b1 = D_80188D5C[D_801BFB40 * 12]; + D_801C15E2 = b1; + D_801C169C = b1; + b2 = D_80188D60[D_801BFB40 * 12]; + D_801C15C0 = b2; + D_801C15E1 = b2; + + (*(S9 *)&D_801C15D8) = ((S9 *)D_80188D20)[D_801BFB40]; + (*(S9 *)&D_801C1678) = *(S9 *)(&D_801C15C0 + 0x18); /* same addr as (*(S9 *)&D_801C15D8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C16A0 = 1; + D_801BFB54 = -1; + D_801BFB50 = 0; + D_801BFB4C = -1; + D_801BFB38 = 0; + D_801BFB44 = 0; + D_801BFB48 = 0; + + if ((D_801BFB58 & 2) && (D_801BFB40 == 4)) { + s0v = (*(s32 * *)&D_801BFB28)[18]; + t9v = (*(s32 * *)&D_801BFB28)[19]; + t8v = (*(s32 * *)&D_801BFB28)[20]; + } else { + s32 *p = (s32 *)(D_801BFB40 * 12 + (s32) (*(s32 * *)&D_801BFB28)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801BFB34) = arg0; + if (arg0 != 0) { + if (D_801BFB60 != 0) { + s32 *p = (s32 *)(D_801BFB40 * 12 + (s32) (*(s32 * *)&D_801BFB30)); + D_801BFB64 = p[0]; + D_801BFB68 = p[1]; + D_801BFB6C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8013F350.c b/src/ov_SC04_002/ov_SC04_002_jr_8013F350.c index 205ac67a9..7e3f3db41 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8013F350.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80188B88[]; extern u8 D_80188C84[]; extern u8 D_80188D04[]; extern u8 D_80188BDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c b/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c index ab23546c4..d1d5b061b 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80188B88[]; extern u8 D_80188C84[]; extern u8 D_80188D04[]; extern u8 D_80188BDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_002/ov_SC04_002_jr_80140608.c b/src/ov_SC04_002/ov_SC04_002_jr_80140608.c index 895566961..0735ae254 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_80140608.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80188B88[]; extern u8 D_80188C84[]; extern u8 D_80188D04[]; extern u8 D_80188BDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_003/ov_SC04_003_jr_801380E0.c b/src/ov_SC04_003/ov_SC04_003_jr_801380E0.c index bc5bcdff6..60204276d 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_801380E0.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182A20[]; extern u8 D_80182AA0[]; extern u8 D_80182978[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019A7C0; +extern s32 D_8019A7A8; + + +extern u8 D_8019BB7A; +extern u8 D_8019BBEE; +extern u8 D_8019BAA2; +extern u8 D_8019BB5C; +extern u8 D_8019BA80; +extern u8 D_8019BAA1; + + +extern s32 D_8019BB60; +extern s32 D_8019A7BC; +extern s32 D_8019A7B8; +extern s32 D_8019A7A0; +extern s32 D_8019A7AC; +extern s32 D_8019A7B0; + +extern void *D_8019A790; +extern s32 D_8019A7C8; +extern void *D_8019A798; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182ABC[]; + extern Rec12 D_80182AF4[]; + extern u8 D_80078EAF; + extern u8 D_8019BB38; + extern s32 D_8019A7B4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182AF8[]; + extern u8 D_80182AFC[]; + extern unsigned char D_8019BA98; + extern s16 *D_8019A79C; + extern s32 D_8019A7CC; + extern s32 D_8019A7D0; + extern s32 D_8019A7D4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019A7C0 & 1)) { + D_8019A7A8 = 1; + } else { + D_8019A7A8 = D_80078EAF; + } + + b0 = ((u8 *)D_80182AF4)[D_8019A7A8 * 12]; + D_8019BB7A = b0; + D_8019BBEE = b0; + b1 = D_80182AF8[D_8019A7A8 * 12]; + D_8019BAA2 = b1; + D_8019BB5C = b1; + b2 = D_80182AFC[D_8019A7A8 * 12]; + D_8019BA80 = b2; + D_8019BAA1 = b2; + + (*(S9 *)&D_8019BA98) = ((S9 *)D_80182ABC)[D_8019A7A8]; + (*(S9 *)&D_8019BB38) = *(S9 *)(&D_8019BA80 + 0x18); /* same addr as (*(S9 *)&D_8019BA98); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019BB60 = 1; + D_8019A7BC = -1; + D_8019A7B8 = 0; + D_8019A7B4 = -1; + D_8019A7A0 = 0; + D_8019A7AC = 0; + D_8019A7B0 = 0; + + if ((D_8019A7C0 & 2) && (D_8019A7A8 == 4)) { + s0v = (*(s32 * *)&D_8019A790)[18]; + t9v = (*(s32 * *)&D_8019A790)[19]; + t8v = (*(s32 * *)&D_8019A790)[20]; + } else { + s32 *p = (s32 *)(D_8019A7A8 * 12 + (s32) (*(s32 * *)&D_8019A790)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019A79C) = arg0; + if (arg0 != 0) { + if (D_8019A7C8 != 0) { + s32 *p = (s32 *)(D_8019A7A8 * 12 + (s32) (*(s32 * *)&D_8019A798)); + D_8019A7CC = p[0]; + D_8019A7D0 = p[1]; + D_8019A7D4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8013F350.c b/src/ov_SC04_003/ov_SC04_003_jr_8013F350.c index 2e2e04a34..f94d31c50 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8013F350.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182924[]; extern u8 D_80182A20[]; extern u8 D_80182AA0[]; extern u8 D_80182978[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c b/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c index a6697d916..efb9215ae 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182924[]; extern u8 D_80182A20[]; extern u8 D_80182AA0[]; extern u8 D_80182978[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_003/ov_SC04_003_jr_80140608.c b/src/ov_SC04_003/ov_SC04_003_jr_80140608.c index 0eaacb60f..ac5e9eec8 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_80140608.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182924[]; extern u8 D_80182A20[]; extern u8 D_80182AA0[]; extern u8 D_80182978[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_004/ov_SC04_004_jr_801380E0.c b/src/ov_SC04_004/ov_SC04_004_jr_801380E0.c index 0799b7ca1..a53e06b54 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_801380E0.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80184F54[]; extern u8 D_80184FD4[]; extern u8 D_80184EAC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B25C0; +extern s32 D_801B25A8; + + +extern u8 D_801B3BE0; +extern u8 D_801B3C56; +extern u8 D_801B3B02; +extern u8 D_801B3BBC; +extern u8 D_801B3AE0; +extern u8 D_801B3B01; + + +extern s32 D_801B3BC0; +extern s32 D_801B25BC; +extern s32 D_801B25B8; +extern s32 D_801B25A0; +extern s32 D_801B25AC; +extern s32 D_801B25B0; + +extern void *D_801B2590; +extern s32 D_801B25C8; +extern void *D_801B2598; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80184FF0[]; + extern Rec12 D_80185028[]; + extern u8 D_80078EAF; + extern u8 D_801B3B98; + extern s32 D_801B25B4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018502C[]; + extern u8 D_80185030[]; + extern unsigned char D_801B3AF8; + extern s16 *D_801B259C; + extern s32 D_801B25CC; + extern s32 D_801B25D0; + extern s32 D_801B25D4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B25C0 & 1)) { + D_801B25A8 = 1; + } else { + D_801B25A8 = D_80078EAF; + } + + b0 = ((u8 *)D_80185028)[D_801B25A8 * 12]; + D_801B3BE0 = b0; + D_801B3C56 = b0; + b1 = D_8018502C[D_801B25A8 * 12]; + D_801B3B02 = b1; + D_801B3BBC = b1; + b2 = D_80185030[D_801B25A8 * 12]; + D_801B3AE0 = b2; + D_801B3B01 = b2; + + (*(S9 *)&D_801B3AF8) = ((S9 *)D_80184FF0)[D_801B25A8]; + (*(S9 *)&D_801B3B98) = *(S9 *)(&D_801B3AE0 + 0x18); /* same addr as (*(S9 *)&D_801B3AF8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B3BC0 = 1; + D_801B25BC = -1; + D_801B25B8 = 0; + D_801B25B4 = -1; + D_801B25A0 = 0; + D_801B25AC = 0; + D_801B25B0 = 0; + + if ((D_801B25C0 & 2) && (D_801B25A8 == 4)) { + s0v = (*(s32 * *)&D_801B2590)[18]; + t9v = (*(s32 * *)&D_801B2590)[19]; + t8v = (*(s32 * *)&D_801B2590)[20]; + } else { + s32 *p = (s32 *)(D_801B25A8 * 12 + (s32) (*(s32 * *)&D_801B2590)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B259C) = arg0; + if (arg0 != 0) { + if (D_801B25C8 != 0) { + s32 *p = (s32 *)(D_801B25A8 * 12 + (s32) (*(s32 * *)&D_801B2598)); + D_801B25CC = p[0]; + D_801B25D0 = p[1]; + D_801B25D4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8013F350.c b/src/ov_SC04_004/ov_SC04_004_jr_8013F350.c index 550315947..5461e0ae9 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8013F350.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80184E58[]; extern u8 D_80184F54[]; extern u8 D_80184FD4[]; extern u8 D_80184EAC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c b/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c index 13c29eb0e..73c7db6c3 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80184E58[]; extern u8 D_80184F54[]; extern u8 D_80184FD4[]; extern u8 D_80184EAC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_004/ov_SC04_004_jr_80140608.c b/src/ov_SC04_004/ov_SC04_004_jr_80140608.c index 9caade74f..795ac18dd 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_80140608.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80184E58[]; extern u8 D_80184F54[]; extern u8 D_80184FD4[]; extern u8 D_80184EAC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_005/ov_SC04_005_jr_801380E0.c b/src/ov_SC04_005/ov_SC04_005_jr_801380E0.c index c70ebb46e..77ada4473 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_801380E0.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80188388[]; extern u8 D_80188408[]; extern u8 D_801882E0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C0798; +extern s32 D_801C0780; + + +extern u8 D_801C22BA; +extern u8 D_801C232E; +extern u8 D_801C21E2; +extern u8 D_801C229C; +extern u8 D_801C21C0; +extern u8 D_801C21E1; + + +extern s32 D_801C22A0; +extern s32 D_801C0794; +extern s32 D_801C0790; +extern s32 D_801C0778; +extern s32 D_801C0784; +extern s32 D_801C0788; + +extern void *D_801C0768; +extern s32 D_801C07A0; +extern void *D_801C0770; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80188424[]; + extern Rec12 D_8018845C[]; + extern u8 D_80078EAF; + extern u8 D_801C2278; + extern s32 D_801C078C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80188460[]; + extern u8 D_80188464[]; + extern unsigned char D_801C21D8; + extern s16 *D_801C0774; + extern s32 D_801C07A4; + extern s32 D_801C07A8; + extern s32 D_801C07AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C0798 & 1)) { + D_801C0780 = 1; + } else { + D_801C0780 = D_80078EAF; + } + + b0 = ((u8 *)D_8018845C)[D_801C0780 * 12]; + D_801C22BA = b0; + D_801C232E = b0; + b1 = D_80188460[D_801C0780 * 12]; + D_801C21E2 = b1; + D_801C229C = b1; + b2 = D_80188464[D_801C0780 * 12]; + D_801C21C0 = b2; + D_801C21E1 = b2; + + (*(S9 *)&D_801C21D8) = ((S9 *)D_80188424)[D_801C0780]; + (*(S9 *)&D_801C2278) = *(S9 *)(&D_801C21C0 + 0x18); /* same addr as (*(S9 *)&D_801C21D8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C22A0 = 1; + D_801C0794 = -1; + D_801C0790 = 0; + D_801C078C = -1; + D_801C0778 = 0; + D_801C0784 = 0; + D_801C0788 = 0; + + if ((D_801C0798 & 2) && (D_801C0780 == 4)) { + s0v = (*(s32 * *)&D_801C0768)[18]; + t9v = (*(s32 * *)&D_801C0768)[19]; + t8v = (*(s32 * *)&D_801C0768)[20]; + } else { + s32 *p = (s32 *)(D_801C0780 * 12 + (s32) (*(s32 * *)&D_801C0768)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C0774) = arg0; + if (arg0 != 0) { + if (D_801C07A0 != 0) { + s32 *p = (s32 *)(D_801C0780 * 12 + (s32) (*(s32 * *)&D_801C0770)); + D_801C07A4 = p[0]; + D_801C07A8 = p[1]; + D_801C07AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8013F350.c b/src/ov_SC04_005/ov_SC04_005_jr_8013F350.c index 7b3c9ce03..2223b100d 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8013F350.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018828C[]; extern u8 D_80188388[]; extern u8 D_80188408[]; extern u8 D_801882E0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c b/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c index f72372ec1..a43cd99b9 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018828C[]; extern u8 D_80188388[]; extern u8 D_80188408[]; extern u8 D_801882E0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_005/ov_SC04_005_jr_80140608.c b/src/ov_SC04_005/ov_SC04_005_jr_80140608.c index 44cb6182c..9580f5290 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_80140608.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018828C[]; extern u8 D_80188388[]; extern u8 D_80188408[]; extern u8 D_801882E0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_006/ov_SC04_006_jr_801380E0.c b/src/ov_SC04_006/ov_SC04_006_jr_801380E0.c index baaa92fcc..3ce516d05 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_801380E0.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80180468[]; extern u8 D_801804E8[]; extern u8 D_801803C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019CA40; +extern s32 D_8019CA28; + + +extern u8 D_8019DD5A; +extern u8 D_8019DDCE; +extern u8 D_8019DC82; +extern u8 D_8019DD3C; +extern u8 D_8019DC60; +extern u8 D_8019DC81; + + +extern s32 D_8019DD40; +extern s32 D_8019CA3C; +extern s32 D_8019CA38; +extern s32 D_8019CA20; +extern s32 D_8019CA2C; +extern s32 D_8019CA30; + +extern void *D_8019CA10; +extern s32 D_8019CA48; +extern void *D_8019CA18; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80180504[]; + extern Rec12 D_8018053C[]; + extern u8 D_80078EAF; + extern u8 D_8019DD18; + extern s32 D_8019CA34; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180540[]; + extern u8 D_80180544[]; + extern unsigned char D_8019DC78; + extern s16 *D_8019CA1C; + extern s32 D_8019CA4C; + extern s32 D_8019CA50; + extern s32 D_8019CA54; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019CA40 & 1)) { + D_8019CA28 = 1; + } else { + D_8019CA28 = D_80078EAF; + } + + b0 = ((u8 *)D_8018053C)[D_8019CA28 * 12]; + D_8019DD5A = b0; + D_8019DDCE = b0; + b1 = D_80180540[D_8019CA28 * 12]; + D_8019DC82 = b1; + D_8019DD3C = b1; + b2 = D_80180544[D_8019CA28 * 12]; + D_8019DC60 = b2; + D_8019DC81 = b2; + + (*(S9 *)&D_8019DC78) = ((S9 *)D_80180504)[D_8019CA28]; + (*(S9 *)&D_8019DD18) = *(S9 *)(&D_8019DC60 + 0x18); /* same addr as (*(S9 *)&D_8019DC78); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019DD40 = 1; + D_8019CA3C = -1; + D_8019CA38 = 0; + D_8019CA34 = -1; + D_8019CA20 = 0; + D_8019CA2C = 0; + D_8019CA30 = 0; + + if ((D_8019CA40 & 2) && (D_8019CA28 == 4)) { + s0v = (*(s32 * *)&D_8019CA10)[18]; + t9v = (*(s32 * *)&D_8019CA10)[19]; + t8v = (*(s32 * *)&D_8019CA10)[20]; + } else { + s32 *p = (s32 *)(D_8019CA28 * 12 + (s32) (*(s32 * *)&D_8019CA10)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019CA1C) = arg0; + if (arg0 != 0) { + if (D_8019CA48 != 0) { + s32 *p = (s32 *)(D_8019CA28 * 12 + (s32) (*(s32 * *)&D_8019CA18)); + D_8019CA4C = p[0]; + D_8019CA50 = p[1]; + D_8019CA54 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8013F350.c b/src/ov_SC04_006/ov_SC04_006_jr_8013F350.c index d05020297..985965f21 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8013F350.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018036C[]; extern u8 D_80180468[]; extern u8 D_801804E8[]; extern u8 D_801803C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c b/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c index 3faf32c85..d07f75353 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018036C[]; extern u8 D_80180468[]; extern u8 D_801804E8[]; extern u8 D_801803C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_006/ov_SC04_006_jr_80140608.c b/src/ov_SC04_006/ov_SC04_006_jr_80140608.c index 91788ef09..26abb490d 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_80140608.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018036C[]; extern u8 D_80180468[]; extern u8 D_801804E8[]; extern u8 D_801803C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_007/ov_SC04_007_jr_801380E0.c b/src/ov_SC04_007/ov_SC04_007_jr_801380E0.c index b59ae74c3..49d4b1f41 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_801380E0.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80186420[]; extern u8 D_801864A0[]; extern u8 D_80186378[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B3FF8; +extern s32 D_801B3FE0; + + +extern u8 D_801B5B1A; +extern u8 D_801B5B8E; +extern u8 D_801B5A42; +extern u8 D_801B5AFC; +extern u8 D_801B5A20; +extern u8 D_801B5A41; + + +extern s32 D_801B5B00; +extern s32 D_801B3FF4; +extern s32 D_801B3FF0; +extern s32 D_801B3FD8; +extern s32 D_801B3FE4; +extern s32 D_801B3FE8; + +extern void *D_801B3FC8; +extern s32 D_801B4000; +extern void *D_801B3FD0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801864BC[]; + extern Rec12 D_801864F4[]; + extern u8 D_80078EAF; + extern u8 D_801B5AD8; + extern s32 D_801B3FEC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801864F8[]; + extern u8 D_801864FC[]; + extern unsigned char D_801B5A38; + extern s16 *D_801B3FD4; + extern s32 D_801B4004; + extern s32 D_801B4008; + extern s32 D_801B400C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B3FF8 & 1)) { + D_801B3FE0 = 1; + } else { + D_801B3FE0 = D_80078EAF; + } + + b0 = ((u8 *)D_801864F4)[D_801B3FE0 * 12]; + D_801B5B1A = b0; + D_801B5B8E = b0; + b1 = D_801864F8[D_801B3FE0 * 12]; + D_801B5A42 = b1; + D_801B5AFC = b1; + b2 = D_801864FC[D_801B3FE0 * 12]; + D_801B5A20 = b2; + D_801B5A41 = b2; + + (*(S9 *)&D_801B5A38) = ((S9 *)D_801864BC)[D_801B3FE0]; + (*(S9 *)&D_801B5AD8) = *(S9 *)(&D_801B5A20 + 0x18); /* same addr as (*(S9 *)&D_801B5A38); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B5B00 = 1; + D_801B3FF4 = -1; + D_801B3FF0 = 0; + D_801B3FEC = -1; + D_801B3FD8 = 0; + D_801B3FE4 = 0; + D_801B3FE8 = 0; + + if ((D_801B3FF8 & 2) && (D_801B3FE0 == 4)) { + s0v = (*(s32 * *)&D_801B3FC8)[18]; + t9v = (*(s32 * *)&D_801B3FC8)[19]; + t8v = (*(s32 * *)&D_801B3FC8)[20]; + } else { + s32 *p = (s32 *)(D_801B3FE0 * 12 + (s32) (*(s32 * *)&D_801B3FC8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B3FD4) = arg0; + if (arg0 != 0) { + if (D_801B4000 != 0) { + s32 *p = (s32 *)(D_801B3FE0 * 12 + (s32) (*(s32 * *)&D_801B3FD0)); + D_801B4004 = p[0]; + D_801B4008 = p[1]; + D_801B400C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8013F350.c b/src/ov_SC04_007/ov_SC04_007_jr_8013F350.c index df13871b0..9181f4840 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8013F350.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80186324[]; extern u8 D_80186420[]; extern u8 D_801864A0[]; extern u8 D_80186378[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c b/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c index fab9321d1..9bfecb7f5 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80186324[]; extern u8 D_80186420[]; extern u8 D_801864A0[]; extern u8 D_80186378[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_007/ov_SC04_007_jr_80140608.c b/src/ov_SC04_007/ov_SC04_007_jr_80140608.c index c63f9f2f6..4f7fd5864 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_80140608.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80186324[]; extern u8 D_80186420[]; extern u8 D_801864A0[]; extern u8 D_80186378[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_008/ov_SC04_008_jr_801380E0.c b/src/ov_SC04_008/ov_SC04_008_jr_801380E0.c index 10beb39e2..831f9b9b2 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_801380E0.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80190CD0; +extern s32 D_80190CB8; + + +extern u8 D_8019344A; +extern u8 D_801934BE; +extern u8 D_80193372; +extern u8 D_8019342C; +extern u8 D_80193350; +extern u8 D_80193371; + + +extern s32 D_80193430; +extern s32 D_80190CCC; +extern s32 D_80190CC8; +extern s32 D_80190CB0; +extern s32 D_80190CBC; +extern s32 D_80190CC0; + +extern void *D_80190CA0; +extern s32 D_80190CD8; +extern void *D_80190CA8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F3F4[]; + extern Rec12 D_8017F42C[]; + extern u8 D_80078EAF; + extern u8 D_80193408; + extern s32 D_80190CC4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F430[]; + extern u8 D_8017F434[]; + extern unsigned char D_80193368; + extern s16 *D_80190CAC; + extern s32 D_80190CDC; + extern s32 D_80190CE0; + extern s32 D_80190CE4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80190CD0 & 1)) { + D_80190CB8 = 1; + } else { + D_80190CB8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F42C)[D_80190CB8 * 12]; + D_8019344A = b0; + D_801934BE = b0; + b1 = D_8017F430[D_80190CB8 * 12]; + D_80193372 = b1; + D_8019342C = b1; + b2 = D_8017F434[D_80190CB8 * 12]; + D_80193350 = b2; + D_80193371 = b2; + + (*(S9 *)&D_80193368) = ((S9 *)D_8017F3F4)[D_80190CB8]; + (*(S9 *)&D_80193408) = *(S9 *)(&D_80193350 + 0x18); /* same addr as (*(S9 *)&D_80193368); distinct sym defeats cse, keeps %hi/%lo */ + + D_80193430 = 1; + D_80190CCC = -1; + D_80190CC8 = 0; + D_80190CC4 = -1; + D_80190CB0 = 0; + D_80190CBC = 0; + D_80190CC0 = 0; + + if ((D_80190CD0 & 2) && (D_80190CB8 == 4)) { + s0v = (*(s32 * *)&D_80190CA0)[18]; + t9v = (*(s32 * *)&D_80190CA0)[19]; + t8v = (*(s32 * *)&D_80190CA0)[20]; + } else { + s32 *p = (s32 *)(D_80190CB8 * 12 + (s32) (*(s32 * *)&D_80190CA0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80190CAC) = arg0; + if (arg0 != 0) { + if (D_80190CD8 != 0) { + s32 *p = (s32 *)(D_80190CB8 * 12 + (s32) (*(s32 * *)&D_80190CA8)); + D_80190CDC = p[0]; + D_80190CE0 = p[1]; + D_80190CE4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8013F350.c b/src/ov_SC04_008/ov_SC04_008_jr_8013F350.c index b1a5ea81f..61ad7fa9c 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8013F350.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c b/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c index 9828b48e8..fdf9a4d4d 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_008/ov_SC04_008_jr_80140608.c b/src/ov_SC04_008/ov_SC04_008_jr_80140608.c index 0c326732e..009adf1af 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_80140608.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_009/ov_SC04_009_jr_801380E0.c b/src/ov_SC04_009/ov_SC04_009_jr_801380E0.c index 0407ab902..a92c3c5d4 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_801380E0.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F384[]; extern u8 D_8017F404[]; extern u8 D_8017F2DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80196EE0; +extern s32 D_80196EC8; + + +extern u8 D_801981FA; +extern u8 D_8019826E; +extern u8 D_80198122; +extern u8 D_801981DC; +extern u8 D_80198100; +extern u8 D_80198121; + + +extern s32 D_801981E0; +extern s32 D_80196EDC; +extern s32 D_80196ED8; +extern s32 D_80196EC0; +extern s32 D_80196ECC; +extern s32 D_80196ED0; + +extern void *D_80196EB0; +extern s32 D_80196EE8; +extern void *D_80196EB8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F420[]; + extern Rec12 D_8017F458[]; + extern u8 D_80078EAF; + extern u8 D_801981B8; + extern s32 D_80196ED4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F45C[]; + extern u8 D_8017F460[]; + extern unsigned char D_80198118; + extern s16 *D_80196EBC; + extern s32 D_80196EEC; + extern s32 D_80196EF0; + extern s32 D_80196EF4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80196EE0 & 1)) { + D_80196EC8 = 1; + } else { + D_80196EC8 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F458)[D_80196EC8 * 12]; + D_801981FA = b0; + D_8019826E = b0; + b1 = D_8017F45C[D_80196EC8 * 12]; + D_80198122 = b1; + D_801981DC = b1; + b2 = D_8017F460[D_80196EC8 * 12]; + D_80198100 = b2; + D_80198121 = b2; + + (*(S9 *)&D_80198118) = ((S9 *)D_8017F420)[D_80196EC8]; + (*(S9 *)&D_801981B8) = *(S9 *)(&D_80198100 + 0x18); /* same addr as (*(S9 *)&D_80198118); distinct sym defeats cse, keeps %hi/%lo */ + + D_801981E0 = 1; + D_80196EDC = -1; + D_80196ED8 = 0; + D_80196ED4 = -1; + D_80196EC0 = 0; + D_80196ECC = 0; + D_80196ED0 = 0; + + if ((D_80196EE0 & 2) && (D_80196EC8 == 4)) { + s0v = (*(s32 * *)&D_80196EB0)[18]; + t9v = (*(s32 * *)&D_80196EB0)[19]; + t8v = (*(s32 * *)&D_80196EB0)[20]; + } else { + s32 *p = (s32 *)(D_80196EC8 * 12 + (s32) (*(s32 * *)&D_80196EB0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80196EBC) = arg0; + if (arg0 != 0) { + if (D_80196EE8 != 0) { + s32 *p = (s32 *)(D_80196EC8 * 12 + (s32) (*(s32 * *)&D_80196EB8)); + D_80196EEC = p[0]; + D_80196EF0 = p[1]; + D_80196EF4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8013F350.c b/src/ov_SC04_009/ov_SC04_009_jr_8013F350.c index c598de2f6..55202ddbe 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8013F350.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F288[]; extern u8 D_8017F384[]; extern u8 D_8017F404[]; extern u8 D_8017F2DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c b/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c index c70945a54..2dac809b2 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F288[]; extern u8 D_8017F384[]; extern u8 D_8017F404[]; extern u8 D_8017F2DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_009/ov_SC04_009_jr_80140608.c b/src/ov_SC04_009/ov_SC04_009_jr_80140608.c index 1d8764c7b..46cb67c95 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_80140608.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F288[]; extern u8 D_8017F384[]; extern u8 D_8017F404[]; extern u8 D_8017F2DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_010/ov_SC04_010_jr_801380E0.c b/src/ov_SC04_010/ov_SC04_010_jr_801380E0.c index 74271b30d..1e3de4681 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_801380E0.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017EA30[]; extern u8 D_8017EAB0[]; extern u8 D_8017E988[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018E378; +extern s32 D_8018E360; + + +extern u8 D_8018F6D2; +extern u8 D_8018F746; +extern u8 D_8018F5FA; +extern u8 D_8018F6B4; +extern u8 D_8018F5D8; +extern u8 D_8018F5F9; + + +extern s32 D_8018F6B8; +extern s32 D_8018E374; +extern s32 D_8018E370; +extern s32 D_8018E358; +extern s32 D_8018E364; +extern s32 D_8018E368; + +extern void *D_8018E348; +extern s32 D_8018E380; +extern void *D_8018E350; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EACC[]; + extern Rec12 D_8017EB04[]; + extern u8 D_80078EAF; + extern u8 D_8018F690; + extern s32 D_8018E36C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EB08[]; + extern u8 D_8017EB0C[]; + extern unsigned char D_8018F5F0; + extern s16 *D_8018E354; + extern s32 D_8018E384; + extern s32 D_8018E388; + extern s32 D_8018E38C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018E378 & 1)) { + D_8018E360 = 1; + } else { + D_8018E360 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EB04)[D_8018E360 * 12]; + D_8018F6D2 = b0; + D_8018F746 = b0; + b1 = D_8017EB08[D_8018E360 * 12]; + D_8018F5FA = b1; + D_8018F6B4 = b1; + b2 = D_8017EB0C[D_8018E360 * 12]; + D_8018F5D8 = b2; + D_8018F5F9 = b2; + + (*(S9 *)&D_8018F5F0) = ((S9 *)D_8017EACC)[D_8018E360]; + (*(S9 *)&D_8018F690) = *(S9 *)(&D_8018F5D8 + 0x18); /* same addr as (*(S9 *)&D_8018F5F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8018F6B8 = 1; + D_8018E374 = -1; + D_8018E370 = 0; + D_8018E36C = -1; + D_8018E358 = 0; + D_8018E364 = 0; + D_8018E368 = 0; + + if ((D_8018E378 & 2) && (D_8018E360 == 4)) { + s0v = (*(s32 * *)&D_8018E348)[18]; + t9v = (*(s32 * *)&D_8018E348)[19]; + t8v = (*(s32 * *)&D_8018E348)[20]; + } else { + s32 *p = (s32 *)(D_8018E360 * 12 + (s32) (*(s32 * *)&D_8018E348)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018E354) = arg0; + if (arg0 != 0) { + if (D_8018E380 != 0) { + s32 *p = (s32 *)(D_8018E360 * 12 + (s32) (*(s32 * *)&D_8018E350)); + D_8018E384 = p[0]; + D_8018E388 = p[1]; + D_8018E38C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8013F350.c b/src/ov_SC04_010/ov_SC04_010_jr_8013F350.c index 8b6871f97..9f2eb1419 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8013F350.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017E934[]; extern u8 D_8017EA30[]; extern u8 D_8017EAB0[]; extern u8 D_8017E988[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c b/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c index 021e85868..14baddf4d 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017E934[]; extern u8 D_8017EA30[]; extern u8 D_8017EAB0[]; extern u8 D_8017E988[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_010/ov_SC04_010_jr_80140608.c b/src/ov_SC04_010/ov_SC04_010_jr_80140608.c index c78571aa5..a58fae559 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_80140608.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017E934[]; extern u8 D_8017EA30[]; extern u8 D_8017EAB0[]; extern u8 D_8017E988[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_011/ov_SC04_011_jr_801380E0.c b/src/ov_SC04_011/ov_SC04_011_jr_801380E0.c index d71d9ad14..7fec28851 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_801380E0.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80190CC0[]; extern u8 D_80190D40[]; extern u8 D_80190C18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801EDAE0; +extern s32 D_801EDAC8; + + +extern u8 D_801F163A; +extern u8 D_801F16AE; +extern u8 D_801F1562; +extern u8 D_801F161C; +extern u8 D_801F1540; +extern u8 D_801F1561; + + +extern s32 D_801F1620; +extern s32 D_801EDADC; +extern s32 D_801EDAD8; +extern s32 D_801EDAC0; +extern s32 D_801EDACC; +extern s32 D_801EDAD0; + +extern void *D_801EDAB0; +extern s32 D_801EDAE8; +extern void *D_801EDAB8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80190D5C[]; + extern Rec12 D_80190D94[]; + extern u8 D_80078EAF; + extern u8 D_801F15F8; + extern s32 D_801EDAD4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80190D98[]; + extern u8 D_80190D9C[]; + extern unsigned char D_801F1558; + extern s16 *D_801EDABC; + extern s32 D_801EDAEC; + extern s32 D_801EDAF0; + extern s32 D_801EDAF4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801EDAE0 & 1)) { + D_801EDAC8 = 1; + } else { + D_801EDAC8 = D_80078EAF; + } + + b0 = ((u8 *)D_80190D94)[D_801EDAC8 * 12]; + D_801F163A = b0; + D_801F16AE = b0; + b1 = D_80190D98[D_801EDAC8 * 12]; + D_801F1562 = b1; + D_801F161C = b1; + b2 = D_80190D9C[D_801EDAC8 * 12]; + D_801F1540 = b2; + D_801F1561 = b2; + + (*(S9 *)&D_801F1558) = ((S9 *)D_80190D5C)[D_801EDAC8]; + (*(S9 *)&D_801F15F8) = *(S9 *)(&D_801F1540 + 0x18); /* same addr as (*(S9 *)&D_801F1558); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F1620 = 1; + D_801EDADC = -1; + D_801EDAD8 = 0; + D_801EDAD4 = -1; + D_801EDAC0 = 0; + D_801EDACC = 0; + D_801EDAD0 = 0; + + if ((D_801EDAE0 & 2) && (D_801EDAC8 == 4)) { + s0v = (*(s32 * *)&D_801EDAB0)[18]; + t9v = (*(s32 * *)&D_801EDAB0)[19]; + t8v = (*(s32 * *)&D_801EDAB0)[20]; + } else { + s32 *p = (s32 *)(D_801EDAC8 * 12 + (s32) (*(s32 * *)&D_801EDAB0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801EDABC) = arg0; + if (arg0 != 0) { + if (D_801EDAE8 != 0) { + s32 *p = (s32 *)(D_801EDAC8 * 12 + (s32) (*(s32 * *)&D_801EDAB8)); + D_801EDAEC = p[0]; + D_801EDAF0 = p[1]; + D_801EDAF4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8013F350.c b/src/ov_SC04_011/ov_SC04_011_jr_8013F350.c index f7a6f1cd4..a33c956fb 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8013F350.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80190BC4[]; extern u8 D_80190CC0[]; extern u8 D_80190D40[]; extern u8 D_80190C18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c b/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c index 609c1d2d9..c3ece447a 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80190BC4[]; extern u8 D_80190CC0[]; extern u8 D_80190D40[]; extern u8 D_80190C18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_011/ov_SC04_011_jr_80140608.c b/src/ov_SC04_011/ov_SC04_011_jr_80140608.c index bba061d4e..5a4efe7da 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_80140608.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80190BC4[]; extern u8 D_80190CC0[]; extern u8 D_80190D40[]; extern u8 D_80190C18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_012/ov_SC04_012_jr_801380E0.c b/src/ov_SC04_012/ov_SC04_012_jr_801380E0.c index 0df211442..153c429df 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_801380E0.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017EE94[]; extern u8 D_8017EF14[]; extern u8 D_8017EDEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80190A50; +extern s32 D_80190A38; + + +extern u8 D_801931CA; +extern u8 D_8019323E; +extern u8 D_801930F2; +extern u8 D_801931AC; +extern u8 D_801930D0; +extern u8 D_801930F1; + + +extern s32 D_801931B0; +extern s32 D_80190A4C; +extern s32 D_80190A48; +extern s32 D_80190A30; +extern s32 D_80190A3C; +extern s32 D_80190A40; + +extern void *D_80190A20; +extern s32 D_80190A58; +extern void *D_80190A28; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EF30[]; + extern Rec12 D_8017EF68[]; + extern u8 D_80078EAF; + extern u8 D_80193188; + extern s32 D_80190A44; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EF6C[]; + extern u8 D_8017EF70[]; + extern unsigned char D_801930E8; + extern s16 *D_80190A2C; + extern s32 D_80190A5C; + extern s32 D_80190A60; + extern s32 D_80190A64; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80190A50 & 1)) { + D_80190A38 = 1; + } else { + D_80190A38 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EF68)[D_80190A38 * 12]; + D_801931CA = b0; + D_8019323E = b0; + b1 = D_8017EF6C[D_80190A38 * 12]; + D_801930F2 = b1; + D_801931AC = b1; + b2 = D_8017EF70[D_80190A38 * 12]; + D_801930D0 = b2; + D_801930F1 = b2; + + (*(S9 *)&D_801930E8) = ((S9 *)D_8017EF30)[D_80190A38]; + (*(S9 *)&D_80193188) = *(S9 *)(&D_801930D0 + 0x18); /* same addr as (*(S9 *)&D_801930E8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801931B0 = 1; + D_80190A4C = -1; + D_80190A48 = 0; + D_80190A44 = -1; + D_80190A30 = 0; + D_80190A3C = 0; + D_80190A40 = 0; + + if ((D_80190A50 & 2) && (D_80190A38 == 4)) { + s0v = (*(s32 * *)&D_80190A20)[18]; + t9v = (*(s32 * *)&D_80190A20)[19]; + t8v = (*(s32 * *)&D_80190A20)[20]; + } else { + s32 *p = (s32 *)(D_80190A38 * 12 + (s32) (*(s32 * *)&D_80190A20)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80190A2C) = arg0; + if (arg0 != 0) { + if (D_80190A58 != 0) { + s32 *p = (s32 *)(D_80190A38 * 12 + (s32) (*(s32 * *)&D_80190A28)); + D_80190A5C = p[0]; + D_80190A60 = p[1]; + D_80190A64 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8013F350.c b/src/ov_SC04_012/ov_SC04_012_jr_8013F350.c index cd0245c62..79ebdc27c 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8013F350.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017ED98[]; extern u8 D_8017EE94[]; extern u8 D_8017EF14[]; extern u8 D_8017EDEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c b/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c index 5f204686e..03d364ef7 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017ED98[]; extern u8 D_8017EE94[]; extern u8 D_8017EF14[]; extern u8 D_8017EDEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_012/ov_SC04_012_jr_80140608.c b/src/ov_SC04_012/ov_SC04_012_jr_80140608.c index 76cb37385..e826c5b3b 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_80140608.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017ED98[]; extern u8 D_8017EE94[]; extern u8 D_8017EF14[]; extern u8 D_8017EDEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_016/ov_SC04_016_jr_801380E0.c b/src/ov_SC04_016/ov_SC04_016_jr_801380E0.c index 5c74d9dff..2f7a8ea26 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_801380E0.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80180890[]; extern u8 D_80180910[]; extern u8 D_801807E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A58E0; +extern s32 D_801A58C8; + + +extern u8 D_801AC26A; +extern u8 D_801AC2DE; +extern u8 D_801AC192; +extern u8 D_801AC24C; +extern u8 D_801AC170; +extern u8 D_801AC191; + + +extern s32 D_801AC250; +extern s32 D_801A58DC; +extern s32 D_801A58D8; +extern s32 D_801A58C0; +extern s32 D_801A58CC; +extern s32 D_801A58D0; + +extern void *D_801A58B0; +extern s32 D_801A58E8; +extern void *D_801A58B8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018092C[]; + extern Rec12 D_80180964[]; + extern u8 D_80078EAF; + extern u8 D_801AC228; + extern s32 D_801A58D4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180968[]; + extern u8 D_8018096C[]; + extern unsigned char D_801AC188; + extern s16 *D_801A58BC; + extern s32 D_801A58EC; + extern s32 D_801A58F0; + extern s32 D_801A58F4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A58E0 & 1)) { + D_801A58C8 = 1; + } else { + D_801A58C8 = D_80078EAF; + } + + b0 = ((u8 *)D_80180964)[D_801A58C8 * 12]; + D_801AC26A = b0; + D_801AC2DE = b0; + b1 = D_80180968[D_801A58C8 * 12]; + D_801AC192 = b1; + D_801AC24C = b1; + b2 = D_8018096C[D_801A58C8 * 12]; + D_801AC170 = b2; + D_801AC191 = b2; + + (*(S9 *)&D_801AC188) = ((S9 *)D_8018092C)[D_801A58C8]; + (*(S9 *)&D_801AC228) = *(S9 *)(&D_801AC170 + 0x18); /* same addr as (*(S9 *)&D_801AC188); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AC250 = 1; + D_801A58DC = -1; + D_801A58D8 = 0; + D_801A58D4 = -1; + D_801A58C0 = 0; + D_801A58CC = 0; + D_801A58D0 = 0; + + if ((D_801A58E0 & 2) && (D_801A58C8 == 4)) { + s0v = (*(s32 * *)&D_801A58B0)[18]; + t9v = (*(s32 * *)&D_801A58B0)[19]; + t8v = (*(s32 * *)&D_801A58B0)[20]; + } else { + s32 *p = (s32 *)(D_801A58C8 * 12 + (s32) (*(s32 * *)&D_801A58B0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A58BC) = arg0; + if (arg0 != 0) { + if (D_801A58E8 != 0) { + s32 *p = (s32 *)(D_801A58C8 * 12 + (s32) (*(s32 * *)&D_801A58B8)); + D_801A58EC = p[0]; + D_801A58F0 = p[1]; + D_801A58F4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8013F350.c b/src/ov_SC04_016/ov_SC04_016_jr_8013F350.c index cc3260c52..90d4a93c7 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8013F350.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80180794[]; extern u8 D_80180890[]; extern u8 D_80180910[]; extern u8 D_801807E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c b/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c index aac592953..251a46910 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80180794[]; extern u8 D_80180890[]; extern u8 D_80180910[]; extern u8 D_801807E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_016/ov_SC04_016_jr_80140608.c b/src/ov_SC04_016/ov_SC04_016_jr_80140608.c index fadf361cb..98ac0d8c5 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_80140608.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80180794[]; extern u8 D_80180890[]; extern u8 D_80180910[]; extern u8 D_801807E8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_021/ov_SC04_021_jr_801380E0.c b/src/ov_SC04_021/ov_SC04_021_jr_801380E0.c index 15a21a424..56edc450b 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_801380E0.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018E798; +extern s32 D_8018E780; + + +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; + + +extern s32 D_8018FA98; +extern s32 D_8018E794; +extern s32 D_8018E790; +extern s32 D_8018E778; +extern s32 D_8018E784; +extern s32 D_8018E788; + +extern void *D_8018E768; +extern s32 D_8018E7A0; +extern void *D_8018E770; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FBA8[]; + extern Rec12 D_8017FBE0[]; + extern u8 D_80078EAF; + extern u8 D_8018FA70; + extern s32 D_8018E78C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FBE4[]; + extern u8 D_8017FBE8[]; + extern unsigned char D_8018F9D0; + extern s16 *D_8018E774; + extern s32 D_8018E7A4; + extern s32 D_8018E7A8; + extern s32 D_8018E7AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018E798 & 1)) { + D_8018E780 = 1; + } else { + D_8018E780 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FBE0)[D_8018E780 * 12]; + D_8018FAB2 = b0; + D_8018FB2C = b0; + b1 = D_8017FBE4[D_8018E780 * 12]; + D_8018F9DA = b1; + D_8018FA94 = b1; + b2 = D_8017FBE8[D_8018E780 * 12]; + D_8018F9B8 = b2; + D_8018F9D9 = b2; + + (*(S9 *)&D_8018F9D0) = ((S9 *)D_8017FBA8)[D_8018E780]; + (*(S9 *)&D_8018FA70) = *(S9 *)(&D_8018F9B8 + 0x18); /* same addr as (*(S9 *)&D_8018F9D0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8018FA98 = 1; + D_8018E794 = -1; + D_8018E790 = 0; + D_8018E78C = -1; + D_8018E778 = 0; + D_8018E784 = 0; + D_8018E788 = 0; + + if ((D_8018E798 & 2) && (D_8018E780 == 4)) { + s0v = (*(s32 * *)&D_8018E768)[18]; + t9v = (*(s32 * *)&D_8018E768)[19]; + t8v = (*(s32 * *)&D_8018E768)[20]; + } else { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E768)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018E774) = arg0; + if (arg0 != 0) { + if (D_8018E7A0 != 0) { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E770)); + D_8018E7A4 = p[0]; + D_8018E7A8 = p[1]; + D_8018E7AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8013F350.c b/src/ov_SC04_021/ov_SC04_021_jr_8013F350.c index 6a75b5dd5..fa0bf8b4e 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8013F350.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c b/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c index 9ec5bd452..9c0120b1f 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC04_021/ov_SC04_021_jr_80140608.c b/src/ov_SC04_021/ov_SC04_021_jr_80140608.c index 78025b1f5..239297dee 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_80140608.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_000/ov_SC05_000_jr_801380E0.c b/src/ov_SC05_000/ov_SC05_000_jr_801380E0.c index d6f6173fd..6d1158cf0 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_801380E0.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_801380E0.c @@ -1892,7 +1892,7 @@ extern u8 D_8017EB20[]; extern u8 D_8017EBA0[]; extern u8 D_8017EA78[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1937,7 +1937,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801998C8; +extern s32 D_801998B0; + + +extern u8 D_8019ABE2; +extern u8 D_8019AC56; +extern u8 D_8019AB0A; +extern u8 D_8019ABC4; +extern u8 D_8019AAE8; +extern u8 D_8019AB09; + + +extern s32 D_8019ABC8; +extern s32 D_801998C4; +extern s32 D_801998C0; +extern s32 D_801998A8; +extern s32 D_801998B4; +extern s32 D_801998B8; + +extern void *D_80199898; +extern s32 D_801998D0; +extern void *D_801998A0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EBBC[]; + extern Rec12 D_8017EBF4[]; + extern u8 D_80078EAF; + extern u8 D_8019ABA0; + extern s32 D_801998BC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EBF8[]; + extern u8 D_8017EBFC[]; + extern unsigned char D_8019AB00; + extern s16 *D_801998A4; + extern s32 D_801998D4; + extern s32 D_801998D8; + extern s32 D_801998DC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801998C8 & 1)) { + D_801998B0 = 1; + } else { + D_801998B0 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EBF4)[D_801998B0 * 12]; + D_8019ABE2 = b0; + D_8019AC56 = b0; + b1 = D_8017EBF8[D_801998B0 * 12]; + D_8019AB0A = b1; + D_8019ABC4 = b1; + b2 = D_8017EBFC[D_801998B0 * 12]; + D_8019AAE8 = b2; + D_8019AB09 = b2; + + (*(S9 *)&D_8019AB00) = ((S9 *)D_8017EBBC)[D_801998B0]; + (*(S9 *)&D_8019ABA0) = *(S9 *)(&D_8019AAE8 + 0x18); /* same addr as (*(S9 *)&D_8019AB00); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019ABC8 = 1; + D_801998C4 = -1; + D_801998C0 = 0; + D_801998BC = -1; + D_801998A8 = 0; + D_801998B4 = 0; + D_801998B8 = 0; + + if ((D_801998C8 & 2) && (D_801998B0 == 4)) { + s0v = (*(s32 * *)&D_80199898)[18]; + t9v = (*(s32 * *)&D_80199898)[19]; + t8v = (*(s32 * *)&D_80199898)[20]; + } else { + s32 *p = (s32 *)(D_801998B0 * 12 + (s32) (*(s32 * *)&D_80199898)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801998A4) = arg0; + if (arg0 != 0) { + if (D_801998D0 != 0) { + s32 *p = (s32 *)(D_801998B0 * 12 + (s32) (*(s32 * *)&D_801998A0)); + D_801998D4 = p[0]; + D_801998D8 = p[1]; + D_801998DC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8013F350.c b/src/ov_SC05_000/ov_SC05_000_jr_8013F350.c index 5ec57bd1b..573d0141c 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8013F350.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8013F350.c @@ -818,7 +818,7 @@ extern u8 D_8017EA24[]; extern u8 D_8017EB20[]; extern u8 D_8017EBA0[]; extern u8 D_8017EA78[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c b/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c index 7ad3ef85e..1e07bc88d 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8013FFD8.c @@ -818,7 +818,7 @@ extern u8 D_8017EA24[]; extern u8 D_8017EB20[]; extern u8 D_8017EBA0[]; extern u8 D_8017EA78[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_000/ov_SC05_000_jr_80140608.c b/src/ov_SC05_000/ov_SC05_000_jr_80140608.c index 2f6b3bb9d..60ca66af9 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_80140608.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_80140608.c @@ -818,7 +818,7 @@ extern u8 D_8017EA24[]; extern u8 D_8017EB20[]; extern u8 D_8017EBA0[]; extern u8 D_8017EA78[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_001/ov_SC05_001_jr_801380E0.c b/src/ov_SC05_001/ov_SC05_001_jr_801380E0.c index e3bddc50f..49863836d 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_801380E0.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801862FC[]; extern u8 D_8018637C[]; extern u8 D_80186254[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B4988; +extern s32 D_801B4970; + + +extern u8 D_801B5F92; +extern u8 D_801B6006; +extern u8 D_801B5EBA; +extern u8 D_801B5F74; +extern u8 D_801B5E98; +extern u8 D_801B5EB9; + + +extern s32 D_801B5F78; +extern s32 D_801B4984; +extern s32 D_801B4980; +extern s32 D_801B4968; +extern s32 D_801B4974; +extern s32 D_801B4978; + +extern void *D_801B4958; +extern s32 D_801B4990; +extern void *D_801B4960; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186398[]; + extern Rec12 D_801863D0[]; + extern u8 D_80078EAF; + extern u8 D_801B5F50; + extern s32 D_801B497C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801863D4[]; + extern u8 D_801863D8[]; + extern unsigned char D_801B5EB0; + extern s16 *D_801B4964; + extern s32 D_801B4994; + extern s32 D_801B4998; + extern s32 D_801B499C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B4988 & 1)) { + D_801B4970 = 1; + } else { + D_801B4970 = D_80078EAF; + } + + b0 = ((u8 *)D_801863D0)[D_801B4970 * 12]; + D_801B5F92 = b0; + D_801B6006 = b0; + b1 = D_801863D4[D_801B4970 * 12]; + D_801B5EBA = b1; + D_801B5F74 = b1; + b2 = D_801863D8[D_801B4970 * 12]; + D_801B5E98 = b2; + D_801B5EB9 = b2; + + (*(S9 *)&D_801B5EB0) = ((S9 *)D_80186398)[D_801B4970]; + (*(S9 *)&D_801B5F50) = *(S9 *)(&D_801B5E98 + 0x18); /* same addr as (*(S9 *)&D_801B5EB0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B5F78 = 1; + D_801B4984 = -1; + D_801B4980 = 0; + D_801B497C = -1; + D_801B4968 = 0; + D_801B4974 = 0; + D_801B4978 = 0; + + if ((D_801B4988 & 2) && (D_801B4970 == 4)) { + s0v = (*(s32 * *)&D_801B4958)[18]; + t9v = (*(s32 * *)&D_801B4958)[19]; + t8v = (*(s32 * *)&D_801B4958)[20]; + } else { + s32 *p = (s32 *)(D_801B4970 * 12 + (s32) (*(s32 * *)&D_801B4958)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B4964) = arg0; + if (arg0 != 0) { + if (D_801B4990 != 0) { + s32 *p = (s32 *)(D_801B4970 * 12 + (s32) (*(s32 * *)&D_801B4960)); + D_801B4994 = p[0]; + D_801B4998 = p[1]; + D_801B499C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8013F350.c b/src/ov_SC05_001/ov_SC05_001_jr_8013F350.c index 0c1c20c27..20ebd294b 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8013F350.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80186200[]; extern u8 D_801862FC[]; extern u8 D_8018637C[]; extern u8 D_80186254[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c b/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c index 6cb60a974..4a3c02577 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80186200[]; extern u8 D_801862FC[]; extern u8 D_8018637C[]; extern u8 D_80186254[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_001/ov_SC05_001_jr_80140608.c b/src/ov_SC05_001/ov_SC05_001_jr_80140608.c index 98c270aea..4e75b6630 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_80140608.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80186200[]; extern u8 D_801862FC[]; extern u8 D_8018637C[]; extern u8 D_80186254[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_002/ov_SC05_002_jr_801380E0.c b/src/ov_SC05_002/ov_SC05_002_jr_801380E0.c index 3e4f8bef2..0a513f5b5 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_801380E0.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80180ABC[]; extern u8 D_80180B3C[]; extern u8 D_80180A14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019EC28; +extern s32 D_8019EC10; + + +extern u8 D_8019FF4A; +extern u8 D_8019FFBE; +extern u8 D_8019FE72; +extern u8 D_8019FF2C; +extern u8 D_8019FE50; +extern u8 D_8019FE71; + + +extern s32 D_8019FF30; +extern s32 D_8019EC24; +extern s32 D_8019EC20; +extern s32 D_8019EC08; +extern s32 D_8019EC14; +extern s32 D_8019EC18; + +extern void *D_8019EBF8; +extern s32 D_8019EC30; +extern void *D_8019EC00; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80180B58[]; + extern Rec12 D_80180B90[]; + extern u8 D_80078EAF; + extern u8 D_8019FF08; + extern s32 D_8019EC1C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80180B94[]; + extern u8 D_80180B98[]; + extern unsigned char D_8019FE68; + extern s16 *D_8019EC04; + extern s32 D_8019EC34; + extern s32 D_8019EC38; + extern s32 D_8019EC3C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019EC28 & 1)) { + D_8019EC10 = 1; + } else { + D_8019EC10 = D_80078EAF; + } + + b0 = ((u8 *)D_80180B90)[D_8019EC10 * 12]; + D_8019FF4A = b0; + D_8019FFBE = b0; + b1 = D_80180B94[D_8019EC10 * 12]; + D_8019FE72 = b1; + D_8019FF2C = b1; + b2 = D_80180B98[D_8019EC10 * 12]; + D_8019FE50 = b2; + D_8019FE71 = b2; + + (*(S9 *)&D_8019FE68) = ((S9 *)D_80180B58)[D_8019EC10]; + (*(S9 *)&D_8019FF08) = *(S9 *)(&D_8019FE50 + 0x18); /* same addr as (*(S9 *)&D_8019FE68); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019FF30 = 1; + D_8019EC24 = -1; + D_8019EC20 = 0; + D_8019EC1C = -1; + D_8019EC08 = 0; + D_8019EC14 = 0; + D_8019EC18 = 0; + + if ((D_8019EC28 & 2) && (D_8019EC10 == 4)) { + s0v = (*(s32 * *)&D_8019EBF8)[18]; + t9v = (*(s32 * *)&D_8019EBF8)[19]; + t8v = (*(s32 * *)&D_8019EBF8)[20]; + } else { + s32 *p = (s32 *)(D_8019EC10 * 12 + (s32) (*(s32 * *)&D_8019EBF8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019EC04) = arg0; + if (arg0 != 0) { + if (D_8019EC30 != 0) { + s32 *p = (s32 *)(D_8019EC10 * 12 + (s32) (*(s32 * *)&D_8019EC00)); + D_8019EC34 = p[0]; + D_8019EC38 = p[1]; + D_8019EC3C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8013F350.c b/src/ov_SC05_002/ov_SC05_002_jr_8013F350.c index d5cc9c2ec..0d92ba9a6 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8013F350.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801809C0[]; extern u8 D_80180ABC[]; extern u8 D_80180B3C[]; extern u8 D_80180A14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c b/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c index 4c149ea5e..fa36f83c8 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801809C0[]; extern u8 D_80180ABC[]; extern u8 D_80180B3C[]; extern u8 D_80180A14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_002/ov_SC05_002_jr_80140608.c b/src/ov_SC05_002/ov_SC05_002_jr_80140608.c index 3674cd764..41f6f6f32 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_80140608.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801809C0[]; extern u8 D_80180ABC[]; extern u8 D_80180B3C[]; extern u8 D_80180A14[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_003/ov_SC05_003_jr_801380E0.c b/src/ov_SC05_003/ov_SC05_003_jr_801380E0.c index 57e0e5f09..ab88549c9 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_801380E0.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182DF4[]; extern u8 D_80182E74[]; extern u8 D_80182D4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801AB738; +extern s32 D_801AB720; + + +extern u8 D_801ACA5A; +extern u8 D_801ACACE; +extern u8 D_801AC982; +extern u8 D_801ACA3C; +extern u8 D_801AC960; +extern u8 D_801AC981; + + +extern s32 D_801ACA40; +extern s32 D_801AB734; +extern s32 D_801AB730; +extern s32 D_801AB718; +extern s32 D_801AB724; +extern s32 D_801AB728; + +extern void *D_801AB708; +extern s32 D_801AB740; +extern void *D_801AB710; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182E90[]; + extern Rec12 D_80182EC8[]; + extern u8 D_80078EAF; + extern u8 D_801ACA18; + extern s32 D_801AB72C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182ECC[]; + extern u8 D_80182ED0[]; + extern unsigned char D_801AC978; + extern s16 *D_801AB714; + extern s32 D_801AB744; + extern s32 D_801AB748; + extern s32 D_801AB74C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801AB738 & 1)) { + D_801AB720 = 1; + } else { + D_801AB720 = D_80078EAF; + } + + b0 = ((u8 *)D_80182EC8)[D_801AB720 * 12]; + D_801ACA5A = b0; + D_801ACACE = b0; + b1 = D_80182ECC[D_801AB720 * 12]; + D_801AC982 = b1; + D_801ACA3C = b1; + b2 = D_80182ED0[D_801AB720 * 12]; + D_801AC960 = b2; + D_801AC981 = b2; + + (*(S9 *)&D_801AC978) = ((S9 *)D_80182E90)[D_801AB720]; + (*(S9 *)&D_801ACA18) = *(S9 *)(&D_801AC960 + 0x18); /* same addr as (*(S9 *)&D_801AC978); distinct sym defeats cse, keeps %hi/%lo */ + + D_801ACA40 = 1; + D_801AB734 = -1; + D_801AB730 = 0; + D_801AB72C = -1; + D_801AB718 = 0; + D_801AB724 = 0; + D_801AB728 = 0; + + if ((D_801AB738 & 2) && (D_801AB720 == 4)) { + s0v = (*(s32 * *)&D_801AB708)[18]; + t9v = (*(s32 * *)&D_801AB708)[19]; + t8v = (*(s32 * *)&D_801AB708)[20]; + } else { + s32 *p = (s32 *)(D_801AB720 * 12 + (s32) (*(s32 * *)&D_801AB708)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801AB714) = arg0; + if (arg0 != 0) { + if (D_801AB740 != 0) { + s32 *p = (s32 *)(D_801AB720 * 12 + (s32) (*(s32 * *)&D_801AB710)); + D_801AB744 = p[0]; + D_801AB748 = p[1]; + D_801AB74C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8013F350.c b/src/ov_SC05_003/ov_SC05_003_jr_8013F350.c index d1101e357..46de1dc19 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8013F350.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182CF8[]; extern u8 D_80182DF4[]; extern u8 D_80182E74[]; extern u8 D_80182D4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c b/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c index 330cc5a33..302351df7 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182CF8[]; extern u8 D_80182DF4[]; extern u8 D_80182E74[]; extern u8 D_80182D4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_003/ov_SC05_003_jr_80140608.c b/src/ov_SC05_003/ov_SC05_003_jr_80140608.c index 667eb23b2..18dad0c0a 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_80140608.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182CF8[]; extern u8 D_80182DF4[]; extern u8 D_80182E74[]; extern u8 D_80182D4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_004/ov_SC05_004_jr_801380E0.c b/src/ov_SC05_004/ov_SC05_004_jr_801380E0.c index 9ab39deb9..1029547e8 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_801380E0.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_80181F00[]; extern u8 D_80181F80[]; extern u8 D_80181E58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019DDB0; +extern s32 D_8019DD98; + + +extern u8 D_8019F2B2; +extern u8 D_8019F326; +extern u8 D_8019F1DA; +extern u8 D_8019F294; +extern u8 D_8019F1B8; +extern u8 D_8019F1D9; + + +extern s32 D_8019F298; +extern s32 D_8019DDAC; +extern s32 D_8019DDA8; +extern s32 D_8019DD90; +extern s32 D_8019DD9C; +extern s32 D_8019DDA0; + +extern void *D_8019DD80; +extern s32 D_8019DDB8; +extern void *D_8019DD88; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80181F9C[]; + extern Rec12 D_80181FD4[]; + extern u8 D_80078EAF; + extern u8 D_8019F270; + extern s32 D_8019DDA4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80181FD8[]; + extern u8 D_80181FDC[]; + extern unsigned char D_8019F1D0; + extern s16 *D_8019DD8C; + extern s32 D_8019DDBC; + extern s32 D_8019DDC0; + extern s32 D_8019DDC4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019DDB0 & 1)) { + D_8019DD98 = 1; + } else { + D_8019DD98 = D_80078EAF; + } + + b0 = ((u8 *)D_80181FD4)[D_8019DD98 * 12]; + D_8019F2B2 = b0; + D_8019F326 = b0; + b1 = D_80181FD8[D_8019DD98 * 12]; + D_8019F1DA = b1; + D_8019F294 = b1; + b2 = D_80181FDC[D_8019DD98 * 12]; + D_8019F1B8 = b2; + D_8019F1D9 = b2; + + (*(S9 *)&D_8019F1D0) = ((S9 *)D_80181F9C)[D_8019DD98]; + (*(S9 *)&D_8019F270) = *(S9 *)(&D_8019F1B8 + 0x18); /* same addr as (*(S9 *)&D_8019F1D0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019F298 = 1; + D_8019DDAC = -1; + D_8019DDA8 = 0; + D_8019DDA4 = -1; + D_8019DD90 = 0; + D_8019DD9C = 0; + D_8019DDA0 = 0; + + if ((D_8019DDB0 & 2) && (D_8019DD98 == 4)) { + s0v = (*(s32 * *)&D_8019DD80)[18]; + t9v = (*(s32 * *)&D_8019DD80)[19]; + t8v = (*(s32 * *)&D_8019DD80)[20]; + } else { + s32 *p = (s32 *)(D_8019DD98 * 12 + (s32) (*(s32 * *)&D_8019DD80)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019DD8C) = arg0; + if (arg0 != 0) { + if (D_8019DDB8 != 0) { + s32 *p = (s32 *)(D_8019DD98 * 12 + (s32) (*(s32 * *)&D_8019DD88)); + D_8019DDBC = p[0]; + D_8019DDC0 = p[1]; + D_8019DDC4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c b/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c index c4323eb3c..d9afa43a6 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80181E04[]; extern u8 D_80181F00[]; extern u8 D_80181F80[]; extern u8 D_80181E58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_004/ov_SC05_004_jr_80140608.c b/src/ov_SC05_004/ov_SC05_004_jr_80140608.c index d7cd553d0..188be60fb 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_80140608.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80181E04[]; extern u8 D_80181F00[]; extern u8 D_80181F80[]; extern u8 D_80181E58[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_005/ov_SC05_005_jr_801380E0.c b/src/ov_SC05_005/ov_SC05_005_jr_801380E0.c index 78dbfb882..6aadb579a 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_801380E0.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182CD4[]; extern u8 D_80182D54[]; extern u8 D_80182C2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B0A18; +extern s32 D_801B0A00; + + +extern u8 D_801B1FBA; +extern u8 D_801B202E; +extern u8 D_801B1EE2; +extern u8 D_801B1F9C; +extern u8 D_801B1EC0; +extern u8 D_801B1EE1; + + +extern s32 D_801B1FA0; +extern s32 D_801B0A14; +extern s32 D_801B0A10; +extern s32 D_801B09F8; +extern s32 D_801B0A04; +extern s32 D_801B0A08; + +extern void *D_801B09E8; +extern s32 D_801B0A20; +extern void *D_801B09F0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182D70[]; + extern Rec12 D_80182DA8[]; + extern u8 D_80078EAF; + extern u8 D_801B1F78; + extern s32 D_801B0A0C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182DAC[]; + extern u8 D_80182DB0[]; + extern unsigned char D_801B1ED8; + extern s16 *D_801B09F4; + extern s32 D_801B0A24; + extern s32 D_801B0A28; + extern s32 D_801B0A2C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B0A18 & 1)) { + D_801B0A00 = 1; + } else { + D_801B0A00 = D_80078EAF; + } + + b0 = ((u8 *)D_80182DA8)[D_801B0A00 * 12]; + D_801B1FBA = b0; + D_801B202E = b0; + b1 = D_80182DAC[D_801B0A00 * 12]; + D_801B1EE2 = b1; + D_801B1F9C = b1; + b2 = D_80182DB0[D_801B0A00 * 12]; + D_801B1EC0 = b2; + D_801B1EE1 = b2; + + (*(S9 *)&D_801B1ED8) = ((S9 *)D_80182D70)[D_801B0A00]; + (*(S9 *)&D_801B1F78) = *(S9 *)(&D_801B1EC0 + 0x18); /* same addr as (*(S9 *)&D_801B1ED8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B1FA0 = 1; + D_801B0A14 = -1; + D_801B0A10 = 0; + D_801B0A0C = -1; + D_801B09F8 = 0; + D_801B0A04 = 0; + D_801B0A08 = 0; + + if ((D_801B0A18 & 2) && (D_801B0A00 == 4)) { + s0v = (*(s32 * *)&D_801B09E8)[18]; + t9v = (*(s32 * *)&D_801B09E8)[19]; + t8v = (*(s32 * *)&D_801B09E8)[20]; + } else { + s32 *p = (s32 *)(D_801B0A00 * 12 + (s32) (*(s32 * *)&D_801B09E8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B09F4) = arg0; + if (arg0 != 0) { + if (D_801B0A20 != 0) { + s32 *p = (s32 *)(D_801B0A00 * 12 + (s32) (*(s32 * *)&D_801B09F0)); + D_801B0A24 = p[0]; + D_801B0A28 = p[1]; + D_801B0A2C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8013F350.c b/src/ov_SC05_005/ov_SC05_005_jr_8013F350.c index bc6819662..3e4e3d76f 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8013F350.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182BD8[]; extern u8 D_80182CD4[]; extern u8 D_80182D54[]; extern u8 D_80182C2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c b/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c index 1e5a3f11a..0c0447df4 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182BD8[]; extern u8 D_80182CD4[]; extern u8 D_80182D54[]; extern u8 D_80182C2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_005/ov_SC05_005_jr_80140608.c b/src/ov_SC05_005/ov_SC05_005_jr_80140608.c index c65bd309d..cc8fd764b 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_80140608.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182BD8[]; extern u8 D_80182CD4[]; extern u8 D_80182D54[]; extern u8 D_80182C2C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_006/ov_SC05_006_jr_801380E0.c b/src/ov_SC05_006/ov_SC05_006_jr_801380E0.c index ee155a3ab..4eaad653d 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_801380E0.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017FCF4[]; extern u8 D_8017FD74[]; extern u8 D_8017FC4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018EB50; +extern s32 D_8018EB38; + + +extern u8 D_801900EA; +extern u8 D_8019015E; +extern u8 D_80190012; +extern u8 D_801900CC; +extern u8 D_8018FFF0; +extern u8 D_80190011; + + +extern s32 D_801900D0; +extern s32 D_8018EB4C; +extern s32 D_8018EB48; +extern s32 D_8018EB30; +extern s32 D_8018EB3C; +extern s32 D_8018EB40; + +extern void *D_8018EB20; +extern s32 D_8018EB58; +extern void *D_8018EB28; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FD90[]; + extern Rec12 D_8017FDC8[]; + extern u8 D_80078EAF; + extern u8 D_801900A8; + extern s32 D_8018EB44; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FDCC[]; + extern u8 D_8017FDD0[]; + extern unsigned char D_80190008; + extern s16 *D_8018EB2C; + extern s32 D_8018EB5C; + extern s32 D_8018EB60; + extern s32 D_8018EB64; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018EB50 & 1)) { + D_8018EB38 = 1; + } else { + D_8018EB38 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FDC8)[D_8018EB38 * 12]; + D_801900EA = b0; + D_8019015E = b0; + b1 = D_8017FDCC[D_8018EB38 * 12]; + D_80190012 = b1; + D_801900CC = b1; + b2 = D_8017FDD0[D_8018EB38 * 12]; + D_8018FFF0 = b2; + D_80190011 = b2; + + (*(S9 *)&D_80190008) = ((S9 *)D_8017FD90)[D_8018EB38]; + (*(S9 *)&D_801900A8) = *(S9 *)(&D_8018FFF0 + 0x18); /* same addr as (*(S9 *)&D_80190008); distinct sym defeats cse, keeps %hi/%lo */ + + D_801900D0 = 1; + D_8018EB4C = -1; + D_8018EB48 = 0; + D_8018EB44 = -1; + D_8018EB30 = 0; + D_8018EB3C = 0; + D_8018EB40 = 0; + + if ((D_8018EB50 & 2) && (D_8018EB38 == 4)) { + s0v = (*(s32 * *)&D_8018EB20)[18]; + t9v = (*(s32 * *)&D_8018EB20)[19]; + t8v = (*(s32 * *)&D_8018EB20)[20]; + } else { + s32 *p = (s32 *)(D_8018EB38 * 12 + (s32) (*(s32 * *)&D_8018EB20)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018EB2C) = arg0; + if (arg0 != 0) { + if (D_8018EB58 != 0) { + s32 *p = (s32 *)(D_8018EB38 * 12 + (s32) (*(s32 * *)&D_8018EB28)); + D_8018EB5C = p[0]; + D_8018EB60 = p[1]; + D_8018EB64 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8013F350.c b/src/ov_SC05_006/ov_SC05_006_jr_8013F350.c index 4b48efadd..d01eebc58 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8013F350.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017FBF8[]; extern u8 D_8017FCF4[]; extern u8 D_8017FD74[]; extern u8 D_8017FC4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c b/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c index c8651e706..523c32e4e 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017FBF8[]; extern u8 D_8017FCF4[]; extern u8 D_8017FD74[]; extern u8 D_8017FC4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_006/ov_SC05_006_jr_80140608.c b/src/ov_SC05_006/ov_SC05_006_jr_80140608.c index 7880afa6c..90b356307 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_80140608.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017FBF8[]; extern u8 D_8017FCF4[]; extern u8 D_8017FD74[]; extern u8 D_8017FC4C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_007/ov_SC05_007_jr_801380E0.c b/src/ov_SC05_007/ov_SC05_007_jr_801380E0.c index 7293e492c..92405cafe 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_801380E0.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801812F0[]; extern u8 D_80181370[]; extern u8 D_80181248[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019BB30; +extern s32 D_8019BB18; + + +extern u8 D_8019CE8A; +extern u8 D_8019CEFE; +extern u8 D_8019CDB2; +extern u8 D_8019CE6C; +extern u8 D_8019CD90; +extern u8 D_8019CDB1; + + +extern s32 D_8019CE70; +extern s32 D_8019BB2C; +extern s32 D_8019BB28; +extern s32 D_8019BB10; +extern s32 D_8019BB1C; +extern s32 D_8019BB20; + +extern void *D_8019BB00; +extern s32 D_8019BB38; +extern void *D_8019BB08; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018138C[]; + extern Rec12 D_801813C4[]; + extern u8 D_80078EAF; + extern u8 D_8019CE48; + extern s32 D_8019BB24; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801813C8[]; + extern u8 D_801813CC[]; + extern unsigned char D_8019CDA8; + extern s16 *D_8019BB0C; + extern s32 D_8019BB3C; + extern s32 D_8019BB40; + extern s32 D_8019BB44; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019BB30 & 1)) { + D_8019BB18 = 1; + } else { + D_8019BB18 = D_80078EAF; + } + + b0 = ((u8 *)D_801813C4)[D_8019BB18 * 12]; + D_8019CE8A = b0; + D_8019CEFE = b0; + b1 = D_801813C8[D_8019BB18 * 12]; + D_8019CDB2 = b1; + D_8019CE6C = b1; + b2 = D_801813CC[D_8019BB18 * 12]; + D_8019CD90 = b2; + D_8019CDB1 = b2; + + (*(S9 *)&D_8019CDA8) = ((S9 *)D_8018138C)[D_8019BB18]; + (*(S9 *)&D_8019CE48) = *(S9 *)(&D_8019CD90 + 0x18); /* same addr as (*(S9 *)&D_8019CDA8); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019CE70 = 1; + D_8019BB2C = -1; + D_8019BB28 = 0; + D_8019BB24 = -1; + D_8019BB10 = 0; + D_8019BB1C = 0; + D_8019BB20 = 0; + + if ((D_8019BB30 & 2) && (D_8019BB18 == 4)) { + s0v = (*(s32 * *)&D_8019BB00)[18]; + t9v = (*(s32 * *)&D_8019BB00)[19]; + t8v = (*(s32 * *)&D_8019BB00)[20]; + } else { + s32 *p = (s32 *)(D_8019BB18 * 12 + (s32) (*(s32 * *)&D_8019BB00)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019BB0C) = arg0; + if (arg0 != 0) { + if (D_8019BB38 != 0) { + s32 *p = (s32 *)(D_8019BB18 * 12 + (s32) (*(s32 * *)&D_8019BB08)); + D_8019BB3C = p[0]; + D_8019BB40 = p[1]; + D_8019BB44 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8013F350.c b/src/ov_SC05_007/ov_SC05_007_jr_8013F350.c index 8d37f21a4..1f912f115 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8013F350.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801811F4[]; extern u8 D_801812F0[]; extern u8 D_80181370[]; extern u8 D_80181248[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c b/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c index 247d11665..8b4710e1a 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801811F4[]; extern u8 D_801812F0[]; extern u8 D_80181370[]; extern u8 D_80181248[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_007/ov_SC05_007_jr_80140608.c b/src/ov_SC05_007/ov_SC05_007_jr_80140608.c index 54b4bfaa8..ddeaf5f7a 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_80140608.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801811F4[]; extern u8 D_801812F0[]; extern u8 D_80181370[]; extern u8 D_80181248[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_008/ov_SC05_008_jr_801380E0.c b/src/ov_SC05_008/ov_SC05_008_jr_801380E0.c index 720aee85f..e3277e4f5 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_801380E0.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80183248[]; extern u8 D_801832C8[]; extern u8 D_801831A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019FE60; +extern s32 D_8019FE48; + + +extern u8 D_801A1272; +extern u8 D_801A12EA; +extern u8 D_801A119A; +extern u8 D_801A1254; +extern u8 D_801A1148; +extern u8 D_801A1199; + + +extern s32 D_801A1258; +extern s32 D_8019FE5C; +extern s32 D_8019FE58; +extern s32 D_8019FE40; +extern s32 D_8019FE4C; +extern s32 D_8019FE50; + +extern void *D_8019FE30; +extern s32 D_8019FE68; +extern void *D_8019FE38; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801832E4[]; + extern Rec12 D_8018331C[]; + extern u8 D_80078EAF; + extern u8 D_801A1230; + extern s32 D_8019FE54; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80183320[]; + extern u8 D_80183324[]; + extern unsigned char D_801A1190; + extern s16 *D_8019FE3C; + extern s32 D_8019FE6C; + extern s32 D_8019FE70; + extern s32 D_8019FE74; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019FE60 & 1)) { + D_8019FE48 = 1; + } else { + D_8019FE48 = D_80078EAF; + } + + b0 = ((u8 *)D_8018331C)[D_8019FE48 * 12]; + D_801A1272 = b0; + D_801A12EA = b0; + b1 = D_80183320[D_8019FE48 * 12]; + D_801A119A = b1; + D_801A1254 = b1; + b2 = D_80183324[D_8019FE48 * 12]; + D_801A1148 = b2; + D_801A1199 = b2; + + (*(S9 *)&D_801A1190) = ((S9 *)D_801832E4)[D_8019FE48]; + (*(S9 *)&D_801A1230) = *(S9 *)(&D_801A1148 + 0x48); /* same addr as (*(S9 *)&D_801A1190); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A1258 = 1; + D_8019FE5C = -1; + D_8019FE58 = 0; + D_8019FE54 = -1; + D_8019FE40 = 0; + D_8019FE4C = 0; + D_8019FE50 = 0; + + if ((D_8019FE60 & 2) && (D_8019FE48 == 4)) { + s0v = (*(s32 * *)&D_8019FE30)[18]; + t9v = (*(s32 * *)&D_8019FE30)[19]; + t8v = (*(s32 * *)&D_8019FE30)[20]; + } else { + s32 *p = (s32 *)(D_8019FE48 * 12 + (s32) (*(s32 * *)&D_8019FE30)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019FE3C) = arg0; + if (arg0 != 0) { + if (D_8019FE68 != 0) { + s32 *p = (s32 *)(D_8019FE48 * 12 + (s32) (*(s32 * *)&D_8019FE38)); + D_8019FE6C = p[0]; + D_8019FE70 = p[1]; + D_8019FE74 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8013F350.c b/src/ov_SC05_008/ov_SC05_008_jr_8013F350.c index f38889f57..1b57c6678 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8013F350.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018314C[]; extern u8 D_80183248[]; extern u8 D_801832C8[]; extern u8 D_801831A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c b/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c index b9b8b31cb..7294b39a8 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018314C[]; extern u8 D_80183248[]; extern u8 D_801832C8[]; extern u8 D_801831A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_008/ov_SC05_008_jr_80140608.c b/src/ov_SC05_008/ov_SC05_008_jr_80140608.c index 240ea9cd0..71e9bbb76 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_80140608.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018314C[]; extern u8 D_80183248[]; extern u8 D_801832C8[]; extern u8 D_801831A0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_009/ov_SC05_009_jr_801380E0.c b/src/ov_SC05_009/ov_SC05_009_jr_801380E0.c index 24d645ebc..177472e14 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_801380E0.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80195870; +extern s32 D_80195858; + + +extern u8 D_80196BD2; +extern u8 D_80196C46; +extern u8 D_80196AFA; +extern u8 D_80196BB4; +extern u8 D_80196AD8; +extern u8 D_80196AF9; + + +extern s32 D_80196BB8; +extern s32 D_8019586C; +extern s32 D_80195868; +extern s32 D_80195850; +extern s32 D_8019585C; +extern s32 D_80195860; + +extern void *D_80195840; +extern s32 D_80195878; +extern void *D_80195848; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F3F4[]; + extern Rec12 D_8017F42C[]; + extern u8 D_80078EAF; + extern u8 D_80196B90; + extern s32 D_80195864; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F430[]; + extern u8 D_8017F434[]; + extern unsigned char D_80196AF0; + extern s16 *D_8019584C; + extern s32 D_8019587C; + extern s32 D_80195880; + extern s32 D_80195884; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80195870 & 1)) { + D_80195858 = 1; + } else { + D_80195858 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F42C)[D_80195858 * 12]; + D_80196BD2 = b0; + D_80196C46 = b0; + b1 = D_8017F430[D_80195858 * 12]; + D_80196AFA = b1; + D_80196BB4 = b1; + b2 = D_8017F434[D_80195858 * 12]; + D_80196AD8 = b2; + D_80196AF9 = b2; + + (*(S9 *)&D_80196AF0) = ((S9 *)D_8017F3F4)[D_80195858]; + (*(S9 *)&D_80196B90) = *(S9 *)(&D_80196AD8 + 0x18); /* same addr as (*(S9 *)&D_80196AF0); distinct sym defeats cse, keeps %hi/%lo */ + + D_80196BB8 = 1; + D_8019586C = -1; + D_80195868 = 0; + D_80195864 = -1; + D_80195850 = 0; + D_8019585C = 0; + D_80195860 = 0; + + if ((D_80195870 & 2) && (D_80195858 == 4)) { + s0v = (*(s32 * *)&D_80195840)[18]; + t9v = (*(s32 * *)&D_80195840)[19]; + t8v = (*(s32 * *)&D_80195840)[20]; + } else { + s32 *p = (s32 *)(D_80195858 * 12 + (s32) (*(s32 * *)&D_80195840)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019584C) = arg0; + if (arg0 != 0) { + if (D_80195878 != 0) { + s32 *p = (s32 *)(D_80195858 * 12 + (s32) (*(s32 * *)&D_80195848)); + D_8019587C = p[0]; + D_80195880 = p[1]; + D_80195884 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8013F350.c b/src/ov_SC05_009/ov_SC05_009_jr_8013F350.c index 66f5e06c7..b96a4e1de 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8013F350.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c b/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c index 861816c8d..b61f7a6d5 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_009/ov_SC05_009_jr_80140608.c b/src/ov_SC05_009/ov_SC05_009_jr_80140608.c index 4b51b0d32..501cc273e 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_80140608.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F25C[]; extern u8 D_8017F358[]; extern u8 D_8017F3D8[]; extern u8 D_8017F2B0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_801380E0.c b/src/ov_SC05_010/ov_SC05_010_jr_801380E0.c index cd6bfe976..14352b586 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_801380E0.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80189234[]; extern u8 D_801892B4[]; extern u8 D_8018918C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801C5CC0; +extern s32 D_801C5CA8; + + +extern u8 D_801C7FBA; +extern u8 D_801C802E; +extern u8 D_801C7EE2; +extern u8 D_801C7F9C; +extern u8 D_801C7EC0; +extern u8 D_801C7EE1; + + +extern s32 D_801C7FA0; +extern s32 D_801C5CBC; +extern s32 D_801C5CB8; +extern s32 D_801C5CA0; +extern s32 D_801C5CAC; +extern s32 D_801C5CB0; + +extern void *D_801C5C90; +extern s32 D_801C5CC8; +extern void *D_801C5C98; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801892D0[]; + extern Rec12 D_80189308[]; + extern u8 D_80078EAF; + extern u8 D_801C7F78; + extern s32 D_801C5CB4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018930C[]; + extern u8 D_80189310[]; + extern unsigned char D_801C7ED8; + extern s16 *D_801C5C9C; + extern s32 D_801C5CCC; + extern s32 D_801C5CD0; + extern s32 D_801C5CD4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801C5CC0 & 1)) { + D_801C5CA8 = 1; + } else { + D_801C5CA8 = D_80078EAF; + } + + b0 = ((u8 *)D_80189308)[D_801C5CA8 * 12]; + D_801C7FBA = b0; + D_801C802E = b0; + b1 = D_8018930C[D_801C5CA8 * 12]; + D_801C7EE2 = b1; + D_801C7F9C = b1; + b2 = D_80189310[D_801C5CA8 * 12]; + D_801C7EC0 = b2; + D_801C7EE1 = b2; + + (*(S9 *)&D_801C7ED8) = ((S9 *)D_801892D0)[D_801C5CA8]; + (*(S9 *)&D_801C7F78) = *(S9 *)(&D_801C7EC0 + 0x18); /* same addr as (*(S9 *)&D_801C7ED8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801C7FA0 = 1; + D_801C5CBC = -1; + D_801C5CB8 = 0; + D_801C5CB4 = -1; + D_801C5CA0 = 0; + D_801C5CAC = 0; + D_801C5CB0 = 0; + + if ((D_801C5CC0 & 2) && (D_801C5CA8 == 4)) { + s0v = (*(s32 * *)&D_801C5C90)[18]; + t9v = (*(s32 * *)&D_801C5C90)[19]; + t8v = (*(s32 * *)&D_801C5C90)[20]; + } else { + s32 *p = (s32 *)(D_801C5CA8 * 12 + (s32) (*(s32 * *)&D_801C5C90)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801C5C9C) = arg0; + if (arg0 != 0) { + if (D_801C5CC8 != 0) { + s32 *p = (s32 *)(D_801C5CA8 * 12 + (s32) (*(s32 * *)&D_801C5C98)); + D_801C5CCC = p[0]; + D_801C5CD0 = p[1]; + D_801C5CD4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8013F350.c b/src/ov_SC05_010/ov_SC05_010_jr_8013F350.c index 015f43ebc..1d5f09778 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8013F350.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80189138[]; extern u8 D_80189234[]; extern u8 D_801892B4[]; extern u8 D_8018918C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c b/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c index 64139ac90..ec09da8da 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80189138[]; extern u8 D_80189234[]; extern u8 D_801892B4[]; extern u8 D_8018918C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80140608.c b/src/ov_SC05_010/ov_SC05_010_jr_80140608.c index 95fd79cac..230a7b273 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_80140608.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80189138[]; extern u8 D_80189234[]; extern u8 D_801892B4[]; extern u8 D_8018918C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_011/ov_SC05_011_jr_801380E0.c b/src/ov_SC05_011/ov_SC05_011_jr_801380E0.c index 37adfdd85..44451befa 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_801380E0.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017E5AC[]; extern u8 D_8017E62C[]; extern u8 D_8017E504[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019BE48; +extern s32 D_8019BE30; + + +extern u8 D_8019D16A; +extern u8 D_8019D1DE; +extern u8 D_8019D092; +extern u8 D_8019D14C; +extern u8 D_8019D070; +extern u8 D_8019D091; + + +extern s32 D_8019D150; +extern s32 D_8019BE44; +extern s32 D_8019BE40; +extern s32 D_8019BE28; +extern s32 D_8019BE34; +extern s32 D_8019BE38; + +extern void *D_8019BE18; +extern s32 D_8019BE50; +extern void *D_8019BE20; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017E648[]; + extern Rec12 D_8017E680[]; + extern u8 D_80078EAF; + extern u8 D_8019D128; + extern s32 D_8019BE3C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017E684[]; + extern u8 D_8017E688[]; + extern unsigned char D_8019D088; + extern s16 *D_8019BE24; + extern s32 D_8019BE54; + extern s32 D_8019BE58; + extern s32 D_8019BE5C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019BE48 & 1)) { + D_8019BE30 = 1; + } else { + D_8019BE30 = D_80078EAF; + } + + b0 = ((u8 *)D_8017E680)[D_8019BE30 * 12]; + D_8019D16A = b0; + D_8019D1DE = b0; + b1 = D_8017E684[D_8019BE30 * 12]; + D_8019D092 = b1; + D_8019D14C = b1; + b2 = D_8017E688[D_8019BE30 * 12]; + D_8019D070 = b2; + D_8019D091 = b2; + + (*(S9 *)&D_8019D088) = ((S9 *)D_8017E648)[D_8019BE30]; + (*(S9 *)&D_8019D128) = *(S9 *)(&D_8019D070 + 0x18); /* same addr as (*(S9 *)&D_8019D088); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019D150 = 1; + D_8019BE44 = -1; + D_8019BE40 = 0; + D_8019BE3C = -1; + D_8019BE28 = 0; + D_8019BE34 = 0; + D_8019BE38 = 0; + + if ((D_8019BE48 & 2) && (D_8019BE30 == 4)) { + s0v = (*(s32 * *)&D_8019BE18)[18]; + t9v = (*(s32 * *)&D_8019BE18)[19]; + t8v = (*(s32 * *)&D_8019BE18)[20]; + } else { + s32 *p = (s32 *)(D_8019BE30 * 12 + (s32) (*(s32 * *)&D_8019BE18)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019BE24) = arg0; + if (arg0 != 0) { + if (D_8019BE50 != 0) { + s32 *p = (s32 *)(D_8019BE30 * 12 + (s32) (*(s32 * *)&D_8019BE20)); + D_8019BE54 = p[0]; + D_8019BE58 = p[1]; + D_8019BE5C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8013F350.c b/src/ov_SC05_011/ov_SC05_011_jr_8013F350.c index b01747469..69cb56655 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8013F350.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017E4B0[]; extern u8 D_8017E5AC[]; extern u8 D_8017E62C[]; extern u8 D_8017E504[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c b/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c index 0ad80f869..eae6a6863 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017E4B0[]; extern u8 D_8017E5AC[]; extern u8 D_8017E62C[]; extern u8 D_8017E504[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_011/ov_SC05_011_jr_80140608.c b/src/ov_SC05_011/ov_SC05_011_jr_80140608.c index 6c6bdc90a..07c7f468b 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_80140608.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017E4B0[]; extern u8 D_8017E5AC[]; extern u8 D_8017E62C[]; extern u8 D_8017E504[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_019/ov_SC05_019_jr_801380E0.c b/src/ov_SC05_019/ov_SC05_019_jr_801380E0.c index 5d27930c7..d44b8ebab 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_801380E0.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8018E798; +extern s32 D_8018E780; + + +extern u8 D_8018FAB2; +extern u8 D_8018FB2C; +extern u8 D_8018F9DA; +extern u8 D_8018FA94; +extern u8 D_8018F9B8; +extern u8 D_8018F9D9; + + +extern s32 D_8018FA98; +extern s32 D_8018E794; +extern s32 D_8018E790; +extern s32 D_8018E778; +extern s32 D_8018E784; +extern s32 D_8018E788; + +extern void *D_8018E768; +extern s32 D_8018E7A0; +extern void *D_8018E770; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017FBA8[]; + extern Rec12 D_8017FBE0[]; + extern u8 D_80078EAF; + extern u8 D_8018FA70; + extern s32 D_8018E78C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017FBE4[]; + extern u8 D_8017FBE8[]; + extern unsigned char D_8018F9D0; + extern s16 *D_8018E774; + extern s32 D_8018E7A4; + extern s32 D_8018E7A8; + extern s32 D_8018E7AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018E798 & 1)) { + D_8018E780 = 1; + } else { + D_8018E780 = D_80078EAF; + } + + b0 = ((u8 *)D_8017FBE0)[D_8018E780 * 12]; + D_8018FAB2 = b0; + D_8018FB2C = b0; + b1 = D_8017FBE4[D_8018E780 * 12]; + D_8018F9DA = b1; + D_8018FA94 = b1; + b2 = D_8017FBE8[D_8018E780 * 12]; + D_8018F9B8 = b2; + D_8018F9D9 = b2; + + (*(S9 *)&D_8018F9D0) = ((S9 *)D_8017FBA8)[D_8018E780]; + (*(S9 *)&D_8018FA70) = *(S9 *)(&D_8018F9B8 + 0x18); /* same addr as (*(S9 *)&D_8018F9D0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8018FA98 = 1; + D_8018E794 = -1; + D_8018E790 = 0; + D_8018E78C = -1; + D_8018E778 = 0; + D_8018E784 = 0; + D_8018E788 = 0; + + if ((D_8018E798 & 2) && (D_8018E780 == 4)) { + s0v = (*(s32 * *)&D_8018E768)[18]; + t9v = (*(s32 * *)&D_8018E768)[19]; + t8v = (*(s32 * *)&D_8018E768)[20]; + } else { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E768)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018E774) = arg0; + if (arg0 != 0) { + if (D_8018E7A0 != 0) { + s32 *p = (s32 *)(D_8018E780 * 12 + (s32) (*(s32 * *)&D_8018E770)); + D_8018E7A4 = p[0]; + D_8018E7A8 = p[1]; + D_8018E7AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8013F350.c b/src/ov_SC05_019/ov_SC05_019_jr_8013F350.c index 6a75b5dd5..fa0bf8b4e 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8013F350.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c b/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c index 647a48169..642aa7834 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC05_019/ov_SC05_019_jr_80140608.c b/src/ov_SC05_019/ov_SC05_019_jr_80140608.c index 7459327b3..77d177e48 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_80140608.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017FA10[]; extern u8 D_8017FB0C[]; extern u8 D_8017FB8C[]; extern u8 D_8017FA64[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_000/ov_SC06_000_jr_801380E0.c b/src/ov_SC06_000/ov_SC06_000_jr_801380E0.c index 86faca463..ce1e3e532 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_801380E0.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_801380E0.c @@ -1895,7 +1895,7 @@ extern u8 D_80188B1C[]; extern u8 D_80188B9C[]; extern u8 D_80188A74[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1940,7 +1940,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801AD408; +extern s32 D_801AD3F0; + + +extern u8 D_801B20DA; +extern u8 D_801B2186; +extern u8 D_801B2002; +extern u8 D_801B20BC; +extern u8 D_801B1FE0; +extern u8 D_801B2001; + + +extern s32 D_801B20C0; +extern s32 D_801AD404; +extern s32 D_801AD400; +extern s32 D_801AD3E8; +extern s32 D_801AD3F4; +extern s32 D_801AD3F8; + +extern void *D_801AD3D8; +extern s32 D_801AD410; +extern void *D_801AD3E0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80188BB8[]; + extern Rec12 D_80188BF0[]; + extern u8 D_80078EAF; + extern u8 D_801B2098; + extern s32 D_801AD3FC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80188BF4[]; + extern u8 D_80188BF8[]; + extern unsigned char D_801B1FF8; + extern s16 *D_801AD3E4; + extern s32 D_801AD414; + extern s32 D_801AD418; + extern s32 D_801AD41C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801AD408 & 1)) { + D_801AD3F0 = 1; + } else { + D_801AD3F0 = D_80078EAF; + } + + b0 = ((u8 *)D_80188BF0)[D_801AD3F0 * 12]; + D_801B20DA = b0; + D_801B2186 = b0; + b1 = D_80188BF4[D_801AD3F0 * 12]; + D_801B2002 = b1; + D_801B20BC = b1; + b2 = D_80188BF8[D_801AD3F0 * 12]; + D_801B1FE0 = b2; + D_801B2001 = b2; + + (*(S9 *)&D_801B1FF8) = ((S9 *)D_80188BB8)[D_801AD3F0]; + (*(S9 *)&D_801B2098) = *(S9 *)(&D_801B1FE0 + 0x18); /* same addr as (*(S9 *)&D_801B1FF8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B20C0 = 1; + D_801AD404 = -1; + D_801AD400 = 0; + D_801AD3FC = -1; + D_801AD3E8 = 0; + D_801AD3F4 = 0; + D_801AD3F8 = 0; + + if ((D_801AD408 & 2) && (D_801AD3F0 == 4)) { + s0v = (*(s32 * *)&D_801AD3D8)[18]; + t9v = (*(s32 * *)&D_801AD3D8)[19]; + t8v = (*(s32 * *)&D_801AD3D8)[20]; + } else { + s32 *p = (s32 *)(D_801AD3F0 * 12 + (s32) (*(s32 * *)&D_801AD3D8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801AD3E4) = arg0; + if (arg0 != 0) { + if (D_801AD410 != 0) { + s32 *p = (s32 *)(D_801AD3F0 * 12 + (s32) (*(s32 * *)&D_801AD3E0)); + D_801AD414 = p[0]; + D_801AD418 = p[1]; + D_801AD41C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c b/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c index 361ee284a..a2228112e 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8013F350.c @@ -821,7 +821,7 @@ extern u8 D_80188A20[]; extern u8 D_80188B1C[]; extern u8 D_80188B9C[]; extern u8 D_80188A74[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_000/ov_SC06_000_jr_80140608.c b/src/ov_SC06_000/ov_SC06_000_jr_80140608.c index ddabcae90..979159e9b 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_80140608.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_80140608.c @@ -821,7 +821,7 @@ extern u8 D_80188A20[]; extern u8 D_80188B1C[]; extern u8 D_80188B9C[]; extern u8 D_80188A74[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_006/ov_SC06_006_jr_801380E0.c b/src/ov_SC06_006/ov_SC06_006_jr_801380E0.c index d439112bf..9af4cb594 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_801380E0.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80182640[]; extern u8 D_801826C0[]; extern u8 D_80182598[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801F6E50; +extern s32 D_801F6E38; + + +extern u8 D_801F8AF6; +extern u8 D_801F8B66; +extern u8 D_801F8A18; +extern u8 D_801F8AD4; +extern u8 D_801F89E8; +extern u8 D_801F8A09; + + +extern s32 D_801F8AD8; +extern s32 D_801F6E4C; +extern s32 D_801F6E48; +extern s32 D_801F6E30; +extern s32 D_801F6E3C; +extern s32 D_801F6E40; + +extern void *D_801F6E20; +extern s32 D_801F6E58; +extern void *D_801F6E28; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801826DC[]; + extern Rec12 D_80182714[]; + extern u8 D_80078EAF; + extern u8 D_801F8AB0; + extern s32 D_801F6E44; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80182718[]; + extern u8 D_8018271C[]; + extern unsigned char D_801F8A00; + extern s16 *D_801F6E2C; + extern s32 D_801F6E5C; + extern s32 D_801F6E60; + extern s32 D_801F6E64; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801F6E50 & 1)) { + D_801F6E38 = 1; + } else { + D_801F6E38 = D_80078EAF; + } + + b0 = ((u8 *)D_80182714)[D_801F6E38 * 12]; + D_801F8AF6 = b0; + D_801F8B66 = b0; + b1 = D_80182718[D_801F6E38 * 12]; + D_801F8A18 = b1; + D_801F8AD4 = b1; + b2 = D_8018271C[D_801F6E38 * 12]; + D_801F89E8 = b2; + D_801F8A09 = b2; + + (*(S9 *)&D_801F8A00) = ((S9 *)D_801826DC)[D_801F6E38]; + (*(S9 *)&D_801F8AB0) = *(S9 *)(&D_801F89E8 + 0x18); /* same addr as (*(S9 *)&D_801F8A00); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F8AD8 = 1; + D_801F6E4C = -1; + D_801F6E48 = 0; + D_801F6E44 = -1; + D_801F6E30 = 0; + D_801F6E3C = 0; + D_801F6E40 = 0; + + if ((D_801F6E50 & 2) && (D_801F6E38 == 4)) { + s0v = (*(s32 * *)&D_801F6E20)[18]; + t9v = (*(s32 * *)&D_801F6E20)[19]; + t8v = (*(s32 * *)&D_801F6E20)[20]; + } else { + s32 *p = (s32 *)(D_801F6E38 * 12 + (s32) (*(s32 * *)&D_801F6E20)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801F6E2C) = arg0; + if (arg0 != 0) { + if (D_801F6E58 != 0) { + s32 *p = (s32 *)(D_801F6E38 * 12 + (s32) (*(s32 * *)&D_801F6E28)); + D_801F6E5C = p[0]; + D_801F6E60 = p[1]; + D_801F6E64 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8013F350.c b/src/ov_SC06_006/ov_SC06_006_jr_8013F350.c index 65cf48eca..f71ac7531 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8013F350.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80182544[]; extern u8 D_80182640[]; extern u8 D_801826C0[]; extern u8 D_80182598[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c b/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c index 799dfa5be..3e53f29e8 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80182544[]; extern u8 D_80182640[]; extern u8 D_801826C0[]; extern u8 D_80182598[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_006/ov_SC06_006_jr_80140608.c b/src/ov_SC06_006/ov_SC06_006_jr_80140608.c index 26d2257fd..b98a80fda 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_80140608.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80182544[]; extern u8 D_80182640[]; extern u8 D_801826C0[]; extern u8 D_80182598[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_008/ov_SC06_008_jr_801380E0.c b/src/ov_SC06_008/ov_SC06_008_jr_801380E0.c index c6c6b99d2..7061cc7f5 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_801380E0.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801860A8[]; extern u8 D_80186128[]; extern u8 D_80186000[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A8DD0; +extern s32 D_801A8DB8; + + +extern u8 D_801AA7C2; +extern u8 D_801AA836; +extern u8 D_801AA6EA; +extern u8 D_801AA7A4; +extern u8 D_801AA6C8; +extern u8 D_801AA6E9; + + +extern s32 D_801AA7A8; +extern s32 D_801A8DCC; +extern s32 D_801A8DC8; +extern s32 D_801A8DB0; +extern s32 D_801A8DBC; +extern s32 D_801A8DC0; + +extern void *D_801A8DA0; +extern s32 D_801A8DD8; +extern void *D_801A8DA8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80186144[]; + extern Rec12 D_8018617C[]; + extern u8 D_80078EAF; + extern u8 D_801AA780; + extern s32 D_801A8DC4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80186180[]; + extern u8 D_80186184[]; + extern unsigned char D_801AA6E0; + extern s16 *D_801A8DAC; + extern s32 D_801A8DDC; + extern s32 D_801A8DE0; + extern s32 D_801A8DE4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A8DD0 & 1)) { + D_801A8DB8 = 1; + } else { + D_801A8DB8 = D_80078EAF; + } + + b0 = ((u8 *)D_8018617C)[D_801A8DB8 * 12]; + D_801AA7C2 = b0; + D_801AA836 = b0; + b1 = D_80186180[D_801A8DB8 * 12]; + D_801AA6EA = b1; + D_801AA7A4 = b1; + b2 = D_80186184[D_801A8DB8 * 12]; + D_801AA6C8 = b2; + D_801AA6E9 = b2; + + (*(S9 *)&D_801AA6E0) = ((S9 *)D_80186144)[D_801A8DB8]; + (*(S9 *)&D_801AA780) = *(S9 *)(&D_801AA6C8 + 0x18); /* same addr as (*(S9 *)&D_801AA6E0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AA7A8 = 1; + D_801A8DCC = -1; + D_801A8DC8 = 0; + D_801A8DC4 = -1; + D_801A8DB0 = 0; + D_801A8DBC = 0; + D_801A8DC0 = 0; + + if ((D_801A8DD0 & 2) && (D_801A8DB8 == 4)) { + s0v = (*(s32 * *)&D_801A8DA0)[18]; + t9v = (*(s32 * *)&D_801A8DA0)[19]; + t8v = (*(s32 * *)&D_801A8DA0)[20]; + } else { + s32 *p = (s32 *)(D_801A8DB8 * 12 + (s32) (*(s32 * *)&D_801A8DA0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A8DAC) = arg0; + if (arg0 != 0) { + if (D_801A8DD8 != 0) { + s32 *p = (s32 *)(D_801A8DB8 * 12 + (s32) (*(s32 * *)&D_801A8DA8)); + D_801A8DDC = p[0]; + D_801A8DE0 = p[1]; + D_801A8DE4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8013F350.c b/src/ov_SC06_008/ov_SC06_008_jr_8013F350.c index 17459f962..ef7c6a954 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8013F350.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185FAC[]; extern u8 D_801860A8[]; extern u8 D_80186128[]; extern u8 D_80186000[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c b/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c index 587b28378..f13be78ec 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185FAC[]; extern u8 D_801860A8[]; extern u8 D_80186128[]; extern u8 D_80186000[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_008/ov_SC06_008_jr_80140608.c b/src/ov_SC06_008/ov_SC06_008_jr_80140608.c index 2b6ea277a..c5cfbe4c6 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_80140608.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185FAC[]; extern u8 D_801860A8[]; extern u8 D_80186128[]; extern u8 D_80186000[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_010/ov_SC06_010_jr_801380E0.c b/src/ov_SC06_010/ov_SC06_010_jr_801380E0.c index 8c9d394e6..ba032f22c 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_801380E0.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_801380E0.c @@ -1900,7 +1900,7 @@ extern u8 D_80187284[]; extern u8 D_80187304[]; extern u8 D_801871DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1945,7 +1945,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B0E08; +extern s32 D_801B0DF0; + + +extern u8 D_801B2C0A; +extern u8 D_801B2C7E; +extern u8 D_801B2B32; +extern u8 D_801B2BEC; +extern u8 D_801B2B10; +extern u8 D_801B2B31; + + +extern s32 D_801B2BF0; +extern s32 D_801B0E04; +extern s32 D_801B0E00; +extern s32 D_801B0DE8; +extern s32 D_801B0DF4; +extern s32 D_801B0DF8; + +extern void *D_801B0DD8; +extern s32 D_801B0E10; +extern void *D_801B0DE0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80187320[]; + extern Rec12 D_80187358[]; + extern u8 D_80078EAF; + extern u8 D_801B2BC8; + extern s32 D_801B0DFC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018735C[]; + extern u8 D_80187360[]; + extern unsigned char D_801B2B28; + extern s16 *D_801B0DE4; + extern s32 D_801B0E14; + extern s32 D_801B0E18; + extern s32 D_801B0E1C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B0E08 & 1)) { + D_801B0DF0 = 1; + } else { + D_801B0DF0 = D_80078EAF; + } + + b0 = ((u8 *)D_80187358)[D_801B0DF0 * 12]; + D_801B2C0A = b0; + D_801B2C7E = b0; + b1 = D_8018735C[D_801B0DF0 * 12]; + D_801B2B32 = b1; + D_801B2BEC = b1; + b2 = D_80187360[D_801B0DF0 * 12]; + D_801B2B10 = b2; + D_801B2B31 = b2; + + (*(S9 *)&D_801B2B28) = ((S9 *)D_80187320)[D_801B0DF0]; + (*(S9 *)&D_801B2BC8) = *(S9 *)(&D_801B2B10 + 0x18); /* same addr as (*(S9 *)&D_801B2B28); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B2BF0 = 1; + D_801B0E04 = -1; + D_801B0E00 = 0; + D_801B0DFC = -1; + D_801B0DE8 = 0; + D_801B0DF4 = 0; + D_801B0DF8 = 0; + + if ((D_801B0E08 & 2) && (D_801B0DF0 == 4)) { + s0v = (*(s32 * *)&D_801B0DD8)[18]; + t9v = (*(s32 * *)&D_801B0DD8)[19]; + t8v = (*(s32 * *)&D_801B0DD8)[20]; + } else { + s32 *p = (s32 *)(D_801B0DF0 * 12 + (s32) (*(s32 * *)&D_801B0DD8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B0DE4) = arg0; + if (arg0 != 0) { + if (D_801B0E10 != 0) { + s32 *p = (s32 *)(D_801B0DF0 * 12 + (s32) (*(s32 * *)&D_801B0DE0)); + D_801B0E14 = p[0]; + D_801B0E18 = p[1]; + D_801B0E1C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c b/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c index 0390dea26..f6e0952dc 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_8013F350.c @@ -819,7 +819,7 @@ extern u8 D_80187188[]; extern u8 D_80187284[]; extern u8 D_80187304[]; extern u8 D_801871DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_010/ov_SC06_010_jr_80140608.c b/src/ov_SC06_010/ov_SC06_010_jr_80140608.c index fc9643665..8e97071ab 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_80140608.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_80140608.c @@ -819,7 +819,7 @@ extern u8 D_80187188[]; extern u8 D_80187284[]; extern u8 D_80187304[]; extern u8 D_801871DC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_013/ov_SC06_013_jr_801380E0.c b/src/ov_SC06_013/ov_SC06_013_jr_801380E0.c index 5ee271dc1..dd4c59e9a 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_801380E0.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F460[]; extern u8 D_8017F4E0[]; extern u8 D_8017F3B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80199870; +extern s32 D_80199858; + + +extern u8 D_8019AB92; +extern u8 D_8019AC06; +extern u8 D_8019AABA; +extern u8 D_8019AB74; +extern u8 D_8019AA98; +extern u8 D_8019AAB9; + + +extern s32 D_8019AB78; +extern s32 D_8019986C; +extern s32 D_80199868; +extern s32 D_80199850; +extern s32 D_8019985C; +extern s32 D_80199860; + +extern void *D_80199840; +extern s32 D_80199878; +extern void *D_80199848; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F4FC[]; + extern Rec12 D_8017F534[]; + extern u8 D_80078EAF; + extern u8 D_8019AB50; + extern s32 D_80199864; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F538[]; + extern u8 D_8017F53C[]; + extern unsigned char D_8019AAB0; + extern s16 *D_8019984C; + extern s32 D_8019987C; + extern s32 D_80199880; + extern s32 D_80199884; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80199870 & 1)) { + D_80199858 = 1; + } else { + D_80199858 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F534)[D_80199858 * 12]; + D_8019AB92 = b0; + D_8019AC06 = b0; + b1 = D_8017F538[D_80199858 * 12]; + D_8019AABA = b1; + D_8019AB74 = b1; + b2 = D_8017F53C[D_80199858 * 12]; + D_8019AA98 = b2; + D_8019AAB9 = b2; + + (*(S9 *)&D_8019AAB0) = ((S9 *)D_8017F4FC)[D_80199858]; + (*(S9 *)&D_8019AB50) = *(S9 *)(&D_8019AA98 + 0x18); /* same addr as (*(S9 *)&D_8019AAB0); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019AB78 = 1; + D_8019986C = -1; + D_80199868 = 0; + D_80199864 = -1; + D_80199850 = 0; + D_8019985C = 0; + D_80199860 = 0; + + if ((D_80199870 & 2) && (D_80199858 == 4)) { + s0v = (*(s32 * *)&D_80199840)[18]; + t9v = (*(s32 * *)&D_80199840)[19]; + t8v = (*(s32 * *)&D_80199840)[20]; + } else { + s32 *p = (s32 *)(D_80199858 * 12 + (s32) (*(s32 * *)&D_80199840)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019984C) = arg0; + if (arg0 != 0) { + if (D_80199878 != 0) { + s32 *p = (s32 *)(D_80199858 * 12 + (s32) (*(s32 * *)&D_80199848)); + D_8019987C = p[0]; + D_80199880 = p[1]; + D_80199884 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8013F350.c b/src/ov_SC06_013/ov_SC06_013_jr_8013F350.c index 9f8b0fc16..699a88529 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8013F350.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F364[]; extern u8 D_8017F460[]; extern u8 D_8017F4E0[]; extern u8 D_8017F3B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c b/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c index 04ddb9be4..06fd5cf6a 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F364[]; extern u8 D_8017F460[]; extern u8 D_8017F4E0[]; extern u8 D_8017F3B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_013/ov_SC06_013_jr_80140608.c b/src/ov_SC06_013/ov_SC06_013_jr_80140608.c index 6b164b323..c2fb31bcd 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_80140608.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F364[]; extern u8 D_8017F460[]; extern u8 D_8017F4E0[]; extern u8 D_8017F3B8[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_014/ov_SC06_014_jr_801380E0.c b/src/ov_SC06_014/ov_SC06_014_jr_801380E0.c index fcc201f99..2a45f03aa 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_801380E0.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801807C4[]; extern u8 D_80180844[]; extern u8 D_8018071C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A0260; +extern s32 D_801A0248; + + +extern u8 D_801A15AA; +extern u8 D_801A161E; +extern u8 D_801A14D2; +extern u8 D_801A158C; +extern u8 D_801A14B0; +extern u8 D_801A14D1; + + +extern s32 D_801A1590; +extern s32 D_801A025C; +extern s32 D_801A0258; +extern s32 D_801A0240; +extern s32 D_801A024C; +extern s32 D_801A0250; + +extern void *D_801A0230; +extern s32 D_801A0268; +extern void *D_801A0238; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80180860[]; + extern Rec12 D_80180898[]; + extern u8 D_80078EAF; + extern u8 D_801A1568; + extern s32 D_801A0254; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018089C[]; + extern u8 D_801808A0[]; + extern unsigned char D_801A14C8; + extern s16 *D_801A023C; + extern s32 D_801A026C; + extern s32 D_801A0270; + extern s32 D_801A0274; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A0260 & 1)) { + D_801A0248 = 1; + } else { + D_801A0248 = D_80078EAF; + } + + b0 = ((u8 *)D_80180898)[D_801A0248 * 12]; + D_801A15AA = b0; + D_801A161E = b0; + b1 = D_8018089C[D_801A0248 * 12]; + D_801A14D2 = b1; + D_801A158C = b1; + b2 = D_801808A0[D_801A0248 * 12]; + D_801A14B0 = b2; + D_801A14D1 = b2; + + (*(S9 *)&D_801A14C8) = ((S9 *)D_80180860)[D_801A0248]; + (*(S9 *)&D_801A1568) = *(S9 *)(&D_801A14B0 + 0x18); /* same addr as (*(S9 *)&D_801A14C8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A1590 = 1; + D_801A025C = -1; + D_801A0258 = 0; + D_801A0254 = -1; + D_801A0240 = 0; + D_801A024C = 0; + D_801A0250 = 0; + + if ((D_801A0260 & 2) && (D_801A0248 == 4)) { + s0v = (*(s32 * *)&D_801A0230)[18]; + t9v = (*(s32 * *)&D_801A0230)[19]; + t8v = (*(s32 * *)&D_801A0230)[20]; + } else { + s32 *p = (s32 *)(D_801A0248 * 12 + (s32) (*(s32 * *)&D_801A0230)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A023C) = arg0; + if (arg0 != 0) { + if (D_801A0268 != 0) { + s32 *p = (s32 *)(D_801A0248 * 12 + (s32) (*(s32 * *)&D_801A0238)); + D_801A026C = p[0]; + D_801A0270 = p[1]; + D_801A0274 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8013F350.c b/src/ov_SC06_014/ov_SC06_014_jr_8013F350.c index aaac3ef3b..e5dcf7ceb 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8013F350.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801806C8[]; extern u8 D_801807C4[]; extern u8 D_80180844[]; extern u8 D_8018071C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c b/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c index 2cd1c4593..3b2b1c8ae 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801806C8[]; extern u8 D_801807C4[]; extern u8 D_80180844[]; extern u8 D_8018071C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_014/ov_SC06_014_jr_80140608.c b/src/ov_SC06_014/ov_SC06_014_jr_80140608.c index dd59fc8ae..86b78d9ac 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_80140608.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801806C8[]; extern u8 D_801807C4[]; extern u8 D_80180844[]; extern u8 D_8018071C[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_015/ov_SC06_015_jr_801380E0.c b/src/ov_SC06_015/ov_SC06_015_jr_801380E0.c index 23e2daf4c..95a715c86 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_801380E0.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017F31C[]; extern u8 D_8017F39C[]; extern u8 D_8017F274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_80193640; +extern s32 D_80193628; + + +extern u8 D_8019498A; +extern u8 D_801949FE; +extern u8 D_801948B2; +extern u8 D_8019496C; +extern u8 D_80194890; +extern u8 D_801948B1; + + +extern s32 D_80194970; +extern s32 D_8019363C; +extern s32 D_80193638; +extern s32 D_80193620; +extern s32 D_8019362C; +extern s32 D_80193630; + +extern void *D_80193610; +extern s32 D_80193648; +extern void *D_80193618; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017F3B8[]; + extern Rec12 D_8017F3F0[]; + extern u8 D_80078EAF; + extern u8 D_80194948; + extern s32 D_80193634; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017F3F4[]; + extern u8 D_8017F3F8[]; + extern unsigned char D_801948A8; + extern s16 *D_8019361C; + extern s32 D_8019364C; + extern s32 D_80193650; + extern s32 D_80193654; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_80193640 & 1)) { + D_80193628 = 1; + } else { + D_80193628 = D_80078EAF; + } + + b0 = ((u8 *)D_8017F3F0)[D_80193628 * 12]; + D_8019498A = b0; + D_801949FE = b0; + b1 = D_8017F3F4[D_80193628 * 12]; + D_801948B2 = b1; + D_8019496C = b1; + b2 = D_8017F3F8[D_80193628 * 12]; + D_80194890 = b2; + D_801948B1 = b2; + + (*(S9 *)&D_801948A8) = ((S9 *)D_8017F3B8)[D_80193628]; + (*(S9 *)&D_80194948) = *(S9 *)(&D_80194890 + 0x18); /* same addr as (*(S9 *)&D_801948A8); distinct sym defeats cse, keeps %hi/%lo */ + + D_80194970 = 1; + D_8019363C = -1; + D_80193638 = 0; + D_80193634 = -1; + D_80193620 = 0; + D_8019362C = 0; + D_80193630 = 0; + + if ((D_80193640 & 2) && (D_80193628 == 4)) { + s0v = (*(s32 * *)&D_80193610)[18]; + t9v = (*(s32 * *)&D_80193610)[19]; + t8v = (*(s32 * *)&D_80193610)[20]; + } else { + s32 *p = (s32 *)(D_80193628 * 12 + (s32) (*(s32 * *)&D_80193610)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019361C) = arg0; + if (arg0 != 0) { + if (D_80193648 != 0) { + s32 *p = (s32 *)(D_80193628 * 12 + (s32) (*(s32 * *)&D_80193618)); + D_8019364C = p[0]; + D_80193650 = p[1]; + D_80193654 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8013F350.c b/src/ov_SC06_015/ov_SC06_015_jr_8013F350.c index 90f468c9a..01547022b 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8013F350.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017F220[]; extern u8 D_8017F31C[]; extern u8 D_8017F39C[]; extern u8 D_8017F274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c b/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c index 33476d360..22d0142e5 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017F220[]; extern u8 D_8017F31C[]; extern u8 D_8017F39C[]; extern u8 D_8017F274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_015/ov_SC06_015_jr_80140608.c b/src/ov_SC06_015/ov_SC06_015_jr_80140608.c index 82e47f0b3..1755d8f32 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_80140608.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017F220[]; extern u8 D_8017F31C[]; extern u8 D_8017F39C[]; extern u8 D_8017F274[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_016/ov_SC06_016_jr_801380E0.c b/src/ov_SC06_016/ov_SC06_016_jr_801380E0.c index 996b6f225..e08492d62 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_801380E0.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018572C[]; extern u8 D_801857AC[]; extern u8 D_80185684[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019E410; +extern s32 D_8019E3F8; + + +extern u8 D_801A01FA; +extern u8 D_801A026E; +extern u8 D_801A0122; +extern u8 D_801A01DC; +extern u8 D_801A0100; +extern u8 D_801A0121; + + +extern s32 D_801A01E0; +extern s32 D_8019E40C; +extern s32 D_8019E408; +extern s32 D_8019E3F0; +extern s32 D_8019E3FC; +extern s32 D_8019E400; + +extern void *D_8019E3E0; +extern s32 D_8019E418; +extern void *D_8019E3E8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801857C8[]; + extern Rec12 D_80185800[]; + extern u8 D_80078EAF; + extern u8 D_801A01B8; + extern s32 D_8019E404; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185804[]; + extern u8 D_80185808[]; + extern unsigned char D_801A0118; + extern s16 *D_8019E3EC; + extern s32 D_8019E41C; + extern s32 D_8019E420; + extern s32 D_8019E424; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019E410 & 1)) { + D_8019E3F8 = 1; + } else { + D_8019E3F8 = D_80078EAF; + } + + b0 = ((u8 *)D_80185800)[D_8019E3F8 * 12]; + D_801A01FA = b0; + D_801A026E = b0; + b1 = D_80185804[D_8019E3F8 * 12]; + D_801A0122 = b1; + D_801A01DC = b1; + b2 = D_80185808[D_8019E3F8 * 12]; + D_801A0100 = b2; + D_801A0121 = b2; + + (*(S9 *)&D_801A0118) = ((S9 *)D_801857C8)[D_8019E3F8]; + (*(S9 *)&D_801A01B8) = *(S9 *)(&D_801A0100 + 0x18); /* same addr as (*(S9 *)&D_801A0118); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A01E0 = 1; + D_8019E40C = -1; + D_8019E408 = 0; + D_8019E404 = -1; + D_8019E3F0 = 0; + D_8019E3FC = 0; + D_8019E400 = 0; + + if ((D_8019E410 & 2) && (D_8019E3F8 == 4)) { + s0v = (*(s32 * *)&D_8019E3E0)[18]; + t9v = (*(s32 * *)&D_8019E3E0)[19]; + t8v = (*(s32 * *)&D_8019E3E0)[20]; + } else { + s32 *p = (s32 *)(D_8019E3F8 * 12 + (s32) (*(s32 * *)&D_8019E3E0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019E3EC) = arg0; + if (arg0 != 0) { + if (D_8019E418 != 0) { + s32 *p = (s32 *)(D_8019E3F8 * 12 + (s32) (*(s32 * *)&D_8019E3E8)); + D_8019E41C = p[0]; + D_8019E420 = p[1]; + D_8019E424 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8013F350.c b/src/ov_SC06_016/ov_SC06_016_jr_8013F350.c index 9afb92efe..40f60aa50 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8013F350.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80185630[]; extern u8 D_8018572C[]; extern u8 D_801857AC[]; extern u8 D_80185684[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c b/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c index 1ed44ba8f..5dd142138 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80185630[]; extern u8 D_8018572C[]; extern u8 D_801857AC[]; extern u8 D_80185684[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_016/ov_SC06_016_jr_80140608.c b/src/ov_SC06_016/ov_SC06_016_jr_80140608.c index c0e3a71c5..f01905a4e 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_80140608.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80185630[]; extern u8 D_8018572C[]; extern u8 D_801857AC[]; extern u8 D_80185684[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_018/ov_SC06_018_jr_801380E0.c b/src/ov_SC06_018/ov_SC06_018_jr_801380E0.c index f0ade1e34..979f62fa9 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_801380E0.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80193E68[]; extern u8 D_80193EE8[]; extern u8 D_80193DC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801D3CF8; +extern s32 D_801D3CE0; + + +extern u8 D_801D5B2A; +extern u8 D_801D5B9E; +extern u8 D_801D5A52; +extern u8 D_801D5B0C; +extern u8 D_801D5A30; +extern u8 D_801D5A51; + + +extern s32 D_801D5B10; +extern s32 D_801D3CF4; +extern s32 D_801D3CF0; +extern s32 D_801D3CD8; +extern s32 D_801D3CE4; +extern s32 D_801D3CE8; + +extern void *D_801D3CC8; +extern s32 D_801D3D00; +extern void *D_801D3CD0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80193F04[]; + extern Rec12 D_80193F3C[]; + extern u8 D_80078EAF; + extern u8 D_801D5AE8; + extern s32 D_801D3CEC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80193F40[]; + extern u8 D_80193F44[]; + extern unsigned char D_801D5A48; + extern s16 *D_801D3CD4; + extern s32 D_801D3D04; + extern s32 D_801D3D08; + extern s32 D_801D3D0C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801D3CF8 & 1)) { + D_801D3CE0 = 1; + } else { + D_801D3CE0 = D_80078EAF; + } + + b0 = ((u8 *)D_80193F3C)[D_801D3CE0 * 12]; + D_801D5B2A = b0; + D_801D5B9E = b0; + b1 = D_80193F40[D_801D3CE0 * 12]; + D_801D5A52 = b1; + D_801D5B0C = b1; + b2 = D_80193F44[D_801D3CE0 * 12]; + D_801D5A30 = b2; + D_801D5A51 = b2; + + (*(S9 *)&D_801D5A48) = ((S9 *)D_80193F04)[D_801D3CE0]; + (*(S9 *)&D_801D5AE8) = *(S9 *)(&D_801D5A30 + 0x18); /* same addr as (*(S9 *)&D_801D5A48); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D5B10 = 1; + D_801D3CF4 = -1; + D_801D3CF0 = 0; + D_801D3CEC = -1; + D_801D3CD8 = 0; + D_801D3CE4 = 0; + D_801D3CE8 = 0; + + if ((D_801D3CF8 & 2) && (D_801D3CE0 == 4)) { + s0v = (*(s32 * *)&D_801D3CC8)[18]; + t9v = (*(s32 * *)&D_801D3CC8)[19]; + t8v = (*(s32 * *)&D_801D3CC8)[20]; + } else { + s32 *p = (s32 *)(D_801D3CE0 * 12 + (s32) (*(s32 * *)&D_801D3CC8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801D3CD4) = arg0; + if (arg0 != 0) { + if (D_801D3D00 != 0) { + s32 *p = (s32 *)(D_801D3CE0 * 12 + (s32) (*(s32 * *)&D_801D3CD0)); + D_801D3D04 = p[0]; + D_801D3D08 = p[1]; + D_801D3D0C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8013F350.c b/src/ov_SC06_018/ov_SC06_018_jr_8013F350.c index b51cfd5f4..eb9a39360 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8013F350.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80193D6C[]; extern u8 D_80193E68[]; extern u8 D_80193EE8[]; extern u8 D_80193DC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c b/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c index 85c5ae020..3e2ced68a 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80193D6C[]; extern u8 D_80193E68[]; extern u8 D_80193EE8[]; extern u8 D_80193DC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_018/ov_SC06_018_jr_80140608.c b/src/ov_SC06_018/ov_SC06_018_jr_80140608.c index 1c6ac757a..76a76b2bb 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_80140608.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80193D6C[]; extern u8 D_80193E68[]; extern u8 D_80193EE8[]; extern u8 D_80193DC0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_020/ov_SC06_020_jr_801380E0.c b/src/ov_SC06_020/ov_SC06_020_jr_801380E0.c index 90b80cd1c..10fa6b241 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_801380E0.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801858F0[]; extern u8 D_80185970[]; extern u8 D_80185848[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B9510; +extern s32 D_801B94F8; + + +extern u8 D_801BA97A; +extern u8 D_801BA9EE; +extern u8 D_801BA8A2; +extern u8 D_801BA95C; +extern u8 D_801BA880; +extern u8 D_801BA8A1; + + +extern s32 D_801BA960; +extern s32 D_801B950C; +extern s32 D_801B9508; +extern s32 D_801B94F0; +extern s32 D_801B94FC; +extern s32 D_801B9500; + +extern void *D_801B94E0; +extern s32 D_801B9518; +extern void *D_801B94E8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018598C[]; + extern Rec12 D_801859C4[]; + extern u8 D_80078EAF; + extern u8 D_801BA938; + extern s32 D_801B9504; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801859C8[]; + extern u8 D_801859CC[]; + extern unsigned char D_801BA898; + extern s16 *D_801B94EC; + extern s32 D_801B951C; + extern s32 D_801B9520; + extern s32 D_801B9524; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B9510 & 1)) { + D_801B94F8 = 1; + } else { + D_801B94F8 = D_80078EAF; + } + + b0 = ((u8 *)D_801859C4)[D_801B94F8 * 12]; + D_801BA97A = b0; + D_801BA9EE = b0; + b1 = D_801859C8[D_801B94F8 * 12]; + D_801BA8A2 = b1; + D_801BA95C = b1; + b2 = D_801859CC[D_801B94F8 * 12]; + D_801BA880 = b2; + D_801BA8A1 = b2; + + (*(S9 *)&D_801BA898) = ((S9 *)D_8018598C)[D_801B94F8]; + (*(S9 *)&D_801BA938) = *(S9 *)(&D_801BA880 + 0x18); /* same addr as (*(S9 *)&D_801BA898); distinct sym defeats cse, keeps %hi/%lo */ + + D_801BA960 = 1; + D_801B950C = -1; + D_801B9508 = 0; + D_801B9504 = -1; + D_801B94F0 = 0; + D_801B94FC = 0; + D_801B9500 = 0; + + if ((D_801B9510 & 2) && (D_801B94F8 == 4)) { + s0v = (*(s32 * *)&D_801B94E0)[18]; + t9v = (*(s32 * *)&D_801B94E0)[19]; + t8v = (*(s32 * *)&D_801B94E0)[20]; + } else { + s32 *p = (s32 *)(D_801B94F8 * 12 + (s32) (*(s32 * *)&D_801B94E0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B94EC) = arg0; + if (arg0 != 0) { + if (D_801B9518 != 0) { + s32 *p = (s32 *)(D_801B94F8 * 12 + (s32) (*(s32 * *)&D_801B94E8)); + D_801B951C = p[0]; + D_801B9520 = p[1]; + D_801B9524 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8013F350.c b/src/ov_SC06_020/ov_SC06_020_jr_8013F350.c index 2b0430ef9..136088f5d 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8013F350.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801857F4[]; extern u8 D_801858F0[]; extern u8 D_80185970[]; extern u8 D_80185848[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c b/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c index 1816b74d5..b7a947b92 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801857F4[]; extern u8 D_801858F0[]; extern u8 D_80185970[]; extern u8 D_80185848[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_020/ov_SC06_020_jr_80140608.c b/src/ov_SC06_020/ov_SC06_020_jr_80140608.c index b26994020..cebc047c2 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_80140608.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801857F4[]; extern u8 D_801858F0[]; extern u8 D_80185970[]; extern u8 D_80185848[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_801380E0.c b/src/ov_SC06_022/ov_SC06_022_jr_801380E0.c index 13f7799c5..10e03d54e 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_801380E0.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018DBAC[]; extern u8 D_8018DC2C[]; extern u8 D_8018DB04[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801E0D78; +extern s32 D_801E0D60; + + +extern u8 D_801E21FA; +extern u8 D_801E226E; +extern u8 D_801E2122; +extern u8 D_801E21DC; +extern u8 D_801E2100; +extern u8 D_801E2121; + + +extern s32 D_801E21E0; +extern s32 D_801E0D74; +extern s32 D_801E0D70; +extern s32 D_801E0D58; +extern s32 D_801E0D64; +extern s32 D_801E0D68; + +extern void *D_801E0D48; +extern s32 D_801E0D80; +extern void *D_801E0D50; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018DC48[]; + extern Rec12 D_8018DC80[]; + extern u8 D_80078EAF; + extern u8 D_801E21B8; + extern s32 D_801E0D6C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018DC84[]; + extern u8 D_8018DC88[]; + extern unsigned char D_801E2118; + extern s16 *D_801E0D54; + extern s32 D_801E0D84; + extern s32 D_801E0D88; + extern s32 D_801E0D8C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801E0D78 & 1)) { + D_801E0D60 = 1; + } else { + D_801E0D60 = D_80078EAF; + } + + b0 = ((u8 *)D_8018DC80)[D_801E0D60 * 12]; + D_801E21FA = b0; + D_801E226E = b0; + b1 = D_8018DC84[D_801E0D60 * 12]; + D_801E2122 = b1; + D_801E21DC = b1; + b2 = D_8018DC88[D_801E0D60 * 12]; + D_801E2100 = b2; + D_801E2121 = b2; + + (*(S9 *)&D_801E2118) = ((S9 *)D_8018DC48)[D_801E0D60]; + (*(S9 *)&D_801E21B8) = *(S9 *)(&D_801E2100 + 0x18); /* same addr as (*(S9 *)&D_801E2118); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E21E0 = 1; + D_801E0D74 = -1; + D_801E0D70 = 0; + D_801E0D6C = -1; + D_801E0D58 = 0; + D_801E0D64 = 0; + D_801E0D68 = 0; + + if ((D_801E0D78 & 2) && (D_801E0D60 == 4)) { + s0v = (*(s32 * *)&D_801E0D48)[18]; + t9v = (*(s32 * *)&D_801E0D48)[19]; + t8v = (*(s32 * *)&D_801E0D48)[20]; + } else { + s32 *p = (s32 *)(D_801E0D60 * 12 + (s32) (*(s32 * *)&D_801E0D48)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801E0D54) = arg0; + if (arg0 != 0) { + if (D_801E0D80 != 0) { + s32 *p = (s32 *)(D_801E0D60 * 12 + (s32) (*(s32 * *)&D_801E0D50)); + D_801E0D84 = p[0]; + D_801E0D88 = p[1]; + D_801E0D8C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8013F350.c b/src/ov_SC06_022/ov_SC06_022_jr_8013F350.c index 79f98f9fe..82e2b80fa 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8013F350.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018DAB0[]; extern u8 D_8018DBAC[]; extern u8 D_8018DC2C[]; extern u8 D_8018DB04[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c b/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c index f4095d9f2..fd1c50eb2 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018DAB0[]; extern u8 D_8018DBAC[]; extern u8 D_8018DC2C[]; extern u8 D_8018DB04[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80140608.c b/src/ov_SC06_022/ov_SC06_022_jr_80140608.c index b5f330956..ac3fbc6be 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80140608.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018DAB0[]; extern u8 D_8018DBAC[]; extern u8 D_8018DC2C[]; extern u8 D_8018DB04[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_801380E0.c b/src/ov_SC06_024/ov_SC06_024_jr_801380E0.c index 4749b292d..04503397b 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_801380E0.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80190084[]; extern u8 D_80190104[]; extern u8 D_8018FFDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801DFEF8; +extern s32 D_801DFEE0; + + +extern u8 D_801E18F2; +extern u8 D_801E1966; +extern u8 D_801E181A; +extern u8 D_801E18D4; +extern u8 D_801E17F8; +extern u8 D_801E1819; + + +extern s32 D_801E18D8; +extern s32 D_801DFEF4; +extern s32 D_801DFEF0; +extern s32 D_801DFED8; +extern s32 D_801DFEE4; +extern s32 D_801DFEE8; + +extern void *D_801DFEC8; +extern s32 D_801DFF00; +extern void *D_801DFED0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80190120[]; + extern Rec12 D_80190158[]; + extern u8 D_80078EAF; + extern u8 D_801E18B0; + extern s32 D_801DFEEC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8019015C[]; + extern u8 D_80190160[]; + extern unsigned char D_801E1810; + extern s16 *D_801DFED4; + extern s32 D_801DFF04; + extern s32 D_801DFF08; + extern s32 D_801DFF0C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801DFEF8 & 1)) { + D_801DFEE0 = 1; + } else { + D_801DFEE0 = D_80078EAF; + } + + b0 = ((u8 *)D_80190158)[D_801DFEE0 * 12]; + D_801E18F2 = b0; + D_801E1966 = b0; + b1 = D_8019015C[D_801DFEE0 * 12]; + D_801E181A = b1; + D_801E18D4 = b1; + b2 = D_80190160[D_801DFEE0 * 12]; + D_801E17F8 = b2; + D_801E1819 = b2; + + (*(S9 *)&D_801E1810) = ((S9 *)D_80190120)[D_801DFEE0]; + (*(S9 *)&D_801E18B0) = *(S9 *)(&D_801E17F8 + 0x18); /* same addr as (*(S9 *)&D_801E1810); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E18D8 = 1; + D_801DFEF4 = -1; + D_801DFEF0 = 0; + D_801DFEEC = -1; + D_801DFED8 = 0; + D_801DFEE4 = 0; + D_801DFEE8 = 0; + + if ((D_801DFEF8 & 2) && (D_801DFEE0 == 4)) { + s0v = (*(s32 * *)&D_801DFEC8)[18]; + t9v = (*(s32 * *)&D_801DFEC8)[19]; + t8v = (*(s32 * *)&D_801DFEC8)[20]; + } else { + s32 *p = (s32 *)(D_801DFEE0 * 12 + (s32) (*(s32 * *)&D_801DFEC8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801DFED4) = arg0; + if (arg0 != 0) { + if (D_801DFF00 != 0) { + s32 *p = (s32 *)(D_801DFEE0 * 12 + (s32) (*(s32 * *)&D_801DFED0)); + D_801DFF04 = p[0]; + D_801DFF08 = p[1]; + D_801DFF0C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8013F350.c b/src/ov_SC06_024/ov_SC06_024_jr_8013F350.c index 7ebd98bdb..4b883c46d 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8013F350.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018FF88[]; extern u8 D_80190084[]; extern u8 D_80190104[]; extern u8 D_8018FFDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c b/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c index 5a9971af5..df0802070 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018FF88[]; extern u8 D_80190084[]; extern u8 D_80190104[]; extern u8 D_8018FFDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_80140608.c b/src/ov_SC06_024/ov_SC06_024_jr_80140608.c index dfa912231..708d67fc5 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_80140608.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018FF88[]; extern u8 D_80190084[]; extern u8 D_80190104[]; extern u8 D_8018FFDC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_025/ov_SC06_025_jr_801380E0.c b/src/ov_SC06_025/ov_SC06_025_jr_801380E0.c index c106ac9fd..d8762f45d 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_801380E0.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80185528[]; extern u8 D_801855A8[]; extern u8 D_80185480[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B00C0; +extern s32 D_801B00A8; + + +extern u8 D_801B2212; +extern u8 D_801B2286; +extern u8 D_801B213A; +extern u8 D_801B21F4; +extern u8 D_801B2118; +extern u8 D_801B2139; + + +extern s32 D_801B21F8; +extern s32 D_801B00BC; +extern s32 D_801B00B8; +extern s32 D_801B00A0; +extern s32 D_801B00AC; +extern s32 D_801B00B0; + +extern void *D_801B0090; +extern s32 D_801B00C8; +extern void *D_801B0098; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801855C4[]; + extern Rec12 D_801855FC[]; + extern u8 D_80078EAF; + extern u8 D_801B21D0; + extern s32 D_801B00B4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80185600[]; + extern u8 D_80185604[]; + extern unsigned char D_801B2130; + extern s16 *D_801B009C; + extern s32 D_801B00CC; + extern s32 D_801B00D0; + extern s32 D_801B00D4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B00C0 & 1)) { + D_801B00A8 = 1; + } else { + D_801B00A8 = D_80078EAF; + } + + b0 = ((u8 *)D_801855FC)[D_801B00A8 * 12]; + D_801B2212 = b0; + D_801B2286 = b0; + b1 = D_80185600[D_801B00A8 * 12]; + D_801B213A = b1; + D_801B21F4 = b1; + b2 = D_80185604[D_801B00A8 * 12]; + D_801B2118 = b2; + D_801B2139 = b2; + + (*(S9 *)&D_801B2130) = ((S9 *)D_801855C4)[D_801B00A8]; + (*(S9 *)&D_801B21D0) = *(S9 *)(&D_801B2118 + 0x18); /* same addr as (*(S9 *)&D_801B2130); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B21F8 = 1; + D_801B00BC = -1; + D_801B00B8 = 0; + D_801B00B4 = -1; + D_801B00A0 = 0; + D_801B00AC = 0; + D_801B00B0 = 0; + + if ((D_801B00C0 & 2) && (D_801B00A8 == 4)) { + s0v = (*(s32 * *)&D_801B0090)[18]; + t9v = (*(s32 * *)&D_801B0090)[19]; + t8v = (*(s32 * *)&D_801B0090)[20]; + } else { + s32 *p = (s32 *)(D_801B00A8 * 12 + (s32) (*(s32 * *)&D_801B0090)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B009C) = arg0; + if (arg0 != 0) { + if (D_801B00C8 != 0) { + s32 *p = (s32 *)(D_801B00A8 * 12 + (s32) (*(s32 * *)&D_801B0098)); + D_801B00CC = p[0]; + D_801B00D0 = p[1]; + D_801B00D4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8013F350.c b/src/ov_SC06_025/ov_SC06_025_jr_8013F350.c index b1d207aff..d63f445ec 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8013F350.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018542C[]; extern u8 D_80185528[]; extern u8 D_801855A8[]; extern u8 D_80185480[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c b/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c index 2d51c3e83..212998bdd 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018542C[]; extern u8 D_80185528[]; extern u8 D_801855A8[]; extern u8 D_80185480[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_025/ov_SC06_025_jr_80140608.c b/src/ov_SC06_025/ov_SC06_025_jr_80140608.c index 0812bafdc..98ca16d85 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_80140608.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018542C[]; extern u8 D_80185528[]; extern u8 D_801855A8[]; extern u8 D_80185480[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_027/ov_SC06_027_jr_801380E0.c b/src/ov_SC06_027/ov_SC06_027_jr_801380E0.c index dadf757c3..f993c16b1 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_801380E0.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017E868[]; extern u8 D_8017E8E8[]; extern u8 D_8017E7C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019C098; +extern s32 D_8019C080; + + +extern u8 D_8019D3BA; +extern u8 D_8019D42E; +extern u8 D_8019D2E2; +extern u8 D_8019D39C; +extern u8 D_8019D2C0; +extern u8 D_8019D2E1; + + +extern s32 D_8019D3A0; +extern s32 D_8019C094; +extern s32 D_8019C090; +extern s32 D_8019C078; +extern s32 D_8019C084; +extern s32 D_8019C088; + +extern void *D_8019C068; +extern s32 D_8019C0A0; +extern void *D_8019C070; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017E904[]; + extern Rec12 D_8017E93C[]; + extern u8 D_80078EAF; + extern u8 D_8019D378; + extern s32 D_8019C08C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017E940[]; + extern u8 D_8017E944[]; + extern unsigned char D_8019D2D8; + extern s16 *D_8019C074; + extern s32 D_8019C0A4; + extern s32 D_8019C0A8; + extern s32 D_8019C0AC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019C098 & 1)) { + D_8019C080 = 1; + } else { + D_8019C080 = D_80078EAF; + } + + b0 = ((u8 *)D_8017E93C)[D_8019C080 * 12]; + D_8019D3BA = b0; + D_8019D42E = b0; + b1 = D_8017E940[D_8019C080 * 12]; + D_8019D2E2 = b1; + D_8019D39C = b1; + b2 = D_8017E944[D_8019C080 * 12]; + D_8019D2C0 = b2; + D_8019D2E1 = b2; + + (*(S9 *)&D_8019D2D8) = ((S9 *)D_8017E904)[D_8019C080]; + (*(S9 *)&D_8019D378) = *(S9 *)(&D_8019D2C0 + 0x18); /* same addr as (*(S9 *)&D_8019D2D8); distinct sym defeats cse, keeps %hi/%lo */ + + D_8019D3A0 = 1; + D_8019C094 = -1; + D_8019C090 = 0; + D_8019C08C = -1; + D_8019C078 = 0; + D_8019C084 = 0; + D_8019C088 = 0; + + if ((D_8019C098 & 2) && (D_8019C080 == 4)) { + s0v = (*(s32 * *)&D_8019C068)[18]; + t9v = (*(s32 * *)&D_8019C068)[19]; + t8v = (*(s32 * *)&D_8019C068)[20]; + } else { + s32 *p = (s32 *)(D_8019C080 * 12 + (s32) (*(s32 * *)&D_8019C068)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019C074) = arg0; + if (arg0 != 0) { + if (D_8019C0A0 != 0) { + s32 *p = (s32 *)(D_8019C080 * 12 + (s32) (*(s32 * *)&D_8019C070)); + D_8019C0A4 = p[0]; + D_8019C0A8 = p[1]; + D_8019C0AC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8013F350.c b/src/ov_SC06_027/ov_SC06_027_jr_8013F350.c index 96031ab46..28cbfda29 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8013F350.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017E76C[]; extern u8 D_8017E868[]; extern u8 D_8017E8E8[]; extern u8 D_8017E7C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c b/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c index 7c9827de2..fdf4a9215 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017E76C[]; extern u8 D_8017E868[]; extern u8 D_8017E8E8[]; extern u8 D_8017E7C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_027/ov_SC06_027_jr_80140608.c b/src/ov_SC06_027/ov_SC06_027_jr_80140608.c index 69d70c5e3..0b4695493 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_80140608.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017E76C[]; extern u8 D_8017E868[]; extern u8 D_8017E8E8[]; extern u8 D_8017E7C0[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_029/ov_SC06_029_jr_801380E0.c b/src/ov_SC06_029/ov_SC06_029_jr_801380E0.c index 5a4029086..a160257bf 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_801380E0.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018CDFC[]; extern u8 D_8018CE7C[]; extern u8 D_8018CD54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801DB9B8; +extern s32 D_801DB9A0; + + +extern u8 D_801E211A; +extern u8 D_801E218E; +extern u8 D_801E2042; +extern u8 D_801E20FC; +extern u8 D_801E2020; +extern u8 D_801E2041; + + +extern s32 D_801E2100; +extern s32 D_801DB9B4; +extern s32 D_801DB9B0; +extern s32 D_801DB998; +extern s32 D_801DB9A4; +extern s32 D_801DB9A8; + +extern void *D_801DB988; +extern s32 D_801DB9C0; +extern void *D_801DB990; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018CE98[]; + extern Rec12 D_8018CED0[]; + extern u8 D_80078EAF; + extern u8 D_801E20D8; + extern s32 D_801DB9AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018CED4[]; + extern u8 D_8018CED8[]; + extern unsigned char D_801E2038; + extern s16 *D_801DB994; + extern s32 D_801DB9C4; + extern s32 D_801DB9C8; + extern s32 D_801DB9CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801DB9B8 & 1)) { + D_801DB9A0 = 1; + } else { + D_801DB9A0 = D_80078EAF; + } + + b0 = ((u8 *)D_8018CED0)[D_801DB9A0 * 12]; + D_801E211A = b0; + D_801E218E = b0; + b1 = D_8018CED4[D_801DB9A0 * 12]; + D_801E2042 = b1; + D_801E20FC = b1; + b2 = D_8018CED8[D_801DB9A0 * 12]; + D_801E2020 = b2; + D_801E2041 = b2; + + (*(S9 *)&D_801E2038) = ((S9 *)D_8018CE98)[D_801DB9A0]; + (*(S9 *)&D_801E20D8) = *(S9 *)(&D_801E2020 + 0x18); /* same addr as (*(S9 *)&D_801E2038); distinct sym defeats cse, keeps %hi/%lo */ + + D_801E2100 = 1; + D_801DB9B4 = -1; + D_801DB9B0 = 0; + D_801DB9AC = -1; + D_801DB998 = 0; + D_801DB9A4 = 0; + D_801DB9A8 = 0; + + if ((D_801DB9B8 & 2) && (D_801DB9A0 == 4)) { + s0v = (*(s32 * *)&D_801DB988)[18]; + t9v = (*(s32 * *)&D_801DB988)[19]; + t8v = (*(s32 * *)&D_801DB988)[20]; + } else { + s32 *p = (s32 *)(D_801DB9A0 * 12 + (s32) (*(s32 * *)&D_801DB988)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801DB994) = arg0; + if (arg0 != 0) { + if (D_801DB9C0 != 0) { + s32 *p = (s32 *)(D_801DB9A0 * 12 + (s32) (*(s32 * *)&D_801DB990)); + D_801DB9C4 = p[0]; + D_801DB9C8 = p[1]; + D_801DB9CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8013F350.c b/src/ov_SC06_029/ov_SC06_029_jr_8013F350.c index 255c88136..2cb0e7ad1 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8013F350.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8018CD00[]; extern u8 D_8018CDFC[]; extern u8 D_8018CE7C[]; extern u8 D_8018CD54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c b/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c index 4fff6a559..5fb17168c 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8018CD00[]; extern u8 D_8018CDFC[]; extern u8 D_8018CE7C[]; extern u8 D_8018CD54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_029/ov_SC06_029_jr_80140608.c b/src/ov_SC06_029/ov_SC06_029_jr_80140608.c index d433bf867..ef8c4fb26 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_80140608.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8018CD00[]; extern u8 D_8018CDFC[]; extern u8 D_8018CE7C[]; extern u8 D_8018CD54[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_801380E0.c b/src/ov_SC06_030/ov_SC06_030_jr_801380E0.c index e80278383..8bedce98d 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_801380E0.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801826EC[]; extern u8 D_8018276C[]; extern u8 D_80182644[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801B8C18; +extern s32 D_801B8C00; + + +extern u8 D_801BA012; +extern u8 D_801BA086; +extern u8 D_801B9F3A; +extern u8 D_801B9FF4; +extern u8 D_801B9F18; +extern u8 D_801B9F39; + + +extern s32 D_801B9FF8; +extern s32 D_801B8C14; +extern s32 D_801B8C10; +extern s32 D_801B8BF8; +extern s32 D_801B8C04; +extern s32 D_801B8C08; + +extern void *D_801B8BE8; +extern s32 D_801B8C20; +extern void *D_801B8BF0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80182788[]; + extern Rec12 D_801827C0[]; + extern u8 D_80078EAF; + extern u8 D_801B9FD0; + extern s32 D_801B8C0C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801827C4[]; + extern u8 D_801827C8[]; + extern unsigned char D_801B9F30; + extern s16 *D_801B8BF4; + extern s32 D_801B8C24; + extern s32 D_801B8C28; + extern s32 D_801B8C2C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801B8C18 & 1)) { + D_801B8C00 = 1; + } else { + D_801B8C00 = D_80078EAF; + } + + b0 = ((u8 *)D_801827C0)[D_801B8C00 * 12]; + D_801BA012 = b0; + D_801BA086 = b0; + b1 = D_801827C4[D_801B8C00 * 12]; + D_801B9F3A = b1; + D_801B9FF4 = b1; + b2 = D_801827C8[D_801B8C00 * 12]; + D_801B9F18 = b2; + D_801B9F39 = b2; + + (*(S9 *)&D_801B9F30) = ((S9 *)D_80182788)[D_801B8C00]; + (*(S9 *)&D_801B9FD0) = *(S9 *)(&D_801B9F18 + 0x18); /* same addr as (*(S9 *)&D_801B9F30); distinct sym defeats cse, keeps %hi/%lo */ + + D_801B9FF8 = 1; + D_801B8C14 = -1; + D_801B8C10 = 0; + D_801B8C0C = -1; + D_801B8BF8 = 0; + D_801B8C04 = 0; + D_801B8C08 = 0; + + if ((D_801B8C18 & 2) && (D_801B8C00 == 4)) { + s0v = (*(s32 * *)&D_801B8BE8)[18]; + t9v = (*(s32 * *)&D_801B8BE8)[19]; + t8v = (*(s32 * *)&D_801B8BE8)[20]; + } else { + s32 *p = (s32 *)(D_801B8C00 * 12 + (s32) (*(s32 * *)&D_801B8BE8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801B8BF4) = arg0; + if (arg0 != 0) { + if (D_801B8C20 != 0) { + s32 *p = (s32 *)(D_801B8C00 * 12 + (s32) (*(s32 * *)&D_801B8BF0)); + D_801B8C24 = p[0]; + D_801B8C28 = p[1]; + D_801B8C2C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8013F350.c b/src/ov_SC06_030/ov_SC06_030_jr_8013F350.c index 5a4827652..22735d5f8 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8013F350.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_801825F0[]; extern u8 D_801826EC[]; extern u8 D_8018276C[]; extern u8 D_80182644[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c b/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c index 217391cab..1eee775e8 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_801825F0[]; extern u8 D_801826EC[]; extern u8 D_8018276C[]; extern u8 D_80182644[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_80140608.c b/src/ov_SC06_030/ov_SC06_030_jr_80140608.c index 14044d7d2..36866a6bd 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_80140608.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_801825F0[]; extern u8 D_801826EC[]; extern u8 D_8018276C[]; extern u8 D_80182644[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_032/ov_SC06_032_jr_801380E0.c b/src/ov_SC06_032/ov_SC06_032_jr_801380E0.c index 452f6f86f..789043881 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_801380E0.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80193BB8[]; extern u8 D_80193C38[]; extern u8 D_80193B10[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CF2C8; +extern s32 D_801CF2B0; + + +extern u8 D_801D10FA; +extern u8 D_801D116E; +extern u8 D_801D1022; +extern u8 D_801D10DC; +extern u8 D_801D1000; +extern u8 D_801D1021; + + +extern s32 D_801D10E0; +extern s32 D_801CF2C4; +extern s32 D_801CF2C0; +extern s32 D_801CF2A8; +extern s32 D_801CF2B4; +extern s32 D_801CF2B8; + +extern void *D_801CF298; +extern s32 D_801CF2D0; +extern void *D_801CF2A0; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80193C54[]; + extern Rec12 D_80193C8C[]; + extern u8 D_80078EAF; + extern u8 D_801D10B8; + extern s32 D_801CF2BC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80193C90[]; + extern u8 D_80193C94[]; + extern unsigned char D_801D1018; + extern s16 *D_801CF2A4; + extern s32 D_801CF2D4; + extern s32 D_801CF2D8; + extern s32 D_801CF2DC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CF2C8 & 1)) { + D_801CF2B0 = 1; + } else { + D_801CF2B0 = D_80078EAF; + } + + b0 = ((u8 *)D_80193C8C)[D_801CF2B0 * 12]; + D_801D10FA = b0; + D_801D116E = b0; + b1 = D_80193C90[D_801CF2B0 * 12]; + D_801D1022 = b1; + D_801D10DC = b1; + b2 = D_80193C94[D_801CF2B0 * 12]; + D_801D1000 = b2; + D_801D1021 = b2; + + (*(S9 *)&D_801D1018) = ((S9 *)D_80193C54)[D_801CF2B0]; + (*(S9 *)&D_801D10B8) = *(S9 *)(&D_801D1000 + 0x18); /* same addr as (*(S9 *)&D_801D1018); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D10E0 = 1; + D_801CF2C4 = -1; + D_801CF2C0 = 0; + D_801CF2BC = -1; + D_801CF2A8 = 0; + D_801CF2B4 = 0; + D_801CF2B8 = 0; + + if ((D_801CF2C8 & 2) && (D_801CF2B0 == 4)) { + s0v = (*(s32 * *)&D_801CF298)[18]; + t9v = (*(s32 * *)&D_801CF298)[19]; + t8v = (*(s32 * *)&D_801CF298)[20]; + } else { + s32 *p = (s32 *)(D_801CF2B0 * 12 + (s32) (*(s32 * *)&D_801CF298)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CF2A4) = arg0; + if (arg0 != 0) { + if (D_801CF2D0 != 0) { + s32 *p = (s32 *)(D_801CF2B0 * 12 + (s32) (*(s32 * *)&D_801CF2A0)); + D_801CF2D4 = p[0]; + D_801CF2D8 = p[1]; + D_801CF2DC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8013F350.c b/src/ov_SC06_032/ov_SC06_032_jr_8013F350.c index ec5d40560..1964b8ada 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8013F350.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80193ABC[]; extern u8 D_80193BB8[]; extern u8 D_80193C38[]; extern u8 D_80193B10[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c b/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c index 08fe9e470..485145265 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80193ABC[]; extern u8 D_80193BB8[]; extern u8 D_80193C38[]; extern u8 D_80193B10[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_032/ov_SC06_032_jr_80140608.c b/src/ov_SC06_032/ov_SC06_032_jr_80140608.c index 5436d33c5..2f2d28170 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_80140608.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80193ABC[]; extern u8 D_80193BB8[]; extern u8 D_80193C38[]; extern u8 D_80193B10[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_033/ov_SC06_033_jr_801380E0.c b/src/ov_SC06_033/ov_SC06_033_jr_801380E0.c index e42567126..1db7c418a 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_801380E0.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_801920C8[]; extern u8 D_80192148[]; extern u8 D_80192020[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801CF388; +extern s32 D_801CF370; + + +extern u8 D_801D0F7A; +extern u8 D_801D0FEE; +extern u8 D_801D0EA2; +extern u8 D_801D0F5C; +extern u8 D_801D0E80; +extern u8 D_801D0EA1; + + +extern s32 D_801D0F60; +extern s32 D_801CF384; +extern s32 D_801CF380; +extern s32 D_801CF368; +extern s32 D_801CF374; +extern s32 D_801CF378; + +extern void *D_801CF358; +extern s32 D_801CF390; +extern void *D_801CF360; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80192164[]; + extern Rec12 D_8019219C[]; + extern u8 D_80078EAF; + extern u8 D_801D0F38; + extern s32 D_801CF37C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_801921A0[]; + extern u8 D_801921A4[]; + extern unsigned char D_801D0E98; + extern s16 *D_801CF364; + extern s32 D_801CF394; + extern s32 D_801CF398; + extern s32 D_801CF39C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801CF388 & 1)) { + D_801CF370 = 1; + } else { + D_801CF370 = D_80078EAF; + } + + b0 = ((u8 *)D_8019219C)[D_801CF370 * 12]; + D_801D0F7A = b0; + D_801D0FEE = b0; + b1 = D_801921A0[D_801CF370 * 12]; + D_801D0EA2 = b1; + D_801D0F5C = b1; + b2 = D_801921A4[D_801CF370 * 12]; + D_801D0E80 = b2; + D_801D0EA1 = b2; + + (*(S9 *)&D_801D0E98) = ((S9 *)D_80192164)[D_801CF370]; + (*(S9 *)&D_801D0F38) = *(S9 *)(&D_801D0E80 + 0x18); /* same addr as (*(S9 *)&D_801D0E98); distinct sym defeats cse, keeps %hi/%lo */ + + D_801D0F60 = 1; + D_801CF384 = -1; + D_801CF380 = 0; + D_801CF37C = -1; + D_801CF368 = 0; + D_801CF374 = 0; + D_801CF378 = 0; + + if ((D_801CF388 & 2) && (D_801CF370 == 4)) { + s0v = (*(s32 * *)&D_801CF358)[18]; + t9v = (*(s32 * *)&D_801CF358)[19]; + t8v = (*(s32 * *)&D_801CF358)[20]; + } else { + s32 *p = (s32 *)(D_801CF370 * 12 + (s32) (*(s32 * *)&D_801CF358)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801CF364) = arg0; + if (arg0 != 0) { + if (D_801CF390 != 0) { + s32 *p = (s32 *)(D_801CF370 * 12 + (s32) (*(s32 * *)&D_801CF360)); + D_801CF394 = p[0]; + D_801CF398 = p[1]; + D_801CF39C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8013F350.c b/src/ov_SC06_033/ov_SC06_033_jr_8013F350.c index 23ba259a0..ae47061ff 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8013F350.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80191FCC[]; extern u8 D_801920C8[]; extern u8 D_80192148[]; extern u8 D_80192020[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c b/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c index a3166738e..d1ff9a318 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80191FCC[]; extern u8 D_801920C8[]; extern u8 D_80192148[]; extern u8 D_80192020[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC06_033/ov_SC06_033_jr_80140608.c b/src/ov_SC06_033/ov_SC06_033_jr_80140608.c index a86d87140..a3b425e55 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_80140608.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80191FCC[]; extern u8 D_801920C8[]; extern u8 D_80192148[]; extern u8 D_80192020[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_001/ov_SC07_001_jr_801380E0.c b/src/ov_SC07_001/ov_SC07_001_jr_801380E0.c index 37c2b0050..ba6f54b72 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_801380E0.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_80181DC0[]; extern u8 D_80181E40[]; extern u8 D_80181D18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A9980; +extern s32 D_801A9968; + + +extern u8 D_801AAE9A; +extern u8 D_801AAF0E; +extern u8 D_801AADC2; +extern u8 D_801AAE7C; +extern u8 D_801AADA0; +extern u8 D_801AADC1; + + +extern s32 D_801AAE80; +extern s32 D_801A997C; +extern s32 D_801A9978; +extern s32 D_801A9960; +extern s32 D_801A996C; +extern s32 D_801A9970; + +extern void *D_801A9950; +extern s32 D_801A9988; +extern void *D_801A9958; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80181E5C[]; + extern Rec12 D_80181E94[]; + extern u8 D_80078EAF; + extern u8 D_801AAE58; + extern s32 D_801A9974; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80181E98[]; + extern u8 D_80181E9C[]; + extern unsigned char D_801AADB8; + extern s16 *D_801A995C; + extern s32 D_801A998C; + extern s32 D_801A9990; + extern s32 D_801A9994; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A9980 & 1)) { + D_801A9968 = 1; + } else { + D_801A9968 = D_80078EAF; + } + + b0 = ((u8 *)D_80181E94)[D_801A9968 * 12]; + D_801AAE9A = b0; + D_801AAF0E = b0; + b1 = D_80181E98[D_801A9968 * 12]; + D_801AADC2 = b1; + D_801AAE7C = b1; + b2 = D_80181E9C[D_801A9968 * 12]; + D_801AADA0 = b2; + D_801AADC1 = b2; + + (*(S9 *)&D_801AADB8) = ((S9 *)D_80181E5C)[D_801A9968]; + (*(S9 *)&D_801AAE58) = *(S9 *)(&D_801AADA0 + 0x18); /* same addr as (*(S9 *)&D_801AADB8); distinct sym defeats cse, keeps %hi/%lo */ + + D_801AAE80 = 1; + D_801A997C = -1; + D_801A9978 = 0; + D_801A9974 = -1; + D_801A9960 = 0; + D_801A996C = 0; + D_801A9970 = 0; + + if ((D_801A9980 & 2) && (D_801A9968 == 4)) { + s0v = (*(s32 * *)&D_801A9950)[18]; + t9v = (*(s32 * *)&D_801A9950)[19]; + t8v = (*(s32 * *)&D_801A9950)[20]; + } else { + s32 *p = (s32 *)(D_801A9968 * 12 + (s32) (*(s32 * *)&D_801A9950)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A995C) = arg0; + if (arg0 != 0) { + if (D_801A9988 != 0) { + s32 *p = (s32 *)(D_801A9968 * 12 + (s32) (*(s32 * *)&D_801A9958)); + D_801A998C = p[0]; + D_801A9990 = p[1]; + D_801A9994 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8013F350.c b/src/ov_SC07_001/ov_SC07_001_jr_8013F350.c index 559d9517d..9d5563fc4 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8013F350.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80181CC4[]; extern u8 D_80181DC0[]; extern u8 D_80181E40[]; extern u8 D_80181D18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c b/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c index 24753e660..d52aa7e42 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80181CC4[]; extern u8 D_80181DC0[]; extern u8 D_80181E40[]; extern u8 D_80181D18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_001/ov_SC07_001_jr_80140608.c b/src/ov_SC07_001/ov_SC07_001_jr_80140608.c index 975f3612b..4e341daf9 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_80140608.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80181CC4[]; extern u8 D_80181DC0[]; extern u8 D_80181E40[]; extern u8 D_80181D18[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_002/ov_SC07_002_jr_801380E0.c b/src/ov_SC07_002/ov_SC07_002_jr_801380E0.c index 0150b60e8..1221f0552 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_801380E0.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8018707C[]; extern u8 D_801870FC[]; extern u8 D_80186FD4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_8019A4D0; +extern s32 D_8019A4B8; + + +extern u8 D_801A0062; +extern u8 D_801A00D6; +extern u8 D_8019FF8C; +extern u8 D_801A0044; +extern u8 D_8019FF68; +extern u8 D_8019FF89; + + +extern s32 D_801A0048; +extern s32 D_8019A4CC; +extern s32 D_8019A4C8; +extern s32 D_8019A4B0; +extern s32 D_8019A4BC; +extern s32 D_8019A4C0; + +extern void *D_8019A4A0; +extern s32 D_8019A4D8; +extern void *D_8019A4A8; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_80187118[]; + extern Rec12 D_80187150[]; + extern u8 D_80078EAF; + extern u8 D_801A0020; + extern s32 D_8019A4C4; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_80187154[]; + extern u8 D_80187158[]; + extern unsigned char D_8019FF80; + extern s16 *D_8019A4AC; + extern s32 D_8019A4DC; + extern s32 D_8019A4E0; + extern s32 D_8019A4E4; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8019A4D0 & 1)) { + D_8019A4B8 = 1; + } else { + D_8019A4B8 = D_80078EAF; + } + + b0 = ((u8 *)D_80187150)[D_8019A4B8 * 12]; + D_801A0062 = b0; + D_801A00D6 = b0; + b1 = D_80187154[D_8019A4B8 * 12]; + D_8019FF8C = b1; + D_801A0044 = b1; + b2 = D_80187158[D_8019A4B8 * 12]; + D_8019FF68 = b2; + D_8019FF89 = b2; + + (*(S9 *)&D_8019FF80) = ((S9 *)D_80187118)[D_8019A4B8]; + (*(S9 *)&D_801A0020) = *(S9 *)(&D_8019FF68 + 0x18); /* same addr as (*(S9 *)&D_8019FF80); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A0048 = 1; + D_8019A4CC = -1; + D_8019A4C8 = 0; + D_8019A4C4 = -1; + D_8019A4B0 = 0; + D_8019A4BC = 0; + D_8019A4C0 = 0; + + if ((D_8019A4D0 & 2) && (D_8019A4B8 == 4)) { + s0v = (*(s32 * *)&D_8019A4A0)[18]; + t9v = (*(s32 * *)&D_8019A4A0)[19]; + t8v = (*(s32 * *)&D_8019A4A0)[20]; + } else { + s32 *p = (s32 *)(D_8019A4B8 * 12 + (s32) (*(s32 * *)&D_8019A4A0)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8019A4AC) = arg0; + if (arg0 != 0) { + if (D_8019A4D8 != 0) { + s32 *p = (s32 *)(D_8019A4B8 * 12 + (s32) (*(s32 * *)&D_8019A4A8)); + D_8019A4DC = p[0]; + D_8019A4E0 = p[1]; + D_8019A4E4 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8013F350.c b/src/ov_SC07_002/ov_SC07_002_jr_8013F350.c index 3ef56a0b5..92bf7ec0e 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8013F350.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_80186F80[]; extern u8 D_8018707C[]; extern u8 D_801870FC[]; extern u8 D_80186FD4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c b/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c index 233a55855..43cf4fa46 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_80186F80[]; extern u8 D_8018707C[]; extern u8 D_801870FC[]; extern u8 D_80186FD4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_002/ov_SC07_002_jr_80140608.c b/src/ov_SC07_002/ov_SC07_002_jr_80140608.c index eef1a16eb..16d9d3b92 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_80140608.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_80186F80[]; extern u8 D_8018707C[]; extern u8 D_801870FC[]; extern u8 D_80186FD4[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80135D20.c b/src/ov_SC07_006/ov_SC07_006_jr_80135D20.c index edccfb971..566bf0f51 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_80135D20.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_80135D20.c @@ -2193,7 +2193,7 @@ void func_8013D330(void) { -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -2253,7 +2253,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80135D20", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + + + + + + + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8018AD3C[]; + extern Rec12 D_8018AD74[]; + extern s32 D_801F4E78; + extern u8 D_80078EAF; + extern s32 D_801F4E60; + extern u8 D_801F62FA; + extern u8 D_801F636E; + extern u8 D_801F6222; + extern u8 D_801F62DC; + extern u8 D_801F6200; + extern u8 D_801F6221; + extern u8 D_801F62B8; + extern s32 D_801F62E0; + extern s32 D_801F4E74; + extern s32 D_801F4E70; + extern s32 D_801F4E6C; + extern s32 D_801F4E58; + extern s32 D_801F4E64; + extern s32 D_801F4E68; + extern void *D_801F4E48; + extern s32 D_801F4E80; + extern void *D_801F4E50; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018AD78[]; + extern u8 D_8018AD7C[]; + extern unsigned char D_801F6218; + extern s16 *D_801F4E54; + extern s32 D_801F4E84; + extern s32 D_801F4E88; + extern s32 D_801F4E8C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801F4E78 & 1)) { + D_801F4E60 = 1; + } else { + D_801F4E60 = D_80078EAF; + } + + b0 = ((u8 *)D_8018AD74)[D_801F4E60 * 12]; + D_801F62FA = b0; + D_801F636E = b0; + b1 = D_8018AD78[D_801F4E60 * 12]; + D_801F6222 = b1; + D_801F62DC = b1; + b2 = D_8018AD7C[D_801F4E60 * 12]; + D_801F6200 = b2; + D_801F6221 = b2; + + (*(S9 *)&D_801F6218) = ((S9 *)D_8018AD3C)[D_801F4E60]; + (*(S9 *)&D_801F62B8) = *(S9 *)(&D_801F6200 + 0x18); /* same addr as (*(S9 *)&D_801F6218); distinct sym defeats cse, keeps %hi/%lo */ + + D_801F62E0 = 1; + D_801F4E74 = -1; + D_801F4E70 = 0; + D_801F4E6C = -1; + D_801F4E58 = 0; + D_801F4E64 = 0; + D_801F4E68 = 0; + + if ((D_801F4E78 & 2) && (D_801F4E60 == 4)) { + s0v = (*(s32 * *)&D_801F4E48)[18]; + t9v = (*(s32 * *)&D_801F4E48)[19]; + t8v = (*(s32 * *)&D_801F4E48)[20]; + } else { + s32 *p = (s32 *)(D_801F4E60 * 12 + (s32) (*(s32 * *)&D_801F4E48)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801F4E54) = arg0; + if (arg0 != 0) { + if (D_801F4E80 != 0) { + s32 *p = (s32 *)(D_801F4E60 * 12 + (s32) (*(s32 * *)&D_801F4E50)); + D_801F4E84 = p[0]; + D_801F4E88 = p[1]; + D_801F4E8C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c index b98cbfd42..eda240e98 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8013F350.c @@ -688,7 +688,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80140608.c b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c index 6c2f95ca4..fb5075c75 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_80140608.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_80140608.c @@ -688,7 +688,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80154C24.c b/src/ov_SC07_006/ov_SC07_006_jr_80154C24.c index 7d8ed5e82..3d7e1ed4f 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_80154C24.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_80154C24.c @@ -688,7 +688,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_801588CC.c b/src/ov_SC07_006/ov_SC07_006_jr_801588CC.c index 1b8bf26a6..dc5c025ee 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_801588CC.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_801588CC.c @@ -688,7 +688,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c b/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c index 16a3703b1..a4168f4cf 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8015C32C.c @@ -688,7 +688,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8017AE2C.c b/src/ov_SC07_006/ov_SC07_006_jr_8017AE2C.c index 406caba1b..88ef63af8 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8017AE2C.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8017AE2C.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c b/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c index 6023bc65c..ccc8e143b 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c @@ -687,7 +687,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_008/ov_SC07_008_jr_801380E0.c b/src/ov_SC07_008/ov_SC07_008_jr_801380E0.c index f162df532..47bbf55c8 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_801380E0.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017DB94[]; extern u8 D_8017DC14[]; extern u8 D_8017DAEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801953B8; +extern s32 D_801953A0; + + +extern u8 D_801966D2; +extern u8 D_80196746; +extern u8 D_801965FA; +extern u8 D_801966B4; +extern u8 D_801965D8; +extern u8 D_801965F9; + + +extern s32 D_801966B8; +extern s32 D_801953B4; +extern s32 D_801953B0; +extern s32 D_80195398; +extern s32 D_801953A4; +extern s32 D_801953A8; + +extern void *D_80195388; +extern s32 D_801953C0; +extern void *D_80195390; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017DC30[]; + extern Rec12 D_8017DC68[]; + extern u8 D_80078EAF; + extern u8 D_80196690; + extern s32 D_801953AC; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017DC6C[]; + extern u8 D_8017DC70[]; + extern unsigned char D_801965F0; + extern s16 *D_80195394; + extern s32 D_801953C4; + extern s32 D_801953C8; + extern s32 D_801953CC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801953B8 & 1)) { + D_801953A0 = 1; + } else { + D_801953A0 = D_80078EAF; + } + + b0 = ((u8 *)D_8017DC68)[D_801953A0 * 12]; + D_801966D2 = b0; + D_80196746 = b0; + b1 = D_8017DC6C[D_801953A0 * 12]; + D_801965FA = b1; + D_801966B4 = b1; + b2 = D_8017DC70[D_801953A0 * 12]; + D_801965D8 = b2; + D_801965F9 = b2; + + (*(S9 *)&D_801965F0) = ((S9 *)D_8017DC30)[D_801953A0]; + (*(S9 *)&D_80196690) = *(S9 *)(&D_801965D8 + 0x18); /* same addr as (*(S9 *)&D_801965F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801966B8 = 1; + D_801953B4 = -1; + D_801953B0 = 0; + D_801953AC = -1; + D_80195398 = 0; + D_801953A4 = 0; + D_801953A8 = 0; + + if ((D_801953B8 & 2) && (D_801953A0 == 4)) { + s0v = (*(s32 * *)&D_80195388)[18]; + t9v = (*(s32 * *)&D_80195388)[19]; + t8v = (*(s32 * *)&D_80195388)[20]; + } else { + s32 *p = (s32 *)(D_801953A0 * 12 + (s32) (*(s32 * *)&D_80195388)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_80195394) = arg0; + if (arg0 != 0) { + if (D_801953C0 != 0) { + s32 *p = (s32 *)(D_801953A0 * 12 + (s32) (*(s32 * *)&D_80195390)); + D_801953C4 = p[0]; + D_801953C8 = p[1]; + D_801953CC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8013F350.c b/src/ov_SC07_008/ov_SC07_008_jr_8013F350.c index a07ffe38a..5d3163ff1 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8013F350.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017DA98[]; extern u8 D_8017DB94[]; extern u8 D_8017DC14[]; extern u8 D_8017DAEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c b/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c index 7c51a6b9a..bc2025c76 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017DA98[]; extern u8 D_8017DB94[]; extern u8 D_8017DC14[]; extern u8 D_8017DAEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_008/ov_SC07_008_jr_80140608.c b/src/ov_SC07_008/ov_SC07_008_jr_80140608.c index 9467e8a50..ed587ea82 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_80140608.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017DA98[]; extern u8 D_8017DB94[]; extern u8 D_8017DC14[]; extern u8 D_8017DAEC[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_009/ov_SC07_009_jr_801380E0.c b/src/ov_SC07_009/ov_SC07_009_jr_801380E0.c index 77b64e5ee..3bff2a8a0 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_801380E0.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_801380E0.c @@ -1897,7 +1897,7 @@ extern u8 D_8017E638[]; extern u8 D_8017E6B8[]; extern u8 D_8017E590[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -1942,7 +1942,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801380E0", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + +extern s32 D_801A2A48; +extern s32 D_801A2A30; + + +extern u8 D_801A3D62; +extern u8 D_801A3DD6; +extern u8 D_801A3C8A; +extern u8 D_801A3D44; +extern u8 D_801A3C68; +extern u8 D_801A3C89; + + +extern s32 D_801A3D48; +extern s32 D_801A2A44; +extern s32 D_801A2A40; +extern s32 D_801A2A28; +extern s32 D_801A2A34; +extern s32 D_801A2A38; + +extern void *D_801A2A18; +extern s32 D_801A2A50; +extern void *D_801A2A20; + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017E6D4[]; + extern Rec12 D_8017E70C[]; + extern u8 D_80078EAF; + extern u8 D_801A3D20; + extern s32 D_801A2A3C; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017E710[]; + extern u8 D_8017E714[]; + extern unsigned char D_801A3C80; + extern s16 *D_801A2A24; + extern s32 D_801A2A54; + extern s32 D_801A2A58; + extern s32 D_801A2A5C; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A2A48 & 1)) { + D_801A2A30 = 1; + } else { + D_801A2A30 = D_80078EAF; + } + + b0 = ((u8 *)D_8017E70C)[D_801A2A30 * 12]; + D_801A3D62 = b0; + D_801A3DD6 = b0; + b1 = D_8017E710[D_801A2A30 * 12]; + D_801A3C8A = b1; + D_801A3D44 = b1; + b2 = D_8017E714[D_801A2A30 * 12]; + D_801A3C68 = b2; + D_801A3C89 = b2; + + (*(S9 *)&D_801A3C80) = ((S9 *)D_8017E6D4)[D_801A2A30]; + (*(S9 *)&D_801A3D20) = *(S9 *)(&D_801A3C68 + 0x18); /* same addr as (*(S9 *)&D_801A3C80); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A3D48 = 1; + D_801A2A44 = -1; + D_801A2A40 = 0; + D_801A2A3C = -1; + D_801A2A28 = 0; + D_801A2A34 = 0; + D_801A2A38 = 0; + + if ((D_801A2A48 & 2) && (D_801A2A30 == 4)) { + s0v = (*(s32 * *)&D_801A2A18)[18]; + t9v = (*(s32 * *)&D_801A2A18)[19]; + t8v = (*(s32 * *)&D_801A2A18)[20]; + } else { + s32 *p = (s32 *)(D_801A2A30 * 12 + (s32) (*(s32 * *)&D_801A2A18)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A2A24) = arg0; + if (arg0 != 0) { + if (D_801A2A50 != 0) { + s32 *p = (s32 *)(D_801A2A30 * 12 + (s32) (*(s32 * *)&D_801A2A20)); + D_801A2A54 = p[0]; + D_801A2A58 = p[1]; + D_801A2A5C = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8013F350.c b/src/ov_SC07_009/ov_SC07_009_jr_8013F350.c index 1bc3b0403..7d789daf9 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8013F350.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8013F350.c @@ -816,7 +816,7 @@ extern u8 D_8017E53C[]; extern u8 D_8017E638[]; extern u8 D_8017E6B8[]; extern u8 D_8017E590[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c b/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c index 76eb758ec..a46e40f71 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8013FFD8.c @@ -816,7 +816,7 @@ extern u8 D_8017E53C[]; extern u8 D_8017E638[]; extern u8 D_8017E6B8[]; extern u8 D_8017E590[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_009/ov_SC07_009_jr_80140608.c b/src/ov_SC07_009/ov_SC07_009_jr_80140608.c index 37a83645e..84fb35457 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_80140608.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_80140608.c @@ -816,7 +816,7 @@ extern u8 D_8017E53C[]; extern u8 D_8017E638[]; extern u8 D_8017E6B8[]; extern u8 D_8017E590[]; -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c b/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c index 53184b5be..67e6ad28c 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8013F350.c @@ -26,7 +26,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_80140608.c b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c index 6f4b7d237..731a9c17a 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_80140608.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_80140608.c @@ -26,7 +26,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_80154C24.c b/src/ov_SC07_010/ov_SC07_010_jr_80154C24.c index 88c62962a..b7e3f87c6 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_80154C24.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_80154C24.c @@ -26,7 +26,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_801588CC.c b/src/ov_SC07_010/ov_SC07_010_jr_801588CC.c index cfceb56f1..6d46a727f 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_801588CC.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_801588CC.c @@ -26,7 +26,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c b/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c index 6a5dd8df4..094e9a71c 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8015C32C.c @@ -26,7 +26,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c index 4ba382aa6..a0e9de2ab 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c @@ -28,7 +28,7 @@ extern void func_8013CF68(); extern void func_8013D064(void); extern s32 func_8013D13C(void); extern void func_8013D164(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013D3D4(int param_1, int param_2); diff --git a/src/ov_SC07_010/ov_SC07_010_o2b.c b/src/ov_SC07_010/ov_SC07_010_o2b.c index 0d5b536d2..47344addf 100644 --- a/src/ov_SC07_010/ov_SC07_010_o2b.c +++ b/src/ov_SC07_010/ov_SC07_010_o2b.c @@ -421,7 +421,7 @@ void func_8013D330(void) { -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -481,7 +481,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + + + + + + + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_801828F0[]; + extern Rec12 D_80182928[]; + extern s32 D_801A6AD8; + extern u8 D_80078EAF; + extern s32 D_801A6AC0; + extern u8 D_801A94D2; + extern u8 D_801A9546; + extern u8 D_801A93FA; + extern u8 D_801A94B4; + extern u8 D_801A93D8; + extern u8 D_801A93F9; + extern u8 D_801A9490; + extern s32 D_801A94B8; + extern s32 D_801A6AD4; + extern s32 D_801A6AD0; + extern s32 D_801A6ACC; + extern s32 D_801A6AB8; + extern s32 D_801A6AC4; + extern s32 D_801A6AC8; + extern void *D_801A6AA8; + extern s32 D_801A6AE0; + extern void *D_801A6AB0; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8018292C[]; + extern u8 D_80182930[]; + extern unsigned char D_801A93F0; + extern s16 *D_801A6AB4; + extern s32 D_801A6AE4; + extern s32 D_801A6AE8; + extern s32 D_801A6AEC; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_801A6AD8 & 1)) { + D_801A6AC0 = 1; + } else { + D_801A6AC0 = D_80078EAF; + } + + b0 = ((u8 *)D_80182928)[D_801A6AC0 * 12]; + D_801A94D2 = b0; + D_801A9546 = b0; + b1 = D_8018292C[D_801A6AC0 * 12]; + D_801A93FA = b1; + D_801A94B4 = b1; + b2 = D_80182930[D_801A6AC0 * 12]; + D_801A93D8 = b2; + D_801A93F9 = b2; + + (*(S9 *)&D_801A93F0) = ((S9 *)D_801828F0)[D_801A6AC0]; + (*(S9 *)&D_801A9490) = *(S9 *)(&D_801A93D8 + 0x18); /* same addr as (*(S9 *)&D_801A93F0); distinct sym defeats cse, keeps %hi/%lo */ + + D_801A94B8 = 1; + D_801A6AD4 = -1; + D_801A6AD0 = 0; + D_801A6ACC = -1; + D_801A6AB8 = 0; + D_801A6AC4 = 0; + D_801A6AC8 = 0; + + if ((D_801A6AD8 & 2) && (D_801A6AC0 == 4)) { + s0v = (*(s32 * *)&D_801A6AA8)[18]; + t9v = (*(s32 * *)&D_801A6AA8)[19]; + t8v = (*(s32 * *)&D_801A6AA8)[20]; + } else { + s32 *p = (s32 *)(D_801A6AC0 * 12 + (s32) (*(s32 * *)&D_801A6AA8)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_801A6AB4) = arg0; + if (arg0 != 0) { + if (D_801A6AE0 != 0) { + s32 *p = (s32 *)(D_801A6AC0 * 12 + (s32) (*(s32 * *)&D_801A6AB0)); + D_801A6AE4 = p[0]; + D_801A6AE8 = p[1]; + D_801A6AEC = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_011/ov_SC07_011_jr_80135D20.c b/src/ov_SC07_011/ov_SC07_011_jr_80135D20.c index 25f224c62..d1c1598ed 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_80135D20.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_80135D20.c @@ -2007,7 +2007,7 @@ void func_8013D330(void) { -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); @@ -2067,7 +2067,138 @@ void func_8013D3D4(int param_1, int param_2) } -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_80135D20", func_8013D53C); + + /* 9-byte, align-1 -> unaligned block copy */ + + + + + + + + +void func_8013D53C(void *arg0v) { + + extern Rec9 D_8017EFB0[]; + extern Rec12 D_8017EFE8[]; + extern s32 D_8018F170; + extern u8 D_80078EAF; + extern s32 D_8018F158; + extern u8 D_8019048A; + extern u8 D_801904FE; + extern u8 D_801903B2; + extern u8 D_8019046C; + extern u8 D_80190390; + extern u8 D_801903B1; + extern u8 D_80190448; + extern s32 D_80190470; + extern s32 D_8018F16C; + extern s32 D_8018F168; + extern s32 D_8018F164; + extern s32 D_8018F150; + extern s32 D_8018F15C; + extern s32 D_8018F160; + extern void *D_8018F140; + extern s32 D_8018F178; + extern void *D_8018F148; + Cmd_8013D53C *arg0 = arg0v; + + extern u8 D_8017EFEC[]; + extern u8 D_8017EFF0[]; + extern unsigned char D_801903A8; + extern s16 *D_8018F14C; + extern s32 D_8018F17C; + extern s32 D_8018F180; + extern s32 D_8018F184; + s32 s0v; + s32 t9v; + s32 t8v; + u8 b0, b1, b2; + u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */ + + if (!(D_8018F170 & 1)) { + D_8018F158 = 1; + } else { + D_8018F158 = D_80078EAF; + } + + b0 = ((u8 *)D_8017EFE8)[D_8018F158 * 12]; + D_8019048A = b0; + D_801904FE = b0; + b1 = D_8017EFEC[D_8018F158 * 12]; + D_801903B2 = b1; + D_8019046C = b1; + b2 = D_8017EFF0[D_8018F158 * 12]; + D_80190390 = b2; + D_801903B1 = b2; + + (*(S9 *)&D_801903A8) = ((S9 *)D_8017EFB0)[D_8018F158]; + (*(S9 *)&D_80190448) = *(S9 *)(&D_80190390 + 0x18); /* same addr as (*(S9 *)&D_801903A8); distinct sym defeats cse, keeps %hi/%lo */ + + D_80190470 = 1; + D_8018F16C = -1; + D_8018F168 = 0; + D_8018F164 = -1; + D_8018F150 = 0; + D_8018F15C = 0; + D_8018F160 = 0; + + if ((D_8018F170 & 2) && (D_8018F158 == 4)) { + s0v = (*(s32 * *)&D_8018F140)[18]; + t9v = (*(s32 * *)&D_8018F140)[19]; + t8v = (*(s32 * *)&D_8018F140)[20]; + } else { + s32 *p = (s32 *)(D_8018F158 * 12 + (s32) (*(s32 * *)&D_8018F140)); /* block-local: local-alloc ties sum into mul chain */ + s0v = p[0]; + t9v = p[1]; + t8v = p[2]; + } + + (*(Cmd_8013D53C * *)&D_8018F14C) = arg0; + if (arg0 != 0) { + if (D_8018F178 != 0) { + s32 *p = (s32 *)(D_8018F158 * 12 + (s32) (*(s32 * *)&D_8018F148)); + D_8018F17C = p[0]; + D_8018F180 = p[1]; + D_8018F184 = p[2]; + } else { + while ((arg0->cmd & 0xFFFF) != 0xFF) { + if ((arg0->cmd & 0xFFFF) == 9) { + s32 n; + s32 i; + u16 *src; + u16 *dst; + n = arg0->w * arg0->h; + i = 0; + src = arg0->data; + __asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */ + dst = src + n; + if (n > 0) { + do { + u16 px; + s32 r, g, b, out; + __asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */ + px = *src; + r = ((px & 0x1F) * s0v) / 2560; + g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0; + b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00; + out = r | g | b | (px & 0x8000); + if (out == 0 && px != 0) { + out = 0x8000; + } + *dst = out; + dst++; + i++; + src++; + } while (i < n); + } + } + arg0++; + } + } + } +} + diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c index bade8b0dc..859ee4e81 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8013F350.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_80140608.c b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c index 19b2d1264..726711f07 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_80140608.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_80140608.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_80154C24.c b/src/ov_SC07_011/ov_SC07_011_jr_80154C24.c index 2e258339c..7aa07d5ad 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_80154C24.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_80154C24.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_801588CC.c b/src/ov_SC07_011/ov_SC07_011_jr_801588CC.c index 2bd596d24..92ba0ceea 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_801588CC.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_801588CC.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c b/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c index 389f54515..315fecb34 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8015C32C.c @@ -690,7 +690,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8017AE2C.c b/src/ov_SC07_011/ov_SC07_011_jr_8017AE2C.c index e37237a2c..a7bdb624f 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8017AE2C.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8017AE2C.c @@ -692,7 +692,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void); diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8017BEBC.c b/src/ov_SC07_011/ov_SC07_011_jr_8017BEBC.c index 68baf73ad..9871280cb 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8017BEBC.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8017BEBC.c @@ -689,7 +689,7 @@ extern s32 func_8013D13C(void); extern void func_8013D164(void); extern void func_8013D178(void); extern void func_8013D330(void); -extern void func_8013D53C(void); +extern void func_8013D53C(); extern void func_8013DD68(void); extern void func_8013D8FC(void); extern void func_8013CF68(void);