Skip to content

Instantly share code, notes, and snippets.

@sajattack
Created October 23, 2020 05:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sajattack/55c3f1f9b19f312d16fc3d54c03b7111 to your computer and use it in GitHub Desktop.
Save sajattack/55c3f1f9b19f312d16fc3d54c03b7111 to your computer and use it in GitHub Desktop.
sceVfpu, Sony's static library for the PSP's hardware vector unit
sceVfpuVector2SignFloat:
lwc1 f0,0x0(a1)
mtc1 zero,f1
c.lt f0,f1
nop
bc1f pos_0881A344
lui v1,0x88E
lwc1 f0,-0x4560(v1)
pos_0881A2FC:
swc1 f0,0x0(a0)
pos_0881A300:
lwc1 f0,0x4(a1)
mtc1 zero,f1
c.lt f0,f1
nop
bc1f pos_0881A328
lui a1,0x88E
lwc1 f0,-0x4560(a1)
pos_0881A31C:
swc1 f0,0x4(a0)
pos_0881A320:
jr ra
move v0,a0
pos_0881A328:
c.lt f1,f0
nop
bc1fl pos_0881A320
swc1 f1,0x4(a0)
lui a2,0x88E
j pos_0881A31C
lwc1 f0,-0x455C(a2)
pos_0881A344:
c.lt f1,f0
nop
bc1fl pos_0881A300
swc1 f1,0x0(a0)
lui v1,0x88E
j pos_0881A2FC
lwc1 f0,-0x455C(v1)
sceVfpuVector2SignInt:
lwc1 f0,0x0(a1)
mtc1 zero,f1
c.lt f0,f1
nop
bc1f pos_0881A3B8
li v0,-0x1
pos_0881A378:
sw v0,0x0(a0)
pos_0881A37C:
lwc1 f0,0x4(a1)
mtc1 zero,f1
c.lt f0,f1
nop
bc1f pos_0881A3A0
li v0,-0x1
pos_0881A394:
sw v0,0x4(a0)
pos_0881A398:
jr ra
move v0,a0
pos_0881A3A0:
c.lt f1,f0
nop
bc1fl pos_0881A398
sw zero,0x4(a0)
j pos_0881A394
li v0,0x1
pos_0881A3B8:
c.lt f1,f0
nop
bc1fl pos_0881A37C
sw zero,0x0(a0)
j pos_0881A378
li v0,0x1
sceVfpuVector2Set:
move v0,a0
swc1 f12,0x0(a0)
jr ra
swc1 f13,0x4(a0)
sceVfpuVector2Copy:
lwc1 f1,0x4(a1)
lwc1 f2,0x0(a1)
move v0,a0
swc1 f1,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2PositiveZero:
move v0,a0
sw zero,0x0(a0)
jr ra
sw zero,0x4(a0)
sceVfpuVector2NegativeZero:
lui a1,0x8000
move v0,a0
sw a1,0x4(a0)
jr ra
sw a1,0x0(a0)
sceVfpuVector2Ceil:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
vf2id.p C000,C000,0
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Trunc:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
vf2iz.p C000,C000,0
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Round:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
vf2in.p C000,C000,0
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Floor:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
vf2iu.p C000,C000,0
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2FromIVector:
lwc1 f1,0x4(a1)
lwc1 f2,0x0(a1)
move v0,a0
cvt.s.w f3,f1
cvt.s.w f0,f2
swc1 f3,0x4(a0)
jr ra
swc1 f0,0x0(a0)
sceVfpuVector2Add:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
lwc1 f5,0x0(a1)
lwc1 f0,0x0(a2)
add.s f4,f3,f1
move v0,a0
add.s f2,f5,f0
swc1 f4,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Sub:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
lwc1 f5,0x0(a1)
lwc1 f0,0x0(a2)
sub.s f4,f3,f1
move v0,a0
sub.s f2,f5,f0
swc1 f4,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Mul:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
lwc1 f5,0x0(a1)
lwc1 f0,0x0(a2)
mul.s f4,f3,f1
move v0,a0
mul.s f2,f5,f0
swc1 f4,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Div:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
lwc1 f5,0x0(a1)
lwc1 f0,0x0(a2)
div.s f4,f3,f1
move v0,a0
div.s f2,f5,f0
swc1 f4,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Neg:
lwc1 f1,0x4(a1)
lwc1 f4,0x0(a1)
move v0,a0
neg.s f3,f1
neg.s f2,f4
swc1 f3,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Abs:
lwc1 f1,0x4(a1)
lwc1 f4,0x0(a1)
move v0,a0
abs.s f3,f1
abs.s f2,f4
swc1 f3,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Lerp:
lwc1 f5,0x4(a1)
lwc1 f4,0x0(a1)
lwc1 f9,0x4(a2)
lwc1 f8,0x0(a2)
move v0,a0
sub.s f7,f9,f5
sub.s f6,f8,f4
mul.s f3,f12,f7
mul.s f2,f12,f6
add.s f1,f5,f3
add.s f0,f4,f2
swc1 f1,0x4(a0)
jr ra
swc1 f0,0x0(a0)
sceVfpuVector2Scale:
lwc1 f1,0x4(a1)
lwc1 f4,0x0(a1)
move v0,a0
mul.s f3,f1,f12
mul.s f2,f4,f12
swc1 f3,0x4(a0)
jr ra
swc1 f2,0x0(a0)
sceVfpuVector2Hermite:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S020,0(t0)
lv.s S021,4(t0)
lv.s S030,0(a3)
lv.s S031,4(a3)
lv.s S202,0(sp)
vone.s S203
vmul.s S201,S202,S202
vpfxs [2,1,1,-2]
vmov.q C100,C100
vpfxs [-3,-2,-1,3]
vmov.q C110,C110
vmul.s S200,S201,S202
vpfxs [0,1,0,0]
vmov.q C120,C120
vpfxs [1,0,0,0]
vmov.q C130,C130
vtfm4.q C210,E100,C200
vtfm4.q C220,E000,C210
sv.s S220,0(a0)
sv.s S221,4(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector2Clamp:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.s S000,0(a1)
lv.s S001,4(a1)
vpfxt [X,X,Z,W]
vmax.p C000,C000,C010
vpfxt [Y,Y,Z,W]
vmin.p C000,C000,C010
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Max:
lwc1 f3,0x0(a1)
lwc1 f1,0x0(a2)
move v0,a0
c.lt f1,f3
nop
bc1t pos_0881A6C4
mov.s f2,f3
mov.s f2,f1
pos_0881A6C4:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
swc1 f2,0x0(v0)
c.lt f1,f3
nop
bc1t pos_0881A6E4
mov.s f2,f3
mov.s f2,f1
pos_0881A6E4:
jr ra
swc1 f2,0x4(v0)
sceVfpuVector2Min:
lwc1 f3,0x0(a1)
lwc1 f1,0x0(a2)
move v0,a0
c.lt f3,f1
nop
bc1t pos_0881A70C
mov.s f2,f3
mov.s f2,f1
pos_0881A70C:
lwc1 f3,0x4(a1)
lwc1 f1,0x4(a2)
swc1 f2,0x0(v0)
c.lt f3,f1
nop
bc1t pos_0881A72C
mov.s f2,f3
mov.s f2,f1
pos_0881A72C:
jr ra
swc1 f2,0x4(v0)
sceVfpuVector2InnerProduct:
lwc1 f0,0x0(a1)
lwc1 f2,0x4(a0)
lwc1 f1,0x4(a1)
lwc1 f5,0x0(a0)
mul.s f4,f2,f1
mul.s f3,f5,f0
jr ra
add.s f0,f3,f4
sceVfpuVector2Funnel:
lwc1 f3,0x4(a0)
lwc1 f2,0x0(a0)
jr ra
add.s f0,f2,f3
sceVfpuVector2Average:
lwc1 f0,0x4(a0)
lwc1 f4,0x0(a0)
lui v1,0x88E
lwc1 f3,-0x4558(v1)
add.s f2,f4,f0
jr ra
mul.s f0,f2,f3
sceVfpuVector2IsEqual:
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S010,0(a1)
lv.s S011,4(a1)
li v0,0
vcmp.p EQ,C000,C010
bvtl pos_0881A7A0 (CC[5])
li v0,0x1
pos_0881A7A0:
jr ra
nop
sceVfpuVector2IsZero:
lw v0,0x4(a0)
lw a1,0x0(a0)
or a0,a1,v0
ins a0,zero,0x1F,0x1
jr ra
sltiu v0,a0,0x1
sceVfpuVector2Normalize:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
vdot.p S010,C000,C000
vzero.s S011
vcmp.s EZ,S010,S010
vrsq.s S010,S010
vcmovt.s S010,S011,CC[0]
vpfxd [-1:1,-1:1,M,M]
vscl.p C000,C000,S010
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Length:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
vdot.p S000,C000,C000
vsqrt.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector2Distance:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S010,0(a1)
lv.s S011,4(a1)
vsub.p C000,C000,C010
vdot.p S000,C000,C000
vsqrt.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector2FaceForward:
move v0,a0
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S020,0(a3)
lv.s S021,4(a3)
vdot.p S030,C010,C020
lv.s S000,0(a1)
lv.s S001,4(a1)
vpfxt [0,Y,Z,W]
vcmp.s LT,S030,S030
vpfxs [-X,-Y,Z,W]
vcmovf.p C000,C000,CC[0]
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Reflect:
move v0,a0
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
vdot.p S031,C010,C020
vfim.s S030,-2.000000
vmul.s S032,S030,S031
vscl.p C020,C020,S032
vadd.p C000,C010,C020
vdot.p S033,C000,C000
vcmp.s EZ,S033,S033
vrsq.s S033,S033
vpfxs [0,Y,Z,W]
vcmovt.s S033,S033,CC[0]
vpfxd [-1:1,-1:1,M,M]
vscl.p C000,C000,S033
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuVector2Refract:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
lv.s S030,0(sp)
vdot.p S031,C010,C020
vscl.p C010,C010,S030
vmul.s S032,S030,S030
vmul.s S033,S031,S031
vmul.s S031,S031,S030
vocp.s S033,S033
vmul.s S033,S032,S033
vocp.s S033,S033
vsqrt.s S033,S033
vsub.s S031,S031,S032
vscl.p C020,C020,S031
vadd.p C000,C010,C020
vdot.p S033,C000,C000
vcmp.p ES,C000,C000
vrsq.s S033,S033
vpfxd [-1:1,-1:1,M,M]
vscl.p C000,C000,S033
vpfxs [0,0,Z,W]
vcmovt.p C000,C000,CC[4]
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector3Set:
move v0,a0
swc1 f12,0x0(a0)
swc1 f13,0x4(a0)
jr ra
swc1 f14,0x8(a0)
sceVfpuVector3Copy:
lwc1 f3,0x8(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
lv.s S022,8(a2)
vsub.t C000,C020,C010
vscl.t C000,C000,S030
vadd.t C000,C010,C000
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Hermite:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S012,8(a2)
lv.s S020,0(t0)
lv.s S021,4(t0)
lv.s S022,8(t0)
lv.s S030,0(a3)
lv.s S031,4(a3)
lv.s S032,8(a3)
lv.s S202,0(sp)
vone.s S203
vmul.s S201,S202,S202
vpfxs [2,1,1,-2]
vmov.q C100,C100
vpfxs [-3,-2,-1,3]
vmov.q C110,C110
vmul.s S200,S201,S202
vpfxs [0,1,0,0]
vmov.q C120,C120
vpfxs [1,0,0,0]
vmov.q C130,C130
vtfm4.q C210,E100,C200
vtfm4.q C220,E000,C210
sv.s S220,0(a0)
sv.s S221,4(a0)
sv.s S222,8(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector3Scale:
move v0,a0
mfc1 t0,f12
mtv t0,S010
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vscl.t C000,C000,S010
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Clamp:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vpfxt [X,X,X,W]
vmax.t C000,C000,C010
vpfxt [Y,Y,Y,W]
vmin.t C000,C000,C010
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Max:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S012,8(a2)
vmax.t C000,C000,C010
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Min:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S012,8(a2)
vmin.t C000,C000,C010
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3InnerProduct:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
vdot.t S000,C000,C010
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector3OuterProduct:
move v0,a0
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
lv.s S022,8(a2)
vcrsp.t C000,C010,C020
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Funnel:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
vfad.t S000,C000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector3Average:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
vavg.t S000,C000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector3IsEqual:
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
li v0,0
vcmp.t EQ,C000,C010
bvtl pos_0881AE30 (CC[5])
li v0,0x1
pos_0881AE30:
jr ra
nop
sceVfpuVector3IsZero:
lw v0,0x4(a0)
lw a1,0x0(a0)
lw a2,0x8(a0)
or a0,a1,v0
or v1,a0,a2
ins v1,zero,0x1F,0x1
jr ra
sltiu v0,v1,0x1
sceVfpuVector3SignFloat:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vsgn.t C000,C000
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3SignInt:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vsgn.t C000,C000
vf2iz.t C000,C000,0
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Normalize:
move v0,a0
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vdot.t S010,C000,C000
vzero.s S011
vcmp.s EZ,S010,S010
vrsq.s S010,S010
vcmovt.s S010,S011,CC[0]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S010
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Length:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
vdot.t S000,C000,C000
vsqrt.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector3Distance:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S002,8(a0)
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
vsub.t C000,C000,C010
vdot.t S000,C000,C000
vsqrt.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector3FaceForward:
move v0,a0
lv.s S010,0(a2)
lv.s S011,4(a2)
lv.s S012,8(a2)
lv.s S020,0(a3)
lv.s S021,4(a3)
lv.s S022,8(a3)
vdot.t S030,C010,C020
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.s S002,8(a1)
vpfxt [0,Y,Z,W]
vcmp.s LT,S030,S030
vpfxs [-X,-Y,-Z,W]
vcmovf.t C000,C000,CC[0]
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Reflect:
move v0,a0
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
lv.s S022,8(a2)
vdot.t S031,C010,C020
vfim.s S030,-2.000000
vmul.s S032,S030,S031
vscl.t C020,C020,S032
vadd.t C000,C010,C020
vdot.t S033,C000,C000
vcmp.s EZ,S033,S033
vrsq.s S033,S033
vpfxs [0,Y,Z,W]
vcmovt.s S033,S033,CC[0]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S033
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuVector3Refract:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S010,0(a1)
lv.s S011,4(a1)
lv.s S012,8(a1)
lv.s S020,0(a2)
lv.s S021,4(a2)
lv.s S022,8(a2)
lv.s S030,0(sp)
vdot.t S031,C010,C020
vscl.t C010,C010,S030
vmul.s S032,S030,S030
vmul.s S033,S031,S031
vmul.s S031,S031,S030
vocp.s S033,S033
vmul.s S033,S032,S033
vocp.s S033,S033
vsqrt.s S033,S033
vsub.s S031,S031,S032
vscl.t C020,C020,S031
vadd.t C000,C010,C020
vdot.t S033,C000,C000
vcmp.t ES,C000,C000
vrsq.s S033,S033
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S033
vpfxs [0,0,0,W]
vcmovt.t C000,C000,CC[4]
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector4Set:
move v0,a0
swc1 f12,0x0(a0)
swc1 f13,0x4(a0)
swc1 f14,0x8(a0)
jr ra
swc1 f15,0xC(a0)
sceVfpuVector4SetXYZ:
move v0,a0
swc1 f12,0x0(a0)
swc1 f13,0x4(a0)
jr ra
swc1 f14,0x8(a0)
sceVfpuVector4Copy:
lwc1 f4,0xC(a1)
lwc1 f1,0x0(a1)
lwc1 f2,0x4(a1)
lwc1 f3,0x8(a1)
move v0,a0
swc1 f1,0x0(a0)
swc1 f2,0x4(a0)
swc1 f3,0x8(a0)
jr ra
swc1 f4,0xC(a0)
sceVfpuVector4PositiveZero:
move v0,a0
sw zero,0x0(a0)
sw zero,0x4(a0)
sw zero,0x8(a0)
jr ra
sw zero,0xC(a0)
sceVfpuVector4NegativeZero:
lui a1,0x8000
move v0,a0
sw a1,0xC(a0)
sw a1,0x0(a0)
sw a1,0x4(a0)
jr ra
sw a1,0x8(a0)
sceVfpuVector4Ceil:
move v0,a0
lv.q C000,0(a1)
vf2id.q C000,C000,0
sv.q C000,0(a0)
jr ra
vpfxs [1,0,0,0]
vmov.q C130,C130
vtfm4.q C210,E100,C200
vtfm4.q C220,E000,C210
sv.q C220,0(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector4HermiteXYZ:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.q C000,0(a1)
lv.q C010,0(a2)
lv.q C020,0(t0)
lv.q C030,0(a3)
lv.s S202,0(sp)
vone.s S203
vmul.s S201,S202,S202
vpfxs [2,1,1,-2]
vmov.q C100,C100
vpfxs [-3,-2,-1,3]
vmov.q C110,C110
vmul.s S200,S201,S202
vpfxs [0,1,0,0]
vmov.q C120,C120
vpfxs [1,0,0,0]
vmov.q C130,C130
vtfm4.q C210,E100,C200
vtfm4.q C220,E000,C210
vmov.s S223,S003
sv.q C220,0(a0)
jr ra
addiu sp,sp,0x10
sceVfpuVector4Scale:
move v0,a0
mfc1 t0,f12
mtv t0,S010
lv.q C000,0(a1)
vscl.q C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4ScaleXYZ:
move v0,a0
mfc1 t0,f12
mtv t0,S010
lv.q C000,0(a1)
vscl.t C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4Clamp:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.q C000,0(a1)
vpfxt [X,X,X,X]
vmax.q C000,C000,C010
vpfxt [Y,Y,Y,Y]
vmin.q C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4ClampXYZ:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.q C000,0(a1)
vpfxt [X,X,X,W]
vmax.t C000,C000,C010
vpfxt [Y,Y,Y,W]
vmin.t C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4Max:
move v0,a0
lv.q C000,0(a1)
lv.q C010,0(a2)
vmax.q C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4Min:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vmin.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4InnerProduct:
addiu sp,sp,-0x10
lv.q C010,0(a0)
lv.q C020,0(a1)
vdot.q S000,C010,C020
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4InnerProductXYZ:
addiu sp,sp,-0x10
lv.q C010,0(a0)
lv.q C020,0(a1)
vdot.t S000,C010,C020
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4OuterProductXYZ:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vzero.s S003
vcrsp.t C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4Funnel:
addiu sp,sp,-0x10
lv.q C000,0(a0)
vfad.q S000,C000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4Average:
addiu sp,sp,-0x10
lv.q C000,0(a0)
vavg.q S000,C000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4IsEqual:
lv.q C000,0(a0)
lv.q C010,0(a1)
li v0,0
vcmp.q EQ,C000,C010
bvtl pos_0881B588 (CC[5])
li v0,0x1
pos_0881B588:
jr ra
nop
sceVfpuVector4IsZero:
lw v0,0x4(a0)
lw a1,0x0(a0)
lw t0,0x8(a0)
lw a3,0xC(a0)
or a2,a1,v0
or a0,a2,t0
or v1,a0,a3
ins v1,zero,0x1F,0x1
jr ra
sltiu v0,v1,0x1
sceVfpuVector4SignFloat:
move v0,a0
lv.q C000,0(a1)
vsgn.q C000,C000
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4SignInt:
move v0,a0
lv.q C000,0(a1)
vsgn.q C000,C000
vf2iz.q C000,C000,0
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4Normalize:
move v0,a0
lv.q C000,0(a1)
vdot.q S010,C000,C000
vzero.s S011
vcmp.s EZ,S010,S010
vrsq.s S010,S010
vcmovt.s S010,S011,CC[0]
vpfxd [-1:1,-1:1,-1:1,-1:1]
vscl.q C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4NormalizeXYZ:
move v0,a0
lv.q C000,0(a1)
vdot.t S010,C000,C000
vzero.s S011
vcmp.s EZ,S010,S010
vrsq.s S010,S010
vcmovt.s S010,S011,CC[0]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4NormalizePhase:
move v0,a0
lv.q C000,0(a1)
vcst.q S010,PI
vadd.q C020,C000,C010
vcst.s S010,2/PI
vscl.q C020,C020,S010
vf2id.q C020,C020,0
vi2f.q C020,C020,0
vcst.s S011,2*PI
vscl.q C020,C020,S011
vsub.q C000,C000,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4LengthXYZ:
addiu sp,sp,-0x10
lv.q C000,0(a0)
vdot.t S010,C000,C000
vsqrt.s S010,S010
sv.s S010,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4DistanceXYZ:
addiu sp,sp,-0x10
lv.q C000,0(a0)
lv.q C010,0(a1)
vsub.t C000,C000,C010
vdot.t S010,C000,C000
vsqrt.s S010,S010
sv.s S010,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuVector4FaceForwardXYZ:
move v0,a0
lv.q C010,0(a2)
lv.q C020,0(a3)
vdot.t S030,C010,C020
lv.q C000,0(a1)
vpfxt [0,Y,Z,W]
vcmp.s LT,S030,S030
vpfxs [-X,-Y,-Z,W]
vcmovf.t C000,C000,CC[0]
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4ReflectXYZ:
move v0,a0
lv.q C000,0(a1)
lv.q C020,0(a2)
vdot.t S031,C000,C020
vfim.s S030,-2.000000
vmul.s S032,S030,S031
vscl.t C020,C020,S032
vadd.t C000,C000,C020
vdot.t S033,C000,C000
vcmp.s EZ,S033,S033
vrsq.s S033,S033
vpfxs [0,Y,Z,W]
vcmovt.s S033,S033,CC[0]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S033
sv.q C000,0(a0)
jr ra
nop
sceVfpuVector4RefractXYZ:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.q C000,0(a1)
lv.q C020,0(a2)
lv.s S030,0(sp)
vdot.t S031,C000,C020
vscl.t C000,C000,S030
vmul.s S032,S030,S030
vmul.s S033,S031,S031
vmul.s S031,S031,S030
vocp.s S033,S033
vmul.s S033,S032,S033
vocp.s S033,S033
vsqrt.s S033,S033
vsub.s S031,S031,S032
vscl.t C020,C020,S031
vadd.t C000,C000,C020
vdot.t S033,C000,C000
vcmp.t ES,C000,C000
vrsq.s S033,S033
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t C000,C000,S033
vpfxs [0,0,0,W]
vcmovt.t C000,C000,CC[4]
sv.q C000,0(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix2Unit:
move v0,a0
vmidt.p E000
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S010,8(a0)
sv.s S011,12(a0)
jr ra
nop
sceVfpuMatrix2Zero:
addiu sp,sp,-0x10
sw s0,0x0(sp)
sw ra,0x4(sp)
jal sceVfpuVector2PositiveZero
move s0,a0
jal sceVfpuVector2PositiveZero
addiu a0,s0,0x8
move v0,s0
lw ra,0x4(sp)
lw s0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix2Copy:
lw a3,0x0(a1)
move v0,a0
sw a3,0x0(a0)
lw a2,0x4(a1)
sw a2,0x4(a0)
lw v1,0x8(a1)
sw v1,0x8(a0)
lw a2,0xC(a1)
jr ra
sw a2,0xC(a0)
sceVfpuMatrix2Transform:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S110,8(a1)
lv.s S111,12(a1)
lv.s S200,0(a2)
lv.s S201,4(a2)
vtfm2.p C000,E100,C200
sv.s S000,0(a0)
sv.s S001,4(a0)
jr ra
nop
sceVfpuMatrix2Mul:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S110,8(a1)
lv.s S111,12(a1)
lv.s S200,0(a2)
lv.s S201,4(a2)
lv.s S210,8(a2)
lv.s S211,12(a2)
vmmul.p E000,E200,E100
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S010,8(a0)
sv.s S011,12(a0)
jr ra
nop
sceVfpuMatrix2Scale:
addiu sp,sp,-0x20
sw s0,0x0(sp)
move s0,a1
sw ra,0x8(sp)
sw s1,0x4(sp)
move s1,a0
swc1 f20,0x10(sp)
jal sceVfpuVector2Scale
mov.s f20,f12
addiu v0,s0,0x8
addiu a0,s1,0x8
mov.s f12,f20
jal sceVfpuVector2Scale
move a1,v0
move v0,s1
lw ra,0x8(sp)
lw s1,0x4(sp)
lw s0,0x0(sp)
lwc1 f20,0x10(sp)
jr ra
addiu sp,sp,0x20
sceVfpuMatrix2Transpose:
lwc1 f3,0x4(a1)
lwc1 f1,0x8(a1)
lwc1 f4,0xC(a1)
lwc1 f2,0x0(a1)
move v0,a0
swc1 f1,0x4(a0)
swc1 f2,0x0(a0)
swc1 f3,0x8(a0)
jr ra
swc1 f4,0xC(a0)
sceVfpuMatrix2RotZ:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.p C000,S100,[C,S]
vrot.p C010,S100,[-S,C]
beql a1,zero,pos_0881B954
vmmov.p E200,E000
lv.s S020,0(a1)
lv.s S021,4(a1)
lv.s S030,8(a1)
lv.s S031,12(a1)
vmmul.p E200,E100,E000
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S210,8(a0)
sv.s S211,12(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix2IsUnit:
lw v1,0x0(a0)
lui a2,0x3F80
beq v1,a2,pos_0881B984
li a1,0
pos_0881B97C:
jr ra
move v0,a1
pos_0881B984:
lw a2,0xC(a0)
bne a2,v1,pos_0881B97C
nop
lw a1,0x4(a0)
lw v0,0x8(a0)
or a0,a1,v0
j pos_0881B97C
sltiu a1,a0,0x1
sceVfpuMatrix2Trace:
lwc1 f3,0xC(a0)
lwc1 f2,0x0(a0)
jr ra
add.s f0,f2,f3
sceVfpuMatrix2Determinant:
addiu sp,sp,-0x10
lv.s S000,0(a0)
lv.s S001,4(a0)
lv.s S010,8(a0)
lv.s S011,12(a0)
vdet.p S000,C000,C010
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix2Adjoint:
lwc1 f0,0x4(a1)
lwc1 f2,0x8(a1)
lwc1 f6,0xC(a1)
neg.s f3,f0
neg.s f5,f2
lwc1 f4,0x0(a1)
move v0,a0
swc1 f6,0x0(a0)
swc1 f5,0x4(a0)
swc1 f3,0x8(a0)
jr ra
swc1 f4,0xC(a0)
sceVfpuMatrix3Unit:
move v0,a0
vmidt.t E000
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix3Zero:
move v0,a0
vmzero.t E000
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix3Copy:
move t1,a0
move a2,a1
move a3,a0
addiu t0,a1,0x20
pos_0881BA84:
lw v1,0x0(a2)
lw a0,0x4(a2)
lw a1,0x8(a2)
lw t2,0xC(a2)
sw v1,0x0(a3)
addiu a2,a2,0x10
addiu a3,a3,0x10
sw a0,-0xC(a3)
sw a1,-0x8(a3)
bne a2,t0,pos_0881BA84
sw t2,-0x4(a3)
lw v0,0x0(a2)
sw v0,0x0(a3)
jr ra
move v0,t1
sceVfpuMatrix3Transform:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
lv.s S200,0(a2)
lv.s S201,4(a2)
lv.s S202,8(a2)
vtfm3.t C000,E100,C200
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
jr ra
nop
sceVfpuMatrix3Mul:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
lv.s S200,0(a2)
lv.s S201,4(a2)
lv.s S202,8(a2)
lv.s S210,12(a2)
lv.s S211,16(a2)
lv.s S212,20(a2)
lv.s S220,24(a2)
lv.s S221,28(a2)
lv.s S222,32(a2)
vmmul.t E000,E200,E100
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix3Scale:
move v0,a0
mfc1 t0,f12
mtv t0,S200
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vmscl.t E000,E100,S200
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix3Transpose:
move v0,a0
lw t0,0x0(a1)
lw t1,0x4(a1)
lw t2,0x8(a1)
lw t3,0xC(a1)
lw t4,0x10(a1)
lw t5,0x14(a1)
lw t6,0x18(a1)
lw t7,0x1C(a1)
lw t8,0x20(a1)
sw t0,0x0(a0)
sw t3,0x4(a0)
sw t6,0x8(a0)
sw t1,0xC(a0)
sw t4,0x10(a0)
sw t7,0x14(a0)
sw t2,0x18(a0)
sw t5,0x1C(a0)
sw t8,0x20(a0)
jr ra
nop
sceVfpuMatrix3RotZ:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.t C000,S100,[C,S,0]
vrot.t C010,S100,[-S,C,0]
vidt.q C020
beql a1,zero,pos_0881BC90
vmmov.t E200,E000
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vmmul.t E200,E100,E000
pos_0881BC90:
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3RotY:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.t C000,S100,[C,0,-S]
vidt.q C010
vrot.t C020,S100,[S,0,C]
beql a1,zero,pos_0881BD10
vmmov.t E200,E000
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vmmul.t E200,E100,E000
pos_0881BD10:
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3RotX:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vidt.q C000
vrot.t C010,S100,[0,C,S]
vrot.t C020,S100,[0,-S,C]
beql a1,zero,pos_0881BD90
vmmov.t E200,E000
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vmmul.t E200,E100,E000
pos_0881BD90:
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3Rot:
lwc1 f2,0x8(a2)
addiu sp,sp,-0x10
move v0,a0
swc1 f2,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.t C000,S100,[C,S,0]
vrot.t C010,S100,[-S,C,0]
vidt.q C020
beql a1,zero,pos_0881BE14
vmmov.t E200,E000
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vmmul.t E200,E100,E000
pos_0881BE14:
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
lwc1 f1,0x4(a2)
swc1 f1,0x4(sp)
lv.s S100,4(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.t C000,S100,[C,0,-S]
vidt.q C010
vrot.t C020,S100,[S,0,C]
beql a0,zero,pos_0881BE88
vmmov.t E200,E000
lv.s S100,0(a0)
lv.s S101,4(a0)
lv.s S102,8(a0)
lv.s S110,12(a0)
lv.s S111,16(a0)
lv.s S112,20(a0)
lv.s S120,24(a0)
lv.s S121,28(a0)
lv.s S122,32(a0)
vmmul.t E200,E100,E000
pos_0881BE88:
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
lwc1 f1,0x0(a2)
swc1 f1,0x8(sp)
lv.s S100,8(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vidt.q C000
vrot.t C010,S100,[0,C,S]
vrot.t C020,S100,[0,-S,C]
beql a0,zero,pos_0881BEFC
vmmov.t E200,E000
lv.s S100,0(a0)
lv.s S101,4(a0)
lv.s S102,8(a0)
lv.s S110,12(a0)
lv.s S111,16(a0)
lv.s S112,20(a0)
lv.s S120,24(a0)
lv.s S121,28(a0)
lv.s S122,32(a0)
vmmul.t E200,E100,E000
sv.s S200,0(a0)
sv.s S201,4(a0)
sv.s S202,8(a0)
sv.s S210,12(a0)
sv.s S211,16(a0)
sv.s S212,20(a0)
sv.s S220,24(a0)
sv.s S221,28(a0)
sv.s S222,32(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3IsUnit:
lw v1,0x0(a0)
lui a1,0x3F80
move a3,a0
beq v1,a1,pos_0881BF44
li a0,0
pos_0881BF3C:
jr ra
move v0,a0
pos_0881BF44:
lw a1,0x10(a3)
bne a1,v1,pos_0881BF3C
nop
lw v1,0x20(a3)
bne v1,a1,pos_0881BF3C
nop
lw t5,0x4(a3)
lw v0,0x8(a3)
lw t4,0xC(a3)
lw t3,0x14(a3)
lw t1,0x18(a3)
or a2,t5,v0
lw t0,0x1C(a3)
or t2,a2,t4
or a3,t2,t3
or a0,a3,t1
or a1,a0,t0
j pos_0881BF3C
sltiu a0,a1,0x1
sceVfpuMatrix3Trace:
lwc1 f0,0x10(a0)
lwc1 f2,0x0(a0)
lwc1 f4,0x20(a0)
add.s f3,f2,f0
jr ra
add.s f0,f3,f4
sceVfpuMatrix3Determinant:
addiu sp,sp,-0x10
lv.s S100,0(a0)
lv.s S101,4(a0)
lv.s S102,8(a0)
lv.s S110,12(a0)
lv.s S111,16(a0)
lv.s S112,20(a0)
lv.s S120,24(a0)
lv.s S121,28(a0)
lv.s S122,32(a0)
vpfxs [Y,Z,X,W]
vpfxt [Z,X,Y,W]
vmul.t C000,C110,C120
vpfxs [Z,X,Y,W]
vpfxt [Y,Z,X,W]
vmul.t C010,C100,C110
vdot.t S000,C100,C000
vdot.t S010,C010,C120
vsub.s S000,S000,S010
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3Adjoint:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vpfxt [0,Z,-Y,W]
vdot.t S000,R101,R102
vpfxt [-Z,0,X,W]
vdot.t S001,R101,R102
vpfxt [Y,-X,0,W]
vdot.t S002,R101,R102
vpfxt [0,-Z,Y,W]
vdot.t S010,R100,R102
vpfxt [Z,0,-X,W]
vdot.t S011,R100,R102
vpfxt [-Y,X,0,W]
vdot.t S012,R100,R102
vpfxt [0,Z,-Y,W]
vdot.t S020,R100,R101
vpfxt [-Z,0,X,W]
vdot.t S021,R100,R101
vpfxt [Y,-X,0,W]
vdot.t S022,R100,R101
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix3Inverse:
addiu sp,sp,-0x10
move v0,a0
lv.s S100,0(a2)
lv.s S101,4(a2)
lv.s S102,8(a2)
lv.s S110,12(a2)
lv.s S111,16(a2)
lv.s S112,20(a2)
lv.s S120,24(a2)
lv.s S121,28(a2)
lv.s S122,32(a2)
vpfxs [Y,Z,X,W]
vpfxt [Z,X,Y,W]
vmul.t C000,C110,C120
vpfxs [Z,X,Y,W]
vpfxt [Y,Z,X,W]
vmul.t C010,C100,C110
vdot.t S000,C100,C000
vdot.t S010,C010,C120
vsub.s S000,S000,S010
vcmp.s EZ,S000,S000
sv.s S000,0(sp)
bvtl pos_0881C174 (CC[0])
li v0,0
vrcp.s S030,S000
vpfxt [0,Z,-Y,W]
vdot.t S000,R101,R102
vpfxt [-Z,0,X,W]
vdot.t S001,R101,R102
vpfxt [Y,-X,0,W]
vdot.t S002,R101,R102
vpfxt [0,-Z,Y,W]
vdot.t S010,R100,R102
vpfxt [Z,0,-X,W]
vdot.t S011,R100,R102
vpfxt [-Y,X,0,W]
vdot.t S012,R100,R102
vpfxt [0,Z,-Y,W]
vdot.t S020,R100,R101
vpfxt [-Z,0,X,W]
vdot.t S021,R100,R101
vpfxt [Y,-X,0,W]
vdot.t S022,R100,R101
vmscl.t E000,E000,S030
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
pos_0881C174:
beq a1,zero,pos_0881C180
lwc1 f1,0x0(sp)
swc1 f1,0x0(a1)
pos_0881C180:
jr ra
addiu sp,sp,0x10
sceVfpuMatrix3Normalize:
move v0,a0
lv.s S100,0(a1)
lv.s S101,4(a1)
lv.s S102,8(a1)
lv.s S110,12(a1)
lv.s S111,16(a1)
lv.s S112,20(a1)
lv.s S120,24(a1)
lv.s S121,28(a1)
lv.s S122,32(a1)
vcrsp.t C020,C100,C110
vcrsp.t C000,C110,C020
vdot.t S100,C000,C000
vdot.t S101,C010,C010
vdot.t S102,C020,C020
vrsq.t C110,C100
vscl.t C000,C000,S110
vscl.t C010,C010,S111
vscl.t C020,C020,S112
sv.s S000,0(a0)
sv.s S001,4(a0)
sv.s S002,8(a0)
sv.s S010,12(a0)
sv.s S011,16(a0)
sv.s S012,20(a0)
sv.s S020,24(a0)
sv.s S021,28(a0)
sv.s S022,32(a0)
jr ra
nop
sceVfpuMatrix4Unit:
move v0,a0
vmidt.q E000
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuMatrix4Zero:
move v0,a0
vmzero.q E000
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuMatrix4Copy:
move t1,a0
move a2,a1
move a3,a0
addiu t0,a1,0x40
pos_0881C250:
lw v1,0x0(a2)
lw a0,0x4(a2)
lw a1,0x8(a2)
lw t2,0xC(a2)
sw v1,0x0(a3)
addiu a2,a2,0x10
addiu a3,a3,0x10
sw a0,-0xC(a3)
sw a1,-0x8(a3)
bne a2,t0,pos_0881C250
sw t2,-0x4(a3)
jr ra
move v0,t1
sceVfpuMatrix4SetTransfer:
lwc1 f4,0xC(a1)
lwc1 f1,0x0(a1)
lwc1 f2,0x4(a1)
lwc1 f3,0x8(a1)
move v0,a0
swc1 f1,0x30(a0)
swc1 f2,0x34(a0)
swc1 f3,0x38(a0)
jr ra
swc1 f4,0x3C(a0)
sceVfpuMatrix4GetTransfer:
lwc1 f4,0x3C(a1)
lwc1 f1,0x30(a1)
lwc1 f2,0x34(a1)
lwc1 f3,0x38(a1)
move v0,a0
swc1 f1,0x0(a0)
swc1 f2,0x4(a0)
swc1 f3,0x8(a0)
jr ra
swc1 f4,0xC(a0)
sceVfpuMatrix4Transform:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
lv.q C200,0(a2)
vtfm4.q C000,E100,C200
sv.q C000,0(a0)
jr ra
nop
sceVfpuMatrix4TransformXYZ:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C200,0(a2)
vmov.s S003,S203
vtfm3.t C000,E100,C200
sv.q C000,0(a0)
jr ra
nop
sceVfpuMatrix4HomogeneousTransform:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
lv.q C200,0(a2)
vhtfm3.t C000,E100,C200
sv.q C000,0(a0)
jr ra
nop
sceVfpuMatrix4Mul:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
lv.q C200,0(a2)
lv.q C210,16(a2)
lv.q C220,32(a2)
lv.q C230,48(a2)
vmmul.q E000,E200,E100
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuMatrix4Scale:
move v0,a0
mfc1 t0,f12
mtv t0,S200
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vmscl.q E000,E100,S200
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuMatrix4Transpose:
move v0,a0
lv.q C000,0(a1)
lv.q C010,16(a1)
lv.q C020,32(a1)
lv.q C030,48(a1)
sv.q R000,0(a0)
sv.q R001,16(a0)
sv.q R002,32(a0)
sv.q R003,48(a0)
jr ra
nop
sceVfpuMatrix4Inverse:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C000,48(a1)
vzero.t C130
vtfm3.t C010,M100,C000
sv.q R100,0(a0)
sv.q R101,16(a0)
vneg.t C000,C010
sv.q R102,32(a0)
sv.q C000,48(a0)
jr ra
nop
sceVfpuMatrix4Transfer:
move v0,a0
lv.q C000,0(a1)
lv.q C010,16(a1)
lv.q C020,32(a1)
lv.q C030,48(a1)
lv.q C100,0(a2)
vadd.t C100,C100,C030
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C100,48(a0)
jr ra
nop
sceVfpuMatrix4RotZ:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.q C000,S100,[C,S,0,0]
vrot.q C010,S100,[-S,C,0,0]
vidt.q C020
vidt.q C030
beql a1,zero,pos_0881C4A0
vmmov.q E200,E000
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vmmul.q E200,E100,E000
pos_0881C4A0:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix4RotY:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.q C000,S100,[C,0,-S,0]
vidt.q C010
vrot.q C020,S100,[S,0,C,0]
vidt.q C030
beql a1,zero,pos_0881C4FC
vmmov.q E200,E000
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vmmul.q E200,E100,E000
pos_0881C4FC:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix4RotX:
addiu sp,sp,-0x10
move v0,a0
swc1 f12,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vidt.q C000
vrot.q C010,S100,[0,C,S,0]
vrot.q C020,S100,[0,-S,C,0]
vidt.q C030
beql a1,zero,pos_0881C558
vmmov.q E200,E000
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vmmul.q E200,E100,E000
pos_0881C558:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix4Rot:
lwc1 f2,0x8(a2)
addiu sp,sp,-0x10
move v0,a0
swc1 f2,0x0(sp)
lv.s S100,0(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.q C000,S100,[C,S,0,0]
vrot.q C010,S100,[-S,C,0,0]
vidt.q C020
vidt.q C030
beql a1,zero,pos_0881C5B8
vmmov.q E200,E000
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vmmul.q E200,E100,E000
pos_0881C5B8:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
lwc1 f1,0x4(a2)
swc1 f1,0x4(sp)
lv.s S100,4(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vrot.q C000,S100,[C,0,-S,0]
vidt.q C010
vrot.q C020,S100,[S,0,C,0]
vidt.q C030
beql a0,zero,pos_0881C608
vmmov.q E200,E000
lv.q C100,0(a0)
lv.q C110,16(a0)
lv.q C120,32(a0)
lv.q C130,48(a0)
vmmul.q E200,E100,E000
pos_0881C608:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
lwc1 f1,0x0(a2)
swc1 f1,0x8(sp)
lv.s S100,8(sp)
vcst.s S101,2/PI
vmul.s S100,S100,S101
vidt.q C000
vrot.q C010,S100,[0,C,S,0]
vrot.q C020,S100,[0,-S,C,0]
vidt.q C030
beql a0,zero,pos_0881C658
vmmov.q E200,E000
lv.q C100,0(a0)
lv.q C110,16(a0)
lv.q C120,32(a0)
lv.q C130,48(a0)
vmmul.q E200,E100,E000
pos_0881C658:
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix4IsUnit:
lw v1,0x0(a0)
lui a1,0x3F80
move t0,a0
beq v1,a1,pos_0881C68C
li a0,0
pos_0881C684:
jr ra
move v0,a0
pos_0881C68C:
lw v0,0x14(t0)
bne v0,v1,pos_0881C684
nop
lw v1,0x28(t0)
bne v1,v0,pos_0881C684
nop
lw a1,0x3C(t0)
bne a1,v1,pos_0881C684
nop
lw a0,0x4(t0)
lw v0,0x8(t0)
lw t4,0xC(t0)
lw t2,0x10(t0)
or t3,a0,v0
lw v1,0x18(t0)
or a2,t3,t4
lw a3,0x1C(t0)
or t1,a2,t2
lw t9,0x20(t0)
or a1,t1,v1
lw t7,0x24(t0)
or t8,a1,a3
lw t5,0x2C(t0)
or t6,t8,t9
lw t3,0x30(t0)
or t4,t6,t7
lw t2,0x34(t0)
or a0,t4,t5
lw t1,0x38(t0)
or v1,a0,t3
or a3,v1,t2
or a2,a3,t1
j pos_0881C684
sltiu a0,a2,0x1
sceVfpuMatrix4Trace:
lwc1 f0,0x14(a0)
lwc1 f2,0x0(a0)
lwc1 f5,0x28(a0)
lwc1 f4,0x3C(a0)
add.s f3,f2,f0
add.s f1,f3,f5
jr ra
add.s f0,f1,f4
sceVfpuMatrix4Determinant:
addiu sp,sp,-0x10
lv.q C000,0(a0)
lv.q C010,16(a0)
lv.q C020,32(a0)
lv.q C030,48(a0)
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C100,C011,C021
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C110,C001,C021
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C120,C001,C011
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C130,C001,C011
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C200,C011,C021
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C210,C001,C021
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C220,C001,C011
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C230,C001,C011
vpfxt [Z,Y,X,W]
vdot.t S100,C100,C031
vpfxt [Z,Y,X,W]
vdot.t S110,C110,C031
vpfxt [Z,Y,X,W]
vdot.t S120,C120,C031
vpfxt [Z,Y,X,W]
vdot.t S130,C130,C021
vpfxt [X,Z,Y,W]
vdot.t S200,C200,C031
vpfxt [X,Z,Y,W]
vdot.t S210,C210,C031
vpfxt [X,Z,Y,W]
vdot.t S220,C220,C031
vpfxt [X,Z,Y,W]
vdot.t S230,C230,C021
vsub.q R100,R100,R200
vmul.q R101,R000,R100
vpfxs [X,-Y,Z,-W]
vfad.q S000,R101
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuMatrix4Adjoint:
move v0,a0
lv.q C000,0(a1)
lv.q C010,16(a1)
lv.q C020,32(a1)
lv.q C030,48(a1)
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C100,C020,C030
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C110,C020,C030
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C120,C030,C020
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C130,C030,C020
vsub.q C100,C100,C120
vsub.q C110,C110,C130
vmov.p R122,R100
vmov.p R123,C110
vpfxs [X,-Y,Z,W]
vmov.t R110,C101
vpfxs [X,-Y,Z,W]
vmov.p R121,C112
vtfm4.q R200,E100,C010
vtfm4.q R201,E100,C000
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C100,C000,C010
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C110,C000,C010
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C120,C010,C000
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C130,C010,C000
vsub.q C100,C100,C120
vsub.q C110,C110,C130
vmov.p R122,R100
vmov.p R123,C110
vpfxs [X,-Y,Z,W]
vmov.t R110,C101
vpfxs [X,-Y,Z,W]
vmov.p R121,C112
vtfm4.q R202,E100,C030
vtfm4.q R203,E100,C020
vpfxd [M,,M,]
vneg.q C200,C200
vpfxd [,M,,M]
vneg.q C210,C210
vpfxd [M,,M,]
vneg.q C220,C220
vpfxd [,M,,M]
vneg.q C230,C230
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
jr ra
nop
sceVfpuMatrix4Inverse2:
move v0,a0
lv.q C000,0(a2)
lv.q C010,16(a2)
lv.q C020,32(a2)
lv.q C030,48(a2)
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C100,C011,C021
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C110,C001,C021
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C120,C001,C011
vpfxs [X,Z,Y,W]
vpfxt [Y,X,Z,W]
vmul.t C130,C001,C011
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C200,C011,C021
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C210,C001,C021
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C220,C001,C011
vpfxs [Z,Y,X,W]
vpfxt [Y,X,Z,W]
vmul.t C230,C001,C011
vpfxt [Z,Y,X,W]
vdot.t S100,C100,C031
vpfxt [Z,Y,X,W]
vdot.t S110,C110,C031
vpfxt [Z,Y,X,W]
vdot.t S120,C120,C031
vpfxt [Z,Y,X,W]
vdot.t S130,C130,C021
vpfxt [X,Z,Y,W]
vdot.t S200,C200,C031
vpfxt [X,Z,Y,W]
vdot.t S210,C210,C031
vpfxt [X,Z,Y,W]
vdot.t S220,C220,C031
vpfxt [X,Z,Y,W]
vdot.t S230,C230,C021
vsub.q R100,R100,R200
vmul.q R101,R000,R100
vpfxs [X,-Y,Z,-W]
vfad.q S200,R101
vcmp.s EZ,S200,S200
mfv t0,S200
bvt pos_0881CAC4 (CC[0])
nop
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C100,C020,C030
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C110,C020,C030
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C120,C030,C020
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C130,C030,C020
vsub.q C100,C100,C120
vsub.q C110,C110,C130
vmov.p R122,R100
vmov.p R123,C110
vpfxs [X,-Y,Z,W]
vmov.t R110,C101
vpfxs [X,-Y,Z,W]
vmov.p R121,C112
vtfm4.q R200,E100,C010
vtfm4.q R201,E100,C000
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C100,C000,C010
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C110,C000,C010
vpfxs [0,Z,Y,Y]
vpfxt [0,W,W,Z]
vmul.q C120,C010,C000
vpfxs [X,0,W,Z]
vpfxt [Y,0,X,X]
vmul.q C130,C010,C000
vsub.q C100,C100,C120
vsub.q C110,C110,C130
vmov.p R122,R100
vmov.p R123,C110
vpfxs [X,-Y,Z,W]
vmov.t R110,C101
vpfxs [X,-Y,Z,W]
vmov.p R121,C112
vtfm4.q R202,E100,C030
vtfm4.q R203,E100,C020
vpfxd [M,,M,]
vneg.q C200,C200
vpfxd [,M,,M]
vneg.q C210,C210
vpfxd [M,,M,]
vneg.q C220,C220
vpfxd [,M,,M]
vneg.q C230,C230
mtv t0,S000
vrcp.s S000,S000
vmscl.q E200,E200,S000
sv.q C200,0(a0)
sv.q C210,16(a0)
sv.q C220,32(a0)
sv.q C230,48(a0)
pos_0881CAC4:
bnel a1,zero,pos_0881CACC
sw t0,0x0(a1)
pos_0881CACC:
jr ra
nop
sceVfpuMatrix4DropShadow:
move v0,a0
lv.q C100,0(a1)
lv.q C200,0(a2)
vdot.t S210,C200,C200
vzero.s S211
vcmp.s EZ,S210,S210
vrsq.s S210,S210
vcmovt.s S210,S211,CC[0]
vpfxd [-1:1,-1:1,-1:1,-1:1]
vscl.q C200,C200,S210
vdot.q S110,C100,C200
vneg.q C210,C200
vscl.q C000,C100,S210
vscl.q C010,C100,S211
vscl.q C020,C100,S212
vscl.q C030,C100,S213
vadd.s S000,S000,S110
vadd.s S011,S011,S110
vadd.s S022,S022,S110
vadd.s S033,S033,S110
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuMatrix4NormalizeXYZ:
move v0,a0
lv.q C100,0(a1)
lv.q C010,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
vzero.t R003
vcrsp.t C020,C100,C010
vcrsp.t C000,C010,C020
vdot.t S100,C000,C000
vdot.t S101,C010,C010
vdot.t S102,C020,C020
vrsq.t C110,C100
vscl.t C000,C000,S110
vscl.t C010,C010,S111
vscl.t C020,C020,S112
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C130,48(a0)
jr ra
nop
sceVfpuScalarAbs:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vabs.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarAcos:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,Sqrt(1/2)
vcst.s S002,PI/2
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vmul.s S003,S000,S000
vsgn.s S001,S000
bvtl pos_0881CBF0 (CC[0])
vasin.s S000,S000
vocp.s S003,S003
vsqrt.s S003,S003
vasin.s S003,S003
vocp.s S000,S003
vmul.s S000,S000,S001
pos_0881CBF0:
vocp.s S000,S000
vmul.s S000,S000,S002
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarAsin:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,Sqrt(1/2)
vcst.s S002,PI/2
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vmul.s S003,S000,S000
vsgn.s S001,S000
bvtl pos_0881CC48 (CC[0])
vasin.s S000,S000
vocp.s S003,S003
vsqrt.s S003,S003
vmul.s S002,S002,S001
vasin.s S003,S003
vocp.s S000,S003
pos_0881CC48:
vmul.s S000,S000,S002
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarAtan:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcmp.s EN,S000,S000
vmul.s S001,S000,S000
bvt pos_0881CCCC (CC[0])
vone.s S002
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S002
vadd.s S003,S001,S002
vcst.s S002,PI/2
bvfl pos_0881CCA0 (CC[0])
vrcp.s S003,S003
vrsq.s S003,S003
vmul.s S000,S000,S003
b pos_0881CCC8
vasin.s S000,S000
pos_0881CCA0:
vmul.s S003,S001,S003
vsgn.s S001,S000
vcmp.s ES,S003,S003
vsocp.s S012,S003
vsqrt.s S003,S012
vmul.s S002,S002,S001
bvtl pos_0881CCC8 (CC[0])
vone.s S000
vasin.s S003,S003
vocp.s S000,S003
pos_0881CCC8:
vmul.s S000,S000,S002
pos_0881CCCC:
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarAtan2:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
swc1 f13,0x8(sp)
lv.s S000,4(sp)
lv.s S001,8(sp)
vcmp.p ES,C000,C000
vcst.s S002,PI/2
bvt pos_0881CD48 (CC[4])
vrcp.s S003,S001
vmul.s S003,S000,S003
vcmp.s EN,S003,S003
bvt pos_0881CDC0 (CC[0])
vmov.s S010,S003
vcmp.s ES,S003,S003
bvtl pos_0881CD90 (CC[0])
vsgn.s S010,S000
vmul.s S011,S003,S003
vone.s S003
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S010,S003
vadd.s S003,S011,S003
bvfl pos_0881CD7C (CC[0])
vrcp.s S003,S003
vrsq.s S003,S003
vmul.s S010,S010,S003
b pos_0881CD90
vasin.s S010,S010
pos_0881CD48:
vfim.s S010,-1.000000
bvt pos_0881CDC0 (CC[5])
vrsq.s S010,S010
vcmp.p EN,C000,C000
bvt pos_0881CDC0 (CC[4])
vcmp.p EI,C000,C000
vsgn.s S000,S000
vcst.s S002,PI/4
bvt pos_0881CDB4 (CC[0])
vone.s S010
vsgn.s S011,S001
b pos_0881CDB4
vsub.s S010,S010,S011
pos_0881CD7C:
vmul.s S003,S011,S003
vocp.s S003,S003
vsqrt.s S003,S003
vasin.s S003,S003
vocp.s S010,S003
pos_0881CD90:
vpfxd [,0:1,M,M]
vpfxs [X,-Y,Z,W]
vsgn.p C000,C000
vcmp.s EZ,S001,S001
bvt pos_0881CDB4 (CC[0])
nop
vpfxs [2,Y,Z,W]
vpfxt [|X|,Y,Z,W]
vsub.s S010,S010,S010
pos_0881CDB4:
vpfxs [|X|,Y,Z,W]
vmul.s S010,S010,S000
vmul.s S010,S010,S002
pos_0881CDC0:
sv.s S010,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarCeil:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vf2iu.s S000,S000,0
vi2f.s S000,S000,0
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarCos:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,2/PI
vmul.s S000,S000,S001
vcos.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarExp:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,Log2(e)
vmul.s S000,S000,S001
vexp2.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarFloor:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vf2id.s S000,S000,0
vi2f.s S000,S000,0
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarLog:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vlog2.s S000,S000
vcst.s S001,Log2(e)
vdiv.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarLog2:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vlog2.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarLog10:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vlog2.s S000,S000
vcst.s S001,Log2(10)
vdiv.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarMax:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
swc1 f13,0x8(sp)
lv.s S000,4(sp)
lv.s S001,8(sp)
vmax.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarMin:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
swc1 f13,0x8(sp)
lv.s S000,4(sp)
lv.s S001,8(sp)
vmin.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarPow:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
swc1 f13,0x8(sp)
lv.s S000,4(sp)
lv.s S001,8(sp)
vlog2.s S000,S000
vmul.s S000,S000,S001
vexp2.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarPow2:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vexp2.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarRound:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vf2in.s S000,S000,0
vi2f.s S000,S000,0
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarRsqrt:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vrsq.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarSin:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,2/PI
vmul.s S000,S000,S001
vsin.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarSqrt:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vsqrt.s S000,S000
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarTan:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vcst.s S001,2/PI
vmul.s S000,S000,S001
vrot.p C002,S000,[C,S]
vdiv.s S000,S003,S002
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuScalarTrunc:
addiu sp,sp,-0x10
swc1 f12,0x4(sp)
lv.s S000,4(sp)
vf2iz.s S000,S000,0
vi2f.s S000,S000,0
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuColorToRGB565:
lwc1 f1,0x0(a0)
mtc1 zero,f2
c.lt f1,f2
nop
bc1t pos_0881D088
li a1,0
lui a1,0x88E
lwc1 f3,-0x4554(a1)
li a2,0x1F
mul.s f2,f1,f3
trunc.w.s f1,f2
mfc1 v1,f1
min a1,v1,a2
pos_0881D088:
lwc1 f1,0x4(a0)
mtc1 zero,f4
c.lt f1,f4
nop
bc1t pos_0881D0BC
li v1,0
lui t1,0x88E
lwc1 f7,-0x4550(t1)
li t0,0x3F
mul.s f6,f1,f7
trunc.w.s f5,f6
mfc1 a3,f5
min v1,a3,t0
pos_0881D0BC:
lwc1 f1,0x8(a0)
mtc1 zero,f8
c.lt f1,f8
nop
bc1t pos_0881D0F0
li a0,0
lui a0,0x88E
lwc1 f11,-0x4554(a0)
li t3,0x1F
mul.s f10,f1,f11
trunc.w.s f9,f10
mfc1 t2,f9
min a0,t2,t3
pos_0881D0F0:
sll v0,v1,0x5
sll t6,a0,0xB
or t5,t6,v0
or t4,t5,a1
jr ra
andi v0,t4,0xFFFF
sceVfpuColorSet:
move v0,a0
swc1 f12,0x0(a0)
swc1 f13,0x4(a0)
swc1 f14,0x8(a0)
jr ra
swc1 f15,0xC(a0)
sceVfpuColorSetRGB:
move v0,a0
swc1 f12,0x0(a0)
swc1 f13,0x4(a0)
jr ra
swc1 f14,0x8(a0)
sceVfpuColorCopy:
lwc1 f4,0xC(a1)
lwc1 f1,0x0(a1)
lwc1 f2,0x4(a1)
lwc1 f3,0x8(a1)
move v0,a0
swc1 f1,0x0(a0)
swc1 f2,0x4(a0)
swc1 f3,0x8(a0)
jr ra
swc1 f4,0xC(a0)
sceVfpuColorZero:
move v0,a0
sw zero,0x0(a0)
sw zero,0x4(a0)
sw zero,0x8(a0)
jr ra
sw zero,0xC(a0)
sceVfpuColorToRGBA8888:
lv.q C000,0(a0)
vsat0.q C000,C000
viim.s S010,255
vscl.q C000,C000,S010
vf2iz.q C000,C000,23
vi2uc.q S000,C000
mfv v0,S000
jr ra
nop
sceVfpuColorToRGBA4444:
lv.q C000,0(a0)
vsat0.q C000,C000
viim.s S010,15
vscl.q C000,C000,S010
vf2iz.q C000,C000,0
mfv v1,S000
mfv t0,S001
mfv t1,S002
mfv t2,S003
ins v1,t0,0x4,0x4
ins v1,t1,0x8,0x4
ins v1,t2,0xC,0x4
jr ra
andi v0,v1,0xFFFF
sceVfpuColorToRGBA5551:
lwc1 f1,0xC(a0)
lv.q C000,0(a0)
vsat0.q C000,C000
viim.s S010,31
vscl.t C000,C000,S010
vf2iz.t C000,C000,0
mfv v1,S000
mfv t0,S001
mfv t1,S002
c.le f1,f12
ins v1,t0,0x5,0x5
ins v1,t1,0xA,0x5
li t0,0x8000
bc1tl pos_0881D20C
li t0,0
pos_0881D20C:
or v1,v1,t0
jr ra
andi v0,v1,0xFFFF
sceVfpuColorFromRGBA8888:
move v0,a0
mtv a1,S010
vuc2i.s S000,S010
vi2f.q C000,C000,31
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorFromRGBA4444:
andi v1,a1,0xFFFF
move v0,a0
ext t0,v1,0x0,0x4
ext t1,v1,0x4,0x4
ext t2,v1,0x8,0x4
ext t3,v1,0xC,0x4
lui at,0x3D88
ori at,at,0x8889
mtv at,S010
mtv t0,S000
mtv t1,S001
mtv t2,S002
mtv t3,S003
vi2f.q C000,C000,0
vscl.q C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorFromRGBA5551:
andi v1,a1,0xFFFF
move v0,a0
ext t0,v1,0x0,0x5
ext t1,v1,0x5,0x5
ext t2,v1,0xA,0x5
lui at,0x3D04
ori at,at,0x2108
mtv at,S010
mtv t0,S000
mtv t1,S001
mtv t2,S002
vi2f.q C000,C000,0
vscl.q C000,C000,S010
mfc1 t1,f12
andi t0,v1,0x8000
movz t1,zero,t0
sv.q C000,0(a0)
sw t1,0xC(a0)
jr ra
nop
sceVfpuColorFromRGB565:
andi a2,a1,0xFFFF
ext v0,a2,0x1,0x6
srl t0,a2,0xB
andi a3,a2,0x1F
mtc1 v0,f5
mtc1 t0,f2
mtc1 a3,f9
cvt.s.w f8,f5
cvt.s.w f4,f2
cvt.s.w f7,f9
lui a1,0x88E
lui v1,0x88E
lwc1 f3,-0x454C(a1)
lwc1 f1,-0x4548(v1)
move v0,a0
mul.s f6,f4,f3
mul.s f5,f8,f1
mul.s f0,f7,f3
swc1 f12,0xC(a0)
swc1 f6,0x8(a0)
swc1 f0,0x0(a0)
jr ra
swc1 f5,0x4(a0)
sceVfpuColorAdd:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vadd.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorAddRGB:
move v0,a0
lv.q C000,0(a1)
lv.q C010,0(a2)
vadd.t C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorSub:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vsub.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorSubRGB:
move v0,a0
lv.q C000,0(a1)
lv.q C010,0(a2)
vsub.t C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorMul:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vmul.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorMulRGB:
move v0,a0
lv.q C000,0(a1)
lv.q C010,0(a2)
vmul.t C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorNeg:
move v0,a0
lv.q C000,0(a1)
vocp.q C000,C000
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorNegRGB:
move v0,a0
lv.q C000,0(a1)
vocp.t C000,C000
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorLerp:
move v0,a0
mfc1 t0,f12
mtv t0,S030
lv.q C010,0(a1)
lv.q C020,0(a2)
vsub.q C000,C020,C010
vscl.q C000,C000,S030
vadd.q C010,C010,C000
sv.q C010,0(a0)
jr ra
nop
sceVfpuColorLerpRGB:
move v0,a0
mfc1 t0,f12
mtv t0,S030
lv.q C010,0(a1)
lv.q C020,0(a2)
vsub.t C000,C020,C010
vscl.t C000,C000,S030
vadd.t C010,C010,C000
sv.q C010,0(a0)
jr ra
nop
sceVfpuColorScale:
move v0,a0
mfc1 t0,f12
mtv t0,S020
lv.q C010,0(a1)
vscl.q C000,C010,S020
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorScaleRGB:
move v0,a0
mfc1 t0,f12
mtv t0,S010
lv.q C000,0(a1)
vscl.t C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorClamp:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.q C000,0(a1)
vpfxt [X,X,X,X]
vmax.q C000,C000,C010
vpfxt [Y,Y,Y,Y]
vmin.q C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorClampRGB:
move v0,a0
mfc1 t0,f12
mfc1 t1,f13
mtv t0,S010
mtv t1,S011
lv.q C000,0(a1)
vpfxt [X,X,X,W]
vmax.t C000,C000,C010
vpfxt [Y,Y,Y,W]
vmin.t C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorMax:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vmax.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorMin:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vmin.q C000,C000,C010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorIsEqual:
lv.q C000,0(a0)
lv.q C010,0(a1)
li v0,0
vcmp.q EQ,C000,C010
bvtl pos_0881D550 (CC[5])
li v0,0x1
pos_0881D550:
jr ra
nop
sceVfpuColorIsZero:
lw v0,0x4(a0)
lw a1,0x0(a0)
lw t0,0x8(a0)
lw a3,0xC(a0)
or a2,a1,v0
or a0,a2,t0
or v1,a0,a3
ins v1,zero,0x1F,0x1
jr ra
sltiu v0,v1,0x1
sceVfpuColorNormalize:
move v0,a0
lv.q C000,0(a1)
vsrt4.q C010,C000
vzero.s S020
vsrt3.q C010,C010
vcmp.s LE,S011,S020
vrcp.s S010,S010
vcmovt.s S010,S020,CC[0]
vpfxd [0:1,0:1,0:1,0:1]
vscl.q C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuColorNormalizeRGB:
move v0,a0
lv.q C000,0(a1)
vzero.s S003
vsrt4.q C010,C000
vzero.s S020
vsrt3.q C010,C010
vcmp.s LE,S010,S020
vrcp.s S010,S010
vcmovt.s S010,S020,CC[0]
vpfxd [0:1,0:1,0:1,M]
vscl.t C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuRandPeekFloat:
addiu sp,sp,-0x40
sw ra,0x30(sp)
jal sceVfpuRandSaveContext
move a0,sp
vrndf1.s S000
sv.s S000,32(sp)
jal sceVfpuRandRestoreContext
move a0,sp
lwc1 f0,0x20(sp)
lw ra,0x30(sp)
jr ra
addiu sp,sp,0x40
sceVfpuRandFloat:
addiu sp,sp,-0x10
lui v1,0x88E
lwc1 f0,-0x4544(v1)
vrndf1.s S000
sv.s S000,0(sp)
lwc1 f3,0x0(sp)
sub.s f2,f3,f0
mul.s f0,f2,f12
jr ra
addiu sp,sp,0x10
sceVfpuRandPi:
addiu sp,sp,-0x10
vrndf1.s S000
vcst.s S001,PI
vpfxt [1,Y,Z,W]
vsub.s S000,S000,S000
vmul.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuRandTwopi:
addiu sp,sp,-0x10
vrndf1.s S000
vcst.s S001,2/PI
vpfxt [1,Y,Z,W]
vsub.s S000,S000,S000
vmul.s S000,S000,S001
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuRandVector:
move v0,a0
vrndf1.q C000
vpfxt [1,1,1,1]
vsub.q C000,C000,C000
sv.q C000,0(a0)
jr ra
nop
sceVfpuRandInt:
addiu sp,sp,-0x10
lui v1,0x88E
vrndf1.s S000
sv.s S000,0(sp)
mtc1 a0,f5
lwc1 f2,0x0(sp)
lwc1 f0,-0x4540(v1)
cvt.s.w f4,f5
sub.s f3,f2,f0
mul.s f1,f3,f4
trunc.w.s f2,f1
mfc1 v0,f2
jr ra
addiu sp,sp,0x10
sceVfpuDropShadowMatrix:
mov.s f16,f12
beq a2,zero,pos_0881D79C
mov.s f15,f13
lwc1 f9,0x0(a1)
lwc1 f4,0x4(a1)
lwc1 f7,0x8(a1)
mul.s f5,f12,f9
mul.s f13,f13,f4
mul.s f6,f14,f7
lui v1,0x88E
lwc1 f3,-0x453C(v1)
add.s f1,f5,f13
neg.s f11,f9
mul.s f8,f15,f9
neg.s f12,f4
add.s f2,f1,f6
neg.s f18,f7
mul.s f1,f14,f9
mul.s f10,f16,f7
sub.s f0,f3,f2
mul.s f9,f16,f4
mul.s f2,f14,f4
mul.s f19,f15,f7
sub.s f17,f0,f3
add.s f3,f5,f0
add.s f5,f13,f0
add.s f13,f6,f0
swc1 f8,0x10(a0)
swc1 f3,0x0(a0)
swc1 f1,0x20(a0)
swc1 f11,0x30(a0)
swc1 f9,0x4(a0)
swc1 f5,0x14(a0)
swc1 f2,0x24(a0)
swc1 f12,0x34(a0)
swc1 f10,0x8(a0)
swc1 f19,0x18(a0)
swc1 f13,0x28(a0)
swc1 f18,0x38(a0)
swc1 f16,0xC(a0)
swc1 f15,0x1C(a0)
swc1 f14,0x2C(a0)
swc1 f17,0x3C(a0)
pos_0881D794:
jr ra
move v0,a0
pos_0881D79C:
lwc1 f2,0x0(a1)
lwc1 f3,0x4(a1)
lwc1 f0,0x8(a1)
mul.s f7,f12,f2
mul.s f8,f13,f3
mul.s f19,f14,f0
lui a1,0x88E
lwc1 f6,-0x4538(a1)
add.s f11,f7,f8
mul.s f17,f12,f0
neg.s f5,f0
neg.s f18,f2
add.s f9,f11,f19
mul.s f11,f15,f0
mul.s f13,f14,f3
neg.s f10,f3
div.s f0,f6,f9
sw zero,0xC(a0)
sw zero,0x1C(a0)
sw zero,0x2C(a0)
sub.s f4,f7,f9
sub.s f12,f8,f9
neg.s f1,f9
sub.s f8,f19,f9
mul.s f19,f15,f2
mul.s f9,f14,f2
mul.s f15,f16,f3
mul.s f6,f0,f4
mul.s f7,f0,f12
mul.s f4,f0,f19
mul.s f2,f0,f9
mul.s f3,f0,f15
mul.s f9,f0,f18
mul.s f14,f0,f1
mul.s f18,f0,f17
mul.s f12,f0,f13
mul.s f19,f0,f10
mul.s f17,f0,f11
mul.s f16,f0,f8
mul.s f15,f0,f5
swc1 f6,0x0(a0)
swc1 f4,0x10(a0)
swc1 f2,0x20(a0)
swc1 f9,0x30(a0)
swc1 f3,0x4(a0)
swc1 f7,0x14(a0)
swc1 f12,0x24(a0)
swc1 f19,0x34(a0)
swc1 f18,0x8(a0)
swc1 f17,0x18(a0)
swc1 f16,0x28(a0)
swc1 f15,0x38(a0)
j pos_0881D794
swc1 f14,0x3C(a0)
sceVfpuLookAtMatrix:
move v0,a0
lv.q C000,0(a1)
lv.q C010,0(a2)
lv.q C020,0(a3)
vsub.q R102,C000,C010
vdot.t S200,R102,R102
vzero.s S203
vcmp.s EZ,S200,S200
vrsq.s S200,S200
vcmovt.s S200,S203,CC[0]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t R102,R102,S200
vcrsp.t R100,C020,R102
vcrsp.t R101,R102,R100
vdot.t S200,R100,R100
vdot.t S201,R101,R101
vcmp.p EZ,C200,C200
vrsq.p C200,C200
vcmovt.s S200,S203,CC[0]
vcmovt.s S201,S203,CC[1]
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t R100,R100,S200
vpfxd [-1:1,-1:1,-1:1,M]
vscl.t R101,R101,S201
vidt.q R103
vzero.t C130
vneg.t C000,C000
vhtfm3.t C010,E100,C000
vmov.t C130,C010
sv.q C100,0(a0)
sv.q C110,16(a0)
sv.q C120,32(a0)
sv.q C130,48(a0)
jr ra
nop
sceVfpuPerspectiveMatrix:
addiu sp,sp,-0x10
swc1 f12,0x0(sp)
move v0,a0
swc1 f13,0x4(sp)
swc1 f14,0x8(sp)
swc1 f15,0xC(sp)
vmzero.q E100
vcst.s S010,1/PI
lv.s S000,0(sp)
lv.s S001,4(sp)
lv.s S002,8(sp)
lv.s S003,12(sp)
vmul.s S000,S000,S010
vrcp.s S001,S001
vsub.s S010,S002,S003
vadd.s S011,S002,S003
vmul.s S012,S002,S003
vrot.p C020,S000,[C,S]
vrcp.s S021,S021
vrcp.s S010,S010
vmul.s S122,S010,S011
vmul.s S013,S012,S010
vadd.s S132,S013,S013
vmul.s S111,S020,S021
vmul.s S100,S111,S001
vfim.s S123,-1.000000
vzero.s S133
sv.q C100,0(a0)
sv.q C110,16(a0)
sv.q C120,32(a0)
sv.q C130,48(a0)
jr ra
addiu sp,sp,0x10
sceVfpuOrthoMatrix:
addiu sp,sp,-0x20
swc1 f12,0x0(sp)
move v0,a0
swc1 f13,0x4(sp)
swc1 f14,0x8(sp)
swc1 f15,0xC(sp)
swc1 f16,0x10(sp)
swc1 f17,0x14(sp)
vmidt.q E100
lv.s S000,0(sp)
lv.s S001,4(sp)
lv.s S002,8(sp)
lv.s S003,12(sp)
lv.s S010,16(sp)
lv.s S011,20(sp)
vfim.s S012,2.000000
vbfy1.q C000,C000
vbfy1.p C010,C010
vrcp.s S001,S001
vrcp.s S003,S003
vrcp.s S011,S011
vpfxs [-X,Y,Z,W]
vmul.s S100,S012,S001
vpfxs [-X,Y,Z,W]
vmul.s S111,S012,S003
vmul.s S122,S012,S011
vmul.s S130,S000,S001
vmul.s S131,S002,S003
vmul.s S132,S010,S011
sv.q C100,0(a0)
sv.q C110,16(a0)
sv.q C120,32(a0)
sv.q C130,48(a0)
jr ra
addiu sp,sp,0x20
sceVfpuFrustumMatrix:
addiu sp,sp,-0x20
swc1 f12,0x0(sp)
move v0,a0
swc1 f13,0x4(sp)
swc1 f14,0x8(sp)
swc1 f15,0xC(sp)
swc1 f16,0x10(sp)
swc1 f17,0x14(sp)
vmzero.q E100
lv.s S000,4(sp)
lv.s S001,0(sp)
lv.s S002,12(sp)
lv.s S003,8(sp)
lv.s S010,16(sp)
lv.s S011,20(sp)
vadd.s S012,S010,S010
vmul.s S013,S010,S011
vbfy1.q C000,C000
vbfy1.p C010,C010
vadd.s S013,S013,S013
vrcp.s S001,S001
vrcp.s S003,S003
vrcp.s S011,S011
vmul.s S100,S012,S001
vmul.s S111,S012,S003
vmul.s S120,S000,S001
vmul.s S121,S002,S003
vmul.s S122,S010,S011
vfim.s S123,-1.000000
vmul.s S132,S013,S011
sv.q C100,0(a0)
sv.q C110,16(a0)
sv.q C120,32(a0)
sv.q C130,48(a0)
jr ra
addiu sp,sp,0x20
sceVfpuCameraMatrix:
addiu sp,sp,-0x70
sw s3,0x5C(sp)
move s3,a0
move a0,sp
sw s2,0x58(sp)
move s2,a2
sw s1,0x54(sp)
addiu s1,sp,0x40
sw s0,0x50(sp)
move s0,a3
sw ra,0x64(sp)
sw s4,0x60(sp)
jal sceVfpuMatrix4Unit
move s4,a1
move a2,s2
move a1,s0
jal sceVfpuVector4OuterProductXYZ
move a0,s1
move a0,sp
move a1,s1
jal sceVfpuVector4NormalizeXYZ
addiu s1,sp,0x20
move a1,s2
jal sceVfpuVector4NormalizeXYZ
move a0,s1
addiu a0,sp,0x10
move a1,s1
jal sceVfpuVector4OuterProductXYZ
move a2,sp
move a2,s4
move a0,sp
jal sceVfpuMatrix4Transfer
move a1,sp
move a0,s3
jal sceVfpuMatrix4Inverse
move a1,sp
move v0,s3
lw ra,0x64(sp)
lw s4,0x60(sp)
lw s3,0x5C(sp)
lw s2,0x58(sp)
lw s1,0x54(sp)
lw s0,0x50(sp)
jr ra
addiu sp,sp,0x70
sceVfpuViewScreenMatrix:
addiu sp,sp,-0x70
lwc1 f8,0x70(sp)
sub.s f7,f18,f17
mul.s f5,f18,f19
mul.s f6,f8,f19
mul.s f4,f17,f8
sub.s f2,f8,f19
swc1 f21,0x54(sp)
mul.s f3,f6,f7
sub.s f1,f4,f5
swc1 f20,0x50(sp)
div.s f21,f3,f2
sw ra,0x44(sp)
sw s0,0x40(sp)
move s0,a0
swc1 f26,0x68(sp)
mov.s f26,f16
swc1 f25,0x64(sp)
mov.s f25,f15
swc1 f24,0x60(sp)
mov.s f24,f13
swc1 f23,0x5C(sp)
mov.s f23,f14
swc1 f22,0x58(sp)
mov.s f22,f12
jal sceVfpuMatrix4Unit
div.s f20,f1,f2
lui v0,0x88E
lwc1 f1,-0x4534(v0)
swc1 f22,0x14(s0)
move a0,sp
swc1 f1,0x2C(s0)
swc1 f1,0x38(s0)
swc1 f22,0x0(s0)
sw zero,0x28(s0)
jal sceVfpuMatrix4Unit
sw zero,0x3C(s0)
move a0,s0
move a2,s0
move a1,sp
swc1 f24,0x0(sp)
swc1 f23,0x14(sp)
swc1 f21,0x28(sp)
swc1 f25,0x30(sp)
swc1 f26,0x34(sp)
jal sceVfpuMatrix4Mul
swc1 f20,0x38(sp)
move v0,s0
lw ra,0x44(sp)
lw s0,0x40(sp)
lwc1 f26,0x68(sp)
lwc1 f25,0x64(sp)
lwc1 f24,0x60(sp)
lwc1 f23,0x5C(sp)
lwc1 f22,0x58(sp)
lwc1 f21,0x54(sp)
lwc1 f20,0x50(sp)
jr ra
addiu sp,sp,0x70
sceVfpuRotTransPers:
move v0,a0
lv.q C100,0(a1)
lv.q C110,16(a1)
lv.q C120,32(a1)
lv.q C130,48(a1)
lv.q C200,0(a2)
vtfm4.q C000,E100,C200
vrcp.s S003,S003
vscl.t C000,C000,S003
sv.q C000,0(a0)
jr ra
nop
sceVfpuRotTransPersN:
move v1,t0
lv.q C000,0(a2)
lv.q C010,16(a2)
lv.q C020,32(a2)
lv.q C030,48(a2)
pos_0881DC84:
lv.q C100,0(a3)
addiu a3,a3,0x10
vtfm4.q C200,E000,C100
vrcp.s S203,S203
vscl.t C200,C200,S203
vf2in.t C200,C200,4
mfv t0,S200
mfv t1,S201
mfv t2,S202
addiu v1,v1,-0x1
sh t0,0x0(a0)
sh t1,0x2(a0)
sh t2,0x4(a0)
bne zero,v1,pos_0881DC84
addu a0,a0,a1
jr ra
li v0,0
sceVfpuQuaternionFromMatrix:
addiu sp,sp,-0x10
sw s1,0x4(sp)
lui v1,0x88E
sw s0,0x0(sp)
move s0,a1
sw ra,0x8(sp)
lwc1 f2,0x0(a1)
lwc1 f3,0x14(a1)
lwc1 f1,0x28(a1)
lui a1,0x88E
add.s f6,f2,f3
lwc1 f4,-0x4530(a1)
add.s f5,f6,f1
add.s f12,f5,f4
lwc1 f5,-0x452C(v1)
c.lt f5,f12
nop
bc1f pos_0881DDA8
move s1,a0
sqrt.s f1,f12
c.eq f1,f1
nop
bc1f pos_0881DD98
nop
pos_0881DD28:
lui a2,0x88E
lwc1 f14,-0x4528(a2)
lui a0,0x88E
lwc1 f13,-0x4524(a0)
mul.s f7,f1,f14
lwc1 f10,0x10(s0)
lwc1 f9,0x4(s0)
lwc1 f12,0x18(s0)
div.s f11,f13,f7
lwc1 f2,0x24(s0)
lwc1 f0,0x20(s0)
lwc1 f1,0x8(s0)
sub.s f3,f9,f10
sub.s f8,f12,f2
sub.s f4,f0,f1
mul.s f10,f8,f11
mul.s f9,f4,f11
mul.s f8,f3,f11
pos_0881DD70:
move v0,s1
swc1 f10,0x0(s1)
swc1 f9,0x4(s1)
swc1 f8,0x8(s1)
swc1 f7,0xC(s1)
lw ra,0x8(sp)
lw s1,0x4(sp)
lw s0,0x0(sp)
jr ra
addiu sp,sp,0x10
pos_0881DD98:
jal sqrtf
nop
j pos_0881DD28
mov.s f1,f0
pos_0881DDA8:
c.lt f3,f2
nop
bc1f pos_0881DEB8
nop
c.lt f1,f2
nop
bc1fl pos_0881DE44
add.s f17,f1,f4
add.s f15,f2,f4
sub.s f7,f15,f3
sub.s f12,f7,f1
sqrt.s f2,f12
c.eq f2,f2
nop
bc1f pos_0881DE34
nop
pos_0881DDE8:
lui t0,0x88E
lwc1 f6,-0x4528(t0)
lui a3,0x88E
lwc1 f4,-0x4524(a3)
mul.s f10,f2,f6
lwc1 f11,0x10(s0)
lwc1 f3,0x4(s0)
lwc1 f18,0x24(s0)
div.s f6,f4,f10
lwc1 f19,0x20(s0)
lwc1 f5,0x8(s0)
lwc1 f17,0x18(s0)
add.s f16,f11,f3
add.s f1,f19,f5
sub.s f0,f17,f18
mul.s f9,f16,f6
mul.s f8,f1,f6
pos_0881DE2C:
j pos_0881DD70
mul.s f7,f0,f6
pos_0881DE34:
jal sqrtf
nop
j pos_0881DDE8
mov.s f2,f0
pos_0881DE44:
sub.s f16,f17,f2
sub.s f12,f16,f3
sqrt.s f1,f12
c.eq f1,f1
nop
bc1f pos_0881DEA8
nop
pos_0881DE60:
lui t4,0x88E
lwc1 f6,-0x4528(t4)
lui t3,0x88E
lwc1 f4,-0x4524(t3)
mul.s f8,f1,f6
lwc1 f10,0x8(s0)
lwc1 f3,0x20(s0)
lwc1 f5,0x24(s0)
div.s f6,f4,f8
lwc1 f12,0x18(s0)
lwc1 f9,0x10(s0)
lwc1 f11,0x4(s0)
add.s f19,f3,f10
add.s f18,f5,f12
sub.s f0,f11,f9
mul.s f10,f19,f6
j pos_0881DE2C
mul.s f9,f18,f6
pos_0881DEA8:
jal sqrtf
nop
j pos_0881DE60
mov.s f1,f0
pos_0881DEB8:
c.lt f1,f3
nop
bc1fl pos_0881DE44
add.s f17,f1,f4
add.s f9,f3,f4
sub.s f8,f9,f1
sub.s f12,f8,f2
sqrt.s f1,f12
c.eq f1,f1
nop
bc1f pos_0881DF2C
nop
pos_0881DEE8:
lui t2,0x88E
lwc1 f15,-0x4528(t2)
lui t1,0x88E
lwc1 f7,-0x4524(t1)
mul.s f9,f1,f15
lwc1 f2,0x4(s0)
lwc1 f1,0x10(s0)
lwc1 f0,0x24(s0)
div.s f6,f7,f9
lwc1 f10,0x20(s0)
lwc1 f13,0x8(s0)
lwc1 f14,0x18(s0)
add.s f12,f1,f2
add.s f1,f0,f14
sub.s f0,f10,f13
j pos_0881DE28
mul.s f10,f12,f6
jal sqrtf
nop
j pos_0881DEE8
mov.s f1,f0
sceVfpuQuaternionToRotZYX:
addiu sp,sp,-0x20
sw s0,0x0(sp)
lui v1,0x88E
swc1 f22,0x18(sp)
sw ra,0x4(sp)
swc1 f23,0x1C(sp)
swc1 f21,0x14(sp)
swc1 f20,0x10(sp)
lwc1 f1,0xC(a1)
lwc1 f8,0x8(a1)
lwc1 f6,0x0(a1)
add.s f9,f1,f1
add.s f3,f8,f8
lwc1 f7,0x4(a1)
lwc1 f1,-0x4520(v1)
mul.s f4,f3,f6
mul.s f0,f9,f7
sub.s f2,f4,f0
neg.s f22,f2
c.le f22,f1
nop
bc1f pos_0881DFB0
move s0,a0
lui a0,0x88E
lwc1 f5,-0x451C(a0)
c.le f5,f22
nop
bc1tl pos_0881E02C
add.s f12,f6,f6
pos_0881DFB0:
add.s f2,f7,f7
add.s f0,f6,f6
mul.s f4,f9,f6
lui a2,0x88E
mul.s f23,f2,f8
mul.s f21,f0,f6
lwc1 f20,-0x4518(a2)
mul.s f7,f3,f8
sub.s f19,f23,f4
sub.s f18,f20,f21
neg.s f12,f19
jal atan2f
sub.s f13,f18,f7
mov.s f12,f22
jal asinf
mov.s f23,f0
mov.s f22,f0
mtc1 zero,f0
swc1 f23,0x0(s0)
pos_0881DFFC:
move v0,s0
swc1 f22,0x4(s0)
swc1 f0,0x8(s0)
sw zero,0xC(s0)
lw ra,0x4(sp)
lw s0,0x0(sp)
lwc1 f23,0x1C(sp)
lwc1 f22,0x18(sp)
lwc1 f21,0x14(sp)
lwc1 f20,0x10(sp)
jr ra
addiu sp,sp,0x20
pos_0881E02C:
add.s f17,f7,f7
lui a1,0x88E
lwc1 f13,-0x4518(a1)
mul.s f16,f12,f6
mul.s f10,f3,f8
mul.s f3,f17,f7
mul.s f14,f9,f6
mul.s f11,f9,f8
mul.s f15,f17,f8
sub.s f9,f13,f16
mul.s f8,f12,f7
sub.s f6,f13,f3
add.s f12,f15,f14
sub.s f13,f9,f3
add.s f21,f8,f11
jal atan2f
sub.s f20,f6,f10
mov.s f12,f22
jal asinf
mov.s f23,f0
mov.s f12,f21
mov.s f13,f20
jal atan2f
mov.s f22,f0
j pos_0881DFFC
swc1 f23,0x0(s0)
sceVfpuQuaternionToRotXYZ:
addiu sp,sp,-0x20
sw s0,0x0(sp)
lui v1,0x88E
swc1 f22,0x18(sp)
sw ra,0x4(sp)
swc1 f23,0x1C(sp)
swc1 f21,0x14(sp)
swc1 f20,0x10(sp)
lwc1 f1,0xC(a1)
lwc1 f5,0x8(a1)
lwc1 f6,0x0(a1)
add.s f8,f1,f1
add.s f9,f5,f5
lwc1 f7,0x4(a1)
lwc1 f1,-0x4514(v1)
mul.s f0,f9,f6
mul.s f2,f8,f7
add.s f22,f0,f2
c.le f22,f1
nop
bc1f pos_0881E104
move s0,a0
lui a0,0x88E
lwc1 f3,-0x4510(a0)
c.le f3,f22
nop
bc1tl pos_0881E17C
add.s f17,f7,f7
pos_0881E104:
add.s f3,f6,f6
add.s f1,f7,f7
lui a2,0x88E
lwc1 f20,-0x450C(a2)
mul.s f21,f3,f6
mul.s f19,f9,f5
mul.s f23,f8,f6
mul.s f2,f1,f5
sub.s f5,f20,f21
add.s f12,f2,f23
jal atan2f
sub.s f13,f5,f19
mov.s f12,f22
jal asinf
mov.s f23,f0
mov.s f22,f0
mtc1 zero,f0
swc1 f23,0x0(s0)
pos_0881E14C:
move v0,s0
swc1 f22,0x4(s0)
swc1 f0,0x8(s0)
sw zero,0xC(s0)
lw ra,0x4(sp)
lw s0,0x0(sp)
lwc1 f23,0x1C(sp)
lwc1 f22,0x18(sp)
lwc1 f21,0x14(sp)
lwc1 f20,0x10(sp)
jr ra
addiu sp,sp,0x20
pos_0881E17C:
add.s f18,f6,f6
mul.s f16,f8,f6
lui a1,0x88E
mul.s f15,f17,f5
mul.s f14,f18,f6
mul.s f13,f8,f5
lwc1 f11,-0x450C(a1)
mul.s f8,f17,f7
mul.s f12,f18,f7
mul.s f6,f9,f5
sub.s f10,f15,f16
sub.s f9,f11,f14
sub.s f7,f12,f13
sub.s f4,f11,f8
neg.s f12,f10
sub.s f13,f9,f8
neg.s f20,f7
jal atan2f
sub.s f21,f4,f6
mov.s f12,f22
jal asinf
mov.s f23,f0
mov.s f12,f20
mov.s f13,f21
jal atan2f
mov.s f22,f0
j pos_0881E14C
swc1 f23,0x0(s0)
sceVfpuQuaternionToRotYXZ:
addiu sp,sp,-0x30
sw s0,0x0(sp)
lui v1,0x88E
move s0,a0
sw ra,0x4(sp)
swc1 f24,0x20(sp)
swc1 f23,0x1C(sp)
swc1 f22,0x18(sp)
swc1 f21,0x14(sp)
swc1 f20,0x10(sp)
lwc1 f1,0xC(a1)
lwc1 f4,0x4(a1)
lwc1 f6,0x8(a1)
add.s f8,f1,f1
add.s f2,f4,f4
lwc1 f9,0x0(a1)
lwc1 f1,-0x4508(v1)
mul.s f5,f2,f6
mul.s f0,f8,f9
sub.s f3,f5,f0
neg.s f7,f3
c.le f7,f1
nop
bc1f pos_0881E268
mov.s f12,f7
lui a0,0x88E
lwc1 f10,-0x4504(a0)
c.le f10,f7
nop
bc1tl pos_0881E2E8
add.s f17,f9,f9
pos_0881E268:
add.s f24,f6,f6
mul.s f5,f2,f4
mul.s f19,f8,f4
lui a2,0x88E
mul.s f18,f24,f9
lwc1 f3,-0x4500(a2)
mul.s f22,f24,f6
sub.s f23,f3,f5
sub.s f9,f18,f19
sub.s f20,f23,f22
jal asinf
neg.s f21,f9
mov.s f24,f0
mov.s f13,f20
jal atan2f
mov.s f12,f21
mov.s f22,f0
mtc1 zero,f0
swc1 f24,0x0(s0)
pos_0881E2B4:
move v0,s0
swc1 f22,0x4(s0)
swc1 f0,0x8(s0)
sw zero,0xC(s0)
lw ra,0x4(sp)
lw s0,0x0(sp)
lwc1 f24,0x20(sp)
lwc1 f23,0x1C(sp)
lwc1 f22,0x18(sp)
lwc1 f21,0x14(sp)
lwc1 f20,0x10(sp)
jr ra
addiu sp,sp,0x30
pos_0881E2E8:
add.s f16,f6,f6
mul.s f15,f8,f6
mul.s f13,f8,f4
lui a1,0x88E
mul.s f8,f17,f9
mul.s f7,f16,f6
lwc1 f6,-0x4500(a1)
mul.s f11,f2,f4
mul.s f14,f17,f4
sub.s f2,f6,f8
mul.s f4,f16,f9
add.s f21,f14,f15
sub.s f23,f2,f11
add.s f22,f4,f13
jal asinf
sub.s f20,f2,f7
mov.s f13,f23
mov.s f12,f22
jal atan2f
mov.s f24,f0
mov.s f12,f21
mov.s f13,f20
jal atan2f
mov.s f22,f0
j pos_0881E2B4
swc1 f24,0x0(s0)
sceVfpuQuaternionUnit:
move v0,a0
vidt.q C030
sv.q C030,0(a0)
jr ra
nop
sceVfpuQuaternionCopy:
lw a3,0x0(a1)
move v0,a0
sw a3,0x0(a0)
lw a2,0x4(a1)
sw a2,0x4(a0)
lw v1,0x8(a1)
sw v1,0x8(a0)
lw a2,0xC(a1)
jr ra
sw a2,0xC(a0)
sceVfpuQuaternionToMatrix:
move v0,a0
lv.q C130,0(a1)
vpfxs [W,Z,-Y,-X]
vmov.q C100,C130
vpfxs [-Z,W,X,-Y]
vmov.q C110,C130
vpfxs [Y,-X,W,-Z]
vmov.q C120,C130
vpfxs [W,Z,-Y,X]
vmov.q C200,C130
vpfxs [-Z,W,X,Y]
vmov.q C210,C130
vpfxs [Y,-X,W,Z]
vmov.q C220,C130
vpfxs [-X,-Y,-Z,W]
vmov.q C230,C130
vmmul.q E000,E200,E100
vidt.q R003
vidt.q C030
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
jr ra
nop
sceVfpuQuaternionTransform:
move v0,a0
lv.q C100,0(a1)
lv.q C200,0(a2)
vpfxs [-X,-Y,-Z,W]
vmov.q C110,C100
vqmul.q C120,C100,C200
vqmul.q C000,C120,C110
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionAdd:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vadd.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionSub:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vsub.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionMul:
move v0,a0
lv.q C010,0(a1)
lv.q C020,0(a2)
vqmul.q C000,C010,C020
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionInnerProduct:
addiu sp,sp,-0x10
lv.q C010,0(a0)
lv.q C020,0(a1)
vdot.q S000,C010,C020
sv.s S000,0(sp)
lwc1 f0,0x0(sp)
jr ra
addiu sp,sp,0x10
sceVfpuQuaternionSlerp:
move v0,a0
mfc1 t0,f12
mtv t0,S031
lv.q C010,0(a1)
lv.q C020,0(a2)
vcst.s S001,Sqrt(1/2)
vpfxd [-1:1,M,M,M]
vdot.q S000,C010,C020
vfim.s S002,0.998047
vcmp.s GE,S000,S002
bvt pos_0881E51C (CC[0])
vocp.s S030,S031
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vpfxs [|X|,Y,Z,W]
vasin.s S032,S000
bvtl pos_0881E4E4 (CC[0])
vocp.s S032,S032
vmul.s S001,S000,S000
vocp.s S001,S001
vsqrt.s S001,S001
vasin.s S032,S001
pos_0881E4E4:
vzero.s S001
lui at,0x3851
ori at,at,0xB717
mtv at,S002
vscl.p C030,C030,S032
vcmp.s LT,S000,S001
vsin.t C030,C030
vpfxs [-X,-Y,-Z,-W]
vcmovt.q C020,C020,CC[0]
vcmp.s LT,S032,S002
vrcp.s S032,S032
vscl.p C030,C030,S032
bvtl pos_0881E528 (CC[0])
vmov.q C000,C010
pos_0881E51C:
vscl.q C000,C010,S030
vscl.q C030,C020,S031
vadd.q C000,C000,C030
pos_0881E528:
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionSquad:
lui v1,0x88E
lwc1 f2,-0x44FC(v1)
add.s f3,f12,f12
addiu sp,sp,-0x20
sub.s f1,f2,f12
move v0,a0
move a0,t0
mfc1 t0,f12
mtv t0,S031
lv.q C010,0(a1)
lv.q C020,0(a2)
vcst.s S001,Sqrt(1/2)
vpfxd [-1:1,M,M,M]
vdot.q S000,C010,C020
vfim.s S002,0.998047
vcmp.s GE,S000,S002
bvt pos_0881E5DC (CC[0])
vocp.s S030,S031
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vpfxs [|X|,Y,Z,W]
vasin.s S032,S000
bvtl pos_0881E5A4 (CC[0])
vocp.s S032,S032
vmul.s S001,S000,S000
vocp.s S001,S001
vsqrt.s S001,S001
vasin.s S032,S001
pos_0881E5A4:
vzero.s S001
lui at,0x3851
ori at,at,0xB717
mtv at,S002
vscl.p C030,C030,S032
vcmp.s LT,S000,S001
vsin.t C030,C030
vpfxs [-X,-Y,-Z,-W]
vcmovt.q C020,C020,CC[0]
vcmp.s LT,S032,S002
vrcp.s S032,S032
vscl.p C030,C030,S032
bvtl pos_0881E5E8 (CC[0])
vmov.q C000,C010
pos_0881E5DC:
vscl.q C000,C010,S030
vscl.q C030,C020,S031
vadd.q C000,C000,C030
pos_0881E5E8:
sv.q C000,0(sp)
mul.s f2,f3,f1
mfc1 t0,f12
mtv t0,S031
lv.q C010,0(a3)
lv.q C020,0(a0)
vcst.s S001,Sqrt(1/2)
vpfxd [-1:1,M,M,M]
vdot.q S000,C010,C020
vfim.s S002,0.998047
vcmp.s GE,S000,S002
bvt pos_0881E67C (CC[0])
vocp.s S030,S031
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vpfxs [|X|,Y,Z,W]
vasin.s S032,S000
bvtl pos_0881E644 (CC[0])
vocp.s S032,S032
vmul.s S001,S000,S000
vocp.s S001,S001
vsqrt.s S001,S001
vasin.s S032,S001
pos_0881E644:
vzero.s S001
lui at,0x3851
ori at,at,0xB717
mtv at,S002
vscl.p C030,C030,S032
vcmp.s LT,S000,S001
vsin.t C030,C030
vpfxs [-X,-Y,-Z,-W]
vcmovt.q C020,C020,CC[0]
vcmp.s LT,S032,S002
vrcp.s S032,S032
vscl.p C030,C030,S032
bvtl pos_0881E688 (CC[0])
vmov.q C000,C010
pos_0881E67C:
vscl.q C000,C010,S030
vscl.q C030,C020,S031
vadd.q C000,C000,C030
pos_0881E688:
sv.q C000,16(sp)
mfc1 t0,f2
mtv t0,S031
lv.q C010,0(sp)
lv.q C020,16(sp)
vcst.s S001,Sqrt(1/2)
vpfxd [-1:1,M,M,M]
vdot.q S000,C010,C020
vfim.s S002,0.998047
vcmp.s GE,S000,S002
bvt pos_0881E718 (CC[0])
vocp.s S030,S031
vpfxs [|X|,Y,Z,W]
vcmp.s LT,S000,S001
vpfxs [|X|,Y,Z,W]
vasin.s S032,S000
bvtl pos_0881E6E0 (CC[0])
vocp.s S032,S032
vmul.s S001,S000,S000
vocp.s S001,S001
vsqrt.s S001,S001
vasin.s S032,S001
pos_0881E6E0:
vzero.s S001
lui at,0x3851
ori at,at,0xB717
mtv at,S002
vscl.p C030,C030,S032
vcmp.s LT,S000,S001
vsin.t C030,C030
vpfxs [-X,-Y,-Z,-W]
vcmovt.q C020,C020,CC[0]
vcmp.s LT,S032,S002
vrcp.s S032,S032
vscl.p C030,C030,S032
bvtl pos_0881E724 (CC[0])
vmov.q C000,C010
pos_0881E718:
vscl.q C000,C010,S030
vscl.q C030,C020,S031
vadd.q C000,C000,C030
pos_0881E724:
sv.q C000,0(v0)
jr ra
addiu sp,sp,0x20
sceVfpuQuaternionNormalize:
move v0,a0
lv.q C000,0(a1)
vdot.q S010,C000,C000
vrsq.s S010,S010
vscl.q C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionConj:
move v0,a0
lv.q C000,0(a1)
vneg.t C000,C000
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionInverse:
move v0,a0
lv.q C010,0(a1)
vdot.q S020,C010,C010
vrcp.s S020,S020
vpfxs [-X,-Y,-Z,W]
vscl.q C000,C010,S020
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionLn:
move v0,a0
lv.q C010,0(a1)
vdot.t S000,C010,C010
vsqrt.s S000,S000
vcmp.s EZ,S000,S000
bvtl pos_0881E7E0 (CC[0])
vone.s S000
vrcp.s S000,S000
vmul.s S001,S013,S000
vcst.s S002,Sqrt(1/2)
vcmp.s LT,S001,S002
vasin.s S002,S001
vmul.s S003,S001,S001
vcst.s S001,PI/2
vmul.s S000,S000,S001
bvtl pos_0881E7DC (CC[0])
vocp.s S003,S002
vocp.s S003,S003
vsqrt.s S003,S003
vasin.s S003,S003
pos_0881E7DC:
vmul.s S000,S003,S000
pos_0881E7E0:
vzero.s S003
vscl.t C000,C010,S000
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionExp:
move v0,a0
lv.q C010,0(a1)
vdot.t S000,C010,C010
vsqrt.s S000,S000
vcst.s S001,2/PI
vcmp.s EZ,S000,S000
vrcp.s S002,S000
vmul.s S000,S000,S001
vsin.s S001,S000
vcos.s S003,S000
vmul.s S000,S001,S002
vzero.s S001
vcmovt.s S000,S001,CC[0]
vscl.t C000,C010,S000
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionFromRotZYX:
move v0,a0
lv.q C000,0(a1)
vcst.s S010,1/PI
vscl.t C000,C000,S010
vcos.t C010,C000
vsin.t C000,C000
vcrs.t C020,C010,C010
vcrs.t C030,C000,C000
vmul.s S003,S020,S010
vmul.s S013,S030,S000
vmul.t C020,C020,C000
vmul.t C030,C030,C010
vadd.s S003,S003,S013
vpfxt [-X,Y,-Z,W]
vadd.t C000,C020,C030
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionFromRotXYZ:
move v0,a0
lv.q C000,0(a1)
vcst.s S010,1/PI
vscl.t C000,C000,S010
vcos.t C010,C000
vsin.t C000,C000
vcrs.t C020,C010,C010
vcrs.t C030,C000,C000
vmul.s S003,S020,S010
vmul.s S013,S030,S000
vmul.t C020,C020,C000
vmul.t C030,C030,C010
vsub.s S003,S003,S013
vpfxt [X,-Y,Z,W]
vadd.t C000,C020,C030
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionFromRotYXZ:
move v0,a0
lv.q C000,0(a1)
vcst.s S010,1/PI
vscl.t C000,C000,S010
vcos.t C010,C000
vsin.t C000,C000
vcrs.t C020,C010,C010
vcrs.t C030,C000,C000
vmul.s S003,S020,S010
vmul.s S013,S030,S000
vmul.t C020,C020,C000
vmul.t C030,C030,C010
vadd.s S003,S003,S013
vpfxt [X,-Y,-Z,W]
vadd.t C000,C020,C030
sv.q C000,0(a0)
jr ra
nop
sceVfpuQuaternionFromRotate:
move v0,a0
lv.q C000,0(a1)
mfc1 t0,f12
vdot.q S010,C000,C000
vcst.s S020,1/PI
mtv t0,S021
vmul.s S020,S020,S021
vcos.s S003,S020
vsin.s S020,S020
vrsq.s S010,S010
vmul.s S010,S010,S020
vscl.t C000,C000,S010
sv.q C000,0(a0)
jr ra
nop
sceVfpuMemcpy:
beq a2,zero,pos_0881EA4C
move a3,a0
andi v1,a0,0x3F
beq v1,zero,pos_0881E984
nop
lbu v1,0x0(a1)
pos_0881E964:
addiu a2,a2,-0x1
addiu a1,a1,0x1
sb v1,0x0(a3)
addiu a3,a3,0x1
beq a2,zero,pos_0881EA4C
andi v0,a3,0x3F
bnel v0,zero,pos_0881E964
lbu v1,0x0(a1)
pos_0881E984:
beq a2,zero,pos_0881EA4C
nop
sltiu t0,a2,0x40
bne t0,zero,pos_0881EA34
lui t1,0x4000
andi t0,a1,0xF
li v0,0x4
move t2,t1
ins t2,a3,0x0,0x1D
beq t0,v0,pos_0881EC00
sltiu t3,t0,0x5
beq t3,zero,pos_0881EB18
li t4,0x8
beq t0,zero,pos_0881EA54
nop
cache func=27,a3(0x0)
addiu a3,a3,0x40
addiu a2,a2,-0x40
sync ---unknown---
lwr t0,0x0(a1)
sv.q C000,0(t2),wb
sv.q C010,16(t2),wb
sv.q C020,32(t2),wb
sv.q C030,48(t2),wb
sv.q C100,64(t2),wb
sv.q C110,80(t2),wb
sv.q C120,96(t2),wb
sv.q C130,112(t2),wb
addiu t2,t2,0x80
bne t0,zero,pos_0881EA60
vflush
srl t0,a2,0x6
beq t0,zero,pos_0881EB08
nop
cache func=27,a3(0x0)
lv.q C000,0(a1)
lv.q C010,16(a1)
lv.q C020,32(a1)
lv.q C030,48(a1)
addiu a3,a3,0x40
addiu a1,a1,0x40
addiu a2,a2,-0x40
sync ---unknown---
sv.q C000,0(t2),wb
sv.q C010,16(t2),wb
sv.q C020,32(t2),wb
sv.q C030,48(t2),wb
pos_0881EB08:
vflush
vflush
j pos_0881EA2C
nop
beq t0,t4,pos_0881EB8C
li t5,0xC
bne t0,t5,pos_0881E9C0
nop
pos_0881EB28:
cache func=27,a3(0x0)
lv.s S000,0(a1)
lv.q C100,4(a1)
lv.q C110,20(a1)
lv.q C120,36(a1)
lv.q C130,52(a1)
vmmov.t E001,E100
vmov.t R010,R103
vmov.t C031,C130
addiu a3,a3,0x40
addiu a1,a1,0x40
addiu a2,a2,-0x40
srl t0,a2,0x6
sync ---unknown---
sv.q C000,0(t2),wb
sv.q C010,16(t2),wb
sv.q C020,32(t2),wb
sv.q C030,48(t2),wb
addiu t2,t2,0x40
bne t0,zero,pos_0881EB28
vflush
vflush
vflush
j pos_0881EA2C
nop
pos_0881EB8C:
cache func=27,a3(0x0)
lv.s S000,0(a1)
lv.s S001,4(a1)
lv.q C100,8(a1)
lv.q C110,24(a1)
lv.q C120,40(a1)
lv.q C130,56(a1)
vmmov.p E002,E100
vmov.p C010,C102
vmov.p C020,C112
vmov.p C022,C120
vmov.p C030,C122
vmov.p C032,C130
addiu a3,a3,0x40
addiu a1,a1,0x40
addiu a2,a2,-0x40
srl t0,a2,0x6
sync ---unknown---
sv.q C000,0(t2),wb
sv.q C010,16(t2),wb
sv.q C020,32(t2),wb
sv.q C030,48(t2),wb
addiu t2,t2,0x40
bne t0,zero,pos_0881EB8C
vflush
vflush
vflush
j pos_0881EA2C
nop
pos_0881EC00:
addiu a2,a2,-0x40
cache func=27,a3(0x0)
lv.q C100,-4(a1)
lv.q C110,12(a1)
lv.q C120,28(a1)
lv.q C130,44(a1)
lv.s S033,60(a1)
vmmov.t E000,E101
vmov.t R003,R110
vmov.t C030,C131
addiu a3,a3,0x40
addiu a1,a1,0x40
srl t0,a2,0x6
sync ---unknown---
sv.q C000,0(t2),wb
sv.q C010,16(t2),wb
sv.q C020,32(t2),wb
sv.q C030,48(t2),wb
addiu t2,t2,0x40
bne t0,zero,pos_0881EC00
vflush
vflush
vflush
j pos_0881EA2C
nop
sceVfpuInit:
addiu sp,sp,-0x240
lui v0,0x7F80
ori a0,v0,0x1
move t1,sp
move v0,sp
li v1,0x1F
pos_0881EC7C:
addiu v1,v1,-0x1
sw a0,0x0(v0)
sw a0,0x4(v0)
sw a0,0x8(v0)
sw a0,0xC(v0)
bgez v1,pos_0881EC7C
addiu v0,v0,0x10
lui a1,0x3F80
lui a2,0x3F80
lui a3,0x3F80
lui t8,0x3F80
addiu t2,t1,0x220
lui t3,0x3F80
li t6,0xE4
ori t7,a1,0x1
ori t5,a2,0x2
ori t4,a3,0x4
ori a0,t8,0x8
li t0,0x3F
sw t7,0x220(t1)
sw t6,0x204(t1)
sw t0,0x20C(t1)
sw t6,0x200(t1)
sw zero,0x208(t1)
sw zero,0x210(t1)
sw t3,0x1C(t2)
sw t5,0x4(t2)
sw t4,0x8(t2)
sw a0,0xC(t2)
sw t3,0x10(t2)
sw t3,0x14(t2)
sw t3,0x18(t2)
lv.q C000,0(sp)
lv.q C010,16(sp)
lv.q C020,32(sp)
lv.q C030,48(sp)
lv.q C100,64(sp)
lv.q C110,80(sp)
lv.q C120,96(sp)
lv.q C130,112(sp)
lv.q C200,128(sp)
lv.q C210,144(sp)
lv.q C220,160(sp)
lv.q C230,176(sp)
lv.q C300,192(sp)
lv.q C310,208(sp)
lv.q C320,224(sp)
lv.q C330,240(sp)
lv.q C400,256(sp)
lv.q C410,272(sp)
lv.q C420,288(sp)
lv.q C430,304(sp)
lv.q C500,320(sp)
lv.q C510,336(sp)
lv.q C520,352(sp)
lv.q C530,368(sp)
lv.q C600,384(sp)
lv.q C610,400(sp)
lv.q C620,416(sp)
lv.q C630,432(sp)
lv.q C700,448(sp)
lv.q C710,464(sp)
lv.q C720,480(sp)
lv.q C730,496(sp)
addiu v1,sp,0x200
lw t0,0x0(v1)
lw t1,0x4(v1)
lw t2,0x8(v1)
lw t3,0xC(v1)
mtvc t0,SPFX
mtvc t1,TPFX
mtvc t2,DPFX
mtvc t3,CC
lw t0,0x10(v1)
mtvc t0,INF4
lw t0,0x220(sp)
mtvc t0,RCX0
lw t0,0x224(sp)
mtvc t0,RCX1
lw t0,0x228(sp)
mtvc t0,RCX2
lw t0,0x22C(sp)
mtvc t0,RCX3
lw t0,0x230(sp)
mtvc t0,RCX4
lw t0,0x234(sp)
mtvc t0,RCX5
lw t0,0x238(sp)
mtvc t0,RCX6
lw t0,0x23C(sp)
mtvc t0,RCX7
li v0,0
jr ra
addiu sp,sp,0x240
sceVfpuInitializeContext:
lui v0,0x7F80
move t2,a0
ori v1,v0,0x1
move v0,a0
li a0,0x1F
pos_0881EE08:
addiu a0,a0,-0x1
sw v1,0x0(v0)
sw v1,0x4(v0)
sw v1,0x8(v0)
sw v1,0xC(v0)
bgez a0,pos_0881EE08
addiu v0,v0,0x10
lui a2,0x3F80
lui a3,0x3F80
lui t0,0x3F80
lui t7,0x3F80
addiu t3,t2,0x220
lui a0,0x3F80
li t6,0xE4
ori v1,a2,0x1
ori t5,a3,0x2
ori t4,t0,0x4
ori a1,t7,0x8
li t1,0x3F
li v0,0
sw v1,0x220(t2)
sw t6,0x204(t2)
sw t1,0x20C(t2)
sw t6,0x200(t2)
sw zero,0x208(t2)
sw zero,0x210(t2)
sw a0,0x1C(t3)
sw t5,0x4(t3)
sw t4,0x8(t3)
sw a1,0xC(t3)
sw a0,0x10(t3)
sw a0,0x14(t3)
jr ra
sw a0,0x18(t3)
sceVfpuSaveContext:
sv.q C000,0(a0)
sv.q C010,16(a0)
sv.q C020,32(a0)
sv.q C030,48(a0)
sv.q C100,64(a0)
sv.q C110,80(a0)
sv.q C120,96(a0)
sv.q C130,112(a0)
sv.q C200,128(a0)
sv.q C210,144(a0)
sv.q C220,160(a0)
sv.q C230,176(a0)
sv.q C300,192(a0)
sv.q C310,208(a0)
sv.q C320,224(a0)
sv.q C330,240(a0)
sv.q C400,256(a0)
sv.q C410,272(a0)
sv.q C420,288(a0)
sv.q C430,304(a0)
sv.q C500,320(a0)
sv.q C510,336(a0)
sv.q C520,352(a0)
sv.q C530,368(a0)
sv.q C600,384(a0)
sv.q C610,400(a0)
sv.q C620,416(a0)
sv.q C630,432(a0)
sv.q C700,448(a0)
sv.q C710,464(a0)
sv.q C720,480(a0)
sv.q C730,496(a0)
addiu v1,a0,0x200
mfvc t0,SPFX
mfvc t1,TPFX
mfvc t2,DPFX
mfvc t3,CC
sw t0,0x0(v1)
sw t1,0x4(v1)
sw t2,0x8(v1)
sw t3,0xC(v1)
mfvc t0,INF4
sw t0,0x10(v1)
mfvc t0,RCX0
sw t0,0x220(a0)
mfvc t0,RCX1
sw t0,0x224(a0)
mfvc t0,RCX2
sw t0,0x228(a0)
mfvc t0,RCX3
sw t0,0x22C(a0)
mfvc t0,RCX4
sw t0,0x230(a0)
mfvc t0,RCX5
sw t0,0x234(a0)
mfvc t0,RCX6
sw t0,0x238(a0)
mfvc t0,RCX7
sw t0,0x23C(a0)
jr ra
li v0,0
sceVfpuRestoreContext:
lv.q C000,0(a0)
lv.q C010,16(a0)
lv.q C020,32(a0)
lv.q C030,48(a0)
lv.q C100,64(a0)
lv.q C110,80(a0)
lv.q C120,96(a0)
lv.q C130,112(a0)
lv.q C200,128(a0)
lv.q C210,144(a0)
lv.q C220,160(a0)
lv.q C230,176(a0)
lv.q C300,192(a0)
lv.q C310,208(a0)
lv.q C320,224(a0)
lv.q C330,240(a0)
lv.q C400,256(a0)
lv.q C410,272(a0)
lv.q C420,288(a0)
lv.q C430,304(a0)
lv.q C500,320(a0)
lv.q C510,336(a0)
lv.q C520,352(a0)
lv.q C530,368(a0)
lv.q C600,384(a0)
lv.q C610,400(a0)
lv.q C620,416(a0)
lv.q C630,432(a0)
lv.q C700,448(a0)
lv.q C710,464(a0)
lv.q C720,480(a0)
lv.q C730,496(a0)
addiu v1,a0,0x200
lw t0,0x0(v1)
lw t1,0x4(v1)
lw t2,0x8(v1)
lw t3,0xC(v1)
mtvc t0,SPFX
mtvc t1,TPFX
mtvc t2,DPFX
mtvc t3,CC
lw t0,0x10(v1)
mtvc t0,INF4
lw t0,0x220(a0)
mtvc t0,RCX0
lw t0,0x224(a0)
mtvc t0,RCX1
lw t0,0x228(a0)
mtvc t0,RCX2
lw t0,0x22C(a0)
mtvc t0,RCX3
lw t0,0x230(a0)
mtvc t0,RCX4
lw t0,0x234(a0)
mtvc t0,RCX5
lw t0,0x238(a0)
mtvc t0,RCX6
lw t0,0x23C(a0)
mtvc t0,RCX7
jr ra
li v0,0
sceVfpuRandInitializeContext:
lui a2,0x3F80
lui a3,0x3F80
lui t0,0x3F80
lui v0,0x3F80
lui t1,0x3F80
ori v1,v0,0x8
ori t4,a2,0x1
ori t3,a3,0x2
ori t2,t0,0x4
li v0,0
sw t1,0x1C(a0)
sw t4,0x0(a0)
sw t3,0x4(a0)
sw t2,0x8(a0)
sw v1,0xC(a0)
sw t1,0x10(a0)
sw t1,0x14(a0)
jr ra
sw t1,0x18(a0)
sceVfpuRandSaveContext:
mfvc t0,RCX0
sw t0,0x0(a0)
mfvc t0,RCX1
sw t0,0x4(a0)
mfvc t0,RCX2
sw t0,0x8(a0)
mfvc t0,RCX3
sw t0,0xC(a0)
mfvc t0,RCX4
sw t0,0x10(a0)
mfvc t0,RCX5
sw t0,0x14(a0)
mfvc t0,RCX6
sw t0,0x18(a0)
mfvc t0,RCX7
sw t0,0x1C(a0)
jr ra
li v0,0
sceVfpuRandRestoreContext:
lw t0,0x0(a0)
mtvc t0,RCX0
lw t0,0x4(a0)
mtvc t0,RCX1
lw t0,0x8(a0)
mtvc t0,RCX2
lw t0,0xC(a0)
mtvc t0,RCX3
lw t0,0x10(a0)
mtvc t0,RCX4
lw t0,0x14(a0)
mtvc t0,RCX5
lw t0,0x18(a0)
mtvc t0,RCX6
lw t0,0x1C(a0)
mtvc t0,RCX7
jr ra
li v0,0
sceVfpuMemset:
lui t0,0x4000
move v0,a0
move v1,t0
ins v1,a0,0x0,0x1D
ins a1,a1,0x8,0x8
ins a1,a1,0x10,0x10
mtv a1,S000
vpfxs [X,X,X,X]
vmov.q C000,C000
andi t0,a0,0x3F
beq t0,zero,pos_0881F19C
nop
beq a2,zero,pos_0881F1EC
addiu a2,a2,-0x1
sb a1,0x0(a0)
addiu a0,a0,0x1
j pos_0881F178
addiu v1,v1,0x1
sltiu t0,a2,0x40
bne t0,zero,pos_0881F1D8
nop
pos_0881F1A8:
cache func=27,a0(0x0)
addiu a0,a0,0x40
addiu a2,a2,-0x40
sltiu t0,a2,0x40
sync ---unknown---
sv.q C000,0(v1),wb
sv.q C000,16(v1),wb
sv.q C000,32(v1),wb
sv.q C000,48(v1),wb
addiu v1,v1,0x40
beq t0,zero,pos_0881F1A8
vflush
pos_0881F1D8:
beq a2,zero,pos_0881F1EC
pos_0881F1DC:
addiu a2,a2,-0x1
sb a1,0x0(a0)
bne a2,zero,pos_0881F1DC
addiu a0,a0,0x1
pos_0881F1EC:
vflush
vflush
jr ra
nop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment