mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 05:56:00 -04:00
feat(decomp): -O0 U3 — 48 banked across the x3 carve group, zero model tokens
The 16-fn -O0 cluster (0x8013B568..0x8013C964), remapped from the ov_SC01_077 exemplars (16/16 matched there) into all three freshly carved -O0 objects: ov_SC02_037 16/16 ov_MAIN_012 16/16 ov_SC03_107 16/16 All three BYTE-IDENTICAL against config/check.<ov>.sha after the batch, and corpus.stubs reports zero of the 16 addresses still open in any of them. 48 functions for zero model tokens — the entire cost was a partitioning fix. R14 NOTE ON THE INSTRUMENT: sweep_parallel summarised "banked=44 notbanked=4" while the byte gate and corpus.stubs both say 48/48. The bytes win; its counter undercounts (drafts banked in a later chunk after a bisect appear not to be credited). Worth a look before that number is ever quoted as a rate. Three drafts per overlay came with a gather_externs warning — a sibling callee with no file-scope decl in ov077 (func_8013B83C, func_8013BD74). They banked anyway: C89 implicit declaration covers a same-TU sibling whose stub sits in the same object. The gate decided, not the warning. With U2's 4, this closes the -O0 U2/U3 thread: 52 functions / ~6,730 instructions banked tonight from the stranded -O0 population without drafting a line.
This commit is contained in:
+6
-4
@@ -4964,7 +4964,7 @@ ov_MAIN_012_ELF := $(ov_MAIN_012_OUT).elf
|
||||
ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
|
||||
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
|
||||
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail7.data.o,ov_MAIN_012_jr_801594E8.o,ov_MAIN_012_jr_80159C84.o,tail8.data.o,ov_MAIN_012_jr_8015A3C8.o,tail9.data.o,ov_MAIN_012_jr_8016AE5C.o,tail10.data.o,ov_MAIN_012_jr_80171B4C.o,tail11.data.o,ov_MAIN_012_jr_801789AC.o,tail12.data.o,ov_MAIN_012_jr_8017C3BC.o,tail13.data.o,ov_MAIN_012_jr_8017CA18.o,tail14.data.o,ov_MAIN_012_jr_8017CF3C.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,ov_MAIN_012_jr_80131340.o,tail2.data.o,ov_MAIN_012_jr_80135A4C.o,tail3.data.o,ov_MAIN_012_jr_80135EB0.o,tail4.data.o,ov_MAIN_012_jr_801380E0.o,ov_MAIN_012_o0c.o,tail5.data.o,ov_MAIN_012_jr_8013F350.o,tail6.data.o,ov_MAIN_012_jr_801549F8.o,ov_MAIN_012_jr_801555F4.o,tail7.data.o,ov_MAIN_012_jr_801594E8.o,ov_MAIN_012_jr_80159C84.o,tail8.data.o,ov_MAIN_012_jr_8015A3C8.o,tail9.data.o,ov_MAIN_012_jr_8016AE5C.o,tail10.data.o,ov_MAIN_012_jr_80171B4C.o,tail11.data.o,ov_MAIN_012_jr_801789AC.o,tail12.data.o,ov_MAIN_012_jr_8017C3BC.o,tail13.data.o,ov_MAIN_012_jr_8017CA18.o,tail14.data.o,ov_MAIN_012_jr_8017CF3C.o,tail15.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -4977,6 +4977,7 @@ build/src/ov_MAIN_012/ov_MAIN_012_jr_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_801789AC.o: JTBL_PADS := 0,0,0,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220,+0x2b0
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_8017C3BC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_8017CF3C.o: JTBL_PADS := 0,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28,+0x50
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_MAIN_012_CHECK_SHA := config/check.ov_MAIN_012.sha
|
||||
ov_MAIN_012_SYMBOLS := config/symbols.ov_MAIN_012.txt
|
||||
ov_MAIN_012_SIG := .run/sig.ov_MAIN_012.jsonl
|
||||
@@ -4998,7 +4999,7 @@ ov_SC02_037_ELF := $(ov_SC02_037_OUT).elf
|
||||
ov_SC02_037_MAPFILE := $(ov_SC02_037_OUT).map
|
||||
ov_SC02_037_LD_SCRIPT := $(ov_SC02_037_OUT).ld
|
||||
ov_SC02_037_SPLAT_YAML := config/splat.ov_SC02_037.yaml
|
||||
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,ov_SC02_037_jr_80131340.o,tail2.data.o,ov_SC02_037_jr_80135A4C.o,tail3.data.o,ov_SC02_037_jr_80135EB0.o,tail4.data.o,ov_SC02_037_jr_801380E0.o,tail5.data.o,ov_SC02_037_o0c.o,tail6.data.o,ov_SC02_037_jr_8013F350.o,tail7.data.o,ov_SC02_037_jr_801549F8.o,ov_SC02_037_jr_801555F4.o,tail8.data.o,ov_SC02_037_jr_801594E8.o,ov_SC02_037_jr_80159C84.o,tail9.data.o,ov_SC02_037_jr_8015A3C8.o,tail10.data.o,ov_SC02_037_jr_8016AE5C.o,tail11.data.o,ov_SC02_037_jr_80171B4C.o,tail12.data.o,ov_SC02_037_jr_801789AC.o,tail13.data.o,ov_SC02_037_jr_8017AE2C.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,ov_SC02_037_jr_80131340.o,tail2.data.o,ov_SC02_037_jr_80135A4C.o,tail3.data.o,ov_SC02_037_jr_80135EB0.o,tail4.data.o,ov_SC02_037_jr_801380E0.o,ov_SC02_037_o0c.o,tail5.data.o,ov_SC02_037_jr_8013F350.o,tail6.data.o,ov_SC02_037_jr_801549F8.o,ov_SC02_037_jr_801555F4.o,tail7.data.o,ov_SC02_037_jr_801594E8.o,ov_SC02_037_jr_80159C84.o,tail8.data.o,ov_SC02_037_jr_8015A3C8.o,tail9.data.o,ov_SC02_037_jr_8016AE5C.o,tail10.data.o,ov_SC02_037_jr_80171B4C.o,tail11.data.o,ov_SC02_037_jr_801789AC.o,tail12.data.o,ov_SC02_037_jr_8017AE2C.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC02_037/ov_SC02_037.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -5010,7 +5011,7 @@ build/src/ov_SC02_037/ov_SC02_037_jr_8015A3C8.o: JTBL_PADS := 0,4,4,4 # §8e pa
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_801789AC.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c,+0x64
|
||||
build/src/ov_SC02_037/ov_SC02_037_o0c.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x70
|
||||
build/src/ov_SC02_037/ov_SC02_037_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC02_037_CHECK_SHA := config/check.ov_SC02_037.sha
|
||||
ov_SC02_037_SYMBOLS := config/symbols.ov_SC02_037.txt
|
||||
ov_SC02_037_SIG := .run/sig.ov_SC02_037.jsonl
|
||||
@@ -5032,7 +5033,7 @@ ov_SC03_107_ELF := $(ov_SC03_107_OUT).elf
|
||||
ov_SC03_107_MAPFILE := $(ov_SC03_107_OUT).map
|
||||
ov_SC03_107_LD_SCRIPT := $(ov_SC03_107_OUT).ld
|
||||
ov_SC03_107_SPLAT_YAML := config/splat.ov_SC03_107.yaml
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,ov_SC03_107_jr_80131340.o,tail2.data.o,ov_SC03_107_jr_80135A4C.o,tail3.data.o,ov_SC03_107_jr_80135EB0.o,tail4.data.o,ov_SC03_107_jr_801380E0.o,tail5.data.o,ov_SC03_107_jr_8013F350.o,tail6.data.o,ov_SC03_107_jr_801549F8.o,ov_SC03_107_jr_801555F4.o,tail7.data.o,ov_SC03_107_jr_801594E8.o,ov_SC03_107_jr_80159C84.o,tail8.data.o,ov_SC03_107_jr_8015A3C8.o,tail9.data.o,ov_SC03_107_jr_8016AE5C.o,tail10.data.o,ov_SC03_107_jr_80171B4C.o,tail11.data.o,ov_SC03_107_jr_801789AC.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,ov_SC03_107_jr_80131340.o,tail2.data.o,ov_SC03_107_jr_80135A4C.o,tail3.data.o,ov_SC03_107_jr_80135EB0.o,tail4.data.o,ov_SC03_107_jr_801380E0.o,ov_SC03_107_o0c.o,tail5.data.o,ov_SC03_107_jr_8013F350.o,tail6.data.o,ov_SC03_107_jr_801549F8.o,ov_SC03_107_jr_801555F4.o,tail7.data.o,ov_SC03_107_jr_801594E8.o,ov_SC03_107_jr_80159C84.o,tail8.data.o,ov_SC03_107_jr_8015A3C8.o,tail9.data.o,ov_SC03_107_jr_8016AE5C.o,tail10.data.o,ov_SC03_107_jr_80171B4C.o,tail11.data.o,ov_SC03_107_jr_801789AC.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0xdc
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80131340.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80135A4C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -5043,6 +5044,7 @@ build/src/ov_SC03_107/ov_SC03_107_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_8015A3C8.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_80171B4C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_801789AC.o: JTBL_PADS := 0,0,0,4,4,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220,+0x2b0,+0x2c4,+0x32c
|
||||
build/src/ov_SC03_107/ov_SC03_107_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC03_107_CHECK_SHA := config/check.ov_SC03_107.sha
|
||||
ov_SC03_107_SYMBOLS := config/symbols.ov_SC03_107.txt
|
||||
ov_SC03_107_SIG := .run/sig.ov_SC03_107.jsonl
|
||||
|
||||
@@ -121,7 +121,8 @@ segments:
|
||||
- [0x5adec, .rodata, ov_MAIN_012_jr_80135EB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5ae18, data, tail4]
|
||||
- [0x5ae24, .rodata, ov_MAIN_012_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5ae88, data, tail5]
|
||||
- [0x5ae88, .rodata, ov_MAIN_012_o0c] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b00c, data, tail5]
|
||||
- [0x5b494, .rodata, ov_MAIN_012_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b550, data, tail6]
|
||||
- [0x5b5d8, .rodata, ov_MAIN_012_jr_801549F8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
|
||||
@@ -119,27 +119,26 @@ segments:
|
||||
- [0x9f2d0, .rodata, ov_SC02_037_jr_80135EB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9f2fc, data, tail4]
|
||||
- [0x9f308, .rodata, ov_SC02_037_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9f36c, data, tail5]
|
||||
- [0x9f414, .rodata, ov_SC02_037_o0c] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9f4f0, data, tail6]
|
||||
- [0x9f36c, .rodata, ov_SC02_037_o0c] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9f4f0, data, tail5]
|
||||
- [0x9f978, .rodata, ov_SC02_037_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fa34, data, tail7]
|
||||
- [0x9fa34, data, tail6]
|
||||
- [0x9fabc, .rodata, ov_SC02_037_jr_801549F8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fb4c, .rodata, ov_SC02_037_jr_801555F4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fb6c, data, tail8]
|
||||
- [0x9fb6c, data, tail7]
|
||||
- [0x9fb94, .rodata, ov_SC02_037_jr_801594E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fc14, .rodata, ov_SC02_037_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fc48, data, tail9]
|
||||
- [0x9fc48, data, tail8]
|
||||
- [0x9fc4c, .rodata, ov_SC02_037_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fcc8, data, tail10]
|
||||
- [0x9fcc8, data, tail9]
|
||||
- [0x9fd00, .rodata, ov_SC02_037_jr_8016AE5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fd20, data, tail11]
|
||||
- [0x9fd20, data, tail10]
|
||||
- [0x9fd60, .rodata, ov_SC02_037_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fd94, data, tail12]
|
||||
- [0x9fd94, data, tail11]
|
||||
- [0x9ff24, .rodata, ov_SC02_037_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa01d0, data, tail13]
|
||||
- [0xa01d0, data, tail12]
|
||||
- [0xa01d4, .rodata, ov_SC02_037_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa024c, data, tail14]
|
||||
- [0xa024c, data, tail13]
|
||||
- [0xA198C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xA198F] # EOF marker = the 0.4.dec byte length
|
||||
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
|
||||
|
||||
@@ -118,7 +118,8 @@ segments:
|
||||
- [0x71604, .rodata, ov_SC03_107_jr_80135EB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71630, data, tail4]
|
||||
- [0x7163c, .rodata, ov_SC03_107_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x716a0, data, tail5]
|
||||
- [0x716a0, .rodata, ov_SC03_107_o0c] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71824, data, tail5]
|
||||
- [0x71cac, .rodata, ov_SC03_107_jr_8013F350] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71d68, data, tail6]
|
||||
- [0x71df0, .rodata, ov_SC03_107_jr_801549F8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
|
||||
@@ -214,7 +214,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -113,7 +113,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -156,7 +156,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -192,7 +192,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -198,7 +198,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -198,7 +198,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -198,7 +198,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
@@ -757,34 +757,484 @@ extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4)
|
||||
/* ==== end §8b carried decl layer ==== */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B568);
|
||||
extern s32 D_8017EAD4;
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B598);
|
||||
void func_8013B568(s32 arg0) {
|
||||
D_8017EAD4 = arg0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B6A0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B7AC);
|
||||
/* size 0x14 */
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B7F4);
|
||||
/* func_8013B598 (ov_SC01_077_o0, -O0): fills entry a0 of the 0x1C-stride table at
|
||||
* D_80185B58 from a 3-halfword source record.
|
||||
*
|
||||
* -O0 CONSTANT-OFFSET FOLD (the quirk that stalled this -O0 cluster in Phase 19):
|
||||
* at -O0 gcc-2.7.2 folds a constant offset into the memory operand ONLY through a
|
||||
* COMPONENT_REF / a real ARRAY_REF on an array-typed DECL:
|
||||
* D_80185B58[a0].f4 = ... -> lui $at,%hi(sym); addu $at,$at,idx; sh %lo(sym+4)($at)
|
||||
* A CAST base defeats it (NOP_EXPR over the ADDR_EXPR), and so does pointer indexing:
|
||||
* ((S *)D_80185B58)[a0].f4 -> lui;addiu;addu;sh 4(reg) (+2 ins per store)
|
||||
* a1[1] -> addiu $v1,$a0,2; lhu 0($v1) (+1 ins per load)
|
||||
* So the table extern must carry the FULL struct type (not the pad-only canonical
|
||||
* E_3B7AC), and the source record must be read as ->field, not as a[i]. Casting the
|
||||
* incoming POINTER is harmless (a NOP on a register), only the base decl's type matters.
|
||||
*
|
||||
* Both types are body-scoped (cookbook §100) and the extern is declared inside the body,
|
||||
* matching the established -O0 sibling pattern in src/ov_SC07_010/ov_SC07_010_o0.c
|
||||
* (func_8013B7AC: `extern E_3B7AC D_801A9420[];` in-body). NOTE FOR BANKING: the canonical
|
||||
* sig-layer decl `extern E_3B7AC D_80185B58[];` (f0 + pad only) CANNOT be used here — it has
|
||||
* no f4/f6/f8/fC members. The in-body decl below must be the one that survives; do not also
|
||||
* emit a file-scope E_3B7AC decl for D_80185B58 (conflicting types).
|
||||
*
|
||||
* 66/66 instructions byte-identical (match_one --o0).
|
||||
*/
|
||||
void func_8013B598(s32 a0, u16 *a1) {
|
||||
typedef struct { u16 f0; u16 f2; u16 f4; } Src_8013B598;
|
||||
typedef struct { s32 f0; u16 f4; u16 f6; u16 f8; u16 fA; s32 fC; u8 pad[0xC]; } Spr_8013B598;
|
||||
extern Spr_8013B598 D_80185B58[];
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013B83C);
|
||||
D_80185B58[a0].f0 = 1;
|
||||
D_80185B58[a0].f4 = ((Src_8013B598 *)a1)->f0;
|
||||
D_80185B58[a0].f6 = ((Src_8013B598 *)a1)->f2;
|
||||
D_80185B58[a0].f8 = ((Src_8013B598 *)a1)->f4;
|
||||
D_80185B58[a0].fC = 0x100;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013BC7C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013BCDC);
|
||||
/* size 0x14 */
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013BD34);
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013BD74);
|
||||
void func_8013B6A0(s32 idx, u16 *src, s32 val)
|
||||
{
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[0xC];
|
||||
} Ent_8013B6A0;
|
||||
typedef struct {
|
||||
u16 f0;
|
||||
u16 f2;
|
||||
u16 f4;
|
||||
} Src_8013B6A0;
|
||||
extern Ent_8013B6A0 D_80185B58[];
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C08C);
|
||||
D_80185B58[idx].f0 = 1;
|
||||
D_80185B58[idx].f4 = ((Src_8013B6A0 *)src)->f0;
|
||||
D_80185B58[idx].f6 = ((Src_8013B6A0 *)src)->f2;
|
||||
D_80185B58[idx].f8 = ((Src_8013B6A0 *)src)->f4;
|
||||
D_80185B58[idx].fC = val;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C0F8);
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C360);
|
||||
/* size 0x14 */
|
||||
/* sizeof 0x1C stride */
|
||||
extern E_3B7AC D_80185B58[];
|
||||
void func_8013B7AC(int a0) { D_80185B58[a0].f0 = 0; }
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C414);
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C938);
|
||||
extern s32 D_80185C74;
|
||||
|
||||
|
||||
void func_8013B7F4(s32 a0, s32 a1) {
|
||||
func_8013B83C(a0, a1, D_80185C74);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80185C10;
|
||||
extern s32 D_80185C74;
|
||||
/* size 0x14 */
|
||||
|
||||
void func_8013B83C(s32 a0, s32 a1, s32 a2) {
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[8];
|
||||
s32 f18;
|
||||
} Ent_8013B83C; /* sizeof 0x1C */
|
||||
extern Ent_8013B83C D_801DAA08_e[] __asm__("D_80185B58");
|
||||
extern s32 D_80185BF4;
|
||||
extern s32 D_80185BF8;
|
||||
extern s32 D_80185BFC;
|
||||
extern s32 D_80185C20;
|
||||
extern s32 D_80185C70;
|
||||
extern s32 D_80185C78;
|
||||
extern s16 D_800B9A0E;
|
||||
extern void func_80052D90(s32 a0, void *a1);
|
||||
extern void func_8013C08C(void*, void*);
|
||||
s32 i;
|
||||
|
||||
D_80185C10 = 0;
|
||||
D_80185BFC = 0;
|
||||
D_80185BF8 = 0;
|
||||
D_80185BF4 = 0;
|
||||
func_80052D90(0, &D_80185C20);
|
||||
if (a0 == 0) {
|
||||
return;
|
||||
}
|
||||
D_80185C70 = a2 + 500;
|
||||
D_80185C74 = a2;
|
||||
for (i = 0; i < 4; i++) {
|
||||
D_801DAA08_e[i].f0 = 0;
|
||||
D_801DAA08_e[i].f4 = D_801DAA08_e[i].f6 = D_801DAA08_e[i].f8 = 0x6000;
|
||||
D_801DAA08_e[i].fC = 0x100;
|
||||
D_801DAA08_e[i].f18 = 0;
|
||||
}
|
||||
switch (*(u8 *)a0) {
|
||||
case 0x42:
|
||||
if (D_800B9A0E == 0) {
|
||||
func_8013BD74(&D_80185C10, a0);
|
||||
} else {
|
||||
func_8013BD74(&D_80185C10, a1);
|
||||
}
|
||||
D_80185C78 = 0;
|
||||
break;
|
||||
case 0x43:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 1;
|
||||
break;
|
||||
case 0x44:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 2;
|
||||
break;
|
||||
case 0x45:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 3;
|
||||
break;
|
||||
case 0x46:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 4;
|
||||
break;
|
||||
case 0x47:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 5;
|
||||
break;
|
||||
case 0x48:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 6;
|
||||
break;
|
||||
case 0x49:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 9;
|
||||
break;
|
||||
case 0x4A:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 0xC;
|
||||
break;
|
||||
case 0x4B:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 0xD;
|
||||
break;
|
||||
case 0x4C:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 0xE;
|
||||
break;
|
||||
case 0x4D:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 0xF;
|
||||
break;
|
||||
case 0x4E:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_80185C10, a0);
|
||||
D_80185C78 = 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void (*D_8017E338[])(void *);
|
||||
|
||||
void func_8013BC7C(void *arg0) {
|
||||
D_8017E338[((S_8013BC7C *)arg0)->f68](arg0);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_8017EAD4;
|
||||
/* size 0x14 */
|
||||
|
||||
/* func_8013BCDC (ov_SC01_077_o0, -O0): guarded indirect call through D_8017EAD4.
|
||||
* D_8017EAD4 is declared `extern s32` in the TU (canonical-sig layer) and holds a
|
||||
* function pointer; read it as an s32, test non-null, cast to fn-ptr and call.
|
||||
* Frame residual: target frame is 0x30 (saves $ra/$fp/$s0 at 0x28/0x24/0x20) — 16
|
||||
* bytes of var_size above the minimal 0x20. At -O0 (no DCE) an unused 16-byte local
|
||||
* reserves exactly that var region (cookbook §42 lever 3, frame-pad induction) with
|
||||
* zero body instructions. 22/22 byte-identical via rtu_match. */
|
||||
void func_8013BCDC(void) {
|
||||
s32 pad[4];
|
||||
if (D_8017EAD4 != 0) {
|
||||
((void (*)(void))D_8017EAD4)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80185C10;
|
||||
|
||||
void func_8013BD34(s32 a0) {
|
||||
func_8013BD74(&D_80185C10, a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s16 D_80185B18;
|
||||
extern s16 D_80185B1A;
|
||||
extern s16 D_80185B1C;
|
||||
extern s16 D_80185B1E;
|
||||
|
||||
void func_8013BD74(void *a0, s32 a1) {
|
||||
/* §100 draft-LOCAL types: file-scope typedefs are NOT carried by extract_unit/remap_hseq, so a
|
||||
file-scope E_13BD74 banks the exemplar and then fails every sibling with `E_13BD74'
|
||||
undeclared (the §94 type-carry class, measured on ov_SC01_000). Block scope travels with the
|
||||
body and is byte-neutral (a type emits no code). */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13BD74;
|
||||
typedef struct {
|
||||
u8 pad0[3];
|
||||
u8 code;
|
||||
s32 f4;
|
||||
s32 f8;
|
||||
} P_13BD74;
|
||||
s32 *q;
|
||||
s32 *p;
|
||||
s32 i;
|
||||
s32 unused0;
|
||||
s32 unused1;
|
||||
P_13BD74 *e;
|
||||
P_13BD74 *end;
|
||||
s32 unused2;
|
||||
s32 base;
|
||||
s32 unused3;
|
||||
|
||||
D_80185B18 = -0xA0;
|
||||
D_80185B1A = -0x78;
|
||||
D_80185B1C = 0x140;
|
||||
D_80185B1E = 0xF0;
|
||||
((E_13BD74 *)a0)->f8 = (void *)a1;
|
||||
((E_13BD74 *)a0)->fC = (void *)(a1 + 8);
|
||||
base = a1 + 0x4008;
|
||||
if (((u8 *)a1)[4] == 0) {
|
||||
p = (s32 *)((E_13BD74 *)a0)->fC;
|
||||
for (i = 0; i < 0x1000; i++) {
|
||||
if (*p != 0) {
|
||||
*p += (s32)((E_13BD74 *)a0)->fC;
|
||||
q = (s32 *)*p;
|
||||
q[0] += (s32)q;
|
||||
q[5] += (s32)q;
|
||||
e = (P_13BD74 *)q[5];
|
||||
q[6] = q[6] * 12 + q[5];
|
||||
end = (P_13BD74 *)q[6];
|
||||
while (e < end) {
|
||||
switch (e->code) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
}
|
||||
e++;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
((u8 *)a1)[4] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_8013C0F8(s32 a0);
|
||||
|
||||
void func_8013C08C(void *a0, void *a1) {
|
||||
/* SS100 DRAFT-LOCAL type: only this function uses E_13C08C, so it lives in the BODY, not at
|
||||
* file scope. At file scope extract_unit's preceding-decl backscan cannot carry it: the scan
|
||||
* walks back over extern/comment/blank/typedef lines, and a MULTI-LINE typedef presents its
|
||||
* CLOSING line first, which matches none of those prefixes. Every templated sibling therefore
|
||||
* got the body without the type and the family swept 0/137 (SS94: a family 0/N is a type-carry
|
||||
* failure until proven otherwise). Declared here, it is part of the unit by construction.
|
||||
* NB no brace characters in this comment on purpose - extract_unit's forward brace-scan does
|
||||
* not strip comments, so a brace in a comment truncates the extracted unit. */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13C08C;
|
||||
|
||||
void *p = a1;
|
||||
|
||||
((E_13C08C *)a0)->f8 = a1;
|
||||
((E_13C08C *)a0)->fC = (u8 *)p + 0x14;
|
||||
func_8013C0F8((s32)a1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* size 0x14 */
|
||||
|
||||
/* size 0xc */
|
||||
|
||||
void func_8013C0F8(int param_1) {
|
||||
int iVar1;
|
||||
int iVar2;
|
||||
unsigned int local_18;
|
||||
unsigned int local_14;
|
||||
Bar *local_10;
|
||||
Foo *local_c;
|
||||
|
||||
iVar1 = param_1 + 0x14;
|
||||
if (*(char *)(param_1 + 4) == '\0') {
|
||||
iVar2 = iVar1 + *(int *)(param_1 + 0xc);
|
||||
*(int *)(param_1 + 0xc) = iVar2;
|
||||
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + iVar1;
|
||||
local_c = (Foo *)iVar1;
|
||||
for (local_18 = 0; local_18 < *(unsigned int *)(param_1 + 8); local_18++, local_c++) {
|
||||
local_c->field10 = local_c->field10 + iVar1;
|
||||
local_10 = (Bar *)local_c->field10;
|
||||
for (local_14 = 0; local_14 < local_c->count; local_14++, local_10++) {
|
||||
switch (local_10->tag) {
|
||||
case 0x24:
|
||||
case 0x2c:
|
||||
case 0x34:
|
||||
case 0x3c:
|
||||
*(unsigned int *)local_10 = (*(unsigned int *)local_10 & 0xffffff) + iVar2;
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2e:
|
||||
case 0x36:
|
||||
case 0x3e:
|
||||
*(unsigned int *)local_10 = (*(unsigned int *)local_10 & 0xffffff) + iVar2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*(unsigned char *)(param_1 + 4) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void func_8013C360(s32 a0) {
|
||||
s32 *p;
|
||||
u32 i;
|
||||
p = (s32 *)(a0 + 0x10);
|
||||
for (i = 0; i < *(u32 *)(a0 + 8); i++) {
|
||||
*(s32 *)(*(s32 *)p) = *(s32 *)((s32)p + 4);
|
||||
p = (s32 *)((s32)p + 0xC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 0xC */
|
||||
|
||||
void func_8013C414(s32 param_1, s32 param_2)
|
||||
{
|
||||
s32 base10; /* 0x00 */
|
||||
s32 p; /* 0x04 */
|
||||
s32 q; /* 0x08 */
|
||||
s32 base4008; /* 0x0C */
|
||||
s32 lo; /* 0x10 */
|
||||
u32 i; /* 0x14 */
|
||||
s32 unused; /* 0x18 */
|
||||
s32 base8; /* 0x1C */
|
||||
T3Reloc *r; /* 0x20 */
|
||||
T3Reloc *s; /* 0x24 */
|
||||
|
||||
if (*(s32 *)(param_2 + 4) == 0) {
|
||||
base10 = param_2 + 0x10;
|
||||
base4008 = param_1 + 0x4008;
|
||||
lo = *(s32 *)(param_2 + 0xC) + base10;
|
||||
base8 = param_1 + 8;
|
||||
p = base10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)p = *(s32 *)p + base8;
|
||||
if (*(s32 *)(p + 4) != 0) {
|
||||
*(s32 *)(p + 4) = *(s32 *)(p + 4) + base10;
|
||||
q = *(s32 *)(p + 4);
|
||||
*(s32 *)q = *(s32 *)q + q;
|
||||
*(s32 *)(q + 0x14) = *(s32 *)(q + 0x14) + q;
|
||||
r = (T3Reloc *)*(s32 *)(q + 0x14);
|
||||
*(s32 *)(q + 0x18) = *(s32 *)(q + 0x18) * 0xC + *(s32 *)(q + 0x14);
|
||||
s = (T3Reloc *)*(s32 *)(q + 0x18);
|
||||
while (r < s) {
|
||||
switch (r->type) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
}
|
||||
r++;
|
||||
}
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
*(s32 *)(param_2 + 4) = 1;
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
if (*(s32 *)(p + 8) == 0) {
|
||||
*(s32 *)(p + 8) = *(s32 *)(*(s32 *)p);
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
} else {
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)(*(s32 *)p) = *(s32 *)(p + 8);
|
||||
p = p + 0xC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80185C10;
|
||||
|
||||
|
||||
void func_8013C938(void) {
|
||||
D_80185C10 = 1;
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80185C10;
|
||||
|
||||
void func_8013C964(void) {
|
||||
D_80185C10 = 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_o0c", func_8013C964);
|
||||
|
||||
@@ -214,7 +214,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -108,7 +108,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -108,7 +108,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -108,7 +108,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -108,7 +108,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -108,7 +108,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -127,7 +127,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -170,7 +170,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -207,7 +207,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -207,7 +207,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
@@ -755,19 +755,208 @@ extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4)
|
||||
/* ==== end §8b carried decl layer ==== */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B568);
|
||||
extern s32 D_80184360;
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B598);
|
||||
void func_8013B568(s32 arg0) {
|
||||
D_80184360 = arg0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B6A0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B7AC);
|
||||
/* size 0x14 */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B7F4);
|
||||
/* func_8013B598 (ov_SC01_077_o0, -O0): fills entry a0 of the 0x1C-stride table at
|
||||
* D_801C99C0 from a 3-halfword source record.
|
||||
*
|
||||
* -O0 CONSTANT-OFFSET FOLD (the quirk that stalled this -O0 cluster in Phase 19):
|
||||
* at -O0 gcc-2.7.2 folds a constant offset into the memory operand ONLY through a
|
||||
* COMPONENT_REF / a real ARRAY_REF on an array-typed DECL:
|
||||
* D_801C99C0[a0].f4 = ... -> lui $at,%hi(sym); addu $at,$at,idx; sh %lo(sym+4)($at)
|
||||
* A CAST base defeats it (NOP_EXPR over the ADDR_EXPR), and so does pointer indexing:
|
||||
* ((S *)D_801C99C0)[a0].f4 -> lui;addiu;addu;sh 4(reg) (+2 ins per store)
|
||||
* a1[1] -> addiu $v1,$a0,2; lhu 0($v1) (+1 ins per load)
|
||||
* So the table extern must carry the FULL struct type (not the pad-only canonical
|
||||
* E_3B7AC), and the source record must be read as ->field, not as a[i]. Casting the
|
||||
* incoming POINTER is harmless (a NOP on a register), only the base decl's type matters.
|
||||
*
|
||||
* Both types are body-scoped (cookbook §100) and the extern is declared inside the body,
|
||||
* matching the established -O0 sibling pattern in src/ov_SC07_010/ov_SC07_010_o0.c
|
||||
* (func_8013B7AC: `extern E_3B7AC D_801A9420[];` in-body). NOTE FOR BANKING: the canonical
|
||||
* sig-layer decl `extern E_3B7AC D_801C99C0[];` (f0 + pad only) CANNOT be used here — it has
|
||||
* no f4/f6/f8/fC members. The in-body decl below must be the one that survives; do not also
|
||||
* emit a file-scope E_3B7AC decl for D_801C99C0 (conflicting types).
|
||||
*
|
||||
* 66/66 instructions byte-identical (match_one --o0).
|
||||
*/
|
||||
void func_8013B598(s32 a0, u16 *a1) {
|
||||
typedef struct { u16 f0; u16 f2; u16 f4; } Src_8013B598;
|
||||
typedef struct { s32 f0; u16 f4; u16 f6; u16 f8; u16 fA; s32 fC; u8 pad[0xC]; } Spr_8013B598;
|
||||
extern Spr_8013B598 D_801C99C0[];
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013B83C);
|
||||
D_801C99C0[a0].f0 = 1;
|
||||
D_801C99C0[a0].f4 = ((Src_8013B598 *)a1)->f0;
|
||||
D_801C99C0[a0].f6 = ((Src_8013B598 *)a1)->f2;
|
||||
D_801C99C0[a0].f8 = ((Src_8013B598 *)a1)->f4;
|
||||
D_801C99C0[a0].fC = 0x100;
|
||||
}
|
||||
|
||||
|
||||
/* size 0x14 */
|
||||
|
||||
|
||||
void func_8013B6A0(s32 idx, u16 *src, s32 val)
|
||||
{
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[0xC];
|
||||
} Ent_8013B6A0;
|
||||
typedef struct {
|
||||
u16 f0;
|
||||
u16 f2;
|
||||
u16 f4;
|
||||
} Src_8013B6A0;
|
||||
extern Ent_8013B6A0 D_801C99C0[];
|
||||
|
||||
D_801C99C0[idx].f0 = 1;
|
||||
D_801C99C0[idx].f4 = ((Src_8013B6A0 *)src)->f0;
|
||||
D_801C99C0[idx].f6 = ((Src_8013B6A0 *)src)->f2;
|
||||
D_801C99C0[idx].f8 = ((Src_8013B6A0 *)src)->f4;
|
||||
D_801C99C0[idx].fC = val;
|
||||
}
|
||||
|
||||
|
||||
/* size 0x14 */
|
||||
/* sizeof 0x1C stride */
|
||||
extern E_3B7AC D_801C99C0[];
|
||||
void func_8013B7AC(int a0) { D_801C99C0[a0].f0 = 0; }
|
||||
|
||||
|
||||
extern s32 D_801C9ADC;
|
||||
|
||||
|
||||
void func_8013B7F4(s32 a0, s32 a1) {
|
||||
func_8013B83C(a0, a1, D_801C9ADC);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_801C9A78;
|
||||
extern s32 D_801C9ADC;
|
||||
/* size 0x14 */
|
||||
|
||||
void func_8013B83C(s32 a0, s32 a1, s32 a2) {
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[8];
|
||||
s32 f18;
|
||||
} Ent_8013B83C; /* sizeof 0x1C */
|
||||
extern Ent_8013B83C D_801DAA08_e[] __asm__("D_801C99C0");
|
||||
extern s32 D_801C9A5C;
|
||||
extern s32 D_801C9A60;
|
||||
extern s32 D_801C9A64;
|
||||
extern s32 D_801C9A88;
|
||||
extern s32 D_801C9AD8;
|
||||
extern s32 D_801C9AE0;
|
||||
extern s16 D_800B9A0E;
|
||||
extern void func_80052D90(s32 a0, void *a1);
|
||||
extern void func_8013C08C(void*, void*);
|
||||
s32 i;
|
||||
|
||||
D_801C9A78 = 0;
|
||||
D_801C9A64 = 0;
|
||||
D_801C9A60 = 0;
|
||||
D_801C9A5C = 0;
|
||||
func_80052D90(0, &D_801C9A88);
|
||||
if (a0 == 0) {
|
||||
return;
|
||||
}
|
||||
D_801C9AD8 = a2 + 500;
|
||||
D_801C9ADC = a2;
|
||||
for (i = 0; i < 4; i++) {
|
||||
D_801DAA08_e[i].f0 = 0;
|
||||
D_801DAA08_e[i].f4 = D_801DAA08_e[i].f6 = D_801DAA08_e[i].f8 = 0x6000;
|
||||
D_801DAA08_e[i].fC = 0x100;
|
||||
D_801DAA08_e[i].f18 = 0;
|
||||
}
|
||||
switch (*(u8 *)a0) {
|
||||
case 0x42:
|
||||
if (D_800B9A0E == 0) {
|
||||
func_8013BD74(&D_801C9A78, a0);
|
||||
} else {
|
||||
func_8013BD74(&D_801C9A78, a1);
|
||||
}
|
||||
D_801C9AE0 = 0;
|
||||
break;
|
||||
case 0x43:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 1;
|
||||
break;
|
||||
case 0x44:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 2;
|
||||
break;
|
||||
case 0x45:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 3;
|
||||
break;
|
||||
case 0x46:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 4;
|
||||
break;
|
||||
case 0x47:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 5;
|
||||
break;
|
||||
case 0x48:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 6;
|
||||
break;
|
||||
case 0x49:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 9;
|
||||
break;
|
||||
case 0x4A:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 0xC;
|
||||
break;
|
||||
case 0x4B:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 0xD;
|
||||
break;
|
||||
case 0x4C:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 0xE;
|
||||
break;
|
||||
case 0x4D:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 0xF;
|
||||
break;
|
||||
case 0x4E:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_801C9A78, a0);
|
||||
D_801C9AE0 = 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void (*D_80183BC4[])(void *);
|
||||
|
||||
void func_8013BC7C(void *arg0) {
|
||||
D_80183BC4[((S_8013BC7C *)arg0)->f68](arg0);
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013BC7C);
|
||||
|
||||
extern s32 D_80184360;
|
||||
|
||||
@@ -780,11 +969,115 @@ extern s32 D_80184360;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013BD34);
|
||||
extern s32 D_801C9A78;
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013BD74);
|
||||
void func_8013BD34(s32 a0) {
|
||||
func_8013BD74(&D_801C9A78, a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s16 D_801C9980;
|
||||
extern s16 D_801C9982;
|
||||
extern s16 D_801C9984;
|
||||
extern s16 D_801C9986;
|
||||
|
||||
void func_8013BD74(void *a0, s32 a1) {
|
||||
/* §100 draft-LOCAL types: file-scope typedefs are NOT carried by extract_unit/remap_hseq, so a
|
||||
file-scope E_13BD74 banks the exemplar and then fails every sibling with `E_13BD74'
|
||||
undeclared (the §94 type-carry class, measured on ov_SC01_000). Block scope travels with the
|
||||
body and is byte-neutral (a type emits no code). */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13BD74;
|
||||
typedef struct {
|
||||
u8 pad0[3];
|
||||
u8 code;
|
||||
s32 f4;
|
||||
s32 f8;
|
||||
} P_13BD74;
|
||||
s32 *q;
|
||||
s32 *p;
|
||||
s32 i;
|
||||
s32 unused0;
|
||||
s32 unused1;
|
||||
P_13BD74 *e;
|
||||
P_13BD74 *end;
|
||||
s32 unused2;
|
||||
s32 base;
|
||||
s32 unused3;
|
||||
|
||||
D_801C9980 = -0xA0;
|
||||
D_801C9982 = -0x78;
|
||||
D_801C9984 = 0x140;
|
||||
D_801C9986 = 0xF0;
|
||||
((E_13BD74 *)a0)->f8 = (void *)a1;
|
||||
((E_13BD74 *)a0)->fC = (void *)(a1 + 8);
|
||||
base = a1 + 0x4008;
|
||||
if (((u8 *)a1)[4] == 0) {
|
||||
p = (s32 *)((E_13BD74 *)a0)->fC;
|
||||
for (i = 0; i < 0x1000; i++) {
|
||||
if (*p != 0) {
|
||||
*p += (s32)((E_13BD74 *)a0)->fC;
|
||||
q = (s32 *)*p;
|
||||
q[0] += (s32)q;
|
||||
q[5] += (s32)q;
|
||||
e = (P_13BD74 *)q[5];
|
||||
q[6] = q[6] * 12 + q[5];
|
||||
end = (P_13BD74 *)q[6];
|
||||
while (e < end) {
|
||||
switch (e->code) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
}
|
||||
e++;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
((u8 *)a1)[4] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_8013C0F8(s32 a0);
|
||||
|
||||
void func_8013C08C(void *a0, void *a1) {
|
||||
/* SS100 DRAFT-LOCAL type: only this function uses E_13C08C, so it lives in the BODY, not at
|
||||
* file scope. At file scope extract_unit's preceding-decl backscan cannot carry it: the scan
|
||||
* walks back over extern/comment/blank/typedef lines, and a MULTI-LINE typedef presents its
|
||||
* CLOSING line first, which matches none of those prefixes. Every templated sibling therefore
|
||||
* got the body without the type and the family swept 0/137 (SS94: a family 0/N is a type-carry
|
||||
* failure until proven otherwise). Declared here, it is part of the unit by construction.
|
||||
* NB no brace characters in this comment on purpose - extract_unit's forward brace-scan does
|
||||
* not strip comments, so a brace in a comment truncates the extracted unit. */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13C08C;
|
||||
|
||||
void *p = a1;
|
||||
|
||||
((E_13C08C *)a0)->f8 = a1;
|
||||
((E_13C08C *)a0)->fC = (u8 *)p + 0x14;
|
||||
func_8013C0F8((s32)a1);
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013C08C);
|
||||
|
||||
|
||||
|
||||
@@ -922,6 +1215,17 @@ s32 param_2;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013C938);
|
||||
extern s32 D_801C9A78;
|
||||
|
||||
|
||||
void func_8013C938(void) {
|
||||
D_801C9A78 = 1;
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_801C9A78;
|
||||
|
||||
void func_8013C964(void) {
|
||||
D_801C9A78 = 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_o0c", func_8013C964);
|
||||
|
||||
@@ -214,7 +214,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -113,7 +113,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -156,7 +156,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -192,7 +192,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
|
||||
@@ -94,7 +94,7 @@ extern void func_800190AC(void);
|
||||
extern void func_8012956C(void);
|
||||
extern s32 func_8016E95C();
|
||||
extern void func_801754A8(void);
|
||||
extern void func_8013BC7C(void);
|
||||
extern void func_8013BC7C();
|
||||
extern void func_8013BCDC(void);
|
||||
extern void func_801379FC(void);
|
||||
extern void func_8001212C(void);
|
||||
@@ -758,34 +758,484 @@ extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4)
|
||||
/* ==== end §8b carried decl layer ==== */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B568);
|
||||
extern s32 D_80182BFC;
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B598);
|
||||
void func_8013B568(s32 arg0) {
|
||||
D_80182BFC = arg0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B6A0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B7AC);
|
||||
/* size 0x14 */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B7F4);
|
||||
/* func_8013B598 (ov_SC01_077_o0, -O0): fills entry a0 of the 0x1C-stride table at
|
||||
* D_8019BC18 from a 3-halfword source record.
|
||||
*
|
||||
* -O0 CONSTANT-OFFSET FOLD (the quirk that stalled this -O0 cluster in Phase 19):
|
||||
* at -O0 gcc-2.7.2 folds a constant offset into the memory operand ONLY through a
|
||||
* COMPONENT_REF / a real ARRAY_REF on an array-typed DECL:
|
||||
* D_8019BC18[a0].f4 = ... -> lui $at,%hi(sym); addu $at,$at,idx; sh %lo(sym+4)($at)
|
||||
* A CAST base defeats it (NOP_EXPR over the ADDR_EXPR), and so does pointer indexing:
|
||||
* ((S *)D_8019BC18)[a0].f4 -> lui;addiu;addu;sh 4(reg) (+2 ins per store)
|
||||
* a1[1] -> addiu $v1,$a0,2; lhu 0($v1) (+1 ins per load)
|
||||
* So the table extern must carry the FULL struct type (not the pad-only canonical
|
||||
* E_3B7AC), and the source record must be read as ->field, not as a[i]. Casting the
|
||||
* incoming POINTER is harmless (a NOP on a register), only the base decl's type matters.
|
||||
*
|
||||
* Both types are body-scoped (cookbook §100) and the extern is declared inside the body,
|
||||
* matching the established -O0 sibling pattern in src/ov_SC07_010/ov_SC07_010_o0.c
|
||||
* (func_8013B7AC: `extern E_3B7AC D_801A9420[];` in-body). NOTE FOR BANKING: the canonical
|
||||
* sig-layer decl `extern E_3B7AC D_8019BC18[];` (f0 + pad only) CANNOT be used here — it has
|
||||
* no f4/f6/f8/fC members. The in-body decl below must be the one that survives; do not also
|
||||
* emit a file-scope E_3B7AC decl for D_8019BC18 (conflicting types).
|
||||
*
|
||||
* 66/66 instructions byte-identical (match_one --o0).
|
||||
*/
|
||||
void func_8013B598(s32 a0, u16 *a1) {
|
||||
typedef struct { u16 f0; u16 f2; u16 f4; } Src_8013B598;
|
||||
typedef struct { s32 f0; u16 f4; u16 f6; u16 f8; u16 fA; s32 fC; u8 pad[0xC]; } Spr_8013B598;
|
||||
extern Spr_8013B598 D_8019BC18[];
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013B83C);
|
||||
D_8019BC18[a0].f0 = 1;
|
||||
D_8019BC18[a0].f4 = ((Src_8013B598 *)a1)->f0;
|
||||
D_8019BC18[a0].f6 = ((Src_8013B598 *)a1)->f2;
|
||||
D_8019BC18[a0].f8 = ((Src_8013B598 *)a1)->f4;
|
||||
D_8019BC18[a0].fC = 0x100;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013BC7C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013BCDC);
|
||||
/* size 0x14 */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013BD34);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013BD74);
|
||||
void func_8013B6A0(s32 idx, u16 *src, s32 val)
|
||||
{
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[0xC];
|
||||
} Ent_8013B6A0;
|
||||
typedef struct {
|
||||
u16 f0;
|
||||
u16 f2;
|
||||
u16 f4;
|
||||
} Src_8013B6A0;
|
||||
extern Ent_8013B6A0 D_8019BC18[];
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C08C);
|
||||
D_8019BC18[idx].f0 = 1;
|
||||
D_8019BC18[idx].f4 = ((Src_8013B6A0 *)src)->f0;
|
||||
D_8019BC18[idx].f6 = ((Src_8013B6A0 *)src)->f2;
|
||||
D_8019BC18[idx].f8 = ((Src_8013B6A0 *)src)->f4;
|
||||
D_8019BC18[idx].fC = val;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C0F8);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C360);
|
||||
/* size 0x14 */
|
||||
/* sizeof 0x1C stride */
|
||||
extern E_3B7AC D_8019BC18[];
|
||||
void func_8013B7AC(int a0) { D_8019BC18[a0].f0 = 0; }
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C414);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C938);
|
||||
extern s32 D_8019BD34;
|
||||
|
||||
|
||||
void func_8013B7F4(s32 a0, s32 a1) {
|
||||
func_8013B83C(a0, a1, D_8019BD34);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_8019BCD0;
|
||||
extern s32 D_8019BD34;
|
||||
/* size 0x14 */
|
||||
|
||||
void func_8013B83C(s32 a0, s32 a1, s32 a2) {
|
||||
typedef struct {
|
||||
s32 f0;
|
||||
u16 f4;
|
||||
u16 f6;
|
||||
u16 f8;
|
||||
u16 fA;
|
||||
s32 fC;
|
||||
u8 pad[8];
|
||||
s32 f18;
|
||||
} Ent_8013B83C; /* sizeof 0x1C */
|
||||
extern Ent_8013B83C D_801DAA08_e[] __asm__("D_8019BC18");
|
||||
extern s32 D_8019BCB4;
|
||||
extern s32 D_8019BCB8;
|
||||
extern s32 D_8019BCBC;
|
||||
extern s32 D_8019BCE0;
|
||||
extern s32 D_8019BD30;
|
||||
extern s32 D_8019BD38;
|
||||
extern s16 D_800B9A0E;
|
||||
extern void func_80052D90(s32 a0, void *a1);
|
||||
extern void func_8013C08C(void*, void*);
|
||||
s32 i;
|
||||
|
||||
D_8019BCD0 = 0;
|
||||
D_8019BCBC = 0;
|
||||
D_8019BCB8 = 0;
|
||||
D_8019BCB4 = 0;
|
||||
func_80052D90(0, &D_8019BCE0);
|
||||
if (a0 == 0) {
|
||||
return;
|
||||
}
|
||||
D_8019BD30 = a2 + 500;
|
||||
D_8019BD34 = a2;
|
||||
for (i = 0; i < 4; i++) {
|
||||
D_801DAA08_e[i].f0 = 0;
|
||||
D_801DAA08_e[i].f4 = D_801DAA08_e[i].f6 = D_801DAA08_e[i].f8 = 0x6000;
|
||||
D_801DAA08_e[i].fC = 0x100;
|
||||
D_801DAA08_e[i].f18 = 0;
|
||||
}
|
||||
switch (*(u8 *)a0) {
|
||||
case 0x42:
|
||||
if (D_800B9A0E == 0) {
|
||||
func_8013BD74(&D_8019BCD0, a0);
|
||||
} else {
|
||||
func_8013BD74(&D_8019BCD0, a1);
|
||||
}
|
||||
D_8019BD38 = 0;
|
||||
break;
|
||||
case 0x43:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 1;
|
||||
break;
|
||||
case 0x44:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 2;
|
||||
break;
|
||||
case 0x45:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 3;
|
||||
break;
|
||||
case 0x46:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 4;
|
||||
break;
|
||||
case 0x47:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 5;
|
||||
break;
|
||||
case 0x48:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 6;
|
||||
break;
|
||||
case 0x49:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 9;
|
||||
break;
|
||||
case 0x4A:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 0xC;
|
||||
break;
|
||||
case 0x4B:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 0xD;
|
||||
break;
|
||||
case 0x4C:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 0xE;
|
||||
break;
|
||||
case 0x4D:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 0xF;
|
||||
break;
|
||||
case 0x4E:
|
||||
((void (*)(void *, s32))func_8013C08C)(&D_8019BCD0, a0);
|
||||
D_8019BD38 = 0x10;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void (*D_80182460[])(void *);
|
||||
|
||||
void func_8013BC7C(void *arg0) {
|
||||
D_80182460[((S_8013BC7C *)arg0)->f68](arg0);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_80182BFC;
|
||||
/* size 0x14 */
|
||||
|
||||
/* func_8013BCDC (ov_SC01_077_o0, -O0): guarded indirect call through D_80182BFC.
|
||||
* D_80182BFC is declared `extern s32` in the TU (canonical-sig layer) and holds a
|
||||
* function pointer; read it as an s32, test non-null, cast to fn-ptr and call.
|
||||
* Frame residual: target frame is 0x30 (saves $ra/$fp/$s0 at 0x28/0x24/0x20) — 16
|
||||
* bytes of var_size above the minimal 0x20. At -O0 (no DCE) an unused 16-byte local
|
||||
* reserves exactly that var region (cookbook §42 lever 3, frame-pad induction) with
|
||||
* zero body instructions. 22/22 byte-identical via rtu_match. */
|
||||
void func_8013BCDC(void) {
|
||||
s32 pad[4];
|
||||
if (D_80182BFC != 0) {
|
||||
((void (*)(void))D_80182BFC)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_8019BCD0;
|
||||
|
||||
void func_8013BD34(s32 a0) {
|
||||
func_8013BD74(&D_8019BCD0, a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s16 D_8019BBD8;
|
||||
extern s16 D_8019BBDA;
|
||||
extern s16 D_8019BBDC;
|
||||
extern s16 D_8019BBDE;
|
||||
|
||||
void func_8013BD74(void *a0, s32 a1) {
|
||||
/* §100 draft-LOCAL types: file-scope typedefs are NOT carried by extract_unit/remap_hseq, so a
|
||||
file-scope E_13BD74 banks the exemplar and then fails every sibling with `E_13BD74'
|
||||
undeclared (the §94 type-carry class, measured on ov_SC01_000). Block scope travels with the
|
||||
body and is byte-neutral (a type emits no code). */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13BD74;
|
||||
typedef struct {
|
||||
u8 pad0[3];
|
||||
u8 code;
|
||||
s32 f4;
|
||||
s32 f8;
|
||||
} P_13BD74;
|
||||
s32 *q;
|
||||
s32 *p;
|
||||
s32 i;
|
||||
s32 unused0;
|
||||
s32 unused1;
|
||||
P_13BD74 *e;
|
||||
P_13BD74 *end;
|
||||
s32 unused2;
|
||||
s32 base;
|
||||
s32 unused3;
|
||||
|
||||
D_8019BBD8 = -0xA0;
|
||||
D_8019BBDA = -0x78;
|
||||
D_8019BBDC = 0x140;
|
||||
D_8019BBDE = 0xF0;
|
||||
((E_13BD74 *)a0)->f8 = (void *)a1;
|
||||
((E_13BD74 *)a0)->fC = (void *)(a1 + 8);
|
||||
base = a1 + 0x4008;
|
||||
if (((u8 *)a1)[4] == 0) {
|
||||
p = (s32 *)((E_13BD74 *)a0)->fC;
|
||||
for (i = 0; i < 0x1000; i++) {
|
||||
if (*p != 0) {
|
||||
*p += (s32)((E_13BD74 *)a0)->fC;
|
||||
q = (s32 *)*p;
|
||||
q[0] += (s32)q;
|
||||
q[5] += (s32)q;
|
||||
e = (P_13BD74 *)q[5];
|
||||
q[6] = q[6] * 12 + q[5];
|
||||
end = (P_13BD74 *)q[6];
|
||||
while (e < end) {
|
||||
switch (e->code) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
*(s32 *)e = (*(s32 *)e & 0xFFFFFF) + base;
|
||||
break;
|
||||
}
|
||||
e++;
|
||||
}
|
||||
}
|
||||
p++;
|
||||
}
|
||||
((u8 *)a1)[4] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_8013C0F8(s32 a0);
|
||||
|
||||
void func_8013C08C(void *a0, void *a1) {
|
||||
/* SS100 DRAFT-LOCAL type: only this function uses E_13C08C, so it lives in the BODY, not at
|
||||
* file scope. At file scope extract_unit's preceding-decl backscan cannot carry it: the scan
|
||||
* walks back over extern/comment/blank/typedef lines, and a MULTI-LINE typedef presents its
|
||||
* CLOSING line first, which matches none of those prefixes. Every templated sibling therefore
|
||||
* got the body without the type and the family swept 0/137 (SS94: a family 0/N is a type-carry
|
||||
* failure until proven otherwise). Declared here, it is part of the unit by construction.
|
||||
* NB no brace characters in this comment on purpose - extract_unit's forward brace-scan does
|
||||
* not strip comments, so a brace in a comment truncates the extracted unit. */
|
||||
typedef struct {
|
||||
u8 pad0[8];
|
||||
void *f8;
|
||||
void *fC;
|
||||
} E_13C08C;
|
||||
|
||||
void *p = a1;
|
||||
|
||||
((E_13C08C *)a0)->f8 = a1;
|
||||
((E_13C08C *)a0)->fC = (u8 *)p + 0x14;
|
||||
func_8013C0F8((s32)a1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* size 0x14 */
|
||||
|
||||
/* size 0xc */
|
||||
|
||||
void func_8013C0F8(int param_1) {
|
||||
int iVar1;
|
||||
int iVar2;
|
||||
unsigned int local_18;
|
||||
unsigned int local_14;
|
||||
Bar *local_10;
|
||||
Foo *local_c;
|
||||
|
||||
iVar1 = param_1 + 0x14;
|
||||
if (*(char *)(param_1 + 4) == '\0') {
|
||||
iVar2 = iVar1 + *(int *)(param_1 + 0xc);
|
||||
*(int *)(param_1 + 0xc) = iVar2;
|
||||
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + iVar1;
|
||||
local_c = (Foo *)iVar1;
|
||||
for (local_18 = 0; local_18 < *(unsigned int *)(param_1 + 8); local_18++, local_c++) {
|
||||
local_c->field10 = local_c->field10 + iVar1;
|
||||
local_10 = (Bar *)local_c->field10;
|
||||
for (local_14 = 0; local_14 < local_c->count; local_14++, local_10++) {
|
||||
switch (local_10->tag) {
|
||||
case 0x24:
|
||||
case 0x2c:
|
||||
case 0x34:
|
||||
case 0x3c:
|
||||
*(unsigned int *)local_10 = (*(unsigned int *)local_10 & 0xffffff) + iVar2;
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2e:
|
||||
case 0x36:
|
||||
case 0x3e:
|
||||
*(unsigned int *)local_10 = (*(unsigned int *)local_10 & 0xffffff) + iVar2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*(unsigned char *)(param_1 + 4) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void func_8013C360(s32 a0) {
|
||||
s32 *p;
|
||||
u32 i;
|
||||
p = (s32 *)(a0 + 0x10);
|
||||
for (i = 0; i < *(u32 *)(a0 + 8); i++) {
|
||||
*(s32 *)(*(s32 *)p) = *(s32 *)((s32)p + 4);
|
||||
p = (s32 *)((s32)p + 0xC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 0xC */
|
||||
|
||||
void func_8013C414(s32 param_1, s32 param_2)
|
||||
{
|
||||
s32 base10; /* 0x00 */
|
||||
s32 p; /* 0x04 */
|
||||
s32 q; /* 0x08 */
|
||||
s32 base4008; /* 0x0C */
|
||||
s32 lo; /* 0x10 */
|
||||
u32 i; /* 0x14 */
|
||||
s32 unused; /* 0x18 */
|
||||
s32 base8; /* 0x1C */
|
||||
T3Reloc *r; /* 0x20 */
|
||||
T3Reloc *s; /* 0x24 */
|
||||
|
||||
if (*(s32 *)(param_2 + 4) == 0) {
|
||||
base10 = param_2 + 0x10;
|
||||
base4008 = param_1 + 0x4008;
|
||||
lo = *(s32 *)(param_2 + 0xC) + base10;
|
||||
base8 = param_1 + 8;
|
||||
p = base10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)p = *(s32 *)p + base8;
|
||||
if (*(s32 *)(p + 4) != 0) {
|
||||
*(s32 *)(p + 4) = *(s32 *)(p + 4) + base10;
|
||||
q = *(s32 *)(p + 4);
|
||||
*(s32 *)q = *(s32 *)q + q;
|
||||
*(s32 *)(q + 0x14) = *(s32 *)(q + 0x14) + q;
|
||||
r = (T3Reloc *)*(s32 *)(q + 0x14);
|
||||
*(s32 *)(q + 0x18) = *(s32 *)(q + 0x18) * 0xC + *(s32 *)(q + 0x14);
|
||||
s = (T3Reloc *)*(s32 *)(q + 0x18);
|
||||
while (r < s) {
|
||||
switch (r->type) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
}
|
||||
r++;
|
||||
}
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
*(s32 *)(param_2 + 4) = 1;
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
if (*(s32 *)(p + 8) == 0) {
|
||||
*(s32 *)(p + 8) = *(s32 *)(*(s32 *)p);
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
} else {
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)(*(s32 *)p) = *(s32 *)(p + 8);
|
||||
p = p + 0xC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_8019BCD0;
|
||||
|
||||
|
||||
void func_8013C938(void) {
|
||||
D_8019BCD0 = 1;
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_8019BCD0;
|
||||
|
||||
void func_8013C964(void) {
|
||||
D_8019BCD0 = 0;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107_o0c", func_8013C964);
|
||||
|
||||
Reference in New Issue
Block a user