2 * (C) GraÅžvydas "notaz" Ignotas, 2011,2012
4 * This work is licensed under the terms of any of these licenses
6 * - GNU GPL, version 2 or later.
7 * - GNU LGPL, version 2.1 or later.
8 * See the COPYING file in the top-level directory.
18 @ void *dst, const void *src, int count, uint abits
19 .macro do_argb bgr2rgb
29 vswp d4, d6 @ BGR->RGB
40 @ unaligned ending nastiness :(
43 cmp r12, r1, lsr #12 @ crossing page?
44 beq 1b @ nope, overreading is safe
46 @ _wb_'s bad luck, do some slow stuff here
57 @ void *dst, const void *src, int count, uint global_alpha
58 .macro do_argb_alpha bgr2rgb global_alpha
75 vswp d4, d6 @ BGR->RGB
80 @ d = (((s-d)*a+255)>>8)+d
87 vaddhn.i16 d4, q8, q12
88 vaddhn.i16 d5, q9, q12
89 vaddhn.i16 d6, q10,q12
101 @ unaligned ending nastiness :(
106 cmp r3, r0, lsr #12 @ are we crossing
107 cmpeq r12, r1, lsr #12 @ the page boundary?
108 beq 1b @ nope, overreading is safe
110 @ _wb_'s bad luck, do some slow stuff here
118 ldr r2, [sp, #8*4*2 + 16*2 + 8] @ stacked r2
120 ldr r1, [sp, #8*4*2 + 16*2 + 4]
123 vld4.8 {d0-d3}, [sp]!
124 vld4.8 {d4-d7}, [sp]!
133 vzip.8 d4, d5 @ RRR..|GGG.. -> RGRG..
134 vzip.8 d6, d7 @ BBB..|000.. -> B0B0..
159 @ void *dst, const void *src, int count, uint global_alpha
160 .macro do_argb_to_rgb565_alpha bgr2rgb global_alpha
172 vld4.8 {d4-d7}, [r1]!
175 vswp d4, d6 @ BGR->RGB
182 vsri.i8 d0, d0, #5 @ B
184 vsri.i8 d2, d2, #5 @ R
185 vsri.i8 d1, d1, #6 @ G
186 @ d = (((s-d)*a+255)>>8)+d
193 vaddhn.i16 d4, q8, q12
194 vaddhn.i16 d5, q9, q12
195 vaddhn.i16 d6, q10,q12
197 vadd.i8 d2, d6 @ rrrr rrrr
199 vshr.u8 d1, d4, #3 @ 000b bbbb
200 vsri.i8 d2, d5, #5 @ rrrr rggg
201 vsli.i8 d1, d0, #5 @ gggb bbbb
204 vst2.8 {d1-d2}, [r0]!
210 @ unaligned ending nastiness :(
215 cmp r3, r0, lsr #12 @ are we crossing
216 cmpeq r12, r1, lsr #12 @ the page boundary?
217 beq 1b @ nope, overreading is safe
220 bx lr @ abandon ship! (until someone complains)
250 func(neon_ARGBtoXRGB):
253 func(neon_ABGRtoXRGB):
256 func(neon_ARGBtoXRGBalpha):
259 func(neon_ABGRtoXRGBalpha):
262 func(neon_ARGBtoXRGBalphaS):
265 func(neon_ABGRtoXRGBalphaS):
268 func(neon_ARGBtoRGB565alpha):
269 do_argb_to_rgb565_alpha 0, 0
271 func(neon_ABGRtoRGB565alpha):
272 do_argb_to_rgb565_alpha 1, 0
274 @ vim:filetype=armasm