minor 68k timing tuning
[picodrive.git] / platform / psp / asm_utils.s
CommitLineData
2445b7cb 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
6fc57144 17pal_gmtab:
2445b7cb 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
6fc57144 41#.global pal_gmtab
42.global do_pal_convert # dest, src, gammaa_val, black_lvl
2445b7cb 43
44do_pal_convert:
45 bnez $a2, dpc_gma
46 li $t0, 64/2
6fc57144 47 bnez $a3, dpc_gma
2445b7cb 48 lui $t2, 0x00e
49 ori $t2, 0x00e
50 lui $t3, 0x006
51 ori $t3, 0x006
52 lui $t4, 0x0e0
53 ori $t4, 0x0e0
54 lui $t6, 0xe00
55 ori $t6, 0xe00
56 lui $t7, 0x600
57 ori $t7, 0x600
58
59dpc_loop:
60 lw $v0, 0($a1)
61 addiu $a1, 4
62 and $v1, $v0, $t2 # r
63 sll $v1, 1
64 and $t9, $v0, $t3
65 srl $t9, 1
66 or $v1, $t9 # r
67 and $t9, $v0, $t4 # g
68 sll $t8, $t9, 3
69 or $v1, $t8
70 or $v1, $t9 # g
71 and $t9, $v0, $t6 # b
72 sll $t9, 4
73 or $v1, $t9
74 and $t9, $v0, $t7
75 sll $t9, 2
76 or $v1, $t9 # b
77 sw $v1, 0($a0)
78 addiu $t0, -1
79 bnez $t0, dpc_loop
80 addiu $a0, 4
81
82 jr $ra
83 nop
84
6fc57144 85# non-zero gamma
2445b7cb 86dpc_gma:
6fc57144 87 slt $t2, $a2, $0
2445b7cb 88 sll $a2, 3
6fc57144 89 lui $t1, %hi(pal_gmtab)
90 addiu $t1, %lo(pal_gmtab)
2445b7cb 91 addu $a2, $t1
6fc57144 92 beqz $a3, dpc_gma_loop
93 sb $0, 0($a2) # black level 0
94 bnez $t2, dpc_gma_loop # gamma < 0, keep black at 0
95 addiu $a3, -2
96 slt $t2, $a3, $0 # t2 = a3_orig == 1 ? 1 : 0
97 lb $t1, 1($a2)
98 addiu $t1, -2
99 srlv $t1, $t1, $t2
100 sb $t1, 0($a2)
2445b7cb 101
102dpc_gma_loop:
103 lw $v0, 0($a1)
104 addiu $a1, 4
105 ext $v1, $v0, 1, 3
106 addu $v1, $a2
107 lb $v1, 0($v1)
108 ext $t1, $v0, 5, 3
109 addu $t1, $a2
110 lb $t1, 0($t1)
111 ext $t2, $v0, 9, 3
112 addu $t2, $a2
113 lb $t2, 0($t2)
114 ext $t3, $v0, 17, 3
115 addu $t3, $a2
116 lb $t3, 0($t3)
117 ext $t4, $v0, 21, 3
118 addu $t4, $a2
119 lb $t4, 0($t4)
120 ext $t5, $v0, 25, 3
121 addu $t5, $a2
122 lb $t5, 0($t5)
123 ins $v1, $t1, 6, 5
124 ins $v1, $t2, 11, 5
125 ins $v1, $t3, 16, 5
126 ins $v1, $t4, 22, 5
127 ins $v1, $t5, 27, 5
128 sw $v1, 0($a0)
129 addiu $t0, -1
130 bnez $t0, dpc_gma_loop
131 addiu $a0, 4
132
133 jr $ra
134 nop
135