diff options
| -rw-r--r-- | libpsn00b/psxgte/scalematrixl.s | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/libpsn00b/psxgte/scalematrixl.s b/libpsn00b/psxgte/scalematrixl.s new file mode 100644 index 0000000..014b85a --- /dev/null +++ b/libpsn00b/psxgte/scalematrixl.s @@ -0,0 +1,68 @@ +.set noreorder + +.include "gtereg.h" +.include "inline_s.h" + +.section .text + + +.global ScaleMatrixL +.type ScaleMatrixL, @function +ScaleMatrixL: + + lwc2 C2_IR0, 0($a1) # X + + lh $v0, 2*(0+(3*0))($a0) + lh $v1, 2*(1+(3*0))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(2+(3*0))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(0+(3*0))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(1+(3*0))($a0) + sh $v0, 2*(2+(3*0))($a0) + + lwc2 C2_IR0, 4($a1) # Y + + lh $v0, 2*(0+(3*1))($a0) + lh $v1, 2*(1+(3*1))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(2+(3*1))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(0+(3*1))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(1+(3*1))($a0) + sh $v0, 2*(2+(3*1))($a0) + + lwc2 C2_IR0, 8($a1) # Z + + lh $v0, 2*(0+(3*2))($a0) + lh $v1, 2*(1+(3*2))($a0) + mtc2 $v0, C2_IR1 + lh $v0, 2*(2+(3*2))($a0) + mtc2 $v1, C2_IR2 + mtc2 $v0, C2_IR3 + + nGPF(1) + + mfc2 $v0, C2_IR1 + mfc2 $v1, C2_IR2 + sh $v0, 2*(0+(3*2))($a0) + mfc2 $v0, C2_IR3 + sh $v1, 2*(1+(3*2))($a0) + sh $v0, 2*(2+(3*2))($a0) + + jr $ra + move $v0, $a0 |
