move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_copy / op_copy_color_i386.c
1
2 /* copy color --> dst */
3
4 #ifdef BUILD_MMX
5 static void
6 _op_copy_c_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l - 1;
8    movd_m2r(c, mm1);
9    movq_r2r(mm1, mm2);
10    psllq_i2r(32, mm1);
11    por_r2r(mm2, mm1);
12    for (; d < e; d+=2) {
13       movq_r2m(mm1, d[0]);
14    }
15    e+=1;
16    for (; d < e; d++) {
17       *d = c;
18    }
19 }
20
21 #define _op_copy_cn_dp_mmx _op_copy_c_dp_mmx
22 #define _op_copy_can_dp_mmx _op_copy_c_dp_mmx
23 #define _op_copy_caa_dp_mmx _op_copy_c_dp_mmx
24
25 #define _op_copy_cn_dpan_mmx _op_copy_c_dp_mmx
26 #define _op_copy_c_dpan_mmx _op_copy_c_dp_mmx
27 #define _op_copy_can_dpan_mmx _op_copy_c_dp_mmx
28 #define _op_copy_caa_dpan_mmx _op_copy_c_dp_mmx
29
30 static void
31 init_copy_color_span_funcs_mmx(void)
32 {
33    op_copy_span_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_cn_dp_mmx;
34    op_copy_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_c_dp_mmx;
35    op_copy_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_can_dp_mmx;
36    op_copy_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_caa_dp_mmx;
37
38    op_copy_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_cn_dpan_mmx;
39    op_copy_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_c_dpan_mmx;
40    op_copy_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_can_dpan_mmx;
41    op_copy_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_caa_dpan_mmx;
42 }
43 #endif
44
45 #ifdef BUILD_MMX
46 static void
47 _op_copy_pt_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
48      *d = c;
49 }
50
51 #define _op_copy_pt_cn_dp_mmx _op_copy_pt_c_dp_mmx
52 #define _op_copy_pt_can_dp_mmx _op_copy_pt_c_dp_mmx
53 #define _op_copy_pt_caa_dp_mmx _op_copy_pt_c_dp_mmx
54
55 #define _op_copy_pt_cn_dpan_mmx _op_copy_pt_c_dp_mmx
56 #define _op_copy_pt_c_dpan_mmx _op_copy_pt_c_dp_mmx
57 #define _op_copy_pt_can_dpan_mmx _op_copy_pt_c_dp_mmx
58 #define _op_copy_pt_caa_dpan_mmx _op_copy_pt_c_dp_mmx
59
60 static void
61 init_copy_color_pt_funcs_mmx(void)
62 {
63    op_copy_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pt_cn_dp_mmx;
64    op_copy_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_pt_c_dp_mmx;
65    op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pt_can_dp_mmx;
66    op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pt_caa_dp_mmx;
67
68    op_copy_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_cn_dpan_mmx;
69    op_copy_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pt_c_dpan_mmx;
70    op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_can_dpan_mmx;
71    op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_caa_dpan_mmx;
72 }
73 #endif
74
75 /*-----*/
76
77 /* copy_rel color --> dst */
78
79 #ifdef BUILD_MMX
80 static void
81 _op_copy_rel_c_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
82    DATA32 *e = d + l;
83    pxor_r2r(mm0, mm0);
84    MOV_P2R(c, mm2, mm0)
85    for (; d < e; d++) {
86         DATA32  da = 1 + (*d >> 24);
87         MOV_A2R(da, mm1)
88         MUL4_256_R2R(mm2, mm1)
89         MOV_R2P(mm1, *d, mm0)
90    }
91 }
92
93 #define _op_copy_rel_cn_dp_mmx _op_copy_rel_c_dp_mmx
94 #define _op_copy_rel_can_dp_mmx _op_copy_rel_c_dp_mmx
95 #define _op_copy_rel_caa_dp_mmx _op_copy_rel_c_dp_mmx
96
97 #define _op_copy_rel_cn_dpan_mmx _op_copy_cn_dpan_mmx
98 #define _op_copy_rel_c_dpan_mmx _op_copy_c_dpan_mmx
99 #define _op_copy_rel_can_dpan_mmx _op_copy_can_dpan_mmx
100 #define _op_copy_rel_caa_dpan_mmx _op_copy_caa_dpan_mmx
101
102 static void
103 init_copy_rel_color_span_funcs_mmx(void)
104 {
105    op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_cn_dp_mmx;
106    op_copy_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_c_dp_mmx;
107    op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_can_dp_mmx;
108    op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_caa_dp_mmx;
109
110    op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_cn_dpan_mmx;
111    op_copy_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_c_dpan_mmx;
112    op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_can_dpan_mmx;
113    op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_caa_dpan_mmx;
114 }
115 #endif
116
117 #ifdef BUILD_MMX
118 static void
119 _op_copy_rel_pt_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
120         s = 1 + (*d >> 24);
121         pxor_r2r(mm0, mm0);
122         MOV_P2R(c, mm2, mm0)
123         MOV_A2R(s, mm1)
124         MUL4_256_R2R(mm2, mm1)
125         MOV_R2P(mm1, *d, mm0)
126 }
127
128
129 #define _op_copy_rel_pt_cn_dp_mmx _op_copy_rel_pt_c_dp_mmx
130 #define _op_copy_rel_pt_can_dp_mmx _op_copy_rel_pt_c_dp_mmx
131 #define _op_copy_rel_pt_caa_dp_mmx _op_copy_rel_pt_c_dp_mmx
132
133 #define _op_copy_rel_pt_cn_dpan_mmx _op_copy_pt_cn_dpan_mmx
134 #define _op_copy_rel_pt_c_dpan_mmx _op_copy_pt_c_dpan_mmx
135 #define _op_copy_rel_pt_can_dpan_mmx _op_copy_pt_can_dpan_mmx
136 #define _op_copy_rel_pt_caa_dpan_mmx _op_copy_pt_caa_dpan_mmx
137
138 static void
139 init_copy_rel_color_pt_funcs_mmx(void)
140 {
141    op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_cn_dp_mmx;
142    op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pt_c_dp_mmx;
143    op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_can_dp_mmx;
144    op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_caa_dp_mmx;
145
146    op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_cn_dpan_mmx;
147    op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_c_dpan_mmx;
148    op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_can_dpan_mmx;
149    op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_caa_dpan_mmx;
150 }
151 #endif