comparison src/dmblitfunc.h @ 2038:b5cd0435e186

Use __asm__() instead of "GCC-specific" asm() for inline assembly.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 30 Nov 2018 06:43:58 +0200
parents 582d49915059
children
comparison
equal deleted inserted replaced
2037:01fbcfc969e4 2038:b5cd0435e186
99 const Uint64 qpdrm = 0xff00ff00ff00ffULL; 99 const Uint64 qpdrm = 0xff00ff00ff00ffULL;
100 100
101 #define DM_BLITFUNC_SRC_TYPE Uint32 101 #define DM_BLITFUNC_SRC_TYPE Uint32
102 #define DM_BLITFUNC_DST_TYPE Uint32 102 #define DM_BLITFUNC_DST_TYPE Uint32
103 #define DM_BLITFUNC_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" \
109 "pand %%mm2, %%mm5\n" \ 109 "pand %%mm2, %%mm5\n" \
125 "movd %%mm1, %0\n" \ 125 "movd %%mm1, %0\n" \
126 : "=m" (*dp) \ 126 : "=m" (*dp) \
127 : "m" (*dp), "m" (sp[FP_GETH16(xv)]), "m" (qpdmask), "m" (qpdrm) \ 127 : "m" (*dp), "m" (sp[FP_GETH16(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_BLITFUNC_FINISH asm("emms\n"); 130 #define DM_BLITFUNC_FINISH __asm__("emms\n");
131 131
132 #else 132 #else
133 133
134 #define DM_BLITFUNC_SRC_TYPE DMColor 134 #define DM_BLITFUNC_SRC_TYPE DMColor
135 #define DM_BLITFUNC_DST_TYPE DMColor 135 #define DM_BLITFUNC_DST_TYPE DMColor
178 const Uint64 qpdrm = 0xff00ff00ff00ffULL; 178 const Uint64 qpdrm = 0xff00ff00ff00ffULL;
179 179
180 #define DM_BLITFUNC_SRC_TYPE Uint32 180 #define DM_BLITFUNC_SRC_TYPE Uint32
181 #define DM_BLITFUNC_DST_TYPE Uint32 181 #define DM_BLITFUNC_DST_TYPE Uint32
182 #define DM_BLITFUNC_INNER_INIT \ 182 #define DM_BLITFUNC_INNER_INIT \
183 asm( \ 183 __asm__( \
184 "movd %0, %%mm4\n" \ 184 "movd %0, %%mm4\n" \
185 "punpcklwd %%mm4, %%mm4\n" \ 185 "punpcklwd %%mm4, %%mm4\n" \
186 "punpckldq %%mm4, %%mm4\n" \ 186 "punpckldq %%mm4, %%mm4\n" \
187 : \ 187 : \
188 : "m" (alpha) \ 188 : "m" (alpha) \
189 : "%mm4" ); 189 : "%mm4" );
190 190
191 #define DM_BLITFUNC_INNER \ 191 #define DM_BLITFUNC_INNER \
192 asm( \ 192 __asm__( \
193 "movd %2, %%mm1\n" \ 193 "movd %2, %%mm1\n" \
194 \ 194 \
195 "movd %3, %%mm2\n" \ 195 "movd %3, %%mm2\n" \
196 "movq %%mm1, %%mm5\n" \ 196 "movq %%mm1, %%mm5\n" \
197 "pand %%mm2, %%mm5\n" \ 197 "pand %%mm2, %%mm5\n" \
216 "movd %%mm1, %0\n" \ 216 "movd %%mm1, %0\n" \
217 : "=m" (*dp) \ 217 : "=m" (*dp) \
218 : "m" (*dp), "m" (sp[FP_GETH16(xv)]), "m" (qpdmask), "m" (qpdrm) \ 218 : "m" (*dp), "m" (sp[FP_GETH16(xv)]), "m" (qpdmask), "m" (qpdrm) \
219 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++; 219 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++;
220 220
221 #define DM_BLITFUNC_FINISH asm("emms\n"); 221 #define DM_BLITFUNC_FINISH __asm__("emms\n");
222 222
223 #else 223 #else
224 224
225 #define DM_BLITFUNC_SRC_TYPE DMColor 225 #define DM_BLITFUNC_SRC_TYPE DMColor
226 #define DM_BLITFUNC_DST_TYPE DMColor 226 #define DM_BLITFUNC_DST_TYPE DMColor
263 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ 263 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \
264 pal = (DMColor *) src->format->palette->colors; 264 pal = (DMColor *) src->format->palette->colors;
265 265
266 #ifdef DM_USE_SIMD 266 #ifdef DM_USE_SIMD
267 #define DM_BLITFUNC_INNER \ 267 #define DM_BLITFUNC_INNER \
268 asm("movd %2, %%mm1\n" \ 268 __asm__("movd %2, %%mm1\n" \
269 "movd %1, %%mm2\n" \ 269 "movd %1, %%mm2\n" \
270 "paddusb %%mm2, %%mm1\n" \ 270 "paddusb %%mm2, %%mm1\n" \
271 "movd %%mm1, %0\n" \ 271 "movd %%mm1, %0\n" \
272 : "=m" (*dp) \ 272 : "=m" (*dp) \
273 : "m" (*dp), "m" (pal[sp[FP_GETH16(xv)]]) \ 273 : "m" (*dp), "m" (pal[sp[FP_GETH16(xv)]]) \
274 : "memory", "%mm1", "%mm2" ); dp++; 274 : "memory", "%mm1", "%mm2" ); dp++;
275 275
276 #define DM_BLITFUNC_FINISH asm("emms\n"); 276 #define DM_BLITFUNC_FINISH __asm__("emms\n");
277 #else 277 #else
278 #define DM_BLITFUNC_INNER \ 278 #define DM_BLITFUNC_INNER \
279 const DMColor q = pal[sp[FP_GETH16(xv)]]; \ 279 const DMColor q = pal[sp[FP_GETH16(xv)]]; \
280 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ 280 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \
281 dp->r = qr < 256 ? qr : 255; \ 281 dp->r = qr < 256 ? qr : 255; \
296 296
297 #ifdef DM_USE_SIMD 297 #ifdef DM_USE_SIMD
298 #define DM_BLITFUNC_SRC_TYPE Uint32 298 #define DM_BLITFUNC_SRC_TYPE Uint32
299 #define DM_BLITFUNC_DST_TYPE Uint32 299 #define DM_BLITFUNC_DST_TYPE Uint32
300 #define DM_BLITFUNC_INNER \ 300 #define DM_BLITFUNC_INNER \
301 asm("movd %2, %%mm1\n" \ 301 __asm__("movd %2, %%mm1\n" \
302 "movd %1, %%mm2\n" \ 302 "movd %1, %%mm2\n" \
303 "paddusb %%mm2, %%mm1\n" \ 303 "paddusb %%mm2, %%mm1\n" \
304 "movd %%mm1, %0\n" \ 304 "movd %%mm1, %0\n" \
305 : "=m" (*dp) \ 305 : "=m" (*dp) \
306 : "m" (*dp), "m" (sp[FP_GETH16(xv)]) \ 306 : "m" (*dp), "m" (sp[FP_GETH16(xv)]) \
307 : "memory", "%mm1", "%mm2" ); dp++; 307 : "memory", "%mm1", "%mm2" ); dp++;
308 308
309 #define DM_BLITFUNC_FINISH asm("emms\n"); 309 #define DM_BLITFUNC_FINISH __asm__("emms\n");
310 #else 310 #else
311 #define DM_BLITFUNC_SRC_TYPE DMColor 311 #define DM_BLITFUNC_SRC_TYPE DMColor
312 #define DM_BLITFUNC_DST_TYPE DMColor 312 #define DM_BLITFUNC_DST_TYPE DMColor
313 #define DM_BLITFUNC_INNER \ 313 #define DM_BLITFUNC_INNER \
314 const DMColor q = sp[FP_GETH16(xv)]; \ 314 const DMColor q = sp[FP_GETH16(xv)]; \
423 const Uint64 qpdrm = 0xff00ff00ff00ffULL; 423 const Uint64 qpdrm = 0xff00ff00ff00ffULL;
424 424
425 #define DM_BLITFUNC_SRC_TYPE Uint32 425 #define DM_BLITFUNC_SRC_TYPE Uint32
426 #define DM_BLITFUNC_DST_TYPE Uint32 426 #define DM_BLITFUNC_DST_TYPE Uint32
427 #define DM_BLITFUNC_INNER \ 427 #define DM_BLITFUNC_INNER \
428 asm( \ 428 __asm__( \
429 "movd %2, %%mm1\n" \ 429 "movd %2, %%mm1\n" \
430 \ 430 \
431 "movd %3, %%mm2\n" \ 431 "movd %3, %%mm2\n" \
432 "movq %%mm1, %%mm5\n" \ 432 "movq %%mm1, %%mm5\n" \
433 "pand %%mm2, %%mm5\n" \ 433 "pand %%mm2, %%mm5\n" \
449 "movd %%mm1, %0\n" \ 449 "movd %%mm1, %0\n" \
450 : "=m" (*dp) \ 450 : "=m" (*dp) \
451 : "m" (*dp), "m" (sp[xv]), "m" (qpdmask), "m" (qpdrm) \ 451 : "m" (*dp), "m" (sp[xv]), "m" (qpdmask), "m" (qpdrm) \
452 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++; 452 : "memory", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5" ); dp++;
453 453
454 #define DM_BLITFUNC_FINISH asm("emms\n"); 454 #define DM_BLITFUNC_FINISH __asm__("emms\n");
455 455
456 #else 456 #else
457 457
458 #define DM_BLITFUNC_SRC_TYPE DMColor 458 #define DM_BLITFUNC_SRC_TYPE DMColor
459 #define DM_BLITFUNC_DST_TYPE DMColor 459 #define DM_BLITFUNC_DST_TYPE DMColor
496 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \ 496 if (src->format->palette == NULL || src->format->palette->ncolors < 256) return -2; \
497 pal = (DMColor *) src->format->palette->colors; 497 pal = (DMColor *) src->format->palette->colors;
498 498
499 #ifdef DM_USE_SIMD 499 #ifdef DM_USE_SIMD
500 #define DM_BLITFUNC_INNER \ 500 #define DM_BLITFUNC_INNER \
501 asm("movd %2, %%mm1\n" \ 501 __asm__("movd %2, %%mm1\n" \
502 "movd %1, %%mm2\n" \ 502 "movd %1, %%mm2\n" \
503 "paddusb %%mm2, %%mm1\n" \ 503 "paddusb %%mm2, %%mm1\n" \
504 "movd %%mm1, %0\n" \ 504 "movd %%mm1, %0\n" \
505 : "=m" (*dp) \ 505 : "=m" (*dp) \
506 : "m" (*dp), "m" (pal[sp[xv]]) \ 506 : "m" (*dp), "m" (pal[sp[xv]]) \
507 : "memory", "%mm1", "%mm2" ); dp++; 507 : "memory", "%mm1", "%mm2" ); dp++;
508 508
509 #define DM_BLITFUNC_FINISH asm("emms\n"); 509 #define DM_BLITFUNC_FINISH __asm__("emms\n");
510 #else 510 #else
511 #define DM_BLITFUNC_INNER \ 511 #define DM_BLITFUNC_INNER \
512 const DMColor q = pal[sp[xv]]; \ 512 const DMColor q = pal[sp[xv]]; \
513 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \ 513 const int qr = dp->r + q.r, qg = dp->g + q.g, qb = dp->b + q.b; \
514 dp->r = qr < 256 ? qr : 255; \ 514 dp->r = qr < 256 ? qr : 255; \
529 529
530 #ifdef DM_USE_SIMD 530 #ifdef DM_USE_SIMD
531 #define DM_BLITFUNC_SRC_TYPE Uint32 531 #define DM_BLITFUNC_SRC_TYPE Uint32
532 #define DM_BLITFUNC_DST_TYPE Uint32 532 #define DM_BLITFUNC_DST_TYPE Uint32
533 #define DM_BLITFUNC_INNER \ 533 #define DM_BLITFUNC_INNER \
534 asm("movd %2, %%mm1\n" \ 534 __asm__("movd %2, %%mm1\n" \
535 "movd %1, %%mm2\n" \ 535 "movd %1, %%mm2\n" \
536 "paddusb %%mm2, %%mm1\n" \ 536 "paddusb %%mm2, %%mm1\n" \
537 "movd %%mm1, %0\n" \ 537 "movd %%mm1, %0\n" \
538 : "=m" (*dp) \ 538 : "=m" (*dp) \
539 : "m" (*dp), "m" (sp[xv]) \ 539 : "m" (*dp), "m" (sp[xv]) \
540 : "memory", "%mm1", "%mm2" ); dp++; 540 : "memory", "%mm1", "%mm2" ); dp++;
541 541
542 #define DM_BLITFUNC_FINISH asm("emms\n"); 542 #define DM_BLITFUNC_FINISH __asm__("emms\n");
543 #else 543 #else
544 #define DM_BLITFUNC_SRC_TYPE DMColor 544 #define DM_BLITFUNC_SRC_TYPE DMColor
545 #define DM_BLITFUNC_DST_TYPE DMColor 545 #define DM_BLITFUNC_DST_TYPE DMColor
546 #define DM_BLITFUNC_INNER \ 546 #define DM_BLITFUNC_INNER \
547 const DMColor q = sp[xv]; \ 547 const DMColor q = sp[xv]; \