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