move around - flatter.
[profile/ivi/evas.git] / src / lib / engines / common / evas_op_blend / op_blend_color_i386.c
1
2 /* blend color --> dst */
3
4 #ifdef BUILD_MMX
5 static void
6 _op_blend_c_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7    DATA32 *e = d + l;
8    pxor_r2r(mm0, mm0);
9    MOV_P2R(c, mm2, mm0)
10    c = 256 - (c >> 24);
11    MOV_A2R(c, mm3)
12    while (d < e) {
13         MOV_P2R(*d, mm1, mm0)
14         MUL4_256_R2R(mm3, mm1)
15         paddw_r2r(mm2, mm1);
16         MOV_R2P(mm1, *d, mm0)
17         d++;
18      }
19 }
20
21 #define _op_blend_caa_dp_mmx _op_blend_c_dp_mmx
22
23 #define _op_blend_c_dpan_mmx _op_blend_c_dp_mmx
24 #define _op_blend_caa_dpan_mmx _op_blend_c_dpan_mmx
25
26 static void
27 init_blend_color_span_funcs_mmx(void)
28 {
29    op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_c_dp_mmx;
30    op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_caa_dp_mmx;
31
32    op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_c_dpan_mmx;
33    op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_caa_dpan_mmx;
34 }
35 #endif
36
37 #ifdef BUILD_MMX
38 static void
39 _op_blend_pt_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
40         pxor_r2r(mm0, mm0);
41         MOV_P2R(c, mm2, mm0)
42         c = 256 - (c >> 24);
43         MOV_A2R(c, mm3)
44         MOV_P2R(*d, mm1, mm0)
45         MUL4_256_R2R(mm3, mm1)
46         paddw_r2r(mm2, mm1);
47         MOV_R2P(mm1, *d, mm0)
48 }
49
50 #define _op_blend_pt_caa_dp_mmx _op_blend_pt_c_dp_mmx
51
52 #define _op_blend_pt_c_dpan_mmx _op_blend_pt_c_dp_mmx
53 #define _op_blend_pt_caa_dpan_mmx _op_blend_pt_c_dpan_mmx
54
55 static void
56 init_blend_color_pt_funcs_mmx(void)
57 {
58    op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_pt_c_dp_mmx;
59    op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pt_caa_dp_mmx;
60
61    op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pt_c_dpan_mmx;
62    op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_caa_dpan_mmx;
63 }
64 #endif
65 /*-----*/
66
67 /* blend_rel color -> dst */
68
69 #ifdef BUILD_MMX
70 static void
71 _op_blend_rel_c_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
72    DATA32 *e = d + l;
73    pxor_r2r(mm0, mm0);
74    MOV_P2R(c, mm2, mm0)
75    c = 256 - (c >> 24);
76    MOV_A2R(c, mm3)
77    MOV_A2R(ALPHA_255, mm5)
78    while (d < e) {
79         MOV_P2R(*d, mm1, mm0)
80         MOV_RA2R(mm1, mm4)
81         MUL4_256_R2R(mm3, mm1)
82         MUL4_SYM_R2R(mm2, mm4, mm5)
83         paddw_r2r(mm4, mm1);
84         MOV_R2P(mm1, *d, mm0)
85         d++;
86      }
87 }
88
89 #define _op_blend_rel_caa_dp_mmx _op_blend_rel_c_dp_mmx
90
91 #define _op_blend_rel_c_dpan_mmx _op_blend_c_dpan_mmx
92 #define _op_blend_rel_caa_dpan_mmx _op_blend_caa_dpan_mmx
93
94 static void
95 init_blend_rel_color_span_funcs_mmx(void)
96 {
97    op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_rel_c_dp_mmx;
98    op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_rel_caa_dp_mmx;
99
100    op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_c_dpan_mmx;
101    op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_caa_dpan_mmx;
102 }
103 #endif
104
105 #ifdef BUILD_MMX
106 static void
107 _op_blend_rel_pt_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
108         pxor_r2r(mm0, mm0);
109         MOV_A2R(ALPHA_256, mm6)
110         MOV_A2R(ALPHA_255, mm5)
111
112         MOV_P2R(c, mm2, mm0)
113         MOV_RA2R(mm2, mm1)
114         psubw_r2r(mm1, mm6);
115
116         MOV_P2R(*d, mm1, mm0)
117         MOV_RA2R(mm1, mm4)
118         MUL4_256_R2R(mm6, mm1)
119
120         MUL4_SYM_R2R(mm4, mm2, mm5)
121         paddw_r2r(mm2, mm1);
122         MOV_R2P(mm1, *d, mm0)
123 }
124
125 #define _op_blend_rel_pt_caa_dp_mmx _op_blend_rel_pt_c_dp_mmx
126
127 #define _op_blend_rel_pt_c_dpan_mmx _op_blend_pt_c_dpan_mmx
128 #define _op_blend_rel_pt_caa_dpan_mmx _op_blend_pt_caa_dpan_mmx
129
130 static void
131 init_blend_rel_color_pt_funcs_mmx(void)
132 {
133    op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_rel_pt_c_dp_mmx;
134    op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_rel_pt_caa_dp_mmx;
135
136    op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_c_dpan_mmx;
137    op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_caa_dpan_mmx;
138 }
139 #endif