aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c238
1 files changed, 238 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c
new file mode 100644
index 0000000..f8a1e79
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c
@@ -0,0 +1,238 @@
1/* copy pixel x color --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 // FIXME: neon-it
7 DATA32 *e;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 *d = MUL4_SYM(c, *s);
11 d++;
12 s++;
13 });
14}
15
16
17static void
18_op_copy_p_caa_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { // FIXME: neon-it
19 // FIXME: neon-it
20 DATA32 *e;
21 c = 1 + (c >> 24);
22 UNROLL8_PLD_WHILE(d, l, e,
23 {
24 *d = MUL_256(c, *s);
25 d++;
26 s++;
27 });
28}
29
30
31#define _op_copy_pas_c_dp_neon _op_copy_p_c_dp_neon
32#define _op_copy_pan_c_dp_neon _op_copy_p_c_dp_neon
33#define _op_copy_p_can_dp_neon _op_copy_p_c_dp_neon
34#define _op_copy_pas_can_dp_neon _op_copy_pas_c_dp_neon
35#define _op_copy_pan_can_dp_neon _op_copy_pan_c_dp_neon
36#define _op_copy_pas_caa_dp_neon _op_copy_p_caa_dp_neon
37#define _op_copy_pan_caa_dp_neon _op_copy_p_caa_dp_neon
38
39#define _op_copy_p_c_dpan_neon _op_copy_p_c_dp_neon
40#define _op_copy_pas_c_dpan_neon _op_copy_pas_c_dp_neon
41#define _op_copy_pan_c_dpan_neon _op_copy_pan_c_dp_neon
42#define _op_copy_p_can_dpan_neon _op_copy_p_can_dp_neon
43#define _op_copy_pas_can_dpan_neon _op_copy_pas_can_dp_neon
44#define _op_copy_pan_can_dpan_neon _op_copy_pan_can_dp_neon
45#define _op_copy_p_caa_dpan_neon _op_copy_p_caa_dp_neon
46#define _op_copy_pas_caa_dpan_neon _op_copy_pas_caa_dp_neon
47#define _op_copy_pan_caa_dpan_neon _op_copy_pan_caa_dp_neon
48
49static void
50init_copy_pixel_color_span_funcs_neon(void)
51{
52 op_copy_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_p_c_dp_neon;
53 op_copy_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pas_c_dp_neon;
54 op_copy_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pan_c_dp_neon;
55 op_copy_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_p_can_dp_neon;
56 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pas_can_dp_neon;
57 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pan_can_dp_neon;
58 op_copy_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_p_caa_dp_neon;
59 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pas_caa_dp_neon;
60 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pan_caa_dp_neon;
61
62 op_copy_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_p_c_dpan_neon;
63 op_copy_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pas_c_dpan_neon;
64 op_copy_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pan_c_dpan_neon;
65 op_copy_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_p_can_dpan_neon;
66 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pas_can_dpan_neon;
67 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pan_can_dpan_neon;
68 op_copy_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_p_caa_dpan_neon;
69 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pas_caa_dpan_neon;
70 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pan_caa_dpan_neon;
71}
72#endif
73
74#ifdef BUILD_NEON
75static void
76_op_copy_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
77 *d = MUL4_SYM(c, s);
78}
79
80#define _op_copy_pt_pas_c_dp_neon _op_copy_pt_p_c_dp_neon
81#define _op_copy_pt_pan_c_dp_neon _op_copy_pt_p_c_dp_neon
82#define _op_copy_pt_p_can_dp_neon _op_copy_pt_p_c_dp_neon
83#define _op_copy_pt_pas_can_dp_neon _op_copy_pt_p_c_dp_neon
84#define _op_copy_pt_pan_can_dp_neon _op_copy_pt_p_c_dp_neon
85#define _op_copy_pt_p_caa_dp_neon _op_copy_pt_p_c_dp_neon
86#define _op_copy_pt_pas_caa_dp_neon _op_copy_pt_p_c_dp_neon
87#define _op_copy_pt_pan_caa_dp_neon _op_copy_pt_p_c_dp_neon
88
89#define _op_copy_pt_p_c_dpan_neon _op_copy_pt_p_c_dp_neon
90#define _op_copy_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dp_neon
91#define _op_copy_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dp_neon
92#define _op_copy_pt_p_can_dpan_neon _op_copy_pt_p_can_dp_neon
93#define _op_copy_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dp_neon
94#define _op_copy_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dp_neon
95#define _op_copy_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dp_neon
96#define _op_copy_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dp_neon
97#define _op_copy_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dp_neon
98
99static void
100init_copy_pixel_color_pt_funcs_neon(void)
101{
102 op_copy_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_p_c_dp_neon;
103 op_copy_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pas_c_dp_neon;
104 op_copy_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pan_c_dp_neon;
105 op_copy_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_p_can_dp_neon;
106 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pas_can_dp_neon;
107 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pan_can_dp_neon;
108 op_copy_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_p_caa_dp_neon;
109 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pas_caa_dp_neon;
110 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pan_caa_dp_neon;
111
112 op_copy_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_p_c_dpan_neon;
113 op_copy_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pas_c_dpan_neon;
114 op_copy_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pan_c_dpan_neon;
115 op_copy_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_p_can_dpan_neon;
116 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pas_can_dpan_neon;
117 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pan_can_dpan_neon;
118 op_copy_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_p_caa_dpan_neon;
119 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pas_caa_dpan_neon;
120 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pan_caa_dpan_neon;
121}
122#endif
123
124/*-----*/
125
126/* copy_rel pixel x color --> dst */
127
128#ifdef BUILD_NEON
129static void
130_op_copy_rel_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
131 // FIXME: neon-it
132 DATA32 *e;
133 UNROLL8_PLD_WHILE(d, l, e,
134 {
135 DATA32 cs = MUL4_SYM(c, *s);
136 *d = MUL_SYM(*d >> 24, cs);
137 d++;
138 s++;
139 });
140}
141
142
143#define _op_copy_rel_pas_c_dp_neon _op_copy_rel_p_c_dp_neon
144#define _op_copy_rel_pan_c_dp_neon _op_copy_rel_p_c_dp_neon
145#define _op_copy_rel_p_can_dp_neon _op_copy_rel_p_c_dp_neon
146#define _op_copy_rel_pas_can_dp_neon _op_copy_rel_p_c_dp_neon
147#define _op_copy_rel_pan_can_dp_neon _op_copy_rel_p_c_dp_neon
148#define _op_copy_rel_p_caa_dp_neon _op_copy_rel_p_c_dp_neon
149#define _op_copy_rel_pas_caa_dp_neon _op_copy_rel_p_c_dp_neon
150#define _op_copy_rel_pan_caa_dp_neon _op_copy_rel_p_c_dp_neon
151
152#define _op_copy_rel_p_c_dpan_neon _op_copy_p_c_dpan_neon
153#define _op_copy_rel_pas_c_dpan_neon _op_copy_pas_c_dpan_neon
154#define _op_copy_rel_pan_c_dpan_neon _op_copy_pan_c_dpan_neon
155#define _op_copy_rel_p_can_dpan_neon _op_copy_p_can_dpan_neon
156#define _op_copy_rel_pas_can_dpan_neon _op_copy_pas_can_dpan_neon
157#define _op_copy_rel_pan_can_dpan_neon _op_copy_pan_can_dpan_neon
158#define _op_copy_rel_p_caa_dpan_neon _op_copy_p_caa_dpan_neon
159#define _op_copy_rel_pas_caa_dpan_neon _op_copy_pas_caa_dpan_neon
160#define _op_copy_rel_pan_caa_dpan_neon _op_copy_pan_caa_dpan_neon
161
162static void
163init_copy_rel_pixel_color_span_funcs_neon(void)
164{
165 op_copy_rel_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_p_c_dp_neon;
166 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pas_c_dp_neon;
167 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pan_c_dp_neon;
168 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_p_can_dp_neon;
169 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pas_can_dp_neon;
170 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pan_can_dp_neon;
171 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_p_caa_dp_neon;
172 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pas_caa_dp_neon;
173 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pan_caa_dp_neon;
174
175 op_copy_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_p_c_dpan_neon;
176 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pas_c_dpan_neon;
177 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pan_c_dpan_neon;
178 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_p_can_dpan_neon;
179 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pas_can_dpan_neon;
180 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pan_can_dpan_neon;
181 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_p_caa_dpan_neon;
182 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pas_caa_dpan_neon;
183 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pan_caa_dpan_neon;
184}
185#endif
186
187#ifdef BUILD_NEON
188static void
189_op_copy_rel_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
190 s = MUL4_SYM(c, s);
191 *d = MUL_SYM(*d >> 24, s);
192}
193
194
195#define _op_copy_rel_pt_pas_c_dp_neon _op_copy_rel_pt_p_c_dp_neon
196#define _op_copy_rel_pt_pan_c_dp_neon _op_copy_rel_pt_p_c_dp_neon
197#define _op_copy_rel_pt_p_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
198#define _op_copy_rel_pt_pas_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
199#define _op_copy_rel_pt_pan_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
200#define _op_copy_rel_pt_p_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
201#define _op_copy_rel_pt_pas_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
202#define _op_copy_rel_pt_pan_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
203
204#define _op_copy_rel_pt_p_c_dpan_neon _op_copy_pt_p_c_dpan_neon
205#define _op_copy_rel_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dpan_neon
206#define _op_copy_rel_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dpan_neon
207#define _op_copy_rel_pt_p_can_dpan_neon _op_copy_pt_p_can_dpan_neon
208#define _op_copy_rel_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dpan_neon
209#define _op_copy_rel_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dpan_neon
210#define _op_copy_rel_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dpan_neon
211#define _op_copy_rel_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dpan_neon
212#define _op_copy_rel_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dpan_neon
213
214
215static void
216init_copy_rel_pixel_color_pt_funcs_neon(void)
217{
218 op_copy_rel_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_p_c_dp_neon;
219 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pas_c_dp_neon;
220 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pan_c_dp_neon;
221 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_p_can_dp_neon;
222 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pas_can_dp_neon;
223 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pan_can_dp_neon;
224 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_p_caa_dp_neon;
225 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pas_caa_dp_neon;
226 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pan_caa_dp_neon;
227
228 op_copy_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_c_dpan_neon;
229 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_c_dpan_neon;
230 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_c_dpan_neon;
231 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_can_dpan_neon;
232 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_can_dpan_neon;
233 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_can_dpan_neon;
234 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_caa_dpan_neon;
235 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_caa_dpan_neon;
236 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_caa_dpan_neon;
237}
238#endif