Add "scaled" and "pixelperfect" layer sizes.
[sdl_omap.git] / src / video / SDL_blit_neon.S
CommitLineData
a1f34081 1/*
2 * (C) GraÅžvydas "notaz" Ignotas, 2011
3 *
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.
8 * See the COPYING file in the top-level directory.
9 */
10
11.text
12.align 2
13
14@ void *dst, const void *src, int count, uint abits
15.macro do_argb bgr2rgb
16 vdup.i8 d0, r3
170:
18 vld4.8 {d4-d7}, [r1]!
19.if \bgr2rgb
20 vswp d4, d6 @ BGR->RGB
21.endif
22 vmov.i8 d7, d0
23 subs r2, r2, #8
24 blt do_argb_finish
25 vst4.8 {d4-d7}, [r0]!
26 bxeq lr
27 nop
28 b 0b
29.endm
30
31@ void *dst, const void *src, int count
32.macro do_argb_alpha bgr2rgb
33 mov r3, #0xff
34 vdup.i16 q12, r3
350:
36 vld4.8 {d4-d7}, [r1]!
37 vld4.8 {d0-d3}, [r0]
38.if \bgr2rgb
39 vswp d4, d6 @ BGR->RGB
40.endif
41 vmovl.u8 q11, d7
42 @ d = (((s-d)*a+255)>>8)+d
43 vsubl.u8 q8, d4, d0
44 vsubl.u8 q9, d5, d1
45 vsubl.u8 q10,d6, d2
46 vmul.s16 q8, q8, q11
47 vmul.s16 q9, q9, q11
48 vmul.s16 q10,q10,q11
49 vaddhn.i16 d4, q8, q12
50 vaddhn.i16 d5, q9, q12
51 vaddhn.i16 d6, q10,q12
52 vadd.i8 q2, q0
53 vadd.i8 d6, d2
54 vmov.i8 d7, d3
55 subs r2, r2, #8
56 blt do_argb_finish
57 vst4.8 {d4-d7}, [r0]!
58 bxeq lr
59 nop
60 b 0b
61.endm
62
63do_argb_finish:
64 add r2, r2, #8
65 vzip.8 d4, d5 @ RRR..|GGG.. -> RGRG..
66 vzip.8 d6, d7 @ BBB..|000.. -> B0B0..
67 vzip.16 q2, q3
68
69 vst1.32 d4[0], [r0]!
70 cmp r2, #1
71 bxle lr
72 vst1.32 d4[1], [r0]!
73 cmp r2, #2
74 bxle lr
75 vst1.32 d5[0], [r0]!
76 cmp r2, #3
77 bxle lr
78 vst1.32 d5[1], [r0]!
79 cmp r2, #4
80 bxle lr
81 vst1.32 d6[0], [r0]!
82 cmp r2, #5
83 bxle lr
84 vst1.32 d6[1], [r0]!
85 cmp r2, #6
86 bxle lr
87 vst1.32 d7[0], [r0]!
88 bx lr
89
90
91.global neon_ARGBtoXRGB
92neon_ARGBtoXRGB:
93 do_argb 0
94
95.global neon_ABGRtoXRGB
96neon_ABGRtoXRGB:
97 do_argb 1
98
99.global neon_ARGBtoXRGBalpha
100neon_ARGBtoXRGBalpha:
101 do_argb_alpha 0
102
103.global neon_ABGRtoXRGBalpha
104neon_ABGRtoXRGBalpha:
105 do_argb_alpha 1
106
107@ vim:filetype=armasm