1 /**
2  * @file lv_blend_neon.h
3  *
4  */
5 
6 #ifndef LV_BLEND_NEON_H
7 #define LV_BLEND_NEON_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 
17 #include "../../../../lv_conf_internal.h"
18 
19 #ifdef LV_DRAW_SW_NEON_CUSTOM_INCLUDE
20 #include LV_DRAW_SW_NEON_CUSTOM_INCLUDE
21 #endif
22 
23 /*********************
24  *      DEFINES
25  *********************/
26 #if !defined(__ASSEMBLY__)
27 
28 #if __GNUC__ >= 4
29 #define LVGL_HIDDEN __attribute__((visibility("hidden")))
30 #else
31 #define LVGL_HIDDEN
32 #endif
33 
34 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565
35 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB565(dsc) \
36     lv_color_blend_to_rgb565_neon(dsc)
37 #endif
38 
39 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA
40 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA(dsc) \
41     lv_color_blend_to_rgb565_with_opa_neon(dsc)
42 #endif
43 
44 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK
45 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK(dsc) \
46     lv_color_blend_to_rgb565_with_mask_neon(dsc)
47 #endif
48 
49 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA
50 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA(dsc) \
51     lv_color_blend_to_rgb565_mix_mask_opa_neon(dsc)
52 #endif
53 
54 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565
55 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565(dsc)  \
56     lv_rgb565_blend_normal_to_rgb565_neon(dsc)
57 #endif
58 
59 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA
60 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc)  \
61     lv_rgb565_blend_normal_to_rgb565_with_opa_neon(dsc)
62 #endif
63 
64 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK
65 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc)  \
66     lv_rgb565_blend_normal_to_rgb565_with_mask_neon(dsc)
67 #endif
68 
69 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
70 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc)  \
71     lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(dsc)
72 #endif
73 
74 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565
75 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565(dsc, src_px_size)  \
76     lv_rgb888_blend_normal_to_rgb565_neon(dsc, src_px_size)
77 #endif
78 
79 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA
80 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc, src_px_size)  \
81     lv_rgb888_blend_normal_to_rgb565_with_opa_neon(dsc, src_px_size)
82 #endif
83 
84 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK
85 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc, src_px_size)  \
86     lv_rgb888_blend_normal_to_rgb565_with_mask_neon(dsc, src_px_size)
87 #endif
88 
89 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
90 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc, src_px_size)  \
91     lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(dsc, src_px_size)
92 #endif
93 
94 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565
95 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565(dsc)  \
96     lv_argb8888_blend_normal_to_rgb565_neon(dsc)
97 #endif
98 
99 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA
100 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc)  \
101     lv_argb8888_blend_normal_to_rgb565_with_opa_neon(dsc)
102 #endif
103 
104 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK
105 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc)  \
106     lv_argb8888_blend_normal_to_rgb565_with_mask_neon(dsc)
107 #endif
108 
109 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
110 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc)  \
111     lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(dsc)
112 #endif
113 
114 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888
115 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB888(dsc, dst_px_size) \
116     lv_color_blend_to_rgb888_neon(dsc, dst_px_size)
117 #endif
118 
119 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA
120 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
121     lv_color_blend_to_rgb888_with_opa_neon(dsc, dst_px_size)
122 #endif
123 
124 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK
125 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
126     lv_color_blend_to_rgb888_with_mask_neon(dsc, dst_px_size)
127 #endif
128 
129 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA
130 #define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
131     lv_color_blend_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
132 #endif
133 
134 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888
135 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size)  \
136     lv_rgb565_blend_normal_to_rgb888_neon(dsc, dst_px_size)
137 #endif
138 
139 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA
140 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size)  \
141     lv_rgb565_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size)
142 #endif
143 
144 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK
145 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size)  \
146     lv_rgb565_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size)
147 #endif
148 
149 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
150 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size)  \
151     lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
152 #endif
153 
154 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888
155 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size, src_px_size)  \
156     lv_rgb888_blend_normal_to_rgb888_neon(dsc, dst_px_size, src_px_size)
157 #endif
158 
159 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA
160 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size, src_px_size)  \
161     lv_rgb888_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size, src_px_size)
162 #endif
163 
164 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK
165 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size, src_px_size)  \
166     lv_rgb888_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size, src_px_size)
167 #endif
168 
169 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
170 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size, src_px_size)  \
171     lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size, src_px_size)
172 #endif
173 
174 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888
175 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size)  \
176     lv_argb8888_blend_normal_to_rgb888_neon(dsc, dst_px_size)
177 #endif
178 
179 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA
180 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size)  \
181     lv_argb8888_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size)
182 #endif
183 
184 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK
185 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size)  \
186     lv_argb8888_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size)
187 #endif
188 
189 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
190 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size)  \
191     lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
192 #endif
193 
194 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888
195 #define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888(dsc) \
196     lv_color_blend_to_argb8888_neon(dsc)
197 #endif
198 
199 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA
200 #define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA(dsc) \
201     lv_color_blend_to_argb8888_with_opa_neon(dsc)
202 #endif
203 
204 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK
205 #define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK(dsc) \
206     lv_color_blend_to_argb8888_with_mask_neon(dsc)
207 #endif
208 
209 #ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA
210 #define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA(dsc) \
211     lv_color_blend_to_argb8888_mix_mask_opa_neon(dsc)
212 #endif
213 
214 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888
215 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888(dsc)  \
216     lv_rgb565_blend_normal_to_argb8888_neon(dsc)
217 #endif
218 
219 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
220 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc)  \
221     lv_rgb565_blend_normal_to_argb8888_with_opa_neon(dsc)
222 #endif
223 
224 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
225 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc)  \
226     lv_rgb565_blend_normal_to_argb8888_with_mask_neon(dsc)
227 #endif
228 
229 #ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
230 #define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc)  \
231     lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(dsc)
232 #endif
233 
234 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888
235 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888(dsc, src_px_size)  \
236     lv_rgb888_blend_normal_to_argb8888_neon(dsc, src_px_size)
237 #endif
238 
239 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
240 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc, src_px_size)  \
241     lv_rgb888_blend_normal_to_argb8888_with_opa_neon(dsc, src_px_size)
242 #endif
243 
244 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
245 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc, src_px_size)  \
246     lv_rgb888_blend_normal_to_argb8888_with_mask_neon(dsc, src_px_size)
247 #endif
248 
249 #ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
250 #define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc, src_px_size)  \
251     lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(dsc, src_px_size)
252 #endif
253 
254 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888
255 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888(dsc)  \
256     lv_argb8888_blend_normal_to_argb8888_neon(dsc)
257 #endif
258 
259 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
260 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc)  \
261     lv_argb8888_blend_normal_to_argb8888_with_opa_neon(dsc)
262 #endif
263 
264 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
265 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc)  \
266     lv_argb8888_blend_normal_to_argb8888_with_mask_neon(dsc)
267 #endif
268 
269 #ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
270 #define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc)  \
271     lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(dsc)
272 #endif
273 
274 /**********************
275  *      TYPEDEFS
276  **********************/
277 
278 typedef struct {
279     uint32_t opa;
280     void * dst_buf;
281     uint32_t dst_w;
282     uint32_t dst_h;
283     uint32_t dst_stride;
284     const void * src_buf;
285     uint32_t src_stride;
286     const lv_opa_t * mask_buf;
287     uint32_t mask_stride;
288 } asm_dsc_t;
289 /**********************
290  * GLOBAL PROTOTYPES
291  **********************/
292 
293 extern LVGL_HIDDEN void _lv_color_blend_to_rgb565_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb565_neon(lv_draw_sw_blend_fill_dsc_t * dsc)294 static inline lv_result_t lv_color_blend_to_rgb565_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
295 {
296     asm_dsc_t asm_dsc = {
297         .dst_buf = dsc->dest_buf,
298         .dst_w = dsc->dest_w,
299         .dst_h = dsc->dest_h,
300         .dst_stride = dsc->dest_stride,
301         .src_buf = &dsc->color
302     };
303 
304     _lv_color_blend_to_rgb565_neon(&asm_dsc);
305     return LV_RESULT_OK;
306 }
307 
308 extern LVGL_HIDDEN void _lv_color_blend_to_rgb565_with_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb565_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)309 static inline lv_result_t lv_color_blend_to_rgb565_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
310 {
311     asm_dsc_t asm_dsc = {
312         .opa = dsc->opa,
313         .dst_buf = dsc->dest_buf,
314         .dst_w = dsc->dest_w,
315         .dst_h = dsc->dest_h,
316         .dst_stride = dsc->dest_stride,
317         .src_buf = &dsc->color
318     };
319     _lv_color_blend_to_rgb565_with_opa_neon(&asm_dsc);
320     return LV_RESULT_OK;
321 }
322 
323 extern LVGL_HIDDEN void _lv_color_blend_to_rgb565_with_mask_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb565_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc)324 static inline lv_result_t lv_color_blend_to_rgb565_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
325 {
326     asm_dsc_t asm_dsc = {
327         .dst_buf = dsc->dest_buf,
328         .dst_w = dsc->dest_w,
329         .dst_h = dsc->dest_h,
330         .dst_stride = dsc->dest_stride,
331         .src_buf = &dsc->color,
332         .mask_buf = dsc->mask_buf,
333         .mask_stride = dsc->mask_stride
334     };
335     _lv_color_blend_to_rgb565_with_mask_neon(&asm_dsc);
336     return LV_RESULT_OK;
337 }
338 
339 extern LVGL_HIDDEN void _lv_color_blend_to_rgb565_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)340 static inline lv_result_t lv_color_blend_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
341 {
342     asm_dsc_t asm_dsc = {
343         .opa = dsc->opa,
344         .dst_buf = dsc->dest_buf,
345         .dst_w = dsc->dest_w,
346         .dst_h = dsc->dest_h,
347         .dst_stride = dsc->dest_stride,
348         .src_buf = &dsc->color,
349         .mask_buf = dsc->mask_buf,
350         .mask_stride = dsc->mask_stride
351     };
352     _lv_color_blend_to_rgb565_mix_mask_opa_neon(&asm_dsc);
353     return LV_RESULT_OK;
354 }
355 
356 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb565_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc)357 static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc)
358 {
359     asm_dsc_t asm_dsc = {
360         .dst_buf = dsc->dest_buf,
361         .dst_w = dsc->dest_w,
362         .dst_h = dsc->dest_h,
363         .dst_stride = dsc->dest_stride,
364         .src_buf = dsc->src_buf,
365         .src_stride = dsc->src_stride
366     };
367     _lv_rgb565_blend_normal_to_rgb565_neon(&asm_dsc);
368     return LV_RESULT_OK;
369 }
370 
371 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb565_with_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)372 static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
373 {
374     asm_dsc_t asm_dsc = {
375         .opa = dsc->opa,
376         .dst_buf = dsc->dest_buf,
377         .dst_w = dsc->dest_w,
378         .dst_h = dsc->dest_h,
379         .dst_stride = dsc->dest_stride,
380         .src_buf = dsc->src_buf,
381         .src_stride = dsc->src_stride
382     };
383     _lv_rgb565_blend_normal_to_rgb565_with_opa_neon(&asm_dsc);
384     return LV_RESULT_OK;
385 }
386 
387 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb565_with_mask_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)388 static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)
389 {
390     asm_dsc_t asm_dsc = {
391         .dst_buf = dsc->dest_buf,
392         .dst_w = dsc->dest_w,
393         .dst_h = dsc->dest_h,
394         .dst_stride = dsc->dest_stride,
395         .src_buf = dsc->src_buf,
396         .src_stride = dsc->src_stride,
397         .mask_buf = dsc->mask_buf,
398         .mask_stride = dsc->mask_stride
399     };
400     _lv_rgb565_blend_normal_to_rgb565_with_mask_neon(&asm_dsc);
401     return LV_RESULT_OK;
402 }
403 
404 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)405 static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
406 {
407     asm_dsc_t asm_dsc = {
408         .opa = dsc->opa,
409         .dst_buf = dsc->dest_buf,
410         .dst_w = dsc->dest_w,
411         .dst_h = dsc->dest_h,
412         .dst_stride = dsc->dest_stride,
413         .src_buf = dsc->src_buf,
414         .src_stride = dsc->src_stride,
415         .mask_buf = dsc->mask_buf,
416         .mask_stride = dsc->mask_stride
417     };
418     _lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(&asm_dsc);
419     return LV_RESULT_OK;
420 }
421 
422 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb565_neon(asm_dsc_t * dsc);
423 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb565_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)424 static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc,
425                                                                 uint32_t src_px_size)
426 {
427     asm_dsc_t asm_dsc = {
428         .dst_buf = dsc->dest_buf,
429         .dst_w = dsc->dest_w,
430         .dst_h = dsc->dest_h,
431         .dst_stride = dsc->dest_stride,
432         .src_buf = dsc->src_buf,
433         .src_stride = dsc->src_stride
434     };
435     if(src_px_size == 3) {
436         _lv_rgb888_blend_normal_to_rgb565_neon(&asm_dsc);
437     }
438     else {
439         _lv_xrgb8888_blend_normal_to_rgb565_neon(&asm_dsc);
440     }
441     return LV_RESULT_OK;
442 }
443 
444 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb565_with_opa_neon(asm_dsc_t * dsc);
445 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb565_with_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)446 static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
447                                                                          uint32_t src_px_size)
448 {
449     asm_dsc_t asm_dsc = {
450         .opa = dsc->opa,
451         .dst_buf = dsc->dest_buf,
452         .dst_w = dsc->dest_w,
453         .dst_h = dsc->dest_h,
454         .dst_stride = dsc->dest_stride,
455         .src_buf = dsc->src_buf,
456         .src_stride = dsc->src_stride
457     };
458     if(src_px_size == 3) {
459         _lv_rgb888_blend_normal_to_rgb565_with_opa_neon(&asm_dsc);
460     }
461     else {
462         _lv_xrgb8888_blend_normal_to_rgb565_with_opa_neon(&asm_dsc);
463     }
464     return LV_RESULT_OK;
465 }
466 
467 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb565_with_mask_neon(asm_dsc_t * dsc);
468 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb565_with_mask_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)469 static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,
470                                                                           uint32_t src_px_size)
471 {
472     asm_dsc_t asm_dsc = {
473         .dst_buf = dsc->dest_buf,
474         .dst_w = dsc->dest_w,
475         .dst_h = dsc->dest_h,
476         .dst_stride = dsc->dest_stride,
477         .src_buf = dsc->src_buf,
478         .src_stride = dsc->src_stride,
479         .mask_buf = dsc->mask_buf,
480         .mask_stride = dsc->mask_stride
481     };
482     if(src_px_size == 3) {
483         _lv_rgb888_blend_normal_to_rgb565_with_mask_neon(&asm_dsc);
484     }
485     else {
486         _lv_xrgb8888_blend_normal_to_rgb565_with_mask_neon(&asm_dsc);
487     }
488     return LV_RESULT_OK;
489 }
490 
491 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(asm_dsc_t * dsc);
492 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb565_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)493 static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
494                                                                              uint32_t src_px_size)
495 {
496     asm_dsc_t asm_dsc = {
497         .opa = dsc->opa,
498         .dst_buf = dsc->dest_buf,
499         .dst_w = dsc->dest_w,
500         .dst_h = dsc->dest_h,
501         .dst_stride = dsc->dest_stride,
502         .src_buf = dsc->src_buf,
503         .src_stride = dsc->src_stride,
504         .mask_buf = dsc->mask_buf,
505         .mask_stride = dsc->mask_stride
506     };
507     if(src_px_size == 3) {
508         _lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(&asm_dsc);
509     }
510     else {
511         _lv_xrgb8888_blend_normal_to_rgb565_mix_mask_opa_neon(&asm_dsc);
512     }
513     return LV_RESULT_OK;
514 }
515 
516 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb565_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc)517 static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_neon(lv_draw_sw_blend_image_dsc_t * dsc)
518 {
519     asm_dsc_t asm_dsc = {
520         .dst_buf = dsc->dest_buf,
521         .dst_w = dsc->dest_w,
522         .dst_h = dsc->dest_h,
523         .dst_stride = dsc->dest_stride,
524         .src_buf = dsc->src_buf,
525         .src_stride = dsc->src_stride
526     };
527     _lv_argb8888_blend_normal_to_rgb565_neon(&asm_dsc);
528     return LV_RESULT_OK;
529 }
530 
531 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb565_with_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)532 static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
533 {
534     asm_dsc_t asm_dsc = {
535         .opa = dsc->opa,
536         .dst_buf = dsc->dest_buf,
537         .dst_w = dsc->dest_w,
538         .dst_h = dsc->dest_h,
539         .dst_stride = dsc->dest_stride,
540         .src_buf = dsc->src_buf,
541         .src_stride = dsc->src_stride
542     };
543     _lv_argb8888_blend_normal_to_rgb565_with_opa_neon(&asm_dsc);
544     return LV_RESULT_OK;
545 }
546 
547 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb565_with_mask_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)548 static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)
549 {
550     asm_dsc_t asm_dsc = {
551         .dst_buf = dsc->dest_buf,
552         .dst_w = dsc->dest_w,
553         .dst_h = dsc->dest_h,
554         .dst_stride = dsc->dest_stride,
555         .src_buf = dsc->src_buf,
556         .src_stride = dsc->src_stride,
557         .mask_buf = dsc->mask_buf,
558         .mask_stride = dsc->mask_stride
559     };
560     _lv_argb8888_blend_normal_to_rgb565_with_mask_neon(&asm_dsc);
561     return LV_RESULT_OK;
562 }
563 
564 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)565 static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
566 {
567     asm_dsc_t asm_dsc = {
568         .opa = dsc->opa,
569         .dst_buf = dsc->dest_buf,
570         .dst_w = dsc->dest_w,
571         .dst_h = dsc->dest_h,
572         .dst_stride = dsc->dest_stride,
573         .src_buf = dsc->src_buf,
574         .src_stride = dsc->src_stride,
575         .mask_buf = dsc->mask_buf,
576         .mask_stride = dsc->mask_stride
577     };
578     _lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(&asm_dsc);
579     return LV_RESULT_OK;
580 }
581 
582 extern LVGL_HIDDEN void _lv_color_blend_to_rgb888_neon(asm_dsc_t * dsc);
583 extern LVGL_HIDDEN void _lv_color_blend_to_xrgb8888_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb888_neon(lv_draw_sw_blend_fill_dsc_t * dsc,uint32_t dst_px_size)584 static inline lv_result_t lv_color_blend_to_rgb888_neon(lv_draw_sw_blend_fill_dsc_t * dsc, uint32_t dst_px_size)
585 {
586     asm_dsc_t asm_dsc = {
587         .dst_buf = dsc->dest_buf,
588         .dst_w = dsc->dest_w,
589         .dst_h = dsc->dest_h,
590         .dst_stride = dsc->dest_stride,
591         .src_buf = &dsc->color
592     };
593     if(dst_px_size == 3) {
594         _lv_color_blend_to_rgb888_neon(&asm_dsc);
595     }
596     else {
597         _lv_color_blend_to_xrgb8888_neon(&asm_dsc);
598     }
599     return LV_RESULT_OK;
600 }
601 
602 extern LVGL_HIDDEN void _lv_color_blend_to_rgb888_with_opa_neon(asm_dsc_t * dsc);
603 extern LVGL_HIDDEN void _lv_color_blend_to_xrgb8888_with_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb888_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc,uint32_t dst_px_size)604 static inline lv_result_t lv_color_blend_to_rgb888_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc,
605                                                                  uint32_t dst_px_size)
606 {
607     asm_dsc_t asm_dsc = {
608         .opa = dsc->opa,
609         .dst_buf = dsc->dest_buf,
610         .dst_w = dsc->dest_w,
611         .dst_h = dsc->dest_h,
612         .dst_stride = dsc->dest_stride,
613         .src_buf = &dsc->color
614     };
615     if(dst_px_size == 3) {
616         _lv_color_blend_to_rgb888_with_opa_neon(&asm_dsc);
617     }
618     else {
619         _lv_color_blend_to_xrgb8888_with_opa_neon(&asm_dsc);
620     }
621     return LV_RESULT_OK;
622 }
623 
624 extern LVGL_HIDDEN void _lv_color_blend_to_rgb888_with_mask_neon(asm_dsc_t * dsc);
625 extern LVGL_HIDDEN void _lv_color_blend_to_xrgb8888_with_mask_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb888_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc,uint32_t dst_px_size)626 static inline lv_result_t lv_color_blend_to_rgb888_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc,
627                                                                   uint32_t dst_px_size)
628 {
629     asm_dsc_t asm_dsc = {
630         .dst_buf = dsc->dest_buf,
631         .dst_w = dsc->dest_w,
632         .dst_h = dsc->dest_h,
633         .dst_stride = dsc->dest_stride,
634         .src_buf = &dsc->color,
635         .mask_buf = dsc->mask_buf,
636         .mask_stride = dsc->mask_stride
637     };
638     if(dst_px_size == 3) {
639         _lv_color_blend_to_rgb888_with_mask_neon(&asm_dsc);
640     }
641     else {
642         _lv_color_blend_to_xrgb8888_with_mask_neon(&asm_dsc);
643     }
644     return LV_RESULT_OK;
645 }
646 
647 extern LVGL_HIDDEN void _lv_color_blend_to_rgb888_mix_mask_opa_neon(asm_dsc_t * dsc);
648 extern LVGL_HIDDEN void _lv_color_blend_to_xrgb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc,uint32_t dst_px_size)649 static inline lv_result_t lv_color_blend_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc,
650                                                                      uint32_t dst_px_size)
651 {
652     asm_dsc_t asm_dsc = {
653         .opa = dsc->opa,
654         .dst_buf = dsc->dest_buf,
655         .dst_w = dsc->dest_w,
656         .dst_h = dsc->dest_h,
657         .dst_stride = dsc->dest_stride,
658         .src_buf = &dsc->color,
659         .mask_buf = dsc->mask_buf,
660         .mask_stride = dsc->mask_stride
661     };
662     if(dst_px_size == 3) {
663         _lv_color_blend_to_rgb888_mix_mask_opa_neon(&asm_dsc);
664     }
665     else {
666         _lv_color_blend_to_xrgb8888_mix_mask_opa_neon(&asm_dsc);
667     }
668     return LV_RESULT_OK;
669 }
670 
671 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb888_neon(asm_dsc_t * dsc);
672 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_xrgb8888_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)673 static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,
674                                                                 uint32_t dst_px_size)
675 {
676     asm_dsc_t asm_dsc = {
677         .dst_buf = dsc->dest_buf,
678         .dst_w = dsc->dest_w,
679         .dst_h = dsc->dest_h,
680         .dst_stride = dsc->dest_stride,
681         .src_buf = dsc->src_buf,
682         .src_stride = dsc->src_stride
683     };
684     if(dst_px_size == 3) {
685         _lv_rgb565_blend_normal_to_rgb888_neon(&asm_dsc);
686     }
687     else {
688         _lv_rgb565_blend_normal_to_xrgb8888_neon(&asm_dsc);
689     }
690     return LV_RESULT_OK;
691 }
692 
693 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb888_with_opa_neon(asm_dsc_t * dsc);
694 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_xrgb8888_with_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)695 static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
696                                                                          uint32_t dst_px_size)
697 {
698     asm_dsc_t asm_dsc = {
699         .opa = dsc->opa,
700         .dst_buf = dsc->dest_buf,
701         .dst_w = dsc->dest_w,
702         .dst_h = dsc->dest_h,
703         .dst_stride = dsc->dest_stride,
704         .src_buf = dsc->src_buf,
705         .src_stride = dsc->src_stride
706     };
707     if(dst_px_size == 3) {
708         _lv_rgb565_blend_normal_to_rgb888_with_opa_neon(&asm_dsc);
709     }
710     else {
711         _lv_rgb565_blend_normal_to_xrgb8888_with_opa_neon(&asm_dsc);
712     }
713     return LV_RESULT_OK;
714 }
715 
716 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb888_with_mask_neon(asm_dsc_t * dsc);
717 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_xrgb8888_with_mask_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)718 static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,
719                                                                           uint32_t dst_px_size)
720 {
721     asm_dsc_t asm_dsc = {
722         .dst_buf = dsc->dest_buf,
723         .dst_w = dsc->dest_w,
724         .dst_h = dsc->dest_h,
725         .dst_stride = dsc->dest_stride,
726         .src_buf = dsc->src_buf,
727         .src_stride = dsc->src_stride,
728         .mask_buf = dsc->mask_buf,
729         .mask_stride = dsc->mask_stride
730     };
731     if(dst_px_size == 3) {
732         _lv_rgb565_blend_normal_to_rgb888_with_mask_neon(&asm_dsc);
733     }
734     else {
735         _lv_rgb565_blend_normal_to_xrgb8888_with_mask_neon(&asm_dsc);
736     }
737     return LV_RESULT_OK;
738 }
739 
740 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(asm_dsc_t * dsc);
741 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_xrgb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)742 static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
743                                                                              uint32_t dst_px_size)
744 {
745     asm_dsc_t asm_dsc = {
746         .opa = dsc->opa,
747         .dst_buf = dsc->dest_buf,
748         .dst_w = dsc->dest_w,
749         .dst_h = dsc->dest_h,
750         .dst_stride = dsc->dest_stride,
751         .src_buf = dsc->src_buf,
752         .src_stride = dsc->src_stride,
753         .mask_buf = dsc->mask_buf,
754         .mask_stride = dsc->mask_stride
755     };
756     if(dst_px_size == 3) {
757         _lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(&asm_dsc);
758     }
759     else {
760         _lv_rgb565_blend_normal_to_xrgb8888_mix_mask_opa_neon(&asm_dsc);
761     }
762     return LV_RESULT_OK;
763 }
764 
765 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb888_neon(asm_dsc_t * dsc);
766 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_xrgb8888_neon(asm_dsc_t * dsc);
767 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb888_neon(asm_dsc_t * dsc);
768 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_xrgb8888_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size,uint32_t src_px_size)769 static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,
770                                                                 uint32_t dst_px_size,
771                                                                 uint32_t src_px_size)
772 {
773     asm_dsc_t asm_dsc = {
774         .dst_buf = dsc->dest_buf,
775         .dst_w = dsc->dest_w,
776         .dst_h = dsc->dest_h,
777         .dst_stride = dsc->dest_stride,
778         .src_buf = dsc->src_buf,
779         .src_stride = dsc->src_stride
780     };
781     if(dst_px_size == 3) {
782         if(src_px_size == 3) {
783             _lv_rgb888_blend_normal_to_rgb888_neon(&asm_dsc);
784         }
785         else {
786             _lv_xrgb8888_blend_normal_to_rgb888_neon(&asm_dsc);
787         }
788     }
789     else {
790         if(src_px_size == 3) {
791             _lv_rgb888_blend_normal_to_xrgb8888_neon(&asm_dsc);
792         }
793         else {
794             _lv_xrgb8888_blend_normal_to_xrgb8888_neon(&asm_dsc);
795         }
796     }
797     return LV_RESULT_OK;
798 }
799 
800 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb888_with_opa_neon(asm_dsc_t * dsc);
801 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_xrgb8888_with_opa_neon(asm_dsc_t * dsc);
802 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb888_with_opa_neon(asm_dsc_t * dsc);
803 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_xrgb8888_with_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size,uint32_t src_px_size)804 static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
805                                                                          uint32_t dst_px_size, uint32_t src_px_size)
806 {
807     asm_dsc_t asm_dsc = {
808         .opa = dsc->opa,
809         .dst_buf = dsc->dest_buf,
810         .dst_w = dsc->dest_w,
811         .dst_h = dsc->dest_h,
812         .dst_stride = dsc->dest_stride,
813         .src_buf = dsc->src_buf,
814         .src_stride = dsc->src_stride
815     };
816     if(dst_px_size == 3) {
817         if(src_px_size == 3) {
818             _lv_rgb888_blend_normal_to_rgb888_with_opa_neon(&asm_dsc);
819         }
820         else {
821             _lv_xrgb8888_blend_normal_to_rgb888_with_opa_neon(&asm_dsc);
822         }
823     }
824     else {
825         if(src_px_size == 3) {
826             _lv_rgb888_blend_normal_to_xrgb8888_with_opa_neon(&asm_dsc);
827         }
828         else {
829             _lv_xrgb8888_blend_normal_to_xrgb8888_with_opa_neon(&asm_dsc);
830         }
831     }
832     return LV_RESULT_OK;
833 }
834 
835 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb888_with_mask_neon(asm_dsc_t * dsc);
836 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_xrgb8888_with_mask_neon(asm_dsc_t * dsc);
837 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb888_with_mask_neon(asm_dsc_t * dsc);
838 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_xrgb8888_with_mask_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size,uint32_t src_px_size)839 static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,
840                                                                           uint32_t dst_px_size, uint32_t src_px_size)
841 {
842     asm_dsc_t asm_dsc = {
843         .dst_buf = dsc->dest_buf,
844         .dst_w = dsc->dest_w,
845         .dst_h = dsc->dest_h,
846         .dst_stride = dsc->dest_stride,
847         .src_buf = dsc->src_buf,
848         .src_stride = dsc->src_stride,
849         .mask_buf = dsc->mask_buf,
850         .mask_stride = dsc->mask_stride
851     };
852     if(dst_px_size == 3) {
853         if(src_px_size == 3) {
854             _lv_rgb888_blend_normal_to_rgb888_with_mask_neon(&asm_dsc);
855         }
856         else {
857             _lv_xrgb8888_blend_normal_to_rgb888_with_mask_neon(&asm_dsc);
858         }
859     }
860     else {
861         if(src_px_size == 3) {
862             _lv_rgb888_blend_normal_to_xrgb8888_with_mask_neon(&asm_dsc);
863         }
864         else {
865             _lv_xrgb8888_blend_normal_to_xrgb8888_with_mask_neon(&asm_dsc);
866         }
867     }
868     return LV_RESULT_OK;
869 }
870 
871 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(asm_dsc_t * dsc);
872 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_xrgb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
873 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_rgb888_mix_mask_opa_neon(asm_dsc_t * dsc);
874 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_xrgb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size,uint32_t src_px_size)875 static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
876                                                                              uint32_t dst_px_size, uint32_t src_px_size)
877 {
878     asm_dsc_t asm_dsc = {
879         .opa = dsc->opa,
880         .dst_buf = dsc->dest_buf,
881         .dst_w = dsc->dest_w,
882         .dst_h = dsc->dest_h,
883         .dst_stride = dsc->dest_stride,
884         .src_buf = dsc->src_buf,
885         .src_stride = dsc->src_stride,
886         .mask_buf = dsc->mask_buf,
887         .mask_stride = dsc->mask_stride
888     };
889     if(dst_px_size == 3) {
890         if(src_px_size == 3) {
891             _lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(&asm_dsc);
892         }
893         else {
894             _lv_xrgb8888_blend_normal_to_rgb888_mix_mask_opa_neon(&asm_dsc);
895         }
896     }
897     else {
898         if(src_px_size == 3) {
899             _lv_rgb888_blend_normal_to_xrgb8888_mix_mask_opa_neon(&asm_dsc);
900         }
901         else {
902             _lv_xrgb8888_blend_normal_to_xrgb8888_mix_mask_opa_neon(&asm_dsc);
903         }
904     }
905     return LV_RESULT_OK;
906 }
907 
908 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb888_neon(asm_dsc_t * dsc);
909 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_xrgb8888_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)910 static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_neon(lv_draw_sw_blend_image_dsc_t * dsc,
911                                                                   uint32_t dst_px_size)
912 {
913     asm_dsc_t asm_dsc = {
914         .dst_buf = dsc->dest_buf,
915         .dst_w = dsc->dest_w,
916         .dst_h = dsc->dest_h,
917         .dst_stride = dsc->dest_stride,
918         .src_buf = dsc->src_buf,
919         .src_stride = dsc->src_stride
920     };
921     if(dst_px_size == 3) {
922         _lv_argb8888_blend_normal_to_rgb888_neon(&asm_dsc);
923     }
924     else {
925         _lv_argb8888_blend_normal_to_xrgb8888_neon(&asm_dsc);
926     }
927     return LV_RESULT_OK;
928 }
929 
930 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb888_with_opa_neon(asm_dsc_t * dsc);
931 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_xrgb8888_with_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)932 static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
933                                                                            uint32_t dst_px_size)
934 {
935     asm_dsc_t asm_dsc = {
936         .opa = dsc->opa,
937         .dst_buf = dsc->dest_buf,
938         .dst_w = dsc->dest_w,
939         .dst_h = dsc->dest_h,
940         .dst_stride = dsc->dest_stride,
941         .src_buf = dsc->src_buf,
942         .src_stride = dsc->src_stride
943     };
944     if(dst_px_size == 3) {
945         _lv_argb8888_blend_normal_to_rgb888_with_opa_neon(&asm_dsc);
946     }
947     else {
948         _lv_argb8888_blend_normal_to_xrgb8888_with_opa_neon(&asm_dsc);
949     }
950     return LV_RESULT_OK;
951 }
952 
953 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb888_with_mask_neon(asm_dsc_t * dsc);
954 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_xrgb8888_with_mask_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)955 static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,
956                                                                             uint32_t dst_px_size)
957 {
958     asm_dsc_t asm_dsc = {
959         .dst_buf = dsc->dest_buf,
960         .dst_w = dsc->dest_w,
961         .dst_h = dsc->dest_h,
962         .dst_stride = dsc->dest_stride,
963         .src_buf = dsc->src_buf,
964         .src_stride = dsc->src_stride,
965         .mask_buf = dsc->mask_buf,
966         .mask_stride = dsc->mask_stride
967     };
968     if(dst_px_size == 3) {
969         _lv_argb8888_blend_normal_to_rgb888_with_mask_neon(&asm_dsc);
970     }
971     else {
972         _lv_argb8888_blend_normal_to_xrgb8888_with_mask_neon(&asm_dsc);
973     }
974     return LV_RESULT_OK;
975 }
976 
977 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(asm_dsc_t * dsc);
978 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_xrgb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t dst_px_size)979 static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
980                                                                                uint32_t dst_px_size)
981 {
982     asm_dsc_t asm_dsc = {
983         .opa = dsc->opa,
984         .dst_buf = dsc->dest_buf,
985         .dst_w = dsc->dest_w,
986         .dst_h = dsc->dest_h,
987         .dst_stride = dsc->dest_stride,
988         .src_buf = dsc->src_buf,
989         .src_stride = dsc->src_stride,
990         .mask_buf = dsc->mask_buf,
991         .mask_stride = dsc->mask_stride
992     };
993     if(dst_px_size == 3) {
994         _lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(&asm_dsc);
995     }
996     else {
997         _lv_argb8888_blend_normal_to_xrgb8888_mix_mask_opa_neon(&asm_dsc);
998     }
999     return LV_RESULT_OK;
1000 }
1001 
1002 extern LVGL_HIDDEN void _lv_color_blend_to_argb8888_neon(asm_dsc_t * dsc);
lv_color_blend_to_argb8888_neon(lv_draw_sw_blend_fill_dsc_t * dsc)1003 static inline lv_result_t lv_color_blend_to_argb8888_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
1004 {
1005     asm_dsc_t asm_dsc = {
1006         .dst_buf = dsc->dest_buf,
1007         .dst_w = dsc->dest_w,
1008         .dst_h = dsc->dest_h,
1009         .dst_stride = dsc->dest_stride,
1010         .src_buf = &dsc->color
1011     };
1012 
1013     _lv_color_blend_to_argb8888_neon(&asm_dsc);
1014     return LV_RESULT_OK;
1015 }
1016 
1017 extern LVGL_HIDDEN void _lv_color_blend_to_argb8888_with_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_argb8888_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)1018 static inline lv_result_t lv_color_blend_to_argb8888_with_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
1019 {
1020     asm_dsc_t asm_dsc = {
1021         .opa = dsc->opa,
1022         .dst_buf = dsc->dest_buf,
1023         .dst_w = dsc->dest_w,
1024         .dst_h = dsc->dest_h,
1025         .dst_stride = dsc->dest_stride,
1026         .src_buf = &dsc->color
1027     };
1028     _lv_color_blend_to_argb8888_with_opa_neon(&asm_dsc);
1029     return LV_RESULT_OK;
1030 }
1031 
1032 extern LVGL_HIDDEN void _lv_color_blend_to_argb8888_with_mask_neon(asm_dsc_t * dsc);
lv_color_blend_to_argb8888_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc)1033 static inline lv_result_t lv_color_blend_to_argb8888_with_mask_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
1034 {
1035     asm_dsc_t asm_dsc = {
1036         .dst_buf = dsc->dest_buf,
1037         .dst_w = dsc->dest_w,
1038         .dst_h = dsc->dest_h,
1039         .dst_stride = dsc->dest_stride,
1040         .src_buf = &dsc->color,
1041         .mask_buf = dsc->mask_buf,
1042         .mask_stride = dsc->mask_stride
1043     };
1044     _lv_color_blend_to_argb8888_with_mask_neon(&asm_dsc);
1045     return LV_RESULT_OK;
1046 }
1047 
1048 extern LVGL_HIDDEN void _lv_color_blend_to_argb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_color_blend_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)1049 static inline lv_result_t lv_color_blend_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_fill_dsc_t * dsc)
1050 {
1051     asm_dsc_t asm_dsc = {
1052         .opa = dsc->opa,
1053         .dst_buf = dsc->dest_buf,
1054         .dst_w = dsc->dest_w,
1055         .dst_h = dsc->dest_h,
1056         .dst_stride = dsc->dest_stride,
1057         .src_buf = &dsc->color,
1058         .mask_buf = dsc->mask_buf,
1059         .mask_stride = dsc->mask_stride
1060     };
1061     _lv_color_blend_to_argb8888_mix_mask_opa_neon(&asm_dsc);
1062     return LV_RESULT_OK;
1063 }
1064 
1065 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_argb8888_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc)1066 static inline lv_result_t lv_rgb565_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1067 {
1068     asm_dsc_t asm_dsc = {
1069         .dst_buf = dsc->dest_buf,
1070         .dst_w = dsc->dest_w,
1071         .dst_h = dsc->dest_h,
1072         .dst_stride = dsc->dest_stride,
1073         .src_buf = dsc->src_buf,
1074         .src_stride = dsc->src_stride
1075     };
1076     _lv_rgb565_blend_normal_to_argb8888_neon(&asm_dsc);
1077     return LV_RESULT_OK;
1078 }
1079 
1080 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_argb8888_with_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)1081 static inline lv_result_t lv_rgb565_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1082 {
1083     asm_dsc_t asm_dsc = {
1084         .opa = dsc->opa,
1085         .dst_buf = dsc->dest_buf,
1086         .dst_w = dsc->dest_w,
1087         .dst_h = dsc->dest_h,
1088         .dst_stride = dsc->dest_stride,
1089         .src_buf = dsc->src_buf,
1090         .src_stride = dsc->src_stride
1091     };
1092     _lv_rgb565_blend_normal_to_argb8888_with_opa_neon(&asm_dsc);
1093     return LV_RESULT_OK;
1094 }
1095 
1096 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_argb8888_with_mask_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)1097 static inline lv_result_t lv_rgb565_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1098 {
1099     asm_dsc_t asm_dsc = {
1100         .dst_buf = dsc->dest_buf,
1101         .dst_w = dsc->dest_w,
1102         .dst_h = dsc->dest_h,
1103         .dst_stride = dsc->dest_stride,
1104         .src_buf = dsc->src_buf,
1105         .src_stride = dsc->src_stride,
1106         .mask_buf = dsc->mask_buf,
1107         .mask_stride = dsc->mask_stride
1108     };
1109     _lv_rgb565_blend_normal_to_argb8888_with_mask_neon(&asm_dsc);
1110     return LV_RESULT_OK;
1111 }
1112 
1113 extern LVGL_HIDDEN void _lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)1114 static inline lv_result_t lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1115 {
1116     asm_dsc_t asm_dsc = {
1117         .opa = dsc->opa,
1118         .dst_buf = dsc->dest_buf,
1119         .dst_w = dsc->dest_w,
1120         .dst_h = dsc->dest_h,
1121         .dst_stride = dsc->dest_stride,
1122         .src_buf = dsc->src_buf,
1123         .src_stride = dsc->src_stride,
1124         .mask_buf = dsc->mask_buf,
1125         .mask_stride = dsc->mask_stride
1126     };
1127     _lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(&asm_dsc);
1128     return LV_RESULT_OK;
1129 }
1130 
1131 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_argb8888_neon(asm_dsc_t * dsc);
1132 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_argb8888_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)1133 static inline lv_result_t lv_rgb888_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc,
1134                                                                   uint32_t src_px_size)
1135 {
1136     asm_dsc_t asm_dsc = {
1137         .dst_buf = dsc->dest_buf,
1138         .dst_w = dsc->dest_w,
1139         .dst_h = dsc->dest_h,
1140         .dst_stride = dsc->dest_stride,
1141         .src_buf = dsc->src_buf,
1142         .src_stride = dsc->src_stride
1143     };
1144     if(src_px_size == 3) {
1145         _lv_rgb888_blend_normal_to_argb8888_neon(&asm_dsc);
1146     }
1147     else {
1148         _lv_xrgb8888_blend_normal_to_argb8888_neon(&asm_dsc);
1149     }
1150     return LV_RESULT_OK;
1151 }
1152 
1153 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_argb8888_with_opa_neon(asm_dsc_t * dsc);
1154 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_argb8888_with_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)1155 static inline lv_result_t lv_rgb888_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
1156                                                                            uint32_t src_px_size)
1157 {
1158     asm_dsc_t asm_dsc = {
1159         .opa = dsc->opa,
1160         .dst_buf = dsc->dest_buf,
1161         .dst_w = dsc->dest_w,
1162         .dst_h = dsc->dest_h,
1163         .dst_stride = dsc->dest_stride,
1164         .src_buf = dsc->src_buf,
1165         .src_stride = dsc->src_stride
1166     };
1167     if(src_px_size == 3) {
1168         _lv_rgb888_blend_normal_to_argb8888_with_opa_neon(&asm_dsc);
1169     }
1170     else {
1171         _lv_xrgb8888_blend_normal_to_argb8888_with_opa_neon(&asm_dsc);
1172     }
1173     return LV_RESULT_OK;
1174 }
1175 
1176 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_argb8888_with_mask_neon(asm_dsc_t * dsc);
1177 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_argb8888_with_mask_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)1178 static inline lv_result_t lv_rgb888_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc,
1179                                                                             uint32_t src_px_size)
1180 {
1181     asm_dsc_t asm_dsc = {
1182         .dst_buf = dsc->dest_buf,
1183         .dst_w = dsc->dest_w,
1184         .dst_h = dsc->dest_h,
1185         .dst_stride = dsc->dest_stride,
1186         .src_buf = dsc->src_buf,
1187         .src_stride = dsc->src_stride,
1188         .mask_buf = dsc->mask_buf,
1189         .mask_stride = dsc->mask_stride
1190     };
1191     if(src_px_size == 3) {
1192         _lv_rgb888_blend_normal_to_argb8888_with_mask_neon(&asm_dsc);
1193     }
1194     else {
1195         _lv_xrgb8888_blend_normal_to_argb8888_with_mask_neon(&asm_dsc);
1196     }
1197     return LV_RESULT_OK;
1198 }
1199 
1200 extern LVGL_HIDDEN void _lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
1201 extern LVGL_HIDDEN void _lv_xrgb8888_blend_normal_to_argb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,uint32_t src_px_size)1202 static inline lv_result_t lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc,
1203                                                                                uint32_t src_px_size)
1204 {
1205     asm_dsc_t asm_dsc = {
1206         .opa = dsc->opa,
1207         .dst_buf = dsc->dest_buf,
1208         .dst_w = dsc->dest_w,
1209         .dst_h = dsc->dest_h,
1210         .dst_stride = dsc->dest_stride,
1211         .src_buf = dsc->src_buf,
1212         .src_stride = dsc->src_stride,
1213         .mask_buf = dsc->mask_buf,
1214         .mask_stride = dsc->mask_stride
1215     };
1216     if(src_px_size == 3) {
1217         _lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(&asm_dsc);
1218     }
1219     else {
1220         _lv_xrgb8888_blend_normal_to_argb8888_mix_mask_opa_neon(&asm_dsc);
1221     }
1222     return LV_RESULT_OK;
1223 }
1224 
1225 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_argb8888_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc)1226 static inline lv_result_t lv_argb8888_blend_normal_to_argb8888_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1227 {
1228     asm_dsc_t asm_dsc = {
1229         .dst_buf = dsc->dest_buf,
1230         .dst_w = dsc->dest_w,
1231         .dst_h = dsc->dest_h,
1232         .dst_stride = dsc->dest_stride,
1233         .src_buf = dsc->src_buf,
1234         .src_stride = dsc->src_stride
1235     };
1236     _lv_argb8888_blend_normal_to_argb8888_neon(&asm_dsc);
1237     return LV_RESULT_OK;
1238 }
1239 
1240 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_argb8888_with_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)1241 static inline lv_result_t lv_argb8888_blend_normal_to_argb8888_with_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1242 {
1243     asm_dsc_t asm_dsc = {
1244         .opa = dsc->opa,
1245         .dst_buf = dsc->dest_buf,
1246         .dst_w = dsc->dest_w,
1247         .dst_h = dsc->dest_h,
1248         .dst_stride = dsc->dest_stride,
1249         .src_buf = dsc->src_buf,
1250         .src_stride = dsc->src_stride
1251     };
1252     _lv_argb8888_blend_normal_to_argb8888_with_opa_neon(&asm_dsc);
1253     return LV_RESULT_OK;
1254 }
1255 
1256 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_argb8888_with_mask_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)1257 static inline lv_result_t lv_argb8888_blend_normal_to_argb8888_with_mask_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1258 {
1259     asm_dsc_t asm_dsc = {
1260         .dst_buf = dsc->dest_buf,
1261         .dst_w = dsc->dest_w,
1262         .dst_h = dsc->dest_h,
1263         .dst_stride = dsc->dest_stride,
1264         .src_buf = dsc->src_buf,
1265         .src_stride = dsc->src_stride,
1266         .mask_buf = dsc->mask_buf,
1267         .mask_stride = dsc->mask_stride
1268     };
1269     _lv_argb8888_blend_normal_to_argb8888_with_mask_neon(&asm_dsc);
1270     return LV_RESULT_OK;
1271 }
1272 
1273 extern LVGL_HIDDEN void _lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(asm_dsc_t * dsc);
lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)1274 static inline lv_result_t lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(lv_draw_sw_blend_image_dsc_t * dsc)
1275 {
1276     asm_dsc_t asm_dsc = {
1277         .opa = dsc->opa,
1278         .dst_buf = dsc->dest_buf,
1279         .dst_w = dsc->dest_w,
1280         .dst_h = dsc->dest_h,
1281         .dst_stride = dsc->dest_stride,
1282         .src_buf = dsc->src_buf,
1283         .src_stride = dsc->src_stride,
1284         .mask_buf = dsc->mask_buf,
1285         .mask_stride = dsc->mask_stride
1286     };
1287     _lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(&asm_dsc);
1288     return LV_RESULT_OK;
1289 }
1290 
1291 #endif /* !defined(__ASSEMBLY__) */
1292 
1293 /**********************
1294  *      MACROS
1295  **********************/
1296 
1297 #ifdef __cplusplus
1298 } /*extern "C"*/
1299 #endif
1300 
1301 #endif /*LV_BLEND_NEON_H*/
1302