3 DATA32 *dptr, *sptr, *pix, *pbuf;
4 int a, r, g, b, rx, gx, bx, ax;
16 pos = (src_region_y * src_w) + src_region_x;
17 dyy = dst_clip_y - dst_region_y;
18 dxx = dst_clip_x - dst_region_x;
22 xapp = xapoints + dxx;
23 yapp = yapoints + dyy;
25 /*#ifndef SCALE_USING_MMX */
26 /* for now there's no mmx down scaling - so C only */
28 if (src->cache_entry.flags.alpha)
33 if (((ysli) % dc->sli.h) == dc->sli.y)
44 sptr = *yp + *xp + pos;
48 ax = (A_VAL(pix) * xap) >> 9;
49 rx = (R_VAL(pix) * xap) >> 9;
50 gx = (G_VAL(pix) * xap) >> 9;
51 bx = (B_VAL(pix) * xap) >> 9;
53 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
55 ax += (A_VAL(pix) * Cx) >> 9;
56 rx += (R_VAL(pix) * Cx) >> 9;
57 gx += (G_VAL(pix) * Cx) >> 9;
58 bx += (B_VAL(pix) * Cx) >> 9;
63 ax += (A_VAL(pix) * i) >> 9;
64 rx += (R_VAL(pix) * i) >> 9;
65 gx += (G_VAL(pix) * i) >> 9;
66 bx += (B_VAL(pix) * i) >> 9;
74 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
78 ax = (A_VAL(pix) * xap) >> 9;
79 rx = (R_VAL(pix) * xap) >> 9;
80 gx = (G_VAL(pix) * xap) >> 9;
81 bx = (B_VAL(pix) * xap) >> 9;
83 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
85 ax += (A_VAL(pix) * Cx) >> 9;
86 rx += (R_VAL(pix) * Cx) >> 9;
87 gx += (G_VAL(pix) * Cx) >> 9;
88 bx += (B_VAL(pix) * Cx) >> 9;
93 ax += (A_VAL(pix) * i) >> 9;
94 rx += (R_VAL(pix) * i) >> 9;
95 gx += (G_VAL(pix) * i) >> 9;
96 bx += (B_VAL(pix) * i) >> 9;
100 r += (rx * Cy) >> 14;
101 g += (gx * Cy) >> 14;
102 b += (bx * Cy) >> 14;
108 ax = (A_VAL(pix) * xap) >> 9;
109 rx = (R_VAL(pix) * xap) >> 9;
110 gx = (G_VAL(pix) * xap) >> 9;
111 bx = (B_VAL(pix) * xap) >> 9;
113 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
115 ax += (A_VAL(pix) * Cx) >> 9;
116 rx += (R_VAL(pix) * Cx) >> 9;
117 gx += (G_VAL(pix) * Cx) >> 9;
118 bx += (B_VAL(pix) * Cx) >> 9;
123 ax += (A_VAL(pix) * i) >> 9;
124 rx += (R_VAL(pix) * i) >> 9;
125 gx += (G_VAL(pix) * i) >> 9;
126 bx += (B_VAL(pix) * i) >> 9;
134 *pbuf++ = ARGB_JOIN(a >> 5, r >> 5, g >> 5, b >> 5);
138 func(buf, NULL, dc->mul.col, dptr, w);
144 dptr += dst_w; dst_clip_w = w;
146 xapp = xapoints + dxx;
153 if ((!src->cache_entry.flags.alpha) &&
154 (!dst->cache_entry.flags.alpha) &&
160 if (((ysli) % dc->sli.h) == dc->sli.y)
164 yap = *yapp & 0xffff;
170 xap = *xapp & 0xffff;
172 sptr = *yp + *xp + pos;
176 rx = (R_VAL(pix) * xap) >> 9;
177 gx = (G_VAL(pix) * xap) >> 9;
178 bx = (B_VAL(pix) * xap) >> 9;
180 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
182 rx += (R_VAL(pix) * Cx) >> 9;
183 gx += (G_VAL(pix) * Cx) >> 9;
184 bx += (B_VAL(pix) * Cx) >> 9;
189 rx += (R_VAL(pix) * i) >> 9;
190 gx += (G_VAL(pix) * i) >> 9;
191 bx += (B_VAL(pix) * i) >> 9;
194 r = (rx * yap) >> 14;
195 g = (gx * yap) >> 14;
196 b = (bx * yap) >> 14;
198 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
202 rx = (R_VAL(pix) * xap) >> 9;
203 gx = (G_VAL(pix) * xap) >> 9;
204 bx = (B_VAL(pix) * xap) >> 9;
206 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
208 rx += (R_VAL(pix) * Cx) >> 9;
209 gx += (G_VAL(pix) * Cx) >> 9;
210 bx += (B_VAL(pix) * Cx) >> 9;
215 rx += (R_VAL(pix) * i) >> 9;
216 gx += (G_VAL(pix) * i) >> 9;
217 bx += (B_VAL(pix) * i) >> 9;
220 r += (rx * Cy) >> 14;
221 g += (gx * Cy) >> 14;
222 b += (bx * Cy) >> 14;
228 rx = (R_VAL(pix) * xap) >> 9;
229 gx = (G_VAL(pix) * xap) >> 9;
230 bx = (B_VAL(pix) * xap) >> 9;
232 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
234 rx += (R_VAL(pix) * Cx) >> 9;
235 gx += (G_VAL(pix) * Cx) >> 9;
236 bx += (B_VAL(pix) * Cx) >> 9;
241 rx += (R_VAL(pix) * i) >> 9;
242 gx += (G_VAL(pix) * i) >> 9;
243 bx += (B_VAL(pix) * i) >> 9;
250 *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
257 dptr += dst_w; dst_clip_w = w;
259 xapp = xapoints + dxx;
269 if (((ysli) % dc->sli.h) == dc->sli.y)
273 yap = *yapp & 0xffff;
278 xap = *xapp & 0xffff;
280 sptr = *yp + *xp + pos;
284 rx = (R_VAL(pix) * xap) >> 9;
285 gx = (G_VAL(pix) * xap) >> 9;
286 bx = (B_VAL(pix) * xap) >> 9;
288 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
290 rx += (R_VAL(pix) * Cx) >> 9;
291 gx += (G_VAL(pix) * Cx) >> 9;
292 bx += (B_VAL(pix) * Cx) >> 9;
297 rx += (R_VAL(pix) * i) >> 9;
298 gx += (G_VAL(pix) * i) >> 9;
299 bx += (B_VAL(pix) * i) >> 9;
302 r = (rx * yap) >> 14;
303 g = (gx * yap) >> 14;
304 b = (bx * yap) >> 14;
306 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
310 rx = (R_VAL(pix) * xap) >> 9;
311 gx = (G_VAL(pix) * xap) >> 9;
312 bx = (B_VAL(pix) * xap) >> 9;
314 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
316 rx += (R_VAL(pix) * Cx) >> 9;
317 gx += (G_VAL(pix) * Cx) >> 9;
318 bx += (B_VAL(pix) * Cx) >> 9;
323 rx += (R_VAL(pix) * i) >> 9;
324 gx += (G_VAL(pix) * i) >> 9;
325 bx += (B_VAL(pix) * i) >> 9;
328 r += (rx * Cy) >> 14;
329 g += (gx * Cy) >> 14;
330 b += (bx * Cy) >> 14;
336 rx = (R_VAL(pix) * xap) >> 9;
337 gx = (G_VAL(pix) * xap) >> 9;
338 bx = (B_VAL(pix) * xap) >> 9;
340 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
342 rx += (R_VAL(pix) * Cx) >> 9;
343 gx += (G_VAL(pix) * Cx) >> 9;
344 bx += (B_VAL(pix) * Cx) >> 9;
349 rx += (R_VAL(pix) * i) >> 9;
350 gx += (G_VAL(pix) * i) >> 9;
351 bx += (B_VAL(pix) * i) >> 9;
358 *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
362 func(buf, NULL, dc->mul.col, dptr, w);
368 dptr += dst_w; dst_clip_w = w;
370 xapp = xapoints + dxx;
376 /* MMX scaling down would go here */