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