aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c b/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c
new file mode 100644
index 0000000..3ea6919
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c
@@ -0,0 +1,122 @@
1/* mul pixel x color --> dst */
2
3#ifdef BUILD_C
4static void
5_op_mul_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 while (d < e) {
8 DATA32 cs = MUL4_SYM(c, *s);
9 *d = MUL4_SYM(cs, *d);
10 s++; d++;
11 }
12}
13
14static void
15_op_mul_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
16 DATA32 *e = d + l;
17 c = 1 + (c >> 24);
18 while (d < e)
19 {
20 DATA32 cs = MUL_256(c, *s);
21 *d = MUL4_SYM(cs, *d);
22 s++; d++;
23 }
24}
25
26#define _op_mul_pas_c_dp _op_mul_p_c_dp
27#define _op_mul_pan_c_dp _op_mul_p_c_dp
28#define _op_mul_p_can_dp _op_mul_p_c_dp
29#define _op_mul_pas_can_dp _op_mul_p_c_dp
30#define _op_mul_pan_can_dp _op_mul_p_c_dp
31#define _op_mul_pas_caa_dp _op_mul_p_caa_dp
32#define _op_mul_pan_caa_dp _op_mul_p_caa_dp
33
34#define _op_mul_p_c_dpan _op_mul_p_c_dp
35#define _op_mul_pas_c_dpan _op_mul_pas_c_dp
36#define _op_mul_pan_c_dpan _op_mul_pan_c_dp
37#define _op_mul_p_can_dpan _op_mul_p_can_dp
38#define _op_mul_pas_can_dpan _op_mul_pas_can_dp
39#define _op_mul_pan_can_dpan _op_mul_pan_can_dp
40#define _op_mul_p_caa_dpan _op_mul_p_caa_dp
41#define _op_mul_pas_caa_dpan _op_mul_pas_caa_dp
42#define _op_mul_pan_caa_dpan _op_mul_pan_caa_dp
43
44static void
45init_mul_pixel_color_span_funcs_c(void)
46{
47 op_mul_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_mul_p_c_dp;
48 op_mul_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_mul_pas_c_dp;
49 op_mul_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_mul_pan_c_dp;
50 op_mul_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_mul_p_can_dp;
51 op_mul_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_mul_pas_can_dp;
52 op_mul_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_mul_pan_can_dp;
53 op_mul_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_mul_p_caa_dp;
54 op_mul_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_mul_pas_caa_dp;
55 op_mul_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_mul_pan_caa_dp;
56
57 op_mul_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_mul_p_c_dpan;
58 op_mul_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_mul_pas_c_dpan;
59 op_mul_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_mul_pan_c_dpan;
60 op_mul_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_p_can_dpan;
61 op_mul_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_pas_can_dpan;
62 op_mul_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_pan_can_dpan;
63 op_mul_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_p_caa_dpan;
64 op_mul_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_pas_caa_dpan;
65 op_mul_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_pan_caa_dpan;
66}
67#endif
68
69#ifdef BUILD_C
70static void
71_op_mul_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
72 s = MUL4_SYM(c, s);
73 *d = MUL4_SYM(s, *d);
74}
75
76static void
77_op_mul_pt_p_caa_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
78 s = MUL_SYM(c >> 24, s);
79 *d = MUL4_SYM(s, *d);
80}
81
82#define _op_mul_pt_pas_c_dp _op_mul_pt_p_c_dp
83#define _op_mul_pt_pan_c_dp _op_mul_pt_p_c_dp
84#define _op_mul_pt_p_can_dp _op_mul_pt_p_c_dp
85#define _op_mul_pt_pas_can_dp _op_mul_pt_p_c_dp
86#define _op_mul_pt_pan_can_dp _op_mul_pt_p_c_dp
87#define _op_mul_pt_pas_caa_dp _op_mul_pt_p_caa_dp
88#define _op_mul_pt_pan_caa_dp _op_mul_pt_p_caa_dp
89
90#define _op_mul_pt_p_c_dpan _op_mul_pt_p_c_dp
91#define _op_mul_pt_pan_c_dpan _op_mul_pt_pan_c_dp
92#define _op_mul_pt_pas_c_dpan _op_mul_pt_pas_c_dp
93#define _op_mul_pt_p_can_dpan _op_mul_pt_p_can_dp
94#define _op_mul_pt_pan_can_dpan _op_mul_pt_pan_can_dp
95#define _op_mul_pt_pas_can_dpan _op_mul_pt_pas_can_dp
96#define _op_mul_pt_p_caa_dpan _op_mul_pt_p_caa_dp
97#define _op_mul_pt_pan_caa_dpan _op_mul_pt_pan_caa_dp
98#define _op_mul_pt_pas_caa_dpan _op_mul_pt_pas_caa_dp
99static void
100init_mul_pixel_color_pt_funcs_c(void)
101{
102 op_mul_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_mul_pt_p_c_dp;
103 op_mul_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_mul_pt_pas_c_dp;
104 op_mul_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_mul_pt_pan_c_dp;
105 op_mul_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_mul_pt_p_can_dp;
106 op_mul_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_mul_pt_pas_can_dp;
107 op_mul_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_mul_pt_pan_can_dp;
108 op_mul_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_mul_pt_p_caa_dp;
109 op_mul_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_mul_pt_pas_caa_dp;
110 op_mul_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_mul_pt_pan_caa_dp;
111
112 op_mul_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_mul_pt_p_c_dpan;
113 op_mul_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_mul_pt_pas_c_dpan;
114 op_mul_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_mul_pt_pan_c_dpan;
115 op_mul_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_pt_p_can_dpan;
116 op_mul_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_pt_pas_can_dpan;
117 op_mul_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_mul_pt_pan_can_dpan;
118 op_mul_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_pt_p_caa_dpan;
119 op_mul_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_pt_pas_caa_dpan;
120 op_mul_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_mul_pt_pan_caa_dpan;
121}
122#endif