comparison libswscale/swscale_template.c @ 28652:cc44b3827a6f

move zeroing of alpha channel register out of YSCALEYUV2xxx macros, patch by C¸«±dric Schieli (cschieli at gmail youknowwhat)
author stefang
date Sat, 21 Feb 2009 10:54:29 +0000
parents 7241319c2d93
children 267dd38c800e
comparison
equal deleted inserted replaced
28651:7241319c2d93 28652:cc44b3827a6f
392 "paddw %%mm7, %%mm3 \n\t"\ 392 "paddw %%mm7, %%mm3 \n\t"\
393 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\ 393 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
394 "packuswb %%mm0, %%mm2 \n\t"\ 394 "packuswb %%mm0, %%mm2 \n\t"\
395 "packuswb %%mm6, %%mm5 \n\t"\ 395 "packuswb %%mm6, %%mm5 \n\t"\
396 "packuswb %%mm3, %%mm4 \n\t"\ 396 "packuswb %%mm3, %%mm4 \n\t"\
397 "pxor %%mm7, %%mm7 \n\t"
398 397
399 #define REAL_YSCALEYUV2PACKED(index, c) \ 398 #define REAL_YSCALEYUV2PACKED(index, c) \
400 "movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0 \n\t"\ 399 "movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0 \n\t"\
401 "movq "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm1 \n\t"\ 400 "movq "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm1 \n\t"\
402 "psraw $3, %%mm0 \n\t"\ 401 "psraw $3, %%mm0 \n\t"\
499 "paddw %%mm7, %%mm3 \n\t"\ 498 "paddw %%mm7, %%mm3 \n\t"\
500 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\ 499 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
501 "packuswb %%mm0, %%mm2 \n\t"\ 500 "packuswb %%mm0, %%mm2 \n\t"\
502 "packuswb %%mm6, %%mm5 \n\t"\ 501 "packuswb %%mm6, %%mm5 \n\t"\
503 "packuswb %%mm3, %%mm4 \n\t"\ 502 "packuswb %%mm3, %%mm4 \n\t"\
504 "pxor %%mm7, %%mm7 \n\t" 503
505 #define YSCALEYUV2RGB_YA(index, c) REAL_YSCALEYUV2RGB_YA(index, c) 504 #define YSCALEYUV2RGB_YA(index, c) REAL_YSCALEYUV2RGB_YA(index, c)
506 505
507 #define YSCALEYUV2RGB(index, c) \ 506 #define YSCALEYUV2RGB(index, c) \
508 REAL_YSCALEYUV2RGB_UV(index, c) \ 507 REAL_YSCALEYUV2RGB_UV(index, c) \
509 REAL_YSCALEYUV2RGB_YA(index, c) \ 508 REAL_YSCALEYUV2RGB_YA(index, c) \
568 "paddw %%mm7, %%mm3 \n\t"\ 567 "paddw %%mm7, %%mm3 \n\t"\
569 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\ 568 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
570 "packuswb %%mm0, %%mm2 \n\t"\ 569 "packuswb %%mm0, %%mm2 \n\t"\
571 "packuswb %%mm6, %%mm5 \n\t"\ 570 "packuswb %%mm6, %%mm5 \n\t"\
572 "packuswb %%mm3, %%mm4 \n\t"\ 571 "packuswb %%mm3, %%mm4 \n\t"\
573 "pxor %%mm7, %%mm7 \n\t" 572
574 #define YSCALEYUV2RGB1(index, c) REAL_YSCALEYUV2RGB1(index, c) 573 #define YSCALEYUV2RGB1(index, c) REAL_YSCALEYUV2RGB1(index, c)
575 574
576 #define REAL_YSCALEYUV2PACKED1b(index, c) \ 575 #define REAL_YSCALEYUV2PACKED1b(index, c) \
577 "xor "#index", "#index" \n\t"\ 576 "xor "#index", "#index" \n\t"\
578 ASMALIGN(4)\ 577 ASMALIGN(4)\
640 "paddw %%mm7, %%mm3 \n\t"\ 639 "paddw %%mm7, %%mm3 \n\t"\
641 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\ 640 /* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
642 "packuswb %%mm0, %%mm2 \n\t"\ 641 "packuswb %%mm0, %%mm2 \n\t"\
643 "packuswb %%mm6, %%mm5 \n\t"\ 642 "packuswb %%mm6, %%mm5 \n\t"\
644 "packuswb %%mm3, %%mm4 \n\t"\ 643 "packuswb %%mm3, %%mm4 \n\t"\
645 "pxor %%mm7, %%mm7 \n\t" 644
646 #define YSCALEYUV2RGB1b(index, c) REAL_YSCALEYUV2RGB1b(index, c) 645 #define YSCALEYUV2RGB1b(index, c) REAL_YSCALEYUV2RGB1b(index, c)
647 646
648 #define REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t) \ 647 #define REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t) \
649 "movq "#b", "#q2" \n\t" /* B */\ 648 "movq "#b", "#q2" \n\t" /* B */\
650 "movq "#r", "#t" \n\t" /* R */\ 649 "movq "#r", "#t" \n\t" /* R */\
1030 if (c->flags & SWS_ACCURATE_RND){ 1029 if (c->flags & SWS_ACCURATE_RND){
1031 switch(c->dstFormat){ 1030 switch(c->dstFormat){
1032 case PIX_FMT_RGB32: 1031 case PIX_FMT_RGB32:
1033 YSCALEYUV2PACKEDX_ACCURATE 1032 YSCALEYUV2PACKEDX_ACCURATE
1034 YSCALEYUV2RGBX 1033 YSCALEYUV2RGBX
1034 "pxor %%mm7, %%mm7 \n\t"
1035 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) 1035 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
1036 1036
1037 YSCALEYUV2PACKEDX_END 1037 YSCALEYUV2PACKEDX_END
1038 return; 1038 return;
1039 case PIX_FMT_BGR24: 1039 case PIX_FMT_BGR24:
1040 YSCALEYUV2PACKEDX_ACCURATE 1040 YSCALEYUV2PACKEDX_ACCURATE
1041 YSCALEYUV2RGBX 1041 YSCALEYUV2RGBX
1042 "pxor %%mm7, %%mm7 \n\t"
1042 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"\n\t" //FIXME optimize 1043 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c"\n\t" //FIXME optimize
1043 "add %4, %%"REG_c" \n\t" 1044 "add %4, %%"REG_c" \n\t"
1044 WRITEBGR24(%%REGc, %5, %%REGa) 1045 WRITEBGR24(%%REGc, %5, %%REGa)
1045 1046
1046 1047
1051 ); 1052 );
1052 return; 1053 return;
1053 case PIX_FMT_RGB555: 1054 case PIX_FMT_RGB555:
1054 YSCALEYUV2PACKEDX_ACCURATE 1055 YSCALEYUV2PACKEDX_ACCURATE
1055 YSCALEYUV2RGBX 1056 YSCALEYUV2RGBX
1057 "pxor %%mm7, %%mm7 \n\t"
1056 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1058 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1057 #ifdef DITHER1XBPP 1059 #ifdef DITHER1XBPP
1058 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t" 1060 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t"
1059 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t" 1061 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t"
1060 "paddusb "RED_DITHER"(%0), %%mm5\n\t" 1062 "paddusb "RED_DITHER"(%0), %%mm5\n\t"
1064 YSCALEYUV2PACKEDX_END 1066 YSCALEYUV2PACKEDX_END
1065 return; 1067 return;
1066 case PIX_FMT_RGB565: 1068 case PIX_FMT_RGB565:
1067 YSCALEYUV2PACKEDX_ACCURATE 1069 YSCALEYUV2PACKEDX_ACCURATE
1068 YSCALEYUV2RGBX 1070 YSCALEYUV2RGBX
1071 "pxor %%mm7, %%mm7 \n\t"
1069 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1072 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1070 #ifdef DITHER1XBPP 1073 #ifdef DITHER1XBPP
1071 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t" 1074 "paddusb "BLUE_DITHER"(%0), %%mm2\n\t"
1072 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t" 1075 "paddusb "GREEN_DITHER"(%0), %%mm4\n\t"
1073 "paddusb "RED_DITHER"(%0), %%mm5\n\t" 1076 "paddusb "RED_DITHER"(%0), %%mm5\n\t"
1092 switch(c->dstFormat) 1095 switch(c->dstFormat)
1093 { 1096 {
1094 case PIX_FMT_RGB32: 1097 case PIX_FMT_RGB32:
1095 YSCALEYUV2PACKEDX 1098 YSCALEYUV2PACKEDX
1096 YSCALEYUV2RGBX 1099 YSCALEYUV2RGBX
1100 "pxor %%mm7, %%mm7 \n\t"
1097 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) 1101 WRITEBGR32(%4, %5, %%REGa, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
1098 YSCALEYUV2PACKEDX_END 1102 YSCALEYUV2PACKEDX_END
1099 return; 1103 return;
1100 case PIX_FMT_BGR24: 1104 case PIX_FMT_BGR24:
1101 YSCALEYUV2PACKEDX 1105 YSCALEYUV2PACKEDX
1102 YSCALEYUV2RGBX 1106 YSCALEYUV2RGBX
1107 "pxor %%mm7, %%mm7 \n\t"
1103 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c" \n\t" //FIXME optimize 1108 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_c" \n\t" //FIXME optimize
1104 "add %4, %%"REG_c" \n\t" 1109 "add %4, %%"REG_c" \n\t"
1105 WRITEBGR24(%%REGc, %5, %%REGa) 1110 WRITEBGR24(%%REGc, %5, %%REGa)
1106 1111
1107 :: "r" (&c->redDither), 1112 :: "r" (&c->redDither),
1111 ); 1116 );
1112 return; 1117 return;
1113 case PIX_FMT_RGB555: 1118 case PIX_FMT_RGB555:
1114 YSCALEYUV2PACKEDX 1119 YSCALEYUV2PACKEDX
1115 YSCALEYUV2RGBX 1120 YSCALEYUV2RGBX
1121 "pxor %%mm7, %%mm7 \n\t"
1116 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1122 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1117 #ifdef DITHER1XBPP 1123 #ifdef DITHER1XBPP
1118 "paddusb "BLUE_DITHER"(%0), %%mm2 \n\t" 1124 "paddusb "BLUE_DITHER"(%0), %%mm2 \n\t"
1119 "paddusb "GREEN_DITHER"(%0), %%mm4 \n\t" 1125 "paddusb "GREEN_DITHER"(%0), %%mm4 \n\t"
1120 "paddusb "RED_DITHER"(%0), %%mm5 \n\t" 1126 "paddusb "RED_DITHER"(%0), %%mm5 \n\t"
1124 YSCALEYUV2PACKEDX_END 1130 YSCALEYUV2PACKEDX_END
1125 return; 1131 return;
1126 case PIX_FMT_RGB565: 1132 case PIX_FMT_RGB565:
1127 YSCALEYUV2PACKEDX 1133 YSCALEYUV2PACKEDX
1128 YSCALEYUV2RGBX 1134 YSCALEYUV2RGBX
1135 "pxor %%mm7, %%mm7 \n\t"
1129 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1136 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1130 #ifdef DITHER1XBPP 1137 #ifdef DITHER1XBPP
1131 "paddusb "BLUE_DITHER"(%0), %%mm2 \n\t" 1138 "paddusb "BLUE_DITHER"(%0), %%mm2 \n\t"
1132 "paddusb "GREEN_DITHER"(%0), %%mm4 \n\t" 1139 "paddusb "GREEN_DITHER"(%0), %%mm4 \n\t"
1133 "paddusb "RED_DITHER"(%0), %%mm5 \n\t" 1140 "paddusb "RED_DITHER"(%0), %%mm5 \n\t"
1187 __asm__ volatile( 1194 __asm__ volatile(
1188 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1195 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1189 "mov %4, %%"REG_b" \n\t" 1196 "mov %4, %%"REG_b" \n\t"
1190 "push %%"REG_BP" \n\t" 1197 "push %%"REG_BP" \n\t"
1191 YSCALEYUV2RGB(%%REGBP, %5) 1198 YSCALEYUV2RGB(%%REGBP, %5)
1199 "pxor %%mm7, %%mm7 \n\t"
1192 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) 1200 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
1193 "pop %%"REG_BP" \n\t" 1201 "pop %%"REG_BP" \n\t"
1194 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1202 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1195 1203
1196 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1204 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1201 __asm__ volatile( 1209 __asm__ volatile(
1202 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1210 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1203 "mov %4, %%"REG_b" \n\t" 1211 "mov %4, %%"REG_b" \n\t"
1204 "push %%"REG_BP" \n\t" 1212 "push %%"REG_BP" \n\t"
1205 YSCALEYUV2RGB(%%REGBP, %5) 1213 YSCALEYUV2RGB(%%REGBP, %5)
1214 "pxor %%mm7, %%mm7 \n\t"
1206 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) 1215 WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
1207 "pop %%"REG_BP" \n\t" 1216 "pop %%"REG_BP" \n\t"
1208 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1217 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1209 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1218 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1210 "a" (&c->redDither) 1219 "a" (&c->redDither)
1214 __asm__ volatile( 1223 __asm__ volatile(
1215 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1224 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1216 "mov %4, %%"REG_b" \n\t" 1225 "mov %4, %%"REG_b" \n\t"
1217 "push %%"REG_BP" \n\t" 1226 "push %%"REG_BP" \n\t"
1218 YSCALEYUV2RGB(%%REGBP, %5) 1227 YSCALEYUV2RGB(%%REGBP, %5)
1228 "pxor %%mm7, %%mm7 \n\t"
1219 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1229 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1220 #ifdef DITHER1XBPP 1230 #ifdef DITHER1XBPP
1221 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1231 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1222 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1232 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1223 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1233 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"
1235 __asm__ volatile( 1245 __asm__ volatile(
1236 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1246 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1237 "mov %4, %%"REG_b" \n\t" 1247 "mov %4, %%"REG_b" \n\t"
1238 "push %%"REG_BP" \n\t" 1248 "push %%"REG_BP" \n\t"
1239 YSCALEYUV2RGB(%%REGBP, %5) 1249 YSCALEYUV2RGB(%%REGBP, %5)
1250 "pxor %%mm7, %%mm7 \n\t"
1240 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1251 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1241 #ifdef DITHER1XBPP 1252 #ifdef DITHER1XBPP
1242 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1253 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1243 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1254 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1244 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1255 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"
1299 __asm__ volatile( 1310 __asm__ volatile(
1300 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1311 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1301 "mov %4, %%"REG_b" \n\t" 1312 "mov %4, %%"REG_b" \n\t"
1302 "push %%"REG_BP" \n\t" 1313 "push %%"REG_BP" \n\t"
1303 YSCALEYUV2RGB1(%%REGBP, %5) 1314 YSCALEYUV2RGB1(%%REGBP, %5)
1315 "pxor %%mm7, %%mm7 \n\t"
1304 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) 1316 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
1305 "pop %%"REG_BP" \n\t" 1317 "pop %%"REG_BP" \n\t"
1306 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1318 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1307 1319
1308 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1320 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1313 __asm__ volatile( 1325 __asm__ volatile(
1314 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1326 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1315 "mov %4, %%"REG_b" \n\t" 1327 "mov %4, %%"REG_b" \n\t"
1316 "push %%"REG_BP" \n\t" 1328 "push %%"REG_BP" \n\t"
1317 YSCALEYUV2RGB1(%%REGBP, %5) 1329 YSCALEYUV2RGB1(%%REGBP, %5)
1330 "pxor %%mm7, %%mm7 \n\t"
1318 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) 1331 WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
1319 "pop %%"REG_BP" \n\t" 1332 "pop %%"REG_BP" \n\t"
1320 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1333 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1321 1334
1322 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1335 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1327 __asm__ volatile( 1340 __asm__ volatile(
1328 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1341 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1329 "mov %4, %%"REG_b" \n\t" 1342 "mov %4, %%"REG_b" \n\t"
1330 "push %%"REG_BP" \n\t" 1343 "push %%"REG_BP" \n\t"
1331 YSCALEYUV2RGB1(%%REGBP, %5) 1344 YSCALEYUV2RGB1(%%REGBP, %5)
1345 "pxor %%mm7, %%mm7 \n\t"
1332 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1346 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1333 #ifdef DITHER1XBPP 1347 #ifdef DITHER1XBPP
1334 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1348 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1335 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1349 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1336 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1350 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"
1347 __asm__ volatile( 1361 __asm__ volatile(
1348 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1362 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1349 "mov %4, %%"REG_b" \n\t" 1363 "mov %4, %%"REG_b" \n\t"
1350 "push %%"REG_BP" \n\t" 1364 "push %%"REG_BP" \n\t"
1351 YSCALEYUV2RGB1(%%REGBP, %5) 1365 YSCALEYUV2RGB1(%%REGBP, %5)
1366 "pxor %%mm7, %%mm7 \n\t"
1352 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1367 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1353 #ifdef DITHER1XBPP 1368 #ifdef DITHER1XBPP
1354 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1369 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1355 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1370 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1356 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1371 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"
1388 __asm__ volatile( 1403 __asm__ volatile(
1389 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1404 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1390 "mov %4, %%"REG_b" \n\t" 1405 "mov %4, %%"REG_b" \n\t"
1391 "push %%"REG_BP" \n\t" 1406 "push %%"REG_BP" \n\t"
1392 YSCALEYUV2RGB1b(%%REGBP, %5) 1407 YSCALEYUV2RGB1b(%%REGBP, %5)
1408 "pxor %%mm7, %%mm7 \n\t"
1393 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) 1409 WRITEBGR32(%%REGb, 8280(%5), %%REGBP, %%mm2, %%mm4, %%mm5, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6)
1394 "pop %%"REG_BP" \n\t" 1410 "pop %%"REG_BP" \n\t"
1395 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1411 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1396 1412
1397 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1413 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1402 __asm__ volatile( 1418 __asm__ volatile(
1403 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1419 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1404 "mov %4, %%"REG_b" \n\t" 1420 "mov %4, %%"REG_b" \n\t"
1405 "push %%"REG_BP" \n\t" 1421 "push %%"REG_BP" \n\t"
1406 YSCALEYUV2RGB1b(%%REGBP, %5) 1422 YSCALEYUV2RGB1b(%%REGBP, %5)
1423 "pxor %%mm7, %%mm7 \n\t"
1407 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) 1424 WRITEBGR24(%%REGb, 8280(%5), %%REGBP)
1408 "pop %%"REG_BP" \n\t" 1425 "pop %%"REG_BP" \n\t"
1409 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" 1426 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t"
1410 1427
1411 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), 1428 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest),
1416 __asm__ volatile( 1433 __asm__ volatile(
1417 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1434 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1418 "mov %4, %%"REG_b" \n\t" 1435 "mov %4, %%"REG_b" \n\t"
1419 "push %%"REG_BP" \n\t" 1436 "push %%"REG_BP" \n\t"
1420 YSCALEYUV2RGB1b(%%REGBP, %5) 1437 YSCALEYUV2RGB1b(%%REGBP, %5)
1438 "pxor %%mm7, %%mm7 \n\t"
1421 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1439 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1422 #ifdef DITHER1XBPP 1440 #ifdef DITHER1XBPP
1423 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1441 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1424 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1442 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1425 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1443 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"
1436 __asm__ volatile( 1454 __asm__ volatile(
1437 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" 1455 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
1438 "mov %4, %%"REG_b" \n\t" 1456 "mov %4, %%"REG_b" \n\t"
1439 "push %%"REG_BP" \n\t" 1457 "push %%"REG_BP" \n\t"
1440 YSCALEYUV2RGB1b(%%REGBP, %5) 1458 YSCALEYUV2RGB1b(%%REGBP, %5)
1459 "pxor %%mm7, %%mm7 \n\t"
1441 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ 1460 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
1442 #ifdef DITHER1XBPP 1461 #ifdef DITHER1XBPP
1443 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t" 1462 "paddusb "BLUE_DITHER"(%5), %%mm2 \n\t"
1444 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t" 1463 "paddusb "GREEN_DITHER"(%5), %%mm4 \n\t"
1445 "paddusb "RED_DITHER"(%5), %%mm5 \n\t" 1464 "paddusb "RED_DITHER"(%5), %%mm5 \n\t"