phase12: match func_80023A4C (702 bodies / 711 regions)

This commit is contained in:
Christopher Williams
2026-09-25 00:15:58 -04:00
parent c59aa4df29
commit 2de145ffff
3 changed files with 872 additions and 828 deletions
+827 -828
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -92,6 +92,7 @@
0x80023080 0x800230E4 src/func_80023080.c
0x800230E4 0x8002311C src/func_800230E4.c
0x8002311C 0x800231BC src/func_8002311C.c
0x80023A4C 0x80023AB0 src/func_80023A4C.c
0x80024C14 0x80024C34 src/func_80024C14.c
0x80025070 0x800250AC src/func_80025070.c
0x8002515C 0x80025198 src/func_8002515C.c
1 # Code-region registry: one C region per matched function.
92 0x80023080
93 0x800230E4
94 0x8002311C
95 0x80023A4C
96 0x80024C14
97 0x80025070
98 0x8002515C
+44
View File
@@ -0,0 +1,44 @@
/*
* func_80023A4C — 100 bytes at 0x80023A4C..0x80023AB0
*
* Calls func_80010654 twice, passing each selected source field in both argument
* registers. The two results are retained in a two-word local block, then their
* numeric sum is passed to func_800F9204 and written through the output pointer.
* The function itself returns integer zero.
*
* The local array is intentional: the target spills the first result at sp+16
* and the second at sp+20, reloads the first value, adds the second, and uses the
* sum as the final callee argument. The named s0/s1 bindings preserve the original
* object and output-pointer registers through both calls. The final integer return
* supplies the target's `move v0,zero` before the common epilogue.
*
* LIMITS: object field meanings, the two-argument callee ABI, and the final callee
* behavior are not inferred. The field offsets, duplicate argument registers,
* local spill order, sum dataflow, output store, zero return, frame, and epilogue
* are byte evidence.
*/
typedef struct Obj {
int f0;
int f4;
int f8;
} Obj;
extern int func_80010654(int, int);
extern int func_800F9204(int);
int func_80023A4C(Obj *a0, int *a1)
{
register Obj *s0 __asm__("$16") = a0;
register int *s1 __asm__("$17") = a1;
int results[2];
int first;
int next_field;
first = func_80010654(s0->f0, s0->f0);
next_field = s0->f8;
results[0] = first;
results[1] = func_80010654(next_field, next_field);
*s1 = func_800F9204(results[0] + results[1]);
return 0;
}