Mercurial > mplayer.hg
comparison postproc/swscale_template.c @ 18392:b10d4b3cb9ec
removing esp usage
this is certainly not the most beautifull but it should work without -fomit-frame-pointer and PIC and gcc-4 vomits when ebp is given in a constraint directly even with -fomi-frame-pointer so theres not that much choice ...
if anyone knows a simpler/cleaner solution, dont hesitate to suggest it ...
author | michael |
---|---|
date | Sat, 06 May 2006 02:01:39 +0000 |
parents | 7b408d60de9e |
children | e00cea3e1732 |
comparison
equal
deleted
inserted
replaced
18391:b5c6755ffa29 | 18392:b10d4b3cb9ec |
---|---|
1216 switch(c->dstFormat) | 1216 switch(c->dstFormat) |
1217 { | 1217 { |
1218 //Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :( | 1218 //Note 8280 == DSTW_OFFSET but the preprocessor can't handle that there :( |
1219 case IMGFMT_BGR32: | 1219 case IMGFMT_BGR32: |
1220 asm volatile( | 1220 asm volatile( |
1221 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1221 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1222 "mov %4, %%"REG_SP" \n\t" | 1222 "mov %4, %%"REG_b" \n\t" |
1223 YSCALEYUV2RGB(%%REGa, %5) | 1223 "push %%"REG_BP" \n\t" |
1224 WRITEBGR32(%%REGSP, 8280(%5), %%REGa) | 1224 YSCALEYUV2RGB(%%REGBP, %5) |
1225 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1225 WRITEBGR32(%%REGb, 8280(%5), %%REGBP) |
1226 | 1226 "pop %%"REG_BP" \n\t" |
1227 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1227 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1228 "r" (&c->redDither) | 1228 |
1229 : "%"REG_a | 1229 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1230 "a" (&c->redDither) | |
1230 ); | 1231 ); |
1231 return; | 1232 return; |
1232 case IMGFMT_BGR24: | 1233 case IMGFMT_BGR24: |
1233 asm volatile( | 1234 asm volatile( |
1234 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1235 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1235 "mov %4, %%"REG_SP" \n\t" | 1236 "mov %4, %%"REG_b" \n\t" |
1236 YSCALEYUV2RGB(%%REGa, %5) | 1237 "push %%"REG_BP" \n\t" |
1237 WRITEBGR24(%%REGSP, 8280(%5), %%REGa) | 1238 YSCALEYUV2RGB(%%REGBP, %5) |
1238 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1239 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) |
1239 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1240 "pop %%"REG_BP" \n\t" |
1240 "r" (&c->redDither) | 1241 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1241 : "%"REG_a | 1242 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1243 "a" (&c->redDither) | |
1242 ); | 1244 ); |
1243 return; | 1245 return; |
1244 case IMGFMT_BGR15: | 1246 case IMGFMT_BGR15: |
1245 asm volatile( | 1247 asm volatile( |
1246 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1248 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1247 "mov %4, %%"REG_SP" \n\t" | 1249 "mov %4, %%"REG_b" \n\t" |
1248 YSCALEYUV2RGB(%%REGa, %5) | 1250 "push %%"REG_BP" \n\t" |
1251 YSCALEYUV2RGB(%%REGBP, %5) | |
1249 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1252 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1250 #ifdef DITHER1XBPP | 1253 #ifdef DITHER1XBPP |
1251 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1254 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1252 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" | 1255 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" |
1253 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1256 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1254 #endif | 1257 #endif |
1255 | 1258 |
1256 WRITEBGR15(%%REGSP, 8280(%5), %%REGa) | 1259 WRITEBGR15(%%REGb, 8280(%5), %%REGBP) |
1257 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1260 "pop %%"REG_BP" \n\t" |
1258 | 1261 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1259 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1262 |
1260 "r" (&c->redDither) | 1263 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1261 : "%"REG_a | 1264 "a" (&c->redDither) |
1262 ); | 1265 ); |
1263 return; | 1266 return; |
1264 case IMGFMT_BGR16: | 1267 case IMGFMT_BGR16: |
1265 asm volatile( | 1268 asm volatile( |
1266 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1269 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1267 "mov %4, %%"REG_SP" \n\t" | 1270 "mov %4, %%"REG_b" \n\t" |
1268 YSCALEYUV2RGB(%%REGa, %5) | 1271 "push %%"REG_BP" \n\t" |
1272 YSCALEYUV2RGB(%%REGBP, %5) | |
1269 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1273 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1270 #ifdef DITHER1XBPP | 1274 #ifdef DITHER1XBPP |
1271 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1275 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1272 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" | 1276 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" |
1273 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1277 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1274 #endif | 1278 #endif |
1275 | 1279 |
1276 WRITEBGR16(%%REGSP, 8280(%5), %%REGa) | 1280 WRITEBGR16(%%REGb, 8280(%5), %%REGBP) |
1277 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1281 "pop %%"REG_BP" \n\t" |
1278 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1282 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1279 "r" (&c->redDither) | 1283 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1280 : "%"REG_a | 1284 "a" (&c->redDither) |
1281 ); | 1285 ); |
1282 return; | 1286 return; |
1283 case IMGFMT_YUY2: | 1287 case IMGFMT_YUY2: |
1284 asm volatile( | 1288 asm volatile( |
1285 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1289 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1286 "mov %4, %%"REG_SP" \n\t" | 1290 "mov %4, %%"REG_b" \n\t" |
1287 YSCALEYUV2PACKED(%%REGa, %5) | 1291 "push %%"REG_BP" \n\t" |
1288 WRITEYUY2(%%REGSP, 8280(%5), %%REGa) | 1292 YSCALEYUV2PACKED(%%REGBP, %5) |
1289 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1293 WRITEYUY2(%%REGb, 8280(%5), %%REGBP) |
1290 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1294 "pop %%"REG_BP" \n\t" |
1291 "r" (&c->redDither) | 1295 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1292 : "%"REG_a | 1296 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1297 "a" (&c->redDither) | |
1293 ); | 1298 ); |
1294 return; | 1299 return; |
1295 default: break; | 1300 default: break; |
1296 } | 1301 } |
1297 #endif //HAVE_MMX | 1302 #endif //HAVE_MMX |
1321 { | 1326 { |
1322 switch(dstFormat) | 1327 switch(dstFormat) |
1323 { | 1328 { |
1324 case IMGFMT_BGR32: | 1329 case IMGFMT_BGR32: |
1325 asm volatile( | 1330 asm volatile( |
1326 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1331 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1327 "mov %4, %%"REG_SP" \n\t" | 1332 "mov %4, %%"REG_b" \n\t" |
1328 YSCALEYUV2RGB1(%%REGa, %5) | 1333 "push %%"REG_BP" \n\t" |
1329 WRITEBGR32(%%REGSP, 8280(%5), %%REGa) | 1334 YSCALEYUV2RGB1(%%REGBP, %5) |
1330 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1335 WRITEBGR32(%%REGb, 8280(%5), %%REGBP) |
1331 | 1336 "pop %%"REG_BP" \n\t" |
1332 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1337 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1333 "r" (&c->redDither) | 1338 |
1334 : "%"REG_a | 1339 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1340 "a" (&c->redDither) | |
1335 ); | 1341 ); |
1336 return; | 1342 return; |
1337 case IMGFMT_BGR24: | 1343 case IMGFMT_BGR24: |
1338 asm volatile( | 1344 asm volatile( |
1339 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1345 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1340 "mov %4, %%"REG_SP" \n\t" | 1346 "mov %4, %%"REG_b" \n\t" |
1341 YSCALEYUV2RGB1(%%REGa, %5) | 1347 "push %%"REG_BP" \n\t" |
1342 WRITEBGR24(%%REGSP, 8280(%5), %%REGa) | 1348 YSCALEYUV2RGB1(%%REGBP, %5) |
1343 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1349 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) |
1344 | 1350 "pop %%"REG_BP" \n\t" |
1345 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1351 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1346 "r" (&c->redDither) | 1352 |
1347 : "%"REG_a | 1353 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1354 "a" (&c->redDither) | |
1348 ); | 1355 ); |
1349 return; | 1356 return; |
1350 case IMGFMT_BGR15: | 1357 case IMGFMT_BGR15: |
1351 asm volatile( | 1358 asm volatile( |
1352 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1359 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1353 "mov %4, %%"REG_SP" \n\t" | 1360 "mov %4, %%"REG_b" \n\t" |
1354 YSCALEYUV2RGB1(%%REGa, %5) | 1361 "push %%"REG_BP" \n\t" |
1362 YSCALEYUV2RGB1(%%REGBP, %5) | |
1355 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1363 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1356 #ifdef DITHER1XBPP | 1364 #ifdef DITHER1XBPP |
1357 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1365 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1358 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" | 1366 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" |
1359 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1367 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1360 #endif | 1368 #endif |
1361 WRITEBGR15(%%REGSP, 8280(%5), %%REGa) | 1369 WRITEBGR15(%%REGb, 8280(%5), %%REGBP) |
1362 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1370 "pop %%"REG_BP" \n\t" |
1363 | 1371 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1364 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1372 |
1365 "r" (&c->redDither) | 1373 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1366 : "%"REG_a | 1374 "a" (&c->redDither) |
1367 ); | 1375 ); |
1368 return; | 1376 return; |
1369 case IMGFMT_BGR16: | 1377 case IMGFMT_BGR16: |
1370 asm volatile( | 1378 asm volatile( |
1371 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1379 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1372 "mov %4, %%"REG_SP" \n\t" | 1380 "mov %4, %%"REG_b" \n\t" |
1373 YSCALEYUV2RGB1(%%REGa, %5) | 1381 "push %%"REG_BP" \n\t" |
1382 YSCALEYUV2RGB1(%%REGBP, %5) | |
1374 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1383 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1375 #ifdef DITHER1XBPP | 1384 #ifdef DITHER1XBPP |
1376 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1385 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1377 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" | 1386 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" |
1378 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1387 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1379 #endif | 1388 #endif |
1380 | 1389 |
1381 WRITEBGR16(%%REGSP, 8280(%5), %%REGa) | 1390 WRITEBGR16(%%REGb, 8280(%5), %%REGBP) |
1382 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1391 "pop %%"REG_BP" \n\t" |
1383 | 1392 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1384 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1393 |
1385 "r" (&c->redDither) | 1394 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1386 : "%"REG_a | 1395 "a" (&c->redDither) |
1387 ); | 1396 ); |
1388 return; | 1397 return; |
1389 case IMGFMT_YUY2: | 1398 case IMGFMT_YUY2: |
1390 asm volatile( | 1399 asm volatile( |
1391 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1400 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1392 "mov %4, %%"REG_SP" \n\t" | 1401 "mov %4, %%"REG_b" \n\t" |
1393 YSCALEYUV2PACKED1(%%REGa, %5) | 1402 "push %%"REG_BP" \n\t" |
1394 WRITEYUY2(%%REGSP, 8280(%5), %%REGa) | 1403 YSCALEYUV2PACKED1(%%REGBP, %5) |
1395 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1404 WRITEYUY2(%%REGb, 8280(%5), %%REGBP) |
1396 | 1405 "pop %%"REG_BP" \n\t" |
1397 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1406 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1398 "r" (&c->redDither) | 1407 |
1399 : "%"REG_a | 1408 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1409 "a" (&c->redDither) | |
1400 ); | 1410 ); |
1401 return; | 1411 return; |
1402 } | 1412 } |
1403 } | 1413 } |
1404 else | 1414 else |
1405 { | 1415 { |
1406 switch(dstFormat) | 1416 switch(dstFormat) |
1407 { | 1417 { |
1408 case IMGFMT_BGR32: | 1418 case IMGFMT_BGR32: |
1409 asm volatile( | 1419 asm volatile( |
1410 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1420 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1411 "mov %4, %%"REG_SP" \n\t" | 1421 "mov %4, %%"REG_b" \n\t" |
1412 YSCALEYUV2RGB1b(%%REGa, %5) | 1422 "push %%"REG_BP" \n\t" |
1413 WRITEBGR32(%%REGSP, 8280(%5), %%REGa) | 1423 YSCALEYUV2RGB1b(%%REGBP, %5) |
1414 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1424 WRITEBGR32(%%REGb, 8280(%5), %%REGBP) |
1415 | 1425 "pop %%"REG_BP" \n\t" |
1416 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1426 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1417 "r" (&c->redDither) | 1427 |
1418 : "%"REG_a | 1428 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1429 "a" (&c->redDither) | |
1419 ); | 1430 ); |
1420 return; | 1431 return; |
1421 case IMGFMT_BGR24: | 1432 case IMGFMT_BGR24: |
1422 asm volatile( | 1433 asm volatile( |
1423 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1434 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1424 "mov %4, %%"REG_SP" \n\t" | 1435 "mov %4, %%"REG_b" \n\t" |
1425 YSCALEYUV2RGB1b(%%REGa, %5) | 1436 "push %%"REG_BP" \n\t" |
1426 WRITEBGR24(%%REGSP, 8280(%5), %%REGa) | 1437 YSCALEYUV2RGB1b(%%REGBP, %5) |
1427 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1438 WRITEBGR24(%%REGb, 8280(%5), %%REGBP) |
1428 | 1439 "pop %%"REG_BP" \n\t" |
1429 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1440 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1430 "r" (&c->redDither) | 1441 |
1431 : "%"REG_a | 1442 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1443 "a" (&c->redDither) | |
1432 ); | 1444 ); |
1433 return; | 1445 return; |
1434 case IMGFMT_BGR15: | 1446 case IMGFMT_BGR15: |
1435 asm volatile( | 1447 asm volatile( |
1436 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1448 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1437 "mov %4, %%"REG_SP" \n\t" | 1449 "mov %4, %%"REG_b" \n\t" |
1438 YSCALEYUV2RGB1b(%%REGa, %5) | 1450 "push %%"REG_BP" \n\t" |
1451 YSCALEYUV2RGB1b(%%REGBP, %5) | |
1439 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1452 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1440 #ifdef DITHER1XBPP | 1453 #ifdef DITHER1XBPP |
1441 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1454 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1442 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" | 1455 "paddusb "MANGLE(g5Dither)", %%mm4\n\t" |
1443 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1456 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1444 #endif | 1457 #endif |
1445 WRITEBGR15(%%REGSP, 8280(%5), %%REGa) | 1458 WRITEBGR15(%%REGb, 8280(%5), %%REGBP) |
1446 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1459 "pop %%"REG_BP" \n\t" |
1447 | 1460 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1448 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1461 |
1449 "r" (&c->redDither) | 1462 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1450 : "%"REG_a | 1463 "a" (&c->redDither) |
1451 ); | 1464 ); |
1452 return; | 1465 return; |
1453 case IMGFMT_BGR16: | 1466 case IMGFMT_BGR16: |
1454 asm volatile( | 1467 asm volatile( |
1455 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1468 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1456 "mov %4, %%"REG_SP" \n\t" | 1469 "mov %4, %%"REG_b" \n\t" |
1457 YSCALEYUV2RGB1b(%%REGa, %5) | 1470 "push %%"REG_BP" \n\t" |
1471 YSCALEYUV2RGB1b(%%REGBP, %5) | |
1458 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ | 1472 /* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */ |
1459 #ifdef DITHER1XBPP | 1473 #ifdef DITHER1XBPP |
1460 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" | 1474 "paddusb "MANGLE(b5Dither)", %%mm2\n\t" |
1461 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" | 1475 "paddusb "MANGLE(g6Dither)", %%mm4\n\t" |
1462 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" | 1476 "paddusb "MANGLE(r5Dither)", %%mm5\n\t" |
1463 #endif | 1477 #endif |
1464 | 1478 |
1465 WRITEBGR16(%%REGSP, 8280(%5), %%REGa) | 1479 WRITEBGR16(%%REGb, 8280(%5), %%REGBP) |
1466 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1480 "pop %%"REG_BP" \n\t" |
1467 | 1481 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1468 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1482 |
1469 "r" (&c->redDither) | 1483 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1470 : "%"REG_a | 1484 "a" (&c->redDither) |
1471 ); | 1485 ); |
1472 return; | 1486 return; |
1473 case IMGFMT_YUY2: | 1487 case IMGFMT_YUY2: |
1474 asm volatile( | 1488 asm volatile( |
1475 "mov %%"REG_SP", "ESP_OFFSET"(%5) \n\t" | 1489 "mov %%"REG_b", "ESP_OFFSET"(%5) \n\t" |
1476 "mov %4, %%"REG_SP" \n\t" | 1490 "mov %4, %%"REG_b" \n\t" |
1477 YSCALEYUV2PACKED1b(%%REGa, %5) | 1491 "push %%"REG_BP" \n\t" |
1478 WRITEYUY2(%%REGSP, 8280(%5), %%REGa) | 1492 YSCALEYUV2PACKED1b(%%REGBP, %5) |
1479 "mov "ESP_OFFSET"(%5), %%"REG_SP" \n\t" | 1493 WRITEYUY2(%%REGb, 8280(%5), %%REGBP) |
1480 | 1494 "pop %%"REG_BP" \n\t" |
1481 :: "r" (buf0), "r" (buf1), "r" (uvbuf0), "r" (uvbuf1), "m" (dest), | 1495 "mov "ESP_OFFSET"(%5), %%"REG_b" \n\t" |
1482 "r" (&c->redDither) | 1496 |
1483 : "%"REG_a | 1497 :: "c" (buf0), "d" (buf1), "S" (uvbuf0), "D" (uvbuf1), "m" (dest), |
1498 "a" (&c->redDither) | |
1484 ); | 1499 ); |
1485 return; | 1500 return; |
1486 } | 1501 } |
1487 } | 1502 } |
1488 #endif | 1503 #endif |