Mercurial > mplayer.hg
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" |