move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_copy / op_copy_pixel_mask_i386.c
1
2 /* copy pixel x mask --> dst */
3
4 #ifdef BUILD_MMX
5 static void
6 _op_copy_p_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l;
8    pxor_r2r(mm0, 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 = *s;
18                 break;
19             default:
20                 l++;
21                 MOV_A2R(l, mm3)
22                 MOV_P2R(*s, mm2, mm0)
23                 MOV_P2R(*d, mm1, mm0)
24                 INTERP_256_R2R(mm3, mm2, mm1, mm5);
25                 MOV_R2P(mm1, *d, mm0)
26                 break;
27           }
28         m++;  d++;
29      }
30 }
31
32 #define _op_copy_pan_mas_dp_mmx _op_copy_p_mas_dp_mmx
33 #define _op_copy_pas_mas_dp_mmx _op_copy_p_mas_dp_mmx
34
35 #define _op_copy_p_mas_dpan_mmx _op_copy_p_mas_dp_mmx
36 #define _op_copy_pan_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
37 #define _op_copy_pas_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
38
39 static void
40 init_copy_pixel_mask_span_funcs_mmx(void)
41 {
42    op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_p_mas_dp_mmx;
43    op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pan_mas_dp_mmx;
44    op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pas_mas_dp_mmx;
45
46    op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_p_mas_dpan_mmx;
47    op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pan_mas_dpan_mmx;
48    op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pas_mas_dpan_mmx;
49 }
50 #endif
51
52 #ifdef BUILD_MMX
53 static void
54 _op_copy_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
55         c = m + 1;
56         MOV_A2R(ALPHA_255, mm5)
57         MOV_A2R(c, mm3)
58         pxor_r2r(mm0, mm0);
59         MOV_P2R(s, mm2, mm0)
60         MOV_P2R(*d, mm1, mm0)
61         INTERP_256_R2R(mm3, mm2, mm1, mm5);
62         MOV_R2P(mm1, *d, mm0)
63 }
64
65 #define _op_copy_pt_pan_mas_dp_mmx _op_copy_pt_p_mas_dp_mmx
66 #define _op_copy_pt_pas_mas_dp_mmx _op_copy_pt_p_mas_dp_mmx
67
68 #define _op_copy_pt_p_mas_dpan_mmx _op_copy_pt_p_mas_dp_mmx
69 #define _op_copy_pt_pan_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
70 #define _op_copy_pt_pas_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
71
72 static void
73 init_copy_pixel_mask_pt_funcs_mmx(void)
74 {
75    op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_p_mas_dp_mmx;
76    op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_pan_mas_dp_mmx;
77    op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_pas_mas_dp_mmx;
78
79    op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_p_mas_dpan_mmx;
80    op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pan_mas_dpan_mmx;
81    op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pas_mas_dpan_mmx;
82 }
83 #endif
84
85 /*-----*/
86
87 /* copy_rel pixel x mask --> dst */
88
89 #ifdef BUILD_MMX
90 static void 
91 _op_copy_rel_p_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
92    DATA32 *e = d + l;
93    pxor_r2r(mm0, mm0);
94    MOV_A2R(ALPHA_255, mm5)
95    while (d < e) {
96         l = *m;
97         switch(l)
98           {
99             case 0:
100                 break;
101             case 255:
102                 MOV_P2R(*s, mm2, mm0)
103                 MOV_PA2R(*d, mm1)
104                 MUL4_SYM_R2R(mm2, mm1, mm5)
105                 MOV_R2P(mm1, *d, mm0)
106                 break;
107             default:
108                 l++;
109                 MOV_P2R(*s, mm3, mm0)
110                 MOV_P2R(*d, mm1, mm0)
111                 MOV_RA2R(mm1, mm2)
112                 MUL4_SYM_R2R(mm3, mm2, mm5)
113                 MOV_A2R(l, mm3)
114                 INTERP_256_R2R(mm3, mm2, mm1, mm5)
115                 MOV_R2P(mm1, *d, mm0)
116                 break;
117           }
118         m++;  s++;  d++;
119      }
120 }
121
122 #define _op_copy_rel_pan_mas_dp_mmx _op_copy_rel_p_mas_dp_mmx
123 #define _op_copy_rel_pas_mas_dp_mmx _op_copy_rel_p_mas_dp_mmx
124
125 #define _op_copy_rel_p_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
126 #define _op_copy_rel_pan_mas_dpan_mmx _op_copy_pan_mas_dpan_mmx
127 #define _op_copy_rel_pas_mas_dpan_mmx _op_copy_pas_mas_dpan_mmx
128
129 static void
130 init_copy_rel_pixel_mask_span_funcs_mmx(void)
131 {
132    op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_p_mas_dp_mmx;
133    op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pan_mas_dp_mmx;
134    op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pas_mas_dp_mmx;
135
136    op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_p_mas_dpan_mmx;
137    op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pan_mas_dpan_mmx;
138    op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pas_mas_dpan_mmx;
139 }
140 #endif
141
142 #ifdef BUILD_MMX
143 static void 
144 _op_copy_rel_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
145         c = m + 1;
146         pxor_r2r(mm0, mm0);
147         MOV_A2R(ALPHA_255, mm5)
148         MOV_P2R(s, mm3, mm0)
149         MOV_P2R(*d, mm1, mm0)
150         MOV_RA2R(mm1, mm2)
151         MUL4_SYM_R2R(mm3, mm2, mm5)
152         MOV_A2R(c, mm3)
153         INTERP_256_R2R(mm3, mm2, mm1, mm5)
154         MOV_R2P(mm1, *d, mm0)
155 }
156
157
158 #define _op_copy_rel_pt_pan_mas_dp_mmx _op_copy_rel_pt_p_mas_dp_mmx
159 #define _op_copy_rel_pt_pas_mas_dp_mmx _op_copy_rel_pt_p_mas_dp_mmx
160
161 #define _op_copy_rel_pt_p_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
162 #define _op_copy_rel_pt_pan_mas_dpan_mmx _op_copy_pt_pan_mas_dpan_mmx
163 #define _op_copy_rel_pt_pas_mas_dpan_mmx _op_copy_pt_pas_mas_dpan_mmx
164
165 static void
166 init_copy_rel_pixel_mask_pt_funcs_mmx(void)
167 {
168    op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_p_mas_dp_mmx;
169    op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pan_mas_dp_mmx;
170    op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pas_mas_dp_mmx;
171
172    op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_mas_dpan_mmx;
173    op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_mas_dpan_mmx;
174    op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_mas_dpan_mmx;
175 }
176 #endif
177