psxsdk/libmeidogte/vectornormals.s

108 lines
2.7 KiB
ArmAsm

.set noreorder
.set noat
.include "gtereg.h"
.include "inline_s.h"
.section .text
.global VectorNormalS
.type VectorNormalS, @function
VectorNormalS:
lw $t0, 0($a0)
lw $t1, 4($a0)
lw $t2, 8($a0)
mtc2 $t0, C2_IR1
mtc2 $t1, C2_IR2
mtc2 $t2, C2_IR3
nSQR(0)
mfc2 $t3, C2_MAC1
mfc2 $t4, C2_MAC2
mfc2 $t5, C2_MAC3
add $t3, $t4
add $v0, $t3, $t5
mtc2 $v0, C2_LZCS
nop
nop
mfc2 $v1, C2_LZCR
addiu $at, $0 , -2
and $v1, $at
addiu $t6, $0 , 0x1f
sub $t6, $v1
sra $t6, 1
addiu $t3, $v1, -24
bltz $t3, $value_neg
nop
b $value_pos
sllv $t4, $v0, $t3
$value_neg:
addiu $t3, $0 , 24
sub $t3, $v1
srav $t4, $v0, $t3
$value_pos:
addi $t4, -64
sll $t4, 1
la $t5, _norm_table
addu $t5, $t4
lh $t5, 0($t5)
nop
mtc2 $t5, C2_IR0
mtc2 $t0, C2_IR1
mtc2 $t1, C2_IR2
mtc2 $t2, C2_IR3
nGPF(0)
mfc2 $t0, C2_MAC1
mfc2 $t1, C2_MAC2
mfc2 $t2, C2_MAC3
sra $t0, $t6
sra $t1, $t6
sra $t2, $t6
sh $t0, 0($a1)
sh $t1, 2($a1)
jr $ra
sh $t2, 4($a1)
.section .data
_norm_table:
.hword 0x1000, 0x0FE0, 0x0FC1, 0x0FA3, 0x0F85, 0x0F68, 0x0F4C, 0x0F30
.hword 0x0F15, 0x0EFB, 0x0EE1, 0x0EC7, 0x0EAE, 0x0E96, 0x0E7E, 0x0E66
.hword 0x0E4F, 0x0E38, 0x0E22, 0x0E0C, 0x0DF7, 0x0DE2, 0x0DCD, 0x0DB9
.hword 0x0DA5, 0x0D91, 0x0D7E, 0x0D6B, 0x0D58, 0x0D45, 0x0D33, 0x0D21
.hword 0x0D10, 0x0CFF, 0x0CEE, 0x0CDD, 0x0CCC, 0x0CBC, 0x0CAC, 0x0C9C
.hword 0x0C8D, 0x0C7D, 0x0C6E, 0x0C5F, 0x0C51, 0x0C42, 0x0C34, 0x0C26
.hword 0x0C18, 0x0C0A, 0x0BFD, 0x0BEF, 0x0BE2, 0x0BD5, 0x0BC8, 0x0BBB
.hword 0x0BAF, 0x0BA2, 0x0B96, 0x0B8A, 0x0B7E, 0x0B72, 0x0B67, 0x0B5B
.hword 0x0B50, 0x0B45, 0x0B39, 0x0B2E, 0x0B24, 0x0B19, 0x0B0E, 0x0B04
.hword 0x0AF9, 0x0AEF, 0x0AE5, 0x0ADB, 0x0AD1, 0x0AC7, 0x0ABD, 0x0AB4
.hword 0x0AAA, 0x0AA1, 0x0A97, 0x0A8E, 0x0A85, 0x0A7C, 0x0A73, 0x0A6A
.hword 0x0A61, 0x0A59, 0x0A50, 0x0A47, 0x0A3F, 0x0A37, 0x0A2E, 0x0A26
.hword 0x0A1E, 0x0A16, 0x0A0E, 0x0A06, 0x09FE, 0x09F6, 0x09EF, 0x09E7
.hword 0x09E0, 0x09D8, 0x09D1, 0x09C9, 0x09C2, 0x09BB, 0x09B4, 0x09AD
.hword 0x09A5, 0x099E, 0x0998, 0x0991, 0x098A, 0x0983, 0x097C, 0x0976
.hword 0x096F, 0x0969, 0x0962, 0x095C, 0x0955, 0x094F, 0x0949, 0x0943
.hword 0x093C, 0x0936, 0x0930, 0x092A, 0x0924, 0x091E, 0x0918, 0x0912
.hword 0x090D, 0x0907, 0x0901, 0x08FB, 0x08F6, 0x08F0, 0x08EB, 0x08E5
.hword 0x08E0, 0x08DA, 0x08D5, 0x08CF, 0x08CA, 0x08C5, 0x08BF, 0x08BA
.hword 0x08B5, 0x08B0, 0x08AB, 0x08A6, 0x08A1, 0x089C, 0x0897, 0x0892
.hword 0x088D, 0x0888, 0x0883, 0x087E, 0x087A, 0x0875, 0x0870, 0x086B
.hword 0x0867, 0x0862, 0x085E, 0x0859, 0x0855, 0x0850, 0x084C, 0x0847
.hword 0x0843, 0x083E, 0x083A, 0x0836, 0x0831, 0x082D, 0x0829, 0x0824
.hword 0x0820, 0x081C, 0x0818, 0x0814, 0x0810, 0x080C, 0x0808, 0x0804