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