Files
BFM-decomp/src/800b_5.c
T
Drew T d7142f224d feat(decomp): main lane n02 — 3 banked
One clean whole-EXE rebuild verified the batch (gate_main), and main re-checked
BYTE-IDENTICAL against config/check.us.sha before anything was credited.

  FGO_01_OBJ_CC
  func_800331D4
  func_8005D33C
2026-08-26 12:01:09 -06:00

985 lines
29 KiB
C

#include "common.h"
/* func_8004978C (0x8004978C): tail FRAGMENT of the RotMatrix family dispatcher, not a
* standalone callable: it loads r->vx, folds |vx|&0xFFF through D_8006DF1C, and TAIL-JUMPS
* into FGO_01_OBJ_64 with sin in $t3 (sll/sra 16 pair on the register-held word — §172b-1)
* and cos in $t0 ($t9>>16); the negative-vx arm negates the sine. No jal anywhere, no $ra
* save, args staged in the j's own delay slot — a shape gcc-2.7.2 -O2 C cannot emit (§265:
* bgez whose OR-path falls through into a j chain). Banked verbatim per the FGO_01_OBJ_160
* idiom already gate-proven in this TU: tab-separated .ent/.end keeps maspsx's fresh
* ".set noreorder", immediates DECIMAL (maspsx int()-parses hex and crashes).
*/
__asm__(".text\n.align 2\n.globl func_8004978C\n.ent\tfunc_8004978C\n"
"func_8004978C:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 0($a0)\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L800497D0\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L800497A8\n"
"andi $t7, $t7, 4095\n"
".L800497A8:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t8, $t8, 16\n"
"negu $t3, $t8\n"
"j FGO_01_OBJ_64\n"
"sra $t0, $t9, 16\n"
".L800497D0:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t3, $t8, 16\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tfunc_8004978C\n");
/* FGO_01_OBJ_64 (0x800497F0) is NOT a callable function: it is the second code FRAGMENT of one
* larger routine (func_8004978C -> FGO_01_OBJ_64 -> FGO_01_OBJ_CC -> FGO_01_OBJ_160). It is
* entered by `j FGO_01_OBJ_64` with live values in $t registers and exits by `j FGO_01_OBJ_CC`
* (one arm) or by FALLING THROUGH into FGO_01_OBJ_CC (the other), handing on $t4/$t5/$t6/$t1 --
* none of which any C calling convention expresses, and it has ZERO trailing `jr $ra`, so per
* §179-C every C shape gains a phantom epilogue (+2). Banked as a file-scope inline asm blob per
* the SYS_OBJ_1DC0 idiom (src/800c.c), exactly like the FGO_01_OBJ_160 blob below in this TU:
* literal tab-separated ".ent\t"/".end\t" so maspsx emits a fresh ".set\tnoreorder" and keeps
* every delay-slot instruction in place; DECIMAL immediates (maspsx int()-parses offsets);
* single-% %hi/%lo (file-scope asm); .L local labels; no trailing pad -- FGO_01_OBJ_CC follows
* at +0x68 exactly. Recovered semantics: w = (s16)obj->[0x2]; idx = (w >= 0 ? w : -w) & 0xFFF;
* e = D_8006DF1C[idx]; outputs $t1 = e >> 16 (high halfword) and $t6/$t4 = -(s16)e (negated low
* halfword) -- a +/-sin/cos table lookup feeding the matrix build. Body transcribed 1:1 from
* asm/nonmatchings/800b_5/FGO_01_OBJ_64.s.
*/
__asm__(".text\n.align 2\n.globl FGO_01_OBJ_64\n.ent\tFGO_01_OBJ_64\n"
"FGO_01_OBJ_64:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 2($a0)\n"
"nop\n"
"bgez $t7, .L80049834\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L8004980C\n"
"andi $t7, $t7, 4095\n"
".L8004980C:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t4, $t9, 16\n"
"sra $t4, $t4, 16\n"
"negu $t6, $t4\n"
"j FGO_01_OBJ_CC\n"
"sra $t1, $t9, 16\n"
".L80049834:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t4, $t6\n"
"sra $t1, $t9, 16\n"
".set\treorder\n.end\tFGO_01_OBJ_64\n");
__asm__(".text\n.align 2\n.globl FGO_01_OBJ_CC\n.ent\tFGO_01_OBJ_CC\n"
"FGO_01_OBJ_CC:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t1, $t3\n"
"lh $t7, 4($a0)\n"
"sh $t6, 4($a1)\n"
"mflo $t8\n"
"negu $t9, $t8\n"
"sra $t6, $t9, 12\n"
"multu $t1, $t0\n"
"sh $t6, 10($a1)\n"
"bgez $t7, .L800498C0\n"
"andi $t9, $t7, 4095\n"
"mflo $t8\n"
"sra $t6, $t8, 12\n"
"sh $t6, 16($a1)\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049898\n"
"andi $t7, $t7, 4095\n"
".L80049898:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t8, $t8, 16\n"
"negu $t5, $t8\n"
"j FGO_01_OBJ_160\n"
"sra $t2, $t9, 16\n"
".L800498C0:\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 16($a1)\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t5, $t8, 16\n"
"sra $t2, $t9, 16\n"
".set\treorder\n.end\tFGO_01_OBJ_CC\n");
/* FGO_01_OBJ_160 (0x800498EC) is NOT a callable function: it is the tail FRAGMENT of one
* larger routine. FGO_01_OBJ_CC (0x80049858) computes $t2/$t5 from D_8006DF1C and tail-jumps
* straight into it (`j FGO_01_OBJ_160`, no jal anywhere in asm/); the live inputs arrive in
* $t0-$t5 with the destination pointer in $a1 -- none of which any C calling convention
* expresses. Banked as a file-scope inline asm blob per the SYS_OBJ_1DC0 idiom (src/800c.c):
* the literal ".ent\t"/".end\t" pair (tab-separated) makes maspsx emit a fresh
* ".set\tnoreorder", keeping every hand-placed delay-slot nop in place; store offsets are
* DECIMAL because maspsx int()-parses them and a hex "0x0($a1)" crashes it
* ("invalid literal for int() with base 10") -- the exact defect that made the previous
* attempt's whole-binary gate reject a COMPILE error, not a byte mismatch. Body transcribed
* 1:1 from asm/nonmatchings/800b_5/FGO_01_OBJ_160.s (oracle MATCH 76/76; the region contains
* ZERO relocations -- no jal/j/lui -- so relocation masking hides nothing). The trailing
* __asm__(".word 0") reproduces the padding nop at 0x80049A18 before RotMatrixYXZ
* (0x80049A1C), matching the banked FGO_02/03_OBJ_160 siblings whose own .s tails carry the
* same post-endlabel pad (0x80049CA8 / 0x80049F38) and whose blobs use this identical form,
* gate-proven twice in this very TU.
*/
__asm__(".text\n.align 2\n.globl FGO_01_OBJ_160\n.ent\tFGO_01_OBJ_160\n"
"FGO_01_OBJ_160:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t2, $t1\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 0($a1)\n"
"multu $t5, $t1\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"negu $t6, $t7\n"
"sra $t7, $t6, 12\n"
"multu $t2, $t4\n"
"sh $t7, 2($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t3\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t5, $t0\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"subu $t7, $t9, $t6\n"
"multu $t8, $t0\n"
"sh $t7, 6($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t7, $t6, 12\n"
"nop\n"
"multu $t5, $t3\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"addu $t6, $t9, $t7\n"
"multu $t5, $t4\n"
"sh $t6, 12($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t3\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t2, $t0\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"addu $t7, $t9, $t6\n"
"multu $t8, $t0\n"
"sh $t7, 8($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t7, $t6, 12\n"
"nop\n"
"multu $t2, $t3\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"subu $t6, $t9, $t7\n"
"sh $t6, 14($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_01_OBJ_160\n");
__asm__(".word 0");
__asm__(".text\n.align 2\n.globl RotMatrixYXZ\n.ent\tRotMatrixYXZ\n"
"RotMatrixYXZ:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 0($a0)\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L80049A60\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049A38\n"
"andi $t7, $t7, 4095\n"
".L80049A38:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t3, $t6\n"
"j FGO_02_OBJ_68\n"
"sra $t0, $t9, 16\n"
".L80049A60:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t3, $t8, 16\n"
"negu $t6, $t3\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tRotMatrixYXZ\n");
__asm__(".text\n.align 2\n.globl FGO_02_OBJ_68\n.ent\tFGO_02_OBJ_68\n"
"FGO_02_OBJ_68:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 2($a0)\n"
"nop\n"
"bgez $t7, .L80049AC8\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049AA0\n"
"andi $t7, $t7, 4095\n"
".L80049AA0:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t8, $t8, 16\n"
"negu $t4, $t8\n"
"j FGO_02_OBJ_CC\n"
"sra $t1, $t9, 16\n"
".L80049AC8:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t4, $t8, 16\n"
"sra $t1, $t9, 16\n"
".set\treorder\n.end\tFGO_02_OBJ_68\n");
__asm__(".text\n.align 2\n.globl FGO_02_OBJ_CC\n.ent\tFGO_02_OBJ_CC\n"
"FGO_02_OBJ_CC:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t4, $t0\n"
"lh $t7, 4($a0)\n"
"sh $t6, 10($a1)\n"
"mflo $t8\n"
"sra $t6, $t8, 12\n"
"nop\n"
"multu $t1, $t0\n"
"sh $t6, 4($a1)\n"
"bgez $t7, 1f\n"
"andi $t9, $t7, 0xFFF\n"
"mflo $t8\n"
"sra $t6, $t8, 12\n"
"sh $t6, 16($a1)\n"
"negu $t7, $t7\n"
"bgez $t7, 2f\n"
"andi $t7, $t7, 0xFFF\n"
"2:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t8, $t8, 16\n"
"negu $t5, $t8\n"
"j FGO_02_OBJ_160\n"
"sra $t2, $t9, 16\n"
"1:\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 16($a1)\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t5, $t8, 16\n"
"sra $t2, $t9, 16\n"
".set\treorder\n.end\tFGO_02_OBJ_CC\n");
__asm__(".text\n.align 2\n.globl FGO_02_OBJ_160\n.ent\tFGO_02_OBJ_160\n"
"FGO_02_OBJ_160:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t5, $t0\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 6($a1)\n"
"multu $t2, $t0\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t4, $t3\n"
"sh $t6, 8($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t5\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t1, $t2\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"addu $t7, $t9, $t6\n"
"multu $t1, $t5\n"
"sh $t7, 0($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"negu $t7, $t9\n"
"multu $t8, $t2\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"addu $t6, $t7, $t9\n"
"multu $t1, $t3\n"
"sh $t6, 2($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t2\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t4, $t5\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"addu $t7, $t9, $t6\n"
"multu $t4, $t2\n"
"sh $t7, 14($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"negu $t7, $t9\n"
"multu $t8, $t5\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"addu $t6, $t7, $t9\n"
"sh $t6, 12($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_02_OBJ_160\n");
__asm__(".word 0");
/* func_80049CAC (0x80049CAC) is NOT independently C-compilable, for the same reason as
* FGO_01_OBJ_160 below: it is the HEAD FRAGMENT of one larger routine that this project's
* tooling split into four addressable chunks -- func_80049CAC (x row-setup) -> FGO_03_OBJ_64
* (y) -> FGO_03_OBJ_CC (z, first half) -> FGO_03_OBJ_160 (z, second half, banked as a blob
* beneath). Every exit of the head is a bare "j FGO_03_OBJ_64" (or fallthrough into it --
* FGO_03_OBJ_64's own address 0x80049D10 IS this function's fall-through address) with NO
* epilogue, and the fragments share ONE register allocation ($v0 = m lives across all four;
* $t3/$t0 carry +-sin(x)/cos(x) into the next fragment). gcc-2.7.2 has no sibcall/tail-merge
* (cookbook L17430), and empirically (src/800c.c, SYS_OBJ trampoline) cc1 -O2 ALWAYS
* synthesizes a trailing return/jump for a C function and a real cross-function jal+return
* grows the frame -- the target here has a ZERO-byte frame (no sw $ra, no addiu $sp) and no
* jr $ra anywhere, so no C body (the previous attempt's `return FGO_03_OBJ_64(...)` shape)
* can ever reproduce these 25 instructions. Banked as a file-scope inline asm blob per the
* SYS_OBJ_1DC0/FGO_n_OBJ_160 idiom already proven in this TU: the literal ".ent\t"/".end\t"
* pair (tab-separated) makes maspsx emit a fresh ".set\tnoreorder", keeping every
* hand-placed delay-slot instruction in place; all displacement/immediate offsets are
* DECIMAL because maspsx int()-parses operands and a hex "0x0($a0)" crashes it. Body
* transcribed 1:1 from asm/nonmatchings/800b_5/func_80049CAC.s (25/25 instructions, in
* order, including both delay-slot fills and the branch-to-next-instruction masked-andi
* idiom); the only relocations are `j FGO_03_OBJ_64` and the %hi/%lo pair on D_8006DF1C,
* both resolved exactly as the target's own relocation lines name them. No trailing pad:
* FGO_03_OBJ_64 abuts this function at 0x80049D10 with no gap (unlike the *_OBJ_160 blobs,
* whose .word 0 pads precede a differently-aligned neighbour).
*/
__asm__(".text\n.align 2\n.globl func_80049CAC\n.ent\tfunc_80049CAC\n"
"func_80049CAC:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 0($a0)\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L80049CF0\n"
"andi $t9, $t7, 0xFFF\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049CC8\n"
"andi $t7, $t7, 0xFFF\n"
".L80049CC8:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t3, $t6\n"
"j FGO_03_OBJ_64\n"
"sra $t0, $t9, 16\n"
".L80049CF0:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t3, $t8, 16\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tfunc_80049CAC\n");
__asm__(".text\n.align 2\n.globl FGO_03_OBJ_64\n.ent\tFGO_03_OBJ_64\n"
"FGO_03_OBJ_64:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t7, 2($a0)\n"
"nop\n"
"bgez $t7, .L80049D54\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049D2C\n"
"andi $t7, $t7, 4095\n"
".L80049D2C:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t4, $t6\n"
"j FGO_03_OBJ_CC\n"
"sra $t1, $t9, 16\n"
".L80049D54:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t4, $t6, 16\n"
"negu $t6, $t4\n"
"sra $t1, $t9, 16\n"
".set\treorder\n.end\tFGO_03_OBJ_64\n");
__asm__(".text\n.align 2\n.globl FGO_03_OBJ_CC\n.ent\tFGO_03_OBJ_CC\n"
"FGO_03_OBJ_CC:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t3, $t1\n"
"lh $t7, 4($a0)\n"
"sh $t6, 12($a1)\n"
"mflo $t8\n"
"sra $t6, $t8, 12\n"
"nop\n"
"multu $t0, $t1\n"
"sh $t6, 14($a1)\n"
"bgez $t7, .L80049DE0\n"
"andi $t9, $t7, 0xFFF\n"
"mflo $t8\n"
"sra $t6, $t8, 12\n"
"sh $t6, 16($a1)\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049DB8\n"
"andi $t7, $t7, 0xFFF\n"
".L80049DB8:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t8, $t8, 16\n"
"negu $t5, $t8\n"
"j FGO_03_OBJ_160\n"
"sra $t2, $t9, 16\n"
".L80049DE0:\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 16($a1)\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t5, $t8, 16\n"
"sra $t2, $t9, 16\n"
".set\treorder\n.end\tFGO_03_OBJ_CC\n");
__asm__(".text\n.align 2\n.globl FGO_03_OBJ_160\n.ent\tFGO_03_OBJ_160\n"
"FGO_03_OBJ_160:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"multu $t1, $t2\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"sh $t6, 0($a1)\n"
"multu $t5, $t1\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t3, $t4\n"
"sh $t6, 6($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t2\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t5, $t0\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"subu $t7, $t6, $t9\n"
"multu $t0, $t2\n"
"sh $t7, 2($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t7, $t6, 12\n"
"nop\n"
"multu $t8, $t5\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"addu $t6, $t9, $t7\n"
"multu $t4, $t0\n"
"sh $t6, 8($a1)\n"
"nop\n"
"mflo $t7\n"
"sra $t8, $t7, 12\n"
"nop\n"
"multu $t8, $t2\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t6, $t7, 12\n"
"nop\n"
"multu $t3, $t5\n"
"nop\n"
"nop\n"
"mflo $t7\n"
"sra $t9, $t7, 12\n"
"addu $t7, $t6, $t9\n"
"multu $t3, $t2\n"
"sh $t7, 4($a1)\n"
"nop\n"
"mflo $t6\n"
"sra $t7, $t6, 12\n"
"nop\n"
"multu $t8, $t5\n"
"nop\n"
"nop\n"
"mflo $t6\n"
"sra $t9, $t6, 12\n"
"subu $t6, $t9, $t7\n"
"sh $t6, 10($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_03_OBJ_160\n");
__asm__(".word 0");
__asm__(".text\n.align 2\n.globl RotMatrixX\n.ent\tRotMatrixX\n"
"RotMatrixX:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"addu $t7, $a0, $zero\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L80049F80\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L80049F58\n"
"andi $t7, $t7, 4095\n"
".L80049F58:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t1, $t6\n"
"j FGO_04_OBJ_64\n"
"sra $t0, $t9, 16\n"
".L80049F80:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t1, $t8, 16\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tRotMatrixX\n");
__asm__(".text\n.align 2\n.globl FGO_04_OBJ_64\n.ent\tFGO_04_OBJ_64\n"
"FGO_04_OBJ_64:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t2, 6($a1)\n"
"lh $t5, 12($a1)\n"
"multu $t0, $t2\n"
"lh $t3, 8($a1)\n"
"lh $t6, 14($a1)\n"
"mflo $t8\n"
"lh $t4, 10($a1)\n"
"lh $t7, 16($a1)\n"
"multu $t1, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t3\n"
"sh $t8, 6($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t4\n"
"sh $t8, 8($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t2\n"
"sh $t8, 10($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t3\n"
"sh $t8, 12($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t4\n"
"sh $t8, 14($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"sh $t8, 16($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_04_OBJ_64\n");
__asm__(".word 0");
__asm__(".word 0");
__asm__(".text\n.align 2\n.globl RotMatrixY\n.ent\tRotMatrixY\n"
"RotMatrixY:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"addu $t7, $a0, $zero\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L8004A11C\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L8004A0F8\n"
"andi $t7, $t7, 4095\n"
".L8004A0F8:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t1, $t6, 16\n"
"j FGO_05_OBJ_64\n"
"sra $t0, $t9, 16\n"
".L8004A11C:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t7, $t8, 16\n"
"negu $t1, $t7\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tRotMatrixY\n");
__asm__(".text\n.align 2\n.globl FGO_05_OBJ_64\n.ent\tFGO_05_OBJ_64\n"
"FGO_05_OBJ_64:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t2, 0($a1)\n"
"lh $t5, 12($a1)\n"
"multu $t0, $t2\n"
"lh $t3, 2($a1)\n"
"lh $t6, 14($a1)\n"
"mflo $t8\n"
"lh $t4, 4($a1)\n"
"lh $t7, 16($a1)\n"
"multu $t1, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t3\n"
"sh $t8, 0($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t4\n"
"sh $t8, 2($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t2\n"
"sh $t8, 4($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t3\n"
"sh $t8, 12($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t4\n"
"sh $t8, 14($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"sh $t8, 16($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_05_OBJ_64\n");
__asm__(".word 0");
__asm__(".word 0");
__asm__(".text\n.align 2\n.globl RotMatrixZ\n.ent\tRotMatrixZ\n"
"RotMatrixZ:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"addu $t7, $a0, $zero\n"
"addu $v0, $a1, $zero\n"
"bgez $t7, .L8004A2C0\n"
"andi $t9, $t7, 4095\n"
"negu $t7, $t7\n"
"bgez $t7, .L8004A298\n"
"andi $t7, $t7, 4095\n"
".L8004A298:\n"
"sll $t8, $t7, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t6, $t9, 16\n"
"sra $t6, $t6, 16\n"
"negu $t1, $t6\n"
"j FGO_06_OBJ_64\n"
"sra $t0, $t9, 16\n"
".L8004A2C0:\n"
"sll $t8, $t9, 2\n"
"lui $t9, %hi(D_8006DF1C)\n"
"addu $t9, $t9, $t8\n"
"lw $t9, %lo(D_8006DF1C)($t9)\n"
"nop\n"
"sll $t8, $t9, 16\n"
"sra $t1, $t8, 16\n"
"sra $t0, $t9, 16\n"
".set\treorder\n.end\tRotMatrixZ\n");
__asm__(".text\n.align 2\n.globl FGO_06_OBJ_64\n.ent\tFGO_06_OBJ_64\n"
"FGO_06_OBJ_64:\n.frame $sp,0,$31\n"
".set\tnoreorder\n"
"lh $t2, 0($a1)\n"
"lh $t5, 6($a1)\n"
"multu $t0, $t2\n"
"lh $t3, 2($a1)\n"
"lh $t6, 8($a1)\n"
"mflo $t8\n"
"lh $t4, 4($a1)\n"
"lh $t7, 10($a1)\n"
"multu $t1, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t3\n"
"sh $t8, 0($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t0, $t4\n"
"sh $t8, 2($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t1, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"subu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t2\n"
"sh $t8, 4($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t5\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t3\n"
"sh $t8, 6($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t6\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"multu $t1, $t4\n"
"sh $t8, 8($a1)\n"
"nop\n"
"mflo $t8\n"
"nop\n"
"nop\n"
"multu $t0, $t7\n"
"nop\n"
"nop\n"
"mflo $t9\n"
"addu $t9, $t8, $t9\n"
"sra $t8, $t9, 12\n"
"sh $t8, 10($a1)\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tFGO_06_OBJ_64\n");
__asm__(".word 0");
__asm__(".word 0");