Mercurial > hg > dmlib
comparison dmblitfunc.h @ 85:c257d73cf790
Rename some macros.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 02 Oct 2012 10:23:42 +0300 |
parents | ba1987562a73 |
children | e5796ffce131 |
comparison
equal
deleted
inserted
replaced
84:35db15881923 | 85:c257d73cf790 |
---|---|
7 | 7 |
8 // ======================================================================= | 8 // ======================================================================= |
9 // DMD_NONE | 9 // DMD_NONE |
10 // ======================================================================= | 10 // ======================================================================= |
11 | 11 |
12 #define DM_SCALED_NAME dmScaledBlitSurface8to8 | 12 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to8 |
13 #define DM_SCALED_SRC_BYTES 1 | 13 #define DM_BLITFUNC_SRC_BYTES 1 |
14 #define DM_SCALED_DST_BYTES 1 | 14 #define DM_BLITFUNC_DST_BYTES 1 |
15 #define DM_SCALED_SRC_TYPE Uint8 | 15 #define DM_BLITFUNC_SRC_TYPE Uint8 |
16 #define DM_SCALED_DST_TYPE Uint8 | 16 #define DM_BLITFUNC_DST_TYPE Uint8 |
17 | 17 |
18 #define DM_SCALED_INNER *dp++ = sp[FP_GETH(xv)]; | 18 #define DM_BLITFUNC_INNER *dp++ = sp[FP_GETH(xv)]; |
19 | 19 |
20 #include "dmscaledblit.h" | 20 #include "dmscaledblit.h" |
21 | 21 |
22 // ----------------------------------------------------------------------- | 22 // ----------------------------------------------------------------------- |
23 | 23 |
24 #define DM_SCALED_NAME dmScaledBlitSurface8to32 | 24 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to32 |
25 #define DM_SCALED_SRC_BYTES 1 | 25 #define DM_BLITFUNC_SRC_BYTES 1 |
26 #define DM_SCALED_DST_BYTES 4 | 26 #define DM_BLITFUNC_DST_BYTES 4 |
27 #define DM_SCALED_SRC_TYPE Uint8 | 27 #define DM_BLITFUNC_SRC_TYPE Uint8 |
28 #define DM_SCALED_DST_TYPE Uint32 | 28 #define DM_BLITFUNC_DST_TYPE Uint32 |
29 | 29 |
30 #define DM_SCALED_VARS const Uint32 *pal; | 30 #define DM_BLITFUNC_VARS const Uint32 *pal; |
31 #define DM_SCALED_INIT \ | 31 #define DM_BLITFUNC_INIT \ |
32 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ | 32 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ |
33 pal = (Uint32 *) src->format->palette->colors; | 33 pal = (Uint32 *) src->format->palette->colors; |
34 | 34 |
35 #define DM_SCALED_INNER *dp++ = pal[sp[FP_GETH(xv)]]; | 35 #define DM_BLITFUNC_INNER *dp++ = pal[sp[FP_GETH(xv)]]; |
36 | 36 |
37 #include "dmscaledblit.h" | 37 #include "dmscaledblit.h" |
38 | 38 |
39 // ----------------------------------------------------------------------- | 39 // ----------------------------------------------------------------------- |
40 | 40 |
41 #define DM_SCALED_NAME dmScaledBlitSurface32to32 | 41 #define DM_BLITFUNC_NAME dmScaledBlitSurface32to32 |
42 #define DM_SCALED_SRC_BYTES 4 | 42 #define DM_BLITFUNC_SRC_BYTES 4 |
43 #define DM_SCALED_DST_BYTES 4 | 43 #define DM_BLITFUNC_DST_BYTES 4 |
44 #define DM_SCALED_SRC_TYPE Uint32 | 44 #define DM_BLITFUNC_SRC_TYPE Uint32 |
45 #define DM_SCALED_DST_TYPE Uint32 | 45 #define DM_BLITFUNC_DST_TYPE Uint32 |
46 #define DM_SCALED_INIT | 46 #define DM_BLITFUNC_INIT |
47 #define DM_SCALED_INNER *dp++ = sp[FP_GETH(xv)]; | 47 #define DM_BLITFUNC_INNER *dp++ = sp[FP_GETH(xv)]; |
48 | 48 |
49 #include "dmscaledblit.h" | 49 #include "dmscaledblit.h" |
50 | 50 |
51 | 51 |
52 // ======================================================================= | 52 // ======================================================================= |
53 // DMD_TRANSPARENT | 53 // DMD_TRANSPARENT |
54 // ======================================================================= | 54 // ======================================================================= |
55 | 55 |
56 #define DM_SCALED_NAME dmScaledBlitSurface8to8Transparent | 56 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to8Transparent |
57 #define DM_SCALED_SRC_BYTES 1 | 57 #define DM_BLITFUNC_SRC_BYTES 1 |
58 #define DM_SCALED_DST_BYTES 1 | 58 #define DM_BLITFUNC_DST_BYTES 1 |
59 #define DM_SCALED_SRC_TYPE Uint8 | 59 #define DM_BLITFUNC_SRC_TYPE Uint8 |
60 #define DM_SCALED_DST_TYPE Uint8 | 60 #define DM_BLITFUNC_DST_TYPE Uint8 |
61 | 61 |
62 #define DM_SCALED_INNER \ | 62 #define DM_BLITFUNC_INNER \ |
63 *dp = sp[FP_GETH(xv)] ? sp[FP_GETH(xv)] : *dp; dp++; | 63 *dp = sp[FP_GETH(xv)] ? sp[FP_GETH(xv)] : *dp; dp++; |
64 | 64 |
65 #include "dmscaledblit.h" | 65 #include "dmscaledblit.h" |
66 | 66 |
67 // ----------------------------------------------------------------------- | 67 // ----------------------------------------------------------------------- |
68 | 68 |
69 #define DM_SCALED_NAME dmScaledBlitSurface8to32Transparent | 69 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to32Transparent |
70 #define DM_SCALED_SRC_BYTES 1 | 70 #define DM_BLITFUNC_SRC_BYTES 1 |
71 #define DM_SCALED_DST_BYTES 4 | 71 #define DM_BLITFUNC_DST_BYTES 4 |
72 #define DM_SCALED_SRC_TYPE Uint8 | 72 #define DM_BLITFUNC_SRC_TYPE Uint8 |
73 #define DM_SCALED_DST_TYPE DMRGBA32 | 73 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
74 #define DM_SCALED_VARS const DMRGBA32 *pal; | 74 #define DM_BLITFUNC_VARS const DMRGBA32 *pal; |
75 #define DM_SCALED_INIT \ | 75 #define DM_BLITFUNC_INIT \ |
76 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ | 76 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ |
77 pal = (DMRGBA32 *) src->format->palette->colors; | 77 pal = (DMRGBA32 *) src->format->palette->colors; |
78 | 78 |
79 #define DM_SCALED_INNER \ | 79 #define DM_BLITFUNC_INNER \ |
80 const DMRGBA32 q = pal[sp[FP_GETH(xv)]]; \ | 80 const DMRGBA32 q = pal[sp[FP_GETH(xv)]]; \ |
81 dp->r += ((q.r - dp->r) * q.a) >> 8; \ | 81 dp->r += ((q.r - dp->r) * q.a) >> 8; \ |
82 dp->g += ((q.g - dp->g) * q.a) >> 8; \ | 82 dp->g += ((q.g - dp->g) * q.a) >> 8; \ |
83 dp->b += ((q.b - dp->b) * q.a) >> 8; \ | 83 dp->b += ((q.b - dp->b) * q.a) >> 8; \ |
84 dp->a = q.a; \ | 84 dp->a = q.a; \ |
87 #include "dmscaledblit.h" | 87 #include "dmscaledblit.h" |
88 | 88 |
89 | 89 |
90 // ----------------------------------------------------------------------- | 90 // ----------------------------------------------------------------------- |
91 | 91 |
92 #define DM_SCALED_NAME dmScaledBlitSurface32to32Transparent | 92 #define DM_BLITFUNC_NAME dmScaledBlitSurface32to32Transparent |
93 #define DM_SCALED_SRC_BYTES 4 | 93 #define DM_BLITFUNC_SRC_BYTES 4 |
94 #define DM_SCALED_DST_BYTES 4 | 94 #define DM_BLITFUNC_DST_BYTES 4 |
95 | 95 |
96 #ifdef DM_USE_SIMD | 96 #ifdef DM_USE_SIMD |
97 #define DM_SCALED_VARS \ | 97 #define DM_BLITFUNC_VARS \ |
98 const Uint32 qpdmask = 0xff000000; \ | 98 const Uint32 qpdmask = 0xff000000; \ |
99 const Uint64 qpdrm = 0xff00ff00ff00ffULL; | 99 const Uint64 qpdrm = 0xff00ff00ff00ffULL; |
100 | 100 |
101 #define DM_SCALED_SRC_TYPE Uint32 | 101 #define DM_BLITFUNC_SRC_TYPE Uint32 |
102 #define DM_SCALED_DST_TYPE Uint32 | 102 #define DM_BLITFUNC_DST_TYPE Uint32 |
103 #define DM_SCALED_INNER \ | 103 #define DM_BLITFUNC_INNER \ |
104 asm( \ | 104 asm( \ |
105 "movd %2, %%mm1\n" \ | 105 "movd %2, %%mm1\n" \ |
106 \ | 106 \ |
107 "movd %3, %%mm2\n" \ | 107 "movd %3, %%mm2\n" \ |
108 "movq %%mm1, %%mm5\n" \ | 108 "movq %%mm1, %%mm5\n" \ |
125 "movd %%mm1, %0\n" \ | 125 "movd %%mm1, %0\n" \ |
126 : "=m" (*dp) \ | 126 : "=m" (*dp) \ |
127 : "m" (*dp), "m" (sp[FP_GETH(xv)]), "m" (qpdmask), "m" (qpdrm) \ | 127 : "m" (*dp), "m" (sp[FP_GETH(xv)]), "m" (qpdmask), "m" (qpdrm) \ |
128 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++; | 128 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++; |
129 | 129 |
130 #define DM_SCALED_FINISH asm("emms\n"); | 130 #define DM_BLITFUNC_FINISH asm("emms\n"); |
131 | 131 |
132 #else | 132 #else |
133 | 133 |
134 #define DM_SCALED_SRC_TYPE DMRGBA32 | 134 #define DM_BLITFUNC_SRC_TYPE DMRGBA32 |
135 #define DM_SCALED_DST_TYPE DMRGBA32 | 135 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
136 #define DM_SCALED_INNER \ | 136 #define DM_BLITFUNC_INNER \ |
137 const DMRGBA32 q = sp[FP_GETH(xv)]; \ | 137 const DMRGBA32 q = sp[FP_GETH(xv)]; \ |
138 dp->r += ((q.r - dp->r) * q.a) >> 8; \ | 138 dp->r += ((q.r - dp->r) * q.a) >> 8; \ |
139 dp->g += ((q.g - dp->g) * q.a) >> 8; \ | 139 dp->g += ((q.g - dp->g) * q.a) >> 8; \ |
140 dp->b += ((q.b - dp->b) * q.a) >> 8; \ | 140 dp->b += ((q.b - dp->b) * q.a) >> 8; \ |
141 dp->a = q.a; \ | 141 dp->a = q.a; \ |
144 | 144 |
145 #include "dmscaledblit.h" | 145 #include "dmscaledblit.h" |
146 | 146 |
147 // ----------------------------------------------------------------------- | 147 // ----------------------------------------------------------------------- |
148 | 148 |
149 #define DM_SCALED_NAME dmScaledBlitSurface32to32TransparentX | 149 #define DM_BLITFUNC_NAME dmScaledBlitSurface32to32TransparentX |
150 #define DM_SCALED_SRC_BYTES 4 | 150 #define DM_BLITFUNC_SRC_BYTES 4 |
151 #define DM_SCALED_DST_BYTES 4 | 151 #define DM_BLITFUNC_DST_BYTES 4 |
152 #define DM_SCALED_SRC_TYPE DMRGBA32 | 152 #define DM_BLITFUNC_SRC_TYPE DMRGBA32 |
153 #define DM_SCALED_DST_TYPE DMRGBA32 | 153 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
154 #define DM_SCALED_INIT | 154 #define DM_BLITFUNC_INIT |
155 | 155 |
156 #define DM_SCALED_INNER \ | 156 #define DM_BLITFUNC_INNER \ |
157 const DMRGBA32 q = sp[FP_GETH(xv)]; \ | 157 const DMRGBA32 q = sp[FP_GETH(xv)]; \ |
158 dp->r = (q.r * q.a + dp->r * dp->a) >> 8; \ | 158 dp->r = (q.r * q.a + dp->r * dp->a) >> 8; \ |
159 dp->g = (q.g * q.a + dp->g * dp->a) >> 8; \ | 159 dp->g = (q.g * q.a + dp->g * dp->a) >> 8; \ |
160 dp->b = (q.b * q.a + dp->b * dp->a) >> 8; \ | 160 dp->b = (q.b * q.a + dp->b * dp->a) >> 8; \ |
161 dp->a = q.a ? q.a : dp->a; \ | 161 dp->a = q.a ? q.a : dp->a; \ |
164 #include "dmscaledblit.h" | 164 #include "dmscaledblit.h" |
165 | 165 |
166 | 166 |
167 // ----------------------------------------------------------------------- | 167 // ----------------------------------------------------------------------- |
168 | 168 |
169 #define DM_SCALED_NAME dmScaledBlitSurface32to32TransparentGA | 169 #define DM_BLITFUNC_NAME dmScaledBlitSurface32to32TransparentGA |
170 #define DM_SCALED_SRC_BYTES 4 | 170 #define DM_BLITFUNC_SRC_BYTES 4 |
171 #define DM_SCALED_DST_BYTES 4 | 171 #define DM_BLITFUNC_DST_BYTES 4 |
172 #define DM_SCALED_ARGS , Uint32 alpha | 172 #define DM_BLITFUNC_ARGS , Uint32 alpha |
173 | 173 |
174 #ifdef DM_USE_SIMD | 174 #ifdef DM_USE_SIMD |
175 #define DM_SCALED_VARS \ | 175 #define DM_BLITFUNC_VARS \ |
176 const Uint64 qpdrm = 0xff00ff00ff00ffULL; | 176 const Uint64 qpdrm = 0xff00ff00ff00ffULL; |
177 | 177 |
178 #define DM_SCALED_SRC_TYPE Uint32 | 178 #define DM_BLITFUNC_SRC_TYPE Uint32 |
179 #define DM_SCALED_DST_TYPE Uint32 | 179 #define DM_BLITFUNC_DST_TYPE Uint32 |
180 #define DM_SCALED_INNER_INIT \ | 180 #define DM_BLITFUNC_INNER_INIT \ |
181 asm( \ | 181 asm( \ |
182 "movd %0, %%mm4\n" \ | 182 "movd %0, %%mm4\n" \ |
183 "punpcklwd %%mm4, %%mm4\n" \ | 183 "punpcklwd %%mm4, %%mm4\n" \ |
184 "punpckldq %%mm4, %%mm4\n" \ | 184 "punpckldq %%mm4, %%mm4\n" \ |
185 : \ | 185 : \ |
186 : "m" (alpha) \ | 186 : "m" (alpha) \ |
187 : "%mm4" ); | 187 : "%mm4" ); |
188 | 188 |
189 #define DM_SCALED_INNER \ | 189 #define DM_BLITFUNC_INNER \ |
190 asm( \ | 190 asm( \ |
191 "movd %2, %%mm1\n" \ | 191 "movd %2, %%mm1\n" \ |
192 "pxor %%mm2, %%mm2\n" \ | 192 "pxor %%mm2, %%mm2\n" \ |
193 "movd %1, %%mm3\n" \ | 193 "movd %1, %%mm3\n" \ |
194 "punpcklbw %%mm2, %%mm1\n" \ | 194 "punpcklbw %%mm2, %%mm1\n" \ |
203 "movd %%mm1, %0\n" \ | 203 "movd %%mm1, %0\n" \ |
204 : "=m" (*dp) \ | 204 : "=m" (*dp) \ |
205 : "m" (*dp), "m" (sp[FP_GETH(xv)]), "m" (qpdrm) \ | 205 : "m" (*dp), "m" (sp[FP_GETH(xv)]), "m" (qpdrm) \ |
206 : "memory", "%mm1", "%mm2", "%mm3", "%mm4" ); dp++; | 206 : "memory", "%mm1", "%mm2", "%mm3", "%mm4" ); dp++; |
207 | 207 |
208 #define DM_SCALED_FINISH asm("emms\n"); | 208 #define DM_BLITFUNC_FINISH asm("emms\n"); |
209 | 209 |
210 #else | 210 #else |
211 | 211 |
212 #define DM_SCALED_SRC_TYPE DMRGBA32 | 212 #define DM_BLITFUNC_SRC_TYPE DMRGBA32 |
213 #define DM_SCALED_DST_TYPE DMRGBA32 | 213 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
214 #define DM_SCALED_INNER \ | 214 #define DM_BLITFUNC_INNER \ |
215 const DMRGBA32 q = sp[FP_GETH(xv)]; \ | 215 const DMRGBA32 q = sp[FP_GETH(xv)]; \ |
216 dp->r += ((q.r - dp->r) * alpha) >> 8; \ | 216 dp->r += ((q.r - dp->r) * alpha) >> 8; \ |
217 dp->g += ((q.g - dp->g) * alpha) >> 8; \ | 217 dp->g += ((q.g - dp->g) * alpha) >> 8; \ |
218 dp->b += ((q.b - dp->b) * alpha) >> 8; \ | 218 dp->b += ((q.b - dp->b) * alpha) >> 8; \ |
219 dp->a = alpha; \ | 219 dp->a = alpha; \ |
224 | 224 |
225 // ======================================================================= | 225 // ======================================================================= |
226 // DMD_SATURATE | 226 // DMD_SATURATE |
227 // ======================================================================= | 227 // ======================================================================= |
228 | 228 |
229 #define DM_SCALED_NAME dmScaledBlitSurface8to8Saturate | 229 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to8Saturate |
230 #define DM_SCALED_SRC_BYTES 1 | 230 #define DM_BLITFUNC_SRC_BYTES 1 |
231 #define DM_SCALED_DST_BYTES 1 | 231 #define DM_BLITFUNC_DST_BYTES 1 |
232 #define DM_SCALED_SRC_TYPE Uint8 | 232 #define DM_BLITFUNC_SRC_TYPE Uint8 |
233 #define DM_SCALED_DST_TYPE Uint8 | 233 #define DM_BLITFUNC_DST_TYPE Uint8 |
234 #define DM_SCALED_INNER \ | 234 #define DM_BLITFUNC_INNER \ |
235 const Uint8 q = sp[FP_GETH(xv)] + *dp; \ | 235 const Uint8 q = sp[FP_GETH(xv)] + *dp; \ |
236 *(dp++) = q < 256 ? q : 255; | 236 *(dp++) = q < 256 ? q : 255; |
237 | 237 |
238 #include "dmscaledblit.h" | 238 #include "dmscaledblit.h" |
239 | 239 |
240 // ----------------------------------------------------------------------- | 240 // ----------------------------------------------------------------------- |
241 | 241 |
242 #define DM_SCALED_NAME dmScaledBlitSurface8to32Saturate | 242 #define DM_BLITFUNC_NAME dmScaledBlitSurface8to32Saturate |
243 #define DM_SCALED_SRC_BYTES 1 | 243 #define DM_BLITFUNC_SRC_BYTES 1 |
244 #define DM_SCALED_DST_BYTES 4 | 244 #define DM_BLITFUNC_DST_BYTES 4 |
245 #define DM_SCALED_SRC_TYPE Uint8 | 245 #define DM_BLITFUNC_SRC_TYPE Uint8 |
246 #define DM_SCALED_DST_TYPE DMRGBA32 | 246 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
247 #define DM_SCALED_VARS const DMRGBA32 *pal; | 247 #define DM_BLITFUNC_VARS const DMRGBA32 *pal; |
248 #define DM_SCALED_INIT \ | 248 #define DM_BLITFUNC_INIT \ |
249 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ | 249 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ |
250 pal = (DMRGBA32 *) src->format->palette->colors; | 250 pal = (DMRGBA32 *) src->format->palette->colors; |
251 | 251 |
252 #ifdef DM_USE_SIMD | 252 #ifdef DM_USE_SIMD |
253 #define DM_SCALED_INNER \ | 253 #define DM_BLITFUNC_INNER \ |
254 asm("movd %2, %%mm1\n" \ | 254 asm("movd %2, %%mm1\n" \ |
255 "movd %1, %%mm2\n" \ | 255 "movd %1, %%mm2\n" \ |
256 "paddusb %%mm2, %%mm1\n" \ | 256 "paddusb %%mm2, %%mm1\n" \ |
257 "movd %%mm1, %0\n" \ | 257 "movd %%mm1, %0\n" \ |
258 : "=m" (*dp) \ | 258 : "=m" (*dp) \ |
259 : "m" (*dp), "m" (pal[sp[FP_GETH(xv)]]) \ | 259 : "m" (*dp), "m" (pal[sp[FP_GETH(xv)]]) \ |
260 : "memory", "%mm1", "%mm2" ); dp++; | 260 : "memory", "%mm1", "%mm2" ); dp++; |
261 | 261 |
262 #define DM_SCALED_FINISH asm("emms\n"); | 262 #define DM_BLITFUNC_FINISH asm("emms\n"); |
263 #else | 263 #else |
264 #define DM_SCALED_INNER \ | 264 #define DM_BLITFUNC_INNER \ |
265 const DMRGBA32 q = pal[sp[FP_GETH(xv)]]; \ | 265 const DMRGBA32 q = pal[sp[FP_GETH(xv)]]; \ |
266 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ | 266 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ |
267 dp->r = qr < 256 ? qr : 255; \ | 267 dp->r = qr < 256 ? qr : 255; \ |
268 dp->g = qg < 256 ? qg : 255; \ | 268 dp->g = qg < 256 ? qg : 255; \ |
269 dp->b = qb < 256 ? qb : 255; \ | 269 dp->b = qb < 256 ? qb : 255; \ |
273 | 273 |
274 #include "dmscaledblit.h" | 274 #include "dmscaledblit.h" |
275 | 275 |
276 // ----------------------------------------------------------------------- | 276 // ----------------------------------------------------------------------- |
277 | 277 |
278 #define DM_SCALED_NAME dmScaledBlitSurface32to32Saturate | 278 #define DM_BLITFUNC_NAME dmScaledBlitSurface32to32Saturate |
279 #define DM_SCALED_SRC_BYTES 4 | 279 #define DM_BLITFUNC_SRC_BYTES 4 |
280 #define DM_SCALED_DST_BYTES 4 | 280 #define DM_BLITFUNC_DST_BYTES 4 |
281 #define DM_SCALED_INIT | 281 #define DM_BLITFUNC_INIT |
282 | 282 |
283 #ifdef DM_USE_SIMD | 283 #ifdef DM_USE_SIMD |
284 #define DM_SCALED_SRC_TYPE Uint32 | 284 #define DM_BLITFUNC_SRC_TYPE Uint32 |
285 #define DM_SCALED_DST_TYPE Uint32 | 285 #define DM_BLITFUNC_DST_TYPE Uint32 |
286 #define DM_SCALED_INNER \ | 286 #define DM_BLITFUNC_INNER \ |
287 asm("movd %2, %%mm1\n" \ | 287 asm("movd %2, %%mm1\n" \ |
288 "movd %1, %%mm2\n" \ | 288 "movd %1, %%mm2\n" \ |
289 "paddusb %%mm2, %%mm1\n" \ | 289 "paddusb %%mm2, %%mm1\n" \ |
290 "movd %%mm1, %0\n" \ | 290 "movd %%mm1, %0\n" \ |
291 : "=m" (*dp) \ | 291 : "=m" (*dp) \ |
292 : "m" (*dp), "m" (sp[FP_GETH(xv)]) \ | 292 : "m" (*dp), "m" (sp[FP_GETH(xv)]) \ |
293 : "memory", "%mm1", "%mm2" ); dp++; | 293 : "memory", "%mm1", "%mm2" ); dp++; |
294 | 294 |
295 #define DM_SCALED_FINISH asm("emms\n"); | 295 #define DM_BLITFUNC_FINISH asm("emms\n"); |
296 #else | 296 #else |
297 #define DM_SCALED_SRC_TYPE DMRGBA32 | 297 #define DM_BLITFUNC_SRC_TYPE DMRGBA32 |
298 #define DM_SCALED_DST_TYPE DMRGBA32 | 298 #define DM_BLITFUNC_DST_TYPE DMRGBA32 |
299 #define DM_SCALED_INNER \ | 299 #define DM_BLITFUNC_INNER \ |
300 const DMRGBA32 q = sp[FP_GETH(xv)]; \ | 300 const DMRGBA32 q = sp[FP_GETH(xv)]; \ |
301 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ | 301 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ |
302 dp->r = qr < 256 ? qr : 255; \ | 302 dp->r = qr < 256 ? qr : 255; \ |
303 dp->g = qg < 256 ? qg : 255; \ | 303 dp->g = qg < 256 ? qg : 255; \ |
304 dp->b = qb < 256 ? qb : 255; \ | 304 dp->b = qb < 256 ? qb : 255; \ |