phase12: match func_80046198 (713 bodies / 722 regions)
This commit is contained in:
+831
-832
File diff suppressed because it is too large
Load Diff
@@ -239,6 +239,7 @@
|
||||
0x80045540 0x80045578 src/func_80045540.c
|
||||
0x80045F1C 0x80045FD8 src/func_80045F1C.c
|
||||
0x800460AC 0x800460D4 src/func_800460AC.c
|
||||
0x80046198 0x800461E8 src/func_80046198.c
|
||||
0x80047468 0x800474B0 src/func_80047468.c gp=-D_80121BFC
|
||||
0x800474B0 0x80047508 src/func_800474B0.c
|
||||
0x800475CC 0x80047640 src/func_800475CC.c
|
||||
|
||||
|
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* func_80046198 — 80 bytes at 0x80046198..0x800461E8
|
||||
*
|
||||
* Reads the byte at object+1. If its low seven bits are nonzero, calls
|
||||
* func_8008FCD8 and then writes back only the high bit; otherwise it returns
|
||||
* without the call or writeback.
|
||||
*
|
||||
* The separate v0/a1 temporaries are byte-required: the target loads the byte
|
||||
* into v0, masks it into a1, and branches on a1. The explicit early return is
|
||||
* also required so the zero path branches directly to the epilogue instead of
|
||||
* falling through the writeback block.
|
||||
*
|
||||
* LIMITS: the object byte and callee behavior are not inferred. The +1 offset,
|
||||
* masks 0x7f/0x80, call ordering, early-return path, s0 save, and epilogue are
|
||||
* byte evidence.
|
||||
*/
|
||||
|
||||
extern void func_8008FCD8(void);
|
||||
|
||||
void func_80046198(void *unused, unsigned char *p)
|
||||
{
|
||||
register unsigned char *s0 __asm__("$16") = p;
|
||||
register unsigned int v0 __asm__("$2");
|
||||
register unsigned int a1 __asm__("$5");
|
||||
|
||||
v0 = s0[1];
|
||||
a1 = v0 & 0x7f;
|
||||
if (a1 == 0)
|
||||
return;
|
||||
func_8008FCD8();
|
||||
s0[1] &= 0x80;
|
||||
}
|
||||
Reference in New Issue
Block a user