phase12: match func_80023A4C (702 bodies / 711 regions)
This commit is contained in:
+827
-828
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user