aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c167
1 files changed, 0 insertions, 167 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
deleted file mode 100644
index 1843265..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
+++ /dev/null
@@ -1,167 +0,0 @@
1/* blend color -> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
7
8 DATA32 a = 256 - (c >> 24);
9
10 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
11 const __m128i a_packed = _mm_set_epi32(a, a, a, a);
12
13 LOOP_ALIGNED_U1_A48_SSE3(d, l,
14 { /* UOP */
15
16 *d = c + MUL_256(a, *d);
17 d++; l--;
18 },
19 { /* A4OP */
20
21 __m128i d0 = _mm_load_si128((__m128i *)d);
22
23 d0 = mul_256_sse3(a_packed, d0);
24 d0 = _mm_add_epi32(d0, c_packed);
25
26 _mm_store_si128((__m128i *)d, d0);
27
28 d += 4; l -= 4;
29 },
30 { /* A8OP */
31
32 __m128i d0 = _mm_load_si128((__m128i *)d);
33 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
34
35 d0 = mul_256_sse3(a_packed, d0);
36 d1 = mul_256_sse3(a_packed, d1);
37
38 d0 = _mm_add_epi32(d0, c_packed);
39 d1 = _mm_add_epi32(d1, c_packed);
40
41 _mm_store_si128((__m128i *)d, d0);
42 _mm_store_si128((__m128i *)(d+4), d1);
43
44 d += 8; l -= 8;
45 })
46}
47
48#define _op_blend_caa_dp_sse3 _op_blend_c_dp_sse3
49
50#define _op_blend_c_dpan_sse3 _op_blend_c_dp_sse3
51#define _op_blend_caa_dpan_sse3 _op_blend_c_dpan_sse3
52
53static void
54init_blend_color_span_funcs_sse3(void)
55{
56// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
57// op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_c_dp_sse3;
58 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_caa_dp_sse3;
59
60// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
61// op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_c_dpan_sse3;
62 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_caa_dpan_sse3;
63}
64
65#define _op_blend_pt_c_dp_sse3 NULL
66#define _op_blend_pt_caa_dp_sse3 _op_blend_pt_c_dp_sse3
67
68#define _op_blend_pt_c_dpan_sse3 _op_blend_pt_c_dp_sse3
69#define _op_blend_pt_caa_dpan_sse3 _op_blend_pt_c_dpan_sse3
70
71#define _op_blend_pt_c_dpas_sse3 _op_blend_pt_c_dp_sse3
72#define _op_blend_pt_caa_dpas_sse3 _op_blend_pt_c_dp_sse3
73
74static void
75init_blend_color_pt_funcs_sse3(void)
76{
77 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_pt_c_dp_sse3;
78 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pt_caa_dp_sse3;
79
80 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pt_c_dpan_sse3;
81 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_caa_dpan_sse3;
82}
83
84
85/*-----*/
86
87/* blend_rel color -> dst */
88
89static void
90_op_blend_rel_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
91
92 int alpha = 256 - (c >> 24);
93
94 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
95 const __m128i alpha_packed = _mm_set_epi32(alpha, alpha, alpha, alpha);
96
97 LOOP_ALIGNED_U1_A48_SSE3(d, l,
98 { /* UOP */
99
100 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
101 d++; l--;
102 },
103 { /* A4OP */
104
105 __m128i d0 = _mm_load_si128((__m128i *)d);
106
107 __m128i mul0 = mul_256_sse3(alpha_packed, d0);
108 __m128i sym0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c_packed);
109
110 d0 = _mm_add_epi32(mul0, sym0);
111
112 _mm_store_si128((__m128i *)d, d0);
113
114 d += 4; l -= 4;
115 },
116 { /* A8OP */
117
118 __m128i d0 = _mm_load_si128((__m128i *)d);
119 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
120
121 __m128i mul0 = mul_256_sse3(alpha_packed, d0);
122 __m128i mul1 = mul_256_sse3(alpha_packed, d1);
123
124 __m128i sym0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c_packed);
125 __m128i sym1 = mul_sym_sse3(_mm_srli_epi32(d1, 24), c_packed);
126
127 d0 = _mm_add_epi32(mul0, sym0);
128 d1 = _mm_add_epi32(mul1, sym1);
129
130 _mm_store_si128((__m128i *)d, d0);
131 _mm_store_si128((__m128i *)(d+4), d1);
132
133 d += 8; l -= 8;
134 })
135}
136
137#define _op_blend_rel_caa_dp_sse3 _op_blend_rel_c_dp_sse3
138#define _op_blend_rel_c_dpan_sse3 _op_blend_c_dpan_sse3
139#define _op_blend_rel_caa_dpan_sse3 _op_blend_caa_dpan_sse3
140
141static void
142init_blend_rel_color_span_funcs_sse3(void)
143{
144 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_c_dp_sse3;
145 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_caa_dp_sse3;
146
147 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_c_dpan_sse3;
148 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_caa_dpan_sse3;
149}
150
151#define _op_blend_rel_pt_c_dp_sse3 NULL
152#define _op_blend_rel_pt_caa_dp_sse3 _op_blend_rel_pt_c_dp_sse3
153
154#define _op_blend_rel_pt_c_dpan_sse3 _op_blend_pt_c_dpan_sse3
155#define _op_blend_rel_pt_caa_dpan_sse3 _op_blend_pt_caa_dpan_sse3
156
157static void
158init_blend_rel_color_pt_funcs_sse3(void)
159{
160 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pt_c_dp_sse3;
161 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_caa_dp_sse3;
162
163 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_c_dpan_sse3;
164 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_caa_dpan_sse3;
165}
166
167#endif