psp fixes, gamma
[libpicofe.git] / psp / asm_utils.s
CommitLineData
93c0d147 1# vim:filetype=mips
2
3# some asm utils
4# (c) Copyright 2007, Grazvydas "notaz" Ignotas
5# All Rights Reserved
6
7.set noreorder
8.set noat
9
10.data
11.align 4
12
13.byte 0, 1, 6, 11, 16, 21, 26, 31 # -4
14.byte 0, 2, 7, 12, 16, 21, 26, 31 # -3
15.byte 0, 3, 7, 12, 17, 22, 26, 31 # -2
16.byte 0, 4, 8, 13, 17, 22, 26, 31 # -1
17gmtab:
18.byte 0, 5, 10, 15, 16, 21, 26, 31 # 0
19.byte 0, 6, 10, 15, 19, 23, 27, 31
20.byte 0, 7, 11, 15, 19, 23, 27, 31
21.byte 0, 8, 12, 16, 19, 23, 27, 31
22.byte 0, 9, 12, 16, 20, 24, 27, 31
23.byte 0, 10, 13, 17, 20, 24, 27, 31
24.byte 0, 10, 14, 17, 21, 24, 28, 31
25.byte 0, 11, 15, 18, 21, 24, 28, 31
26.byte 0, 12, 15, 18, 22, 25, 28, 31
27.byte 0, 13, 16, 19, 22, 25, 28, 31
28.byte 0, 14, 17, 20, 22, 25, 28, 31 # 10
29.byte 0, 15, 17, 20, 23, 26, 28, 31
30.byte 0, 16, 18, 21, 23, 26, 28, 31
31.byte 0, 16, 19, 21, 24, 26, 29, 31
32.byte 0, 17, 20, 22, 24, 26, 29, 31
33.byte 0, 18, 20, 22, 25, 27, 29, 31
34.byte 0, 19, 21, 23, 25, 27, 29, 31 # 16
35
36.text
37.align 4
38
39# bbbb bggg gggr rrrr
40
41.global do_pal_convert # dest, src, gammaa_val
42
43do_pal_convert:
44 bnez $a2, dpc_gma
45 li $t0, 64/2
46 lui $t2, 0x00e
47 ori $t2, 0x00e
48 lui $t3, 0x006
49 ori $t3, 0x006
50 lui $t4, 0x0e0
51 ori $t4, 0x0e0
52 lui $t6, 0xe00
53 ori $t6, 0xe00
54 lui $t7, 0x600
55 ori $t7, 0x600
56
57dpc_loop:
58 lw $v0, 0($a1)
59 addiu $a1, 4
60 and $v1, $v0, $t2 # r
61 sll $v1, 1
62 and $t9, $v0, $t3
63 srl $t9, 1
64 or $v1, $t9 # r
65 and $t9, $v0, $t4 # g
66 sll $t8, $t9, 3
67 or $v1, $t8
68 or $v1, $t9 # g
69 and $t9, $v0, $t6 # b
70 sll $t9, 4
71 or $v1, $t9
72 and $t9, $v0, $t7
73 sll $t9, 2
74 or $v1, $t9 # b
75 sw $v1, 0($a0)
76 addiu $t0, -1
77 bnez $t0, dpc_loop
78 addiu $a0, 4
79
80 jr $ra
81 nop
82
83dpc_gma:
84 sll $a2, 3
85 lui $t1, %hi(gmtab)
86 addiu $t1, %lo(gmtab)
87 addu $a2, $t1
88
89dpc_gma_loop:
90 lw $v0, 0($a1)
91 addiu $a1, 4
92 ext $v1, $v0, 1, 3
93 addu $v1, $a2
94 lb $v1, 0($v1)
95 ext $t1, $v0, 5, 3
96 addu $t1, $a2
97 lb $t1, 0($t1)
98 ext $t2, $v0, 9, 3
99 addu $t2, $a2
100 lb $t2, 0($t2)
101 ext $t3, $v0, 17, 3
102 addu $t3, $a2
103 lb $t3, 0($t3)
104 ext $t4, $v0, 21, 3
105 addu $t4, $a2
106 lb $t4, 0($t4)
107 ext $t5, $v0, 25, 3
108 addu $t5, $a2
109 lb $t5, 0($t5)
110 ins $v1, $t1, 6, 5
111 ins $v1, $t2, 11, 5
112 ins $v1, $t3, 16, 5
113 ins $v1, $t4, 22, 5
114 ins $v1, $t5, 27, 5
115 sw $v1, 0($a0)
116 addiu $t0, -1
117 bnez $t0, dpc_gma_loop
118 addiu $a0, 4
119
120 jr $ra
121 nop
122