2 * Copyright © 2009 ARM Ltd, Movial Creative Technologies Oy
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of ARM Ltd not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. ARM Ltd makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
15 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
17 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
19 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
20 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
23 * Author: Ian Rickards (ian.rickards@arm.com)
24 * Author: Jonathan Morton (jonathan.morton@movial.com)
25 * Author: Markku Vire (markku.vire@movial.com)
34 #include "pixman-private.h"
35 #include "pixman-arm-common.h"
37 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_8888_8888
,
38 uint32_t, 1, uint32_t, 1)
39 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_x888_8888
,
40 uint32_t, 1, uint32_t, 1)
41 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_0565_0565
,
42 uint16_t, 1, uint16_t, 1)
43 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_0888_0888
,
44 uint8_t, 3, uint8_t, 3)
45 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_8888_0565
,
46 uint32_t, 1, uint16_t, 1)
47 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_0565_8888
,
48 uint16_t, 1, uint32_t, 1)
49 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_0888_8888_rev
,
50 uint8_t, 3, uint32_t, 1)
51 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_0888_0565_rev
,
52 uint8_t, 3, uint16_t, 1)
53 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_pixbuf_8888
,
54 uint32_t, 1, uint32_t, 1)
55 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, src_rpixbuf_8888
,
56 uint32_t, 1, uint32_t, 1)
57 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, add_8_8
,
58 uint8_t, 1, uint8_t, 1)
59 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, add_8888_8888
,
60 uint32_t, 1, uint32_t, 1)
61 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, over_8888_0565
,
62 uint32_t, 1, uint16_t, 1)
63 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, over_8888_8888
,
64 uint32_t, 1, uint32_t, 1)
65 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, out_reverse_8_0565
,
66 uint8_t, 1, uint16_t, 1)
67 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (neon
, out_reverse_8_8888
,
68 uint8_t, 1, uint32_t, 1)
70 PIXMAN_ARM_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC
, neon
, over_n_0565
,
72 PIXMAN_ARM_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC
, neon
, over_n_8888
,
74 PIXMAN_ARM_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC
, neon
, over_reverse_n_8888
,
76 PIXMAN_ARM_BIND_FAST_PATH_N_DST (0, neon
, in_n_8
,
79 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, over_n_8_0565
,
80 uint8_t, 1, uint16_t, 1)
81 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, over_n_8_8888
,
82 uint8_t, 1, uint32_t, 1)
83 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, over_n_8888_8888_ca
,
84 uint32_t, 1, uint32_t, 1)
85 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, over_n_8888_0565_ca
,
86 uint32_t, 1, uint16_t, 1)
87 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, over_n_8_8
,
88 uint8_t, 1, uint8_t, 1)
89 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, add_n_8_8
,
90 uint8_t, 1, uint8_t, 1)
91 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC
, neon
, add_n_8_8888
,
92 uint8_t, 1, uint32_t, 1)
93 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (0, neon
, src_n_8_8888
,
94 uint8_t, 1, uint32_t, 1)
95 PIXMAN_ARM_BIND_FAST_PATH_N_MASK_DST (0, neon
, src_n_8_8
,
96 uint8_t, 1, uint8_t, 1)
98 PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK
, neon
, over_8888_n_8888
,
99 uint32_t, 1, uint32_t, 1)
100 PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK
, neon
, over_8888_n_0565
,
101 uint32_t, 1, uint16_t, 1)
102 PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK
, neon
, over_0565_n_0565
,
103 uint16_t, 1, uint16_t, 1)
104 PIXMAN_ARM_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK
, neon
, add_8888_n_8888
,
105 uint32_t, 1, uint32_t, 1)
107 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, add_8_8_8
,
108 uint8_t, 1, uint8_t, 1, uint8_t, 1)
109 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, add_0565_8_0565
,
110 uint16_t, 1, uint8_t, 1, uint16_t, 1)
111 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, add_8888_8_8888
,
112 uint32_t, 1, uint8_t, 1, uint32_t, 1)
113 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, add_8888_8888_8888
,
114 uint32_t, 1, uint32_t, 1, uint32_t, 1)
115 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, over_8888_8_8888
,
116 uint32_t, 1, uint8_t, 1, uint32_t, 1)
117 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, over_8888_8888_8888
,
118 uint32_t, 1, uint32_t, 1, uint32_t, 1)
119 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, over_8888_8_0565
,
120 uint32_t, 1, uint8_t, 1, uint16_t, 1)
121 PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon
, over_0565_8_0565
,
122 uint16_t, 1, uint8_t, 1, uint16_t, 1)
124 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_DST (neon
, 8888_8888
, OVER
,
126 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_DST (neon
, 8888_0565
, OVER
,
128 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_DST (neon
, 8888_0565
, SRC
,
130 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_DST (neon
, 0565_8888
, SRC
,
133 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC
, neon
, 8888_8_0565
,
134 OVER
, uint32_t, uint16_t)
135 PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC
, neon
, 0565_8_0565
,
136 OVER
, uint16_t, uint16_t)
138 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (0, neon
, 8888_8888
, SRC
,
140 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (0, neon
, 8888_0565
, SRC
,
142 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (0, neon
, 0565_x888
, SRC
,
144 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (0, neon
, 0565_0565
, SRC
,
146 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC
, neon
, 8888_8888
, OVER
,
148 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC
, neon
, 8888_8888
, ADD
,
151 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (0, neon
, 8888_8_8888
, SRC
,
153 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (0, neon
, 8888_8_0565
, SRC
,
155 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (0, neon
, 0565_8_x888
, SRC
,
157 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (0, neon
, 0565_8_0565
, SRC
,
159 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC
, neon
, 8888_8_8888
, OVER
,
161 PIXMAN_ARM_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC
, neon
, 8888_8_8888
, ADD
,
165 pixman_composite_src_n_8_asm_neon (int32_t w
,
172 pixman_composite_src_n_0565_asm_neon (int32_t w
,
179 pixman_composite_src_n_8888_asm_neon (int32_t w
,
186 arm_neon_fill (pixman_implementation_t
*imp
,
196 /* stride is always multiple of 32bit units in pixman */
197 uint32_t byte_stride
= stride
* sizeof(uint32_t);
202 pixman_composite_src_n_8_asm_neon (
205 (uint8_t *)(((char *) bits
) + y
* byte_stride
+ x
),
210 pixman_composite_src_n_0565_asm_neon (
213 (uint16_t *)(((char *) bits
) + y
* byte_stride
+ x
* 2),
218 pixman_composite_src_n_8888_asm_neon (
221 (uint32_t *)(((char *) bits
) + y
* byte_stride
+ x
* 4),
231 arm_neon_blt (pixman_implementation_t
*imp
,
245 if (src_bpp
!= dst_bpp
)
251 pixman_composite_src_0565_0565_asm_neon (
253 (uint16_t *)(((char *) dst_bits
) +
254 dest_y
* dst_stride
* 4 + dest_x
* 2), dst_stride
* 2,
255 (uint16_t *)(((char *) src_bits
) +
256 src_y
* src_stride
* 4 + src_x
* 2), src_stride
* 2);
259 pixman_composite_src_8888_8888_asm_neon (
261 (uint32_t *)(((char *) dst_bits
) +
262 dest_y
* dst_stride
* 4 + dest_x
* 4), dst_stride
,
263 (uint32_t *)(((char *) src_bits
) +
264 src_y
* src_stride
* 4 + src_x
* 4), src_stride
);
271 static const pixman_fast_path_t arm_neon_fast_paths
[] =
273 PIXMAN_STD_FAST_PATH (SRC
, r5g6b5
, null
, r5g6b5
, neon_composite_src_0565_0565
),
274 PIXMAN_STD_FAST_PATH (SRC
, b5g6r5
, null
, b5g6r5
, neon_composite_src_0565_0565
),
275 PIXMAN_STD_FAST_PATH (SRC
, a8r8g8b8
, null
, r5g6b5
, neon_composite_src_8888_0565
),
276 PIXMAN_STD_FAST_PATH (SRC
, x8r8g8b8
, null
, r5g6b5
, neon_composite_src_8888_0565
),
277 PIXMAN_STD_FAST_PATH (SRC
, a8b8g8r8
, null
, b5g6r5
, neon_composite_src_8888_0565
),
278 PIXMAN_STD_FAST_PATH (SRC
, x8b8g8r8
, null
, b5g6r5
, neon_composite_src_8888_0565
),
279 PIXMAN_STD_FAST_PATH (SRC
, r5g6b5
, null
, a8r8g8b8
, neon_composite_src_0565_8888
),
280 PIXMAN_STD_FAST_PATH (SRC
, r5g6b5
, null
, x8r8g8b8
, neon_composite_src_0565_8888
),
281 PIXMAN_STD_FAST_PATH (SRC
, b5g6r5
, null
, a8b8g8r8
, neon_composite_src_0565_8888
),
282 PIXMAN_STD_FAST_PATH (SRC
, b5g6r5
, null
, x8b8g8r8
, neon_composite_src_0565_8888
),
283 PIXMAN_STD_FAST_PATH (SRC
, a8r8g8b8
, null
, x8r8g8b8
, neon_composite_src_8888_8888
),
284 PIXMAN_STD_FAST_PATH (SRC
, x8r8g8b8
, null
, x8r8g8b8
, neon_composite_src_8888_8888
),
285 PIXMAN_STD_FAST_PATH (SRC
, a8b8g8r8
, null
, x8b8g8r8
, neon_composite_src_8888_8888
),
286 PIXMAN_STD_FAST_PATH (SRC
, x8b8g8r8
, null
, x8b8g8r8
, neon_composite_src_8888_8888
),
287 PIXMAN_STD_FAST_PATH (SRC
, a8r8g8b8
, null
, a8r8g8b8
, neon_composite_src_8888_8888
),
288 PIXMAN_STD_FAST_PATH (SRC
, a8b8g8r8
, null
, a8b8g8r8
, neon_composite_src_8888_8888
),
289 PIXMAN_STD_FAST_PATH (SRC
, x8r8g8b8
, null
, a8r8g8b8
, neon_composite_src_x888_8888
),
290 PIXMAN_STD_FAST_PATH (SRC
, x8b8g8r8
, null
, a8b8g8r8
, neon_composite_src_x888_8888
),
291 PIXMAN_STD_FAST_PATH (SRC
, r8g8b8
, null
, r8g8b8
, neon_composite_src_0888_0888
),
292 PIXMAN_STD_FAST_PATH (SRC
, b8g8r8
, null
, x8r8g8b8
, neon_composite_src_0888_8888_rev
),
293 PIXMAN_STD_FAST_PATH (SRC
, b8g8r8
, null
, r5g6b5
, neon_composite_src_0888_0565_rev
),
294 PIXMAN_STD_FAST_PATH (SRC
, pixbuf
, pixbuf
, a8r8g8b8
, neon_composite_src_pixbuf_8888
),
295 PIXMAN_STD_FAST_PATH (SRC
, pixbuf
, pixbuf
, a8b8g8r8
, neon_composite_src_rpixbuf_8888
),
296 PIXMAN_STD_FAST_PATH (SRC
, rpixbuf
, rpixbuf
, a8r8g8b8
, neon_composite_src_rpixbuf_8888
),
297 PIXMAN_STD_FAST_PATH (SRC
, rpixbuf
, rpixbuf
, a8b8g8r8
, neon_composite_src_pixbuf_8888
),
298 PIXMAN_STD_FAST_PATH (SRC
, solid
, a8
, a8r8g8b8
, neon_composite_src_n_8_8888
),
299 PIXMAN_STD_FAST_PATH (SRC
, solid
, a8
, x8r8g8b8
, neon_composite_src_n_8_8888
),
300 PIXMAN_STD_FAST_PATH (SRC
, solid
, a8
, a8b8g8r8
, neon_composite_src_n_8_8888
),
301 PIXMAN_STD_FAST_PATH (SRC
, solid
, a8
, x8b8g8r8
, neon_composite_src_n_8_8888
),
302 PIXMAN_STD_FAST_PATH (SRC
, solid
, a8
, a8
, neon_composite_src_n_8_8
),
304 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, a8
, neon_composite_over_n_8_8
),
305 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, r5g6b5
, neon_composite_over_n_8_0565
),
306 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, b5g6r5
, neon_composite_over_n_8_0565
),
307 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, a8r8g8b8
, neon_composite_over_n_8_8888
),
308 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, x8r8g8b8
, neon_composite_over_n_8_8888
),
309 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, a8b8g8r8
, neon_composite_over_n_8_8888
),
310 PIXMAN_STD_FAST_PATH (OVER
, solid
, a8
, x8b8g8r8
, neon_composite_over_n_8_8888
),
311 PIXMAN_STD_FAST_PATH (OVER
, solid
, null
, r5g6b5
, neon_composite_over_n_0565
),
312 PIXMAN_STD_FAST_PATH (OVER
, solid
, null
, a8r8g8b8
, neon_composite_over_n_8888
),
313 PIXMAN_STD_FAST_PATH (OVER
, solid
, null
, x8r8g8b8
, neon_composite_over_n_8888
),
314 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8r8g8b8
, a8r8g8b8
, neon_composite_over_n_8888_8888_ca
),
315 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8r8g8b8
, x8r8g8b8
, neon_composite_over_n_8888_8888_ca
),
316 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8b8g8r8
, a8b8g8r8
, neon_composite_over_n_8888_8888_ca
),
317 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8b8g8r8
, x8b8g8r8
, neon_composite_over_n_8888_8888_ca
),
318 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8r8g8b8
, r5g6b5
, neon_composite_over_n_8888_0565_ca
),
319 PIXMAN_STD_FAST_PATH_CA (OVER
, solid
, a8b8g8r8
, b5g6r5
, neon_composite_over_n_8888_0565_ca
),
320 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, solid
, a8r8g8b8
, neon_composite_over_8888_n_8888
),
321 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, solid
, x8r8g8b8
, neon_composite_over_8888_n_8888
),
322 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, solid
, r5g6b5
, neon_composite_over_8888_n_0565
),
323 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, solid
, b5g6r5
, neon_composite_over_8888_n_0565
),
324 PIXMAN_STD_FAST_PATH (OVER
, r5g6b5
, solid
, r5g6b5
, neon_composite_over_0565_n_0565
),
325 PIXMAN_STD_FAST_PATH (OVER
, b5g6r5
, solid
, b5g6r5
, neon_composite_over_0565_n_0565
),
326 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, a8
, a8r8g8b8
, neon_composite_over_8888_8_8888
),
327 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, a8
, x8r8g8b8
, neon_composite_over_8888_8_8888
),
328 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, a8
, a8b8g8r8
, neon_composite_over_8888_8_8888
),
329 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, a8
, x8b8g8r8
, neon_composite_over_8888_8_8888
),
330 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, a8
, r5g6b5
, neon_composite_over_8888_8_0565
),
331 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, a8
, b5g6r5
, neon_composite_over_8888_8_0565
),
332 PIXMAN_STD_FAST_PATH (OVER
, r5g6b5
, a8
, r5g6b5
, neon_composite_over_0565_8_0565
),
333 PIXMAN_STD_FAST_PATH (OVER
, b5g6r5
, a8
, b5g6r5
, neon_composite_over_0565_8_0565
),
334 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, a8r8g8b8
, a8r8g8b8
, neon_composite_over_8888_8888_8888
),
335 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, null
, r5g6b5
, neon_composite_over_8888_0565
),
336 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, null
, b5g6r5
, neon_composite_over_8888_0565
),
337 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, null
, a8r8g8b8
, neon_composite_over_8888_8888
),
338 PIXMAN_STD_FAST_PATH (OVER
, a8r8g8b8
, null
, x8r8g8b8
, neon_composite_over_8888_8888
),
339 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, null
, a8b8g8r8
, neon_composite_over_8888_8888
),
340 PIXMAN_STD_FAST_PATH (OVER
, a8b8g8r8
, null
, x8b8g8r8
, neon_composite_over_8888_8888
),
341 PIXMAN_STD_FAST_PATH (OVER
, x8r8g8b8
, null
, a8r8g8b8
, neon_composite_src_x888_8888
),
342 PIXMAN_STD_FAST_PATH (OVER
, x8b8g8r8
, null
, a8b8g8r8
, neon_composite_src_x888_8888
),
343 PIXMAN_STD_FAST_PATH (ADD
, solid
, a8
, a8
, neon_composite_add_n_8_8
),
344 PIXMAN_STD_FAST_PATH (ADD
, solid
, a8
, a8r8g8b8
, neon_composite_add_n_8_8888
),
345 PIXMAN_STD_FAST_PATH (ADD
, solid
, a8
, a8b8g8r8
, neon_composite_add_n_8_8888
),
346 PIXMAN_STD_FAST_PATH (ADD
, a8
, a8
, a8
, neon_composite_add_8_8_8
),
347 PIXMAN_STD_FAST_PATH (ADD
, r5g6b5
, a8
, r5g6b5
, neon_composite_add_0565_8_0565
),
348 PIXMAN_STD_FAST_PATH (ADD
, b5g6r5
, a8
, b5g6r5
, neon_composite_add_0565_8_0565
),
349 PIXMAN_STD_FAST_PATH (ADD
, a8r8g8b8
, a8
, a8r8g8b8
, neon_composite_add_8888_8_8888
),
350 PIXMAN_STD_FAST_PATH (ADD
, a8b8g8r8
, a8
, a8b8g8r8
, neon_composite_add_8888_8_8888
),
351 PIXMAN_STD_FAST_PATH (ADD
, a8r8g8b8
, a8r8g8b8
, a8r8g8b8
, neon_composite_add_8888_8888_8888
),
352 PIXMAN_STD_FAST_PATH (ADD
, a8r8g8b8
, solid
, a8r8g8b8
, neon_composite_add_8888_n_8888
),
353 PIXMAN_STD_FAST_PATH (ADD
, a8b8g8r8
, solid
, a8b8g8r8
, neon_composite_add_8888_n_8888
),
354 PIXMAN_STD_FAST_PATH (ADD
, a8
, null
, a8
, neon_composite_add_8_8
),
355 PIXMAN_STD_FAST_PATH (ADD
, a8r8g8b8
, null
, a8r8g8b8
, neon_composite_add_8888_8888
),
356 PIXMAN_STD_FAST_PATH (ADD
, a8b8g8r8
, null
, a8b8g8r8
, neon_composite_add_8888_8888
),
357 PIXMAN_STD_FAST_PATH (IN
, solid
, null
, a8
, neon_composite_in_n_8
),
358 PIXMAN_STD_FAST_PATH (OVER_REVERSE
, solid
, null
, a8r8g8b8
, neon_composite_over_reverse_n_8888
),
359 PIXMAN_STD_FAST_PATH (OVER_REVERSE
, solid
, null
, a8b8g8r8
, neon_composite_over_reverse_n_8888
),
360 PIXMAN_STD_FAST_PATH (OUT_REVERSE
, a8
, null
, r5g6b5
, neon_composite_out_reverse_8_0565
),
361 PIXMAN_STD_FAST_PATH (OUT_REVERSE
, a8
, null
, b5g6r5
, neon_composite_out_reverse_8_0565
),
362 PIXMAN_STD_FAST_PATH (OUT_REVERSE
, a8
, null
, a8r8g8b8
, neon_composite_out_reverse_8_8888
),
363 PIXMAN_STD_FAST_PATH (OUT_REVERSE
, a8
, null
, a8b8g8r8
, neon_composite_out_reverse_8_8888
),
365 SIMPLE_NEAREST_FAST_PATH (OVER
, a8r8g8b8
, a8r8g8b8
, neon_8888_8888
),
366 SIMPLE_NEAREST_FAST_PATH (OVER
, a8b8g8r8
, a8b8g8r8
, neon_8888_8888
),
367 SIMPLE_NEAREST_FAST_PATH (OVER
, a8r8g8b8
, x8r8g8b8
, neon_8888_8888
),
368 SIMPLE_NEAREST_FAST_PATH (OVER
, a8b8g8r8
, x8b8g8r8
, neon_8888_8888
),
370 SIMPLE_NEAREST_FAST_PATH (OVER
, a8r8g8b8
, r5g6b5
, neon_8888_0565
),
371 SIMPLE_NEAREST_FAST_PATH (OVER
, a8b8g8r8
, b5g6r5
, neon_8888_0565
),
373 SIMPLE_NEAREST_FAST_PATH (SRC
, a8r8g8b8
, r5g6b5
, neon_8888_0565
),
374 SIMPLE_NEAREST_FAST_PATH (SRC
, x8r8g8b8
, r5g6b5
, neon_8888_0565
),
375 SIMPLE_NEAREST_FAST_PATH (SRC
, a8b8g8r8
, b5g6r5
, neon_8888_0565
),
376 SIMPLE_NEAREST_FAST_PATH (SRC
, x8b8g8r8
, b5g6r5
, neon_8888_0565
),
378 SIMPLE_NEAREST_FAST_PATH (SRC
, b5g6r5
, x8b8g8r8
, neon_0565_8888
),
379 SIMPLE_NEAREST_FAST_PATH (SRC
, r5g6b5
, x8r8g8b8
, neon_0565_8888
),
380 /* Note: NONE repeat is not supported yet */
381 SIMPLE_NEAREST_FAST_PATH_COVER (SRC
, r5g6b5
, a8r8g8b8
, neon_0565_8888
),
382 SIMPLE_NEAREST_FAST_PATH_COVER (SRC
, b5g6r5
, a8b8g8r8
, neon_0565_8888
),
383 SIMPLE_NEAREST_FAST_PATH_PAD (SRC
, r5g6b5
, a8r8g8b8
, neon_0565_8888
),
384 SIMPLE_NEAREST_FAST_PATH_PAD (SRC
, b5g6r5
, a8b8g8r8
, neon_0565_8888
),
386 PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER
, a8r8g8b8
, r5g6b5
, neon_8888_8_0565
),
387 PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER
, a8b8g8r8
, b5g6r5
, neon_8888_8_0565
),
389 PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER
, r5g6b5
, r5g6b5
, neon_0565_8_0565
),
390 PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER
, b5g6r5
, b5g6r5
, neon_0565_8_0565
),
392 SIMPLE_BILINEAR_FAST_PATH (SRC
, a8r8g8b8
, a8r8g8b8
, neon_8888_8888
),
393 SIMPLE_BILINEAR_FAST_PATH (SRC
, a8r8g8b8
, x8r8g8b8
, neon_8888_8888
),
394 SIMPLE_BILINEAR_FAST_PATH (SRC
, x8r8g8b8
, x8r8g8b8
, neon_8888_8888
),
396 SIMPLE_BILINEAR_FAST_PATH (SRC
, a8r8g8b8
, r5g6b5
, neon_8888_0565
),
397 SIMPLE_BILINEAR_FAST_PATH (SRC
, x8r8g8b8
, r5g6b5
, neon_8888_0565
),
399 SIMPLE_BILINEAR_FAST_PATH (SRC
, r5g6b5
, x8r8g8b8
, neon_0565_x888
),
400 SIMPLE_BILINEAR_FAST_PATH (SRC
, r5g6b5
, r5g6b5
, neon_0565_0565
),
402 SIMPLE_BILINEAR_FAST_PATH (OVER
, a8r8g8b8
, a8r8g8b8
, neon_8888_8888
),
403 SIMPLE_BILINEAR_FAST_PATH (OVER
, a8r8g8b8
, x8r8g8b8
, neon_8888_8888
),
405 SIMPLE_BILINEAR_FAST_PATH (ADD
, a8r8g8b8
, a8r8g8b8
, neon_8888_8888
),
406 SIMPLE_BILINEAR_FAST_PATH (ADD
, a8r8g8b8
, x8r8g8b8
, neon_8888_8888
),
408 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, a8r8g8b8
, a8r8g8b8
, neon_8888_8_8888
),
409 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, a8r8g8b8
, x8r8g8b8
, neon_8888_8_8888
),
410 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, x8r8g8b8
, x8r8g8b8
, neon_8888_8_8888
),
412 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, a8r8g8b8
, r5g6b5
, neon_8888_8_0565
),
413 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, x8r8g8b8
, r5g6b5
, neon_8888_8_0565
),
415 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, r5g6b5
, x8r8g8b8
, neon_0565_8_x888
),
416 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC
, r5g6b5
, r5g6b5
, neon_0565_8_0565
),
418 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER
, a8r8g8b8
, a8r8g8b8
, neon_8888_8_8888
),
419 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER
, a8r8g8b8
, x8r8g8b8
, neon_8888_8_8888
),
421 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD
, a8r8g8b8
, a8r8g8b8
, neon_8888_8_8888
),
422 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD
, a8r8g8b8
, x8r8g8b8
, neon_8888_8_8888
),
427 #define BIND_COMBINE_U(name) \
429 pixman_composite_scanline_##name##_mask_asm_neon (int32_t w, \
430 const uint32_t *dst, \
431 const uint32_t *src, \
432 const uint32_t *mask); \
435 pixman_composite_scanline_##name##_asm_neon (int32_t w, \
436 const uint32_t *dst, \
437 const uint32_t *src); \
440 neon_combine_##name##_u (pixman_implementation_t *imp, \
443 const uint32_t * src, \
444 const uint32_t * mask, \
448 pixman_composite_scanline_##name##_mask_asm_neon (width, dest, \
451 pixman_composite_scanline_##name##_asm_neon (width, dest, src); \
454 BIND_COMBINE_U (over
)
456 BIND_COMBINE_U (out_reverse
)
458 pixman_implementation_t
*
459 _pixman_implementation_create_arm_neon (pixman_implementation_t
*fallback
)
461 pixman_implementation_t
*imp
=
462 _pixman_implementation_create (fallback
, arm_neon_fast_paths
);
464 imp
->combine_32
[PIXMAN_OP_OVER
] = neon_combine_over_u
;
465 imp
->combine_32
[PIXMAN_OP_ADD
] = neon_combine_add_u
;
466 imp
->combine_32
[PIXMAN_OP_OUT_REVERSE
] = neon_combine_out_reverse_u
;
468 imp
->blt
= arm_neon_blt
;
469 imp
->fill
= arm_neon_fill
;