aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c
new file mode 100644
index 0000000..e25f8f8
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c
@@ -0,0 +1,151 @@
1/* copy pixel x mask --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 // FIXME: neon-it
7 DATA32 *e;
8 int color;
9 UNROLL8_PLD_WHILE(d, l, e,
10 {
11 color = *m;
12 switch(color)
13 {
14 case 0:
15 break;
16 case 255:
17 *d = *s;
18 break;
19 default:
20 color++;
21 *d = INTERP_256(color, *s, *d);
22 break;
23 }
24 m++; s++; d++;
25 });
26}
27
28#define _op_copy_pan_mas_dp_neon _op_copy_p_mas_dp_neon
29#define _op_copy_pas_mas_dp_neon _op_copy_p_mas_dp_neon
30
31#define _op_copy_p_mas_dpan_neon _op_copy_p_mas_dp_neon
32#define _op_copy_pan_mas_dpan_neon _op_copy_p_mas_dpan_neon
33#define _op_copy_pas_mas_dpan_neon _op_copy_p_mas_dpan_neon
34
35static void
36init_copy_pixel_mask_span_funcs_neon(void)
37{
38 op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_p_mas_dp_neon;
39 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pan_mas_dp_neon;
40 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pas_mas_dp_neon;
41
42 op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_p_mas_dpan_neon;
43 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pan_mas_dpan_neon;
44 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pas_mas_dpan_neon;
45}
46#endif
47
48#ifdef BUILD_NEON
49static void
50_op_copy_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
51 *d = INTERP_256(m + 1, s, *d);
52}
53
54#define _op_copy_pt_pan_mas_dp_neon _op_copy_pt_p_mas_dp_neon
55#define _op_copy_pt_pas_mas_dp_neon _op_copy_pt_p_mas_dp_neon
56
57#define _op_copy_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dp_neon
58#define _op_copy_pt_pan_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
59#define _op_copy_pt_pas_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
60
61static void
62init_copy_pixel_mask_pt_funcs_neon(void)
63{
64 op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_p_mas_dp_neon;
65 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pan_mas_dp_neon;
66 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pas_mas_dp_neon;
67
68 op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_p_mas_dpan_neon;
69 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pan_mas_dpan_neon;
70 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pas_mas_dpan_neon;
71}
72#endif
73
74/*-----*/
75
76/* copy_rel pixel x mask --> dst */
77
78#ifdef BUILD_NEON
79static void
80_op_copy_rel_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
81 // FIXME: neon-it
82 DATA32 *e;
83 int color;
84 UNROLL8_PLD_WHILE(d, l, e,
85 {
86 color = *m;
87 switch(color)
88 {
89 case 0:
90 break;
91 case 255:
92 *d = MUL_SYM(*d >> 24, *s);
93 break;
94 default:
95 c = MUL_SYM(*d >> 24, *s);
96 l++;
97 *d = INTERP_256(l, c, *d);
98 break;
99 }
100 m++; s++; d++;
101 });
102}
103
104#define _op_copy_rel_pan_mas_dp_neon _op_copy_rel_p_mas_dp_neon
105#define _op_copy_rel_pas_mas_dp_neon _op_copy_rel_p_mas_dp_neon
106
107#define _op_copy_rel_p_mas_dpan_neon _op_copy_p_mas_dpan_neon
108#define _op_copy_rel_pan_mas_dpan_neon _op_copy_pan_mas_dpan_neon
109#define _op_copy_rel_pas_mas_dpan_neon _op_copy_pas_mas_dpan_neon
110
111static void
112init_copy_rel_pixel_mask_span_funcs_neon(void)
113{
114 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_p_mas_dp_neon;
115 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pan_mas_dp_neon;
116 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pas_mas_dp_neon;
117
118 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_p_mas_dpan_neon;
119 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pan_mas_dpan_neon;
120 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pas_mas_dpan_neon;
121}
122#endif
123
124#ifdef BUILD_NEON
125static void
126_op_copy_rel_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
127 c = MUL_SYM(*d >> 24, s);
128 *d = INTERP_256(m + 1, c, *d);
129}
130
131
132#define _op_copy_rel_pt_pan_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon
133#define _op_copy_rel_pt_pas_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon
134
135#define _op_copy_rel_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
136#define _op_copy_rel_pt_pan_mas_dpan_neon _op_copy_pt_pan_mas_dpan_neon
137#define _op_copy_rel_pt_pas_mas_dpan_neon _op_copy_pt_pas_mas_dpan_neon
138
139static void
140init_copy_rel_pixel_mask_pt_funcs_neon(void)
141{
142 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_p_mas_dp_neon;
143 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pan_mas_dp_neon;
144 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pas_mas_dp_neon;
145
146 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_mas_dpan_neon;
147 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_mas_dpan_neon;
148 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_mas_dpan_neon;
149}
150#endif
151