aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c193
1 files changed, 193 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c
new file mode 100644
index 0000000..e27493f
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c
@@ -0,0 +1,193 @@
1/* copy mask x color -> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_mas_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_P2R(c, mm2, mm0)
9 MOV_A2R(ALPHA_255, mm5)
10 while (d < e) {
11 l = *m;
12 switch(l)
13 {
14 case 0:
15 break;
16 case 255:
17 *d = c;
18 break;
19 default:
20 {
21 l++;
22 MOV_A2R(l, mm3)
23 MOV_P2R(*d, mm1, mm0)
24 movq_r2r(mm2, mm4);
25 INTERP_256_R2R(mm3, mm4, mm1, mm5);
26 MOV_R2P(mm1, *d, mm0)
27 }
28 break;
29 }
30 m++; d++;
31 }
32}
33
34#define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
35#define _op_copy_mas_can_dp_mmx _op_copy_mas_c_dp_mmx
36#define _op_copy_mas_caa_dp_mmx _op_copy_mas_c_dp_mmx
37
38#define _op_copy_mas_c_dpan_mmx _op_copy_mas_c_dp_mmx
39#define _op_copy_mas_cn_dpan_mmx _op_copy_mas_c_dpan_mmx
40#define _op_copy_mas_can_dpan_mmx _op_copy_mas_c_dpan_mmx
41#define _op_copy_mas_caa_dpan_mmx _op_copy_mas_c_dpan_mmx
42
43static void
44init_copy_mask_color_span_funcs_mmx(void)
45{
46 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_mas_cn_dp_mmx;
47 op_copy_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_mas_c_dp_mmx;
48 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_mas_can_dp_mmx;
49 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_mas_caa_dp_mmx;
50
51 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_mas_cn_dpan_mmx;
52 op_copy_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_mas_c_dpan_mmx;
53 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_mas_can_dpan_mmx;
54 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_mas_caa_dpan_mmx;
55}
56#endif
57
58#ifdef BUILD_MMX
59static void
60_op_copy_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
61 s = m + 1;
62 MOV_A2R(ALPHA_255, mm5)
63 pxor_r2r(mm0, mm0);
64 MOV_P2R(c, mm2, mm0)
65 MOV_A2R(s, mm3)
66 MOV_P2R(*d, mm1, mm0)
67 INTERP_256_R2R(mm3, mm2, mm1, mm5);
68 MOV_R2P(mm1, *d, mm0)
69}
70
71#define _op_copy_pt_mas_cn_dp_mmx _op_copy_pt_mas_c_dp_mmx
72#define _op_copy_pt_mas_can_dp_mmx _op_copy_pt_mas_c_dp_mmx
73#define _op_copy_pt_mas_caa_dp_mmx _op_copy_pt_mas_c_dp_mmx
74
75#define _op_copy_pt_mas_c_dpan_mmx _op_copy_pt_mas_c_dp_mmx
76#define _op_copy_pt_mas_cn_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
77#define _op_copy_pt_mas_can_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
78#define _op_copy_pt_mas_caa_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
79
80static void
81init_copy_mask_color_pt_funcs_mmx(void)
82{
83 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_mas_cn_dp_mmx;
84 op_copy_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_pt_mas_c_dp_mmx;
85 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_pt_mas_can_dp_mmx;
86 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_pt_mas_caa_dp_mmx;
87
88 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_mas_cn_dpan_mmx;
89 op_copy_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_pt_mas_c_dpan_mmx;
90 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_mas_can_dpan_mmx;
91 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_mas_caa_dpan_mmx;
92}
93#endif
94
95/*-----*/
96
97/* copy_rel mask x color -> dst */
98
99#ifdef BUILD_MMX
100static void
101_op_copy_rel_mas_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
102 DATA32 *e = d + l;
103 pxor_r2r(mm0, mm0);
104 MOV_P2R(c, mm2, mm0)
105 MOV_A2R(ALPHA_255, mm5)
106 while (d < e) {
107 l = *m;
108 switch(l)
109 {
110 case 0:
111 break;
112 case 255:
113 l = 1 + (*d >> 24);
114 MOV_A2R(l, mm1)
115 MUL4_256_R2R(mm2, mm1)
116 MOV_R2P(mm1, *d, mm0)
117 break;
118 default:
119 l++;
120 MOV_A2R(l, mm3)
121 MOV_P2R(*d, mm1, mm0)
122 MOV_RA2R(mm1, mm4)
123 MUL4_256_R2R(mm2, mm4)
124 INTERP_256_R2R(mm3, mm4, mm1, mm5)
125 MOV_R2P(mm1, *d, mm0)
126 break;
127 }
128 m++; d++;
129 }
130}
131
132#define _op_copy_rel_mas_cn_dp_mmx _op_copy_rel_mas_c_dp_mmx
133#define _op_copy_rel_mas_can_dp_mmx _op_copy_rel_mas_c_dp_mmx
134#define _op_copy_rel_mas_caa_dp_mmx _op_copy_rel_mas_c_dp_mmx
135
136#define _op_copy_rel_mas_c_dpan_mmx _op_copy_mas_c_dpan_mmx
137#define _op_copy_rel_mas_cn_dpan_mmx _op_copy_mas_cn_dpan_mmx
138#define _op_copy_rel_mas_can_dpan_mmx _op_copy_mas_can_dpan_mmx
139#define _op_copy_rel_mas_caa_dpan_mmx _op_copy_mas_caa_dpan_mmx
140
141static void
142init_copy_rel_mask_color_span_funcs_mmx(void)
143{
144 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_mas_cn_dp_mmx;
145 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_rel_mas_c_dp_mmx;
146 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_rel_mas_can_dp_mmx;
147 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_rel_mas_caa_dp_mmx;
148
149 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_mas_cn_dpan_mmx;
150 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_rel_mas_c_dpan_mmx;
151 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_mas_can_dpan_mmx;
152 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_mas_caa_dpan_mmx;
153}
154#endif
155
156#ifdef BUILD_MMX
157static void
158_op_copy_rel_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
159 s = m + 1;
160 MOV_A2R(ALPHA_255, mm5)
161 pxor_r2r(mm0, mm0);
162 MOV_A2R(s, mm3)
163 MOV_P2R(*d, mm1, mm0)
164 MOV_RA2R(mm1, mm4)
165 MOV_P2R(c, mm2, mm0)
166 MUL4_256_R2R(mm2, mm4)
167 INTERP_256_R2R(mm3, mm4, mm1, mm5)
168 MOV_R2P(mm1, *d, mm0)
169}
170
171#define _op_copy_rel_pt_mas_cn_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
172#define _op_copy_rel_pt_mas_can_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
173#define _op_copy_rel_pt_mas_caa_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
174
175#define _op_copy_rel_pt_mas_c_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
176#define _op_copy_rel_pt_mas_cn_dpan_mmx _op_copy_pt_mas_cn_dpan_mmx
177#define _op_copy_rel_pt_mas_can_dpan_mmx _op_copy_pt_mas_can_dpan_mmx
178#define _op_copy_rel_pt_mas_caa_dpan_mmx _op_copy_pt_mas_caa_dpan_mmx
179
180static void
181init_copy_rel_mask_color_pt_funcs_mmx(void)
182{
183 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_mas_cn_dp_mmx;
184 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_rel_pt_mas_c_dp_mmx;
185 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_mas_can_dp_mmx;
186 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_mas_caa_dp_mmx;
187
188 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_cn_dpan_mmx;
189 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_c_dpan_mmx;
190 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_can_dpan_mmx;
191 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_caa_dpan_mmx;
192}
193#endif