cspace_neon: convert to .S
[pcsx_rearmed.git] / frontend / cspace_neon.S
CommitLineData
a327967e 1/*
2 * (C) GraÅžvydas "notaz" Ignotas, 2010
3 *
69af03a2 4 * This work is licensed under the terms of any of these licenses
5 * (at your option):
6 * - GNU GPL, version 2 or later.
7 * - GNU LGPL, version 2.1 or later.
a327967e 8 * See the COPYING file in the top-level directory.
9 */
10
e5ed711c 11#include "arm_features.h"
12
a327967e 13.text
14.align 2
15
16.global bgr555_to_rgb565
17bgr555_to_rgb565:
30f6e5ed 18 pld [r1]
d352cde2 19 mov r3, #0x07c0
a327967e 20 vdup.16 q15, r3
69f0df9c 21 subs r2, r2, #64
22 blt btr16_end64
a327967e 230:
30f6e5ed 24 pld [r1, #64*2]
a327967e 25 vldmia r1!, {q0-q3}
d352cde2 26 vshl.u16 q4, q0, #11
27 vshl.u16 q5, q1, #11
28 vshl.u16 q6, q2, #11
29 vshl.u16 q7, q3, #11
30 vsri.u16 q4, q0, #10
31 vsri.u16 q5, q1, #10
32 vsri.u16 q6, q2, #10
33 vsri.u16 q7, q3, #10
a327967e 34 vshl.u16 q0, q0, #1
35 vshl.u16 q1, q1, #1
36 vshl.u16 q2, q2, #1
37 vshl.u16 q3, q3, #1
d352cde2 38 vbit q4, q0, q15
39 vbit q5, q1, q15
40 vbit q6, q2, q15
41 vbit q7, q3, q15
42 vstmia r0!, {q4-q7}
43 subs r2, r2, #64
44 bge 0b
45
69f0df9c 46btr16_end64:
d352cde2 47 adds r2, r2, #64
48 bxeq lr
69f0df9c 49 subs r2, r2, #16
50 blt btr16_end16
d352cde2 51
69f0df9c 52 @ handle the remainder (reasonably rare)
d352cde2 530:
69f0df9c 54 vld1.16 {q0}, [r1]!
d352cde2 55 vshl.u16 q1, q0, #11
56 vshl.u16 q2, q0, #1
57 vsri.u16 q1, q0, #10
58 vbit q1, q2, q15
59 subs r2, r2, #16
69f0df9c 60 vst1.16 {q1}, [r0]!
61 bge 0b
62
63btr16_end16:
64 adds r2, r2, #16
65 bxeq lr
66 subs r2, r2, #8
67 bxlt lr
a327967e 68
69f0df9c 69 @ very rare
70 vld1.16 d0, [r1]!
71 vshl.u16 d1, d0, #11
72 vshl.u16 d2, d0, #1
73 vsri.u16 d1, d0, #10
74 vbit d1, d2, d30
75 vst1.16 d1, [r0]!
a327967e 76 bx lr
77
1972732a 78
79.global bgr888_to_rgb888
80bgr888_to_rgb888:
30f6e5ed 81 pld [r1]
1972732a 82 @ r2 /= 48
83 mov r2, r2, lsr #4
84 movw r3, #0x5556
85 movt r3, #0x5555
86 umull r12,r2, r3, r2
870:
30f6e5ed 88 pld [r1, #48*3]
1972732a 89 vld3.8 {d0-d2}, [r1, :64]!
90 vld3.8 {d3-d5}, [r1, :64]!
91 vswp d0, d2
92 vswp d3, d5
93 vst3.8 {d0-d2}, [r0, :64]!
94 vst3.8 {d3-d5}, [r0, :64]!
95 subs r2, r2, #1
96 bne 0b
97
98 bx lr
99
100
f3a63e25 101.global bgr888_to_rgb565
102bgr888_to_rgb565:
30f6e5ed 103 pld [r1]
f3a63e25 104 @ r2 /= 48
105 mov r2, r2, lsr #4
106 movw r3, #0x5556
107 movt r3, #0x5555
108 umull r12,r2, r3, r2
109
110 mov r3, #0x07e0
111 vdup.16 q15, r3
1120:
30f6e5ed 113 pld [r1, #48*3]
f3a63e25 114 vld3.8 {d1-d3}, [r1, :64]!
115 vld3.8 {d5-d7}, [r1, :64]!
116
117 vshll.u8 q8, d2, #3 @ g
118 vshll.u8 q9, d6, #3
119 vshr.u8 d0, d3, #3 @ b
120 vshr.u8 d4, d7, #3
121 vzip.8 d0, d1 @ rb
122 vzip.8 d4, d5
123 vbit q0, q8, q15
124 vbit q2, q9, q15
125
126 vstmia r0!, {d0,d1}
127 vstmia r0!, {d4,d5}
128 subs r2, r2, #1
129 bne 0b
130
131 bx lr
132
133
00a5d459 134.global rgb888_to_rgb565
135rgb888_to_rgb565:
136 pld [r1]
137 @ r2 /= 48
138 mov r2, r2, lsr #4
139 movw r3, #0x5556
140 movt r3, #0x5555
141 umull r12,r2, r3, r2
142
143 mov r3, #0x07e0
144 vdup.16 q15, r3
1450:
146 pld [r1, #48*3]
147 vld3.8 {d1-d3}, [r1, :64]!
148 vld3.8 {d5-d7}, [r1, :64]!
149
150 vshll.u8 q8, d2, #3 @ g
151 vshll.u8 q9, d6, #3
152 vshr.u8 d2, d1, #3 @ b
153 vshr.u8 d6, d5, #3
154 vzip.8 d2, d3 @ rb
155 vzip.8 d6, d7
156 vbit q1, q8, q15
157 vbit q3, q9, q15
158
159 vstmia r0!, {d2,d3}
160 vstmia r0!, {d6,d7}
161 subs r2, r2, #1
162 bne 0b
163
164 bx lr
165
166
a327967e 167@ vim:filetype=armasm