aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c120
1 files changed, 120 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c
new file mode 100644
index 0000000..24f5a80
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c
@@ -0,0 +1,120 @@
1/* mul pixel x color --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_mul_p_c_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 MOV_A2R(ALPHA_255, mm5)
8 pxor_r2r(mm0, mm0);
9 MOV_P2R(c, mm2, mm0)
10 while (d < e)
11 {
12 MOV_P2R(*s, mm3, mm0)
13 MUL4_SYM_R2R(mm2, mm3, mm5)
14 MOV_P2R(*d, mm1, mm0)
15 MUL4_SYM_R2R(mm3, mm1, mm5)
16 MOV_R2P(mm1, *d, mm0)
17 s++; d++;
18 }
19}
20
21#define _op_mul_pas_c_dp_mmx _op_mul_p_c_dp_mmx
22#define _op_mul_pan_c_dp_mmx _op_mul_p_c_dp_mmx
23#define _op_mul_p_can_dp_mmx _op_mul_p_c_dp_mmx
24#define _op_mul_pas_can_dp_mmx _op_mul_p_c_dp_mmx
25#define _op_mul_pan_can_dp_mmx _op_mul_p_c_dp_mmx
26#define _op_mul_p_caa_dp_mmx _op_mul_p_c_dp_mmx
27#define _op_mul_pas_caa_dp_mmx _op_mul_p_c_dp_mmx
28#define _op_mul_pan_caa_dp_mmx _op_mul_p_c_dp_mmx
29
30#define _op_mul_p_c_dpan_mmx _op_mul_p_c_dp_mmx
31#define _op_mul_pan_c_dpan_mmx _op_mul_pan_c_dp_mmx
32#define _op_mul_pas_c_dpan_mmx _op_mul_pas_c_dp_mmx
33#define _op_mul_p_can_dpan_mmx _op_mul_p_can_dp_mmx
34#define _op_mul_pan_can_dpan_mmx _op_mul_pan_can_dp_mmx
35#define _op_mul_pas_can_dpan_mmx _op_mul_pas_can_dp_mmx
36#define _op_mul_p_caa_dpan_mmx _op_mul_p_caa_dp_mmx
37#define _op_mul_pan_caa_dpan_mmx _op_mul_pan_caa_dp_mmx
38#define _op_mul_pas_caa_dpan_mmx _op_mul_pas_caa_dp_mmx
39
40static void
41init_mul_pixel_color_span_funcs_mmx(void)
42{
43 op_mul_span_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_mul_p_c_dp_mmx;
44 op_mul_span_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_mul_pas_c_dp_mmx;
45 op_mul_span_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_mul_pan_c_dp_mmx;
46 op_mul_span_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_p_can_dp_mmx;
47 op_mul_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_pas_can_dp_mmx;
48 op_mul_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_pan_can_dp_mmx;
49 op_mul_span_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_p_caa_dp_mmx;
50 op_mul_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_pas_caa_dp_mmx;
51 op_mul_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_pan_caa_dp_mmx;
52
53 op_mul_span_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_p_c_dpan_mmx;
54 op_mul_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_pas_c_dpan_mmx;
55 op_mul_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_pan_c_dpan_mmx;
56 op_mul_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_p_can_dpan_mmx;
57 op_mul_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_pas_can_dpan_mmx;
58 op_mul_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_pan_can_dpan_mmx;
59 op_mul_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_p_caa_dpan_mmx;
60 op_mul_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_pas_caa_dpan_mmx;
61 op_mul_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_pan_caa_dpan_mmx;
62}
63#endif
64
65#ifdef BUILD_MMX
66static void
67_op_mul_pt_p_c_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
68 MOV_A2R(ALPHA_255, mm5)
69 pxor_r2r(mm0, mm0);
70 MOV_P2R(c, mm2, mm0)
71 MOV_P2R(s, mm3, mm0)
72 MUL4_SYM_R2R(mm2, mm3, mm5)
73 MOV_P2R(*d, mm1, mm0)
74 MUL4_SYM_R2R(mm3, mm1, mm5)
75 MOV_R2P(mm1, *d, mm0)
76}
77
78#define _op_mul_pt_pas_c_dp_mmx _op_mul_pt_p_c_dp_mmx
79#define _op_mul_pt_pan_c_dp_mmx _op_mul_pt_p_c_dp_mmx
80#define _op_mul_pt_p_can_dp_mmx _op_mul_pt_p_c_dp_mmx
81#define _op_mul_pt_pas_can_dp_mmx _op_mul_pt_p_c_dp_mmx
82#define _op_mul_pt_pan_can_dp_mmx _op_mul_pt_p_c_dp_mmx
83#define _op_mul_pt_p_caa_dp_mmx _op_mul_pt_p_c_dp_mmx
84#define _op_mul_pt_pas_caa_dp_mmx _op_mul_pt_p_c_dp_mmx
85#define _op_mul_pt_pan_caa_dp_mmx _op_mul_pt_p_c_dp_mmx
86
87#define _op_mul_pt_p_c_dpan_mmx _op_mul_pt_p_c_dp_mmx
88#define _op_mul_pt_pan_c_dpan_mmx _op_mul_pt_pan_c_dp_mmx
89#define _op_mul_pt_pas_c_dpan_mmx _op_mul_pt_pas_c_dp_mmx
90#define _op_mul_pt_p_can_dpan_mmx _op_mul_pt_p_can_dp_mmx
91#define _op_mul_pt_pan_can_dpan_mmx _op_mul_pt_pan_can_dp_mmx
92#define _op_mul_pt_pas_can_dpan_mmx _op_mul_pt_pas_can_dp_mmx
93#define _op_mul_pt_p_caa_dpan_mmx _op_mul_pt_p_caa_dp_mmx
94#define _op_mul_pt_pan_caa_dpan_mmx _op_mul_pt_pan_caa_dp_mmx
95#define _op_mul_pt_pas_caa_dpan_mmx _op_mul_pt_pas_caa_dp_mmx
96
97static void
98init_mul_pixel_color_pt_funcs_mmx(void)
99{
100 op_mul_pt_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_mul_pt_p_c_dp_mmx;
101 op_mul_pt_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_mul_pt_pas_c_dp_mmx;
102 op_mul_pt_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_mul_pt_pan_c_dp_mmx;
103 op_mul_pt_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_pt_p_can_dp_mmx;
104 op_mul_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_pt_pas_can_dp_mmx;
105 op_mul_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_mul_pt_pan_can_dp_mmx;
106 op_mul_pt_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_pt_p_caa_dp_mmx;
107 op_mul_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_pt_pas_caa_dp_mmx;
108 op_mul_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_mul_pt_pan_caa_dp_mmx;
109
110 op_mul_pt_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_pt_p_c_dpan_mmx;
111 op_mul_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_pt_pas_c_dpan_mmx;
112 op_mul_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_mul_pt_pan_c_dpan_mmx;
113 op_mul_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_pt_p_can_dpan_mmx;
114 op_mul_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_pt_pas_can_dpan_mmx;
115 op_mul_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_mul_pt_pan_can_dpan_mmx;
116 op_mul_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_pt_p_caa_dpan_mmx;
117 op_mul_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_pt_pas_caa_dpan_mmx;
118 op_mul_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_mul_pt_pan_caa_dpan_mmx;
119}
120#endif