Originally committed as revision 5493 to svn://svn.ffmpeg.org/ffmpeg/trunk
Unified · Split
| @@ -1311,9 +1311,9 @@ POWERPC_PERF_STOP_COUNT(altivec_put_no_rnd_pixels16_xy2_num, 1); · 1310 unmodified lines | |||
| 1311 | int hadamard8_diff8x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h){ | 1311 | int hadamard8_diff8x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h){ |
| 1312 | POWERPC_PERF_DECLARE(altivec_hadamard8_diff8x8_num, 1); | 1312 | POWERPC_PERF_DECLARE(altivec_hadamard8_diff8x8_num, 1); |
| 1313 | int sum; | 1313 | int sum; |
| 1314 | POWERPC_PERF_START_COUNT(altivec_hadamard8_diff8x8_num, 1); | ||
| 1315 | register const_vector unsigned char vzero = (const_vector unsigned char)vec_splat_u8(0); | 1314 | register const_vector unsigned char vzero = (const_vector unsigned char)vec_splat_u8(0); |
| 1316 | register vector signed short temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; | 1315 | register vector signed short temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; |
| 1316 | POWERPC_PERF_START_COUNT(altivec_hadamard8_diff8x8_num, 1); | ||
| 1317 | { | 1317 | { |
| 1318 | register const_vector signed short vprod1 = (const_vector signed short)AVV( 1,-1, 1,-1, 1,-1, 1,-1); | 1318 | register const_vector signed short vprod1 = (const_vector signed short)AVV( 1,-1, 1,-1, 1,-1, 1,-1); |
| 1319 | register const_vector signed short vprod2 = (const_vector signed short)AVV( 1, 1,-1,-1, 1, 1,-1,-1); | 1319 | register const_vector signed short vprod2 = (const_vector signed short)AVV( 1, 1,-1,-1, 1, 1,-1,-1); |
| @@ -1338,6 +1338,8 @@ POWERPC_PERF_START_COUNT(altivec_hadamard8_diff8x8_num, 1); · 18 unmodified lines | |||
| 1338 | { \ | 1338 | { \ |
| 1339 | register vector unsigned char src1, src2, srcO; \ | 1339 | register vector unsigned char src1, src2, srcO; \ |
| 1340 | register vector unsigned char dst1, dst2, dstO; \ | 1340 | register vector unsigned char dst1, dst2, dstO; \ |
| 1341 | register vector signed short srcV, dstV; \ | ||
| 1342 | register vector signed short but0, but1, but2, op1, op2, op3; \ | ||
| 1341 | src1 = vec_ld(stride * i, src); \ | 1343 | src1 = vec_ld(stride * i, src); \ |
| 1342 | if ((((stride * i) + (unsigned long)src) & 0x0000000F) > 8) \ | 1344 | if ((((stride * i) + (unsigned long)src) & 0x0000000F) > 8) \ |
| 1343 | src2 = vec_ld((stride * i) + 16, src); \ | 1345 | src2 = vec_ld((stride * i) + 16, src); \ |
| @@ -1348,17 +1350,19 @@ POWERPC_PERF_START_COUNT(altivec_hadamard8_diff8x8_num, 1); · 4 unmodified lines | |||
| 1348 | dstO = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ | 1350 | dstO = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ |
| 1349 | /* promote the unsigned chars to signed shorts */ \ | 1351 | /* promote the unsigned chars to signed shorts */ \ |
| 1350 | /* we're in the 8x8 function, we only care for the first 8 */ \ | 1352 | /* we're in the 8x8 function, we only care for the first 8 */ \ |
| 1351 | register vector signed short srcV = \ | 1353 | srcV = \ |
| 1352 | (vector signed short)vec_mergeh((vector signed char)vzero, (vector signed char)srcO); \ | 1354 | (vector signed short)vec_mergeh((vector signed char)vzero, \ |
| 1353 | register vector signed short dstV = \ | 1355 | (vector signed char)srcO); \ |
| 1354 | (vector signed short)vec_mergeh((vector signed char)vzero, (vector signed char)dstO); \ | 1356 | dstV = \ |
| 1357 | (vector signed short)vec_mergeh((vector signed char)vzero, \ | ||
| 1358 | (vector signed char)dstO); \ | ||
| 1355 | /* substractions inside the first butterfly */ \ | 1359 | /* substractions inside the first butterfly */ \ |
| 1356 | register vector signed short but0 = vec_sub(srcV, dstV); \ | 1360 | but0 = vec_sub(srcV, dstV); \ |
| 1357 | register vector signed short op1 = vec_perm(but0, but0, perm1); \ | 1361 | op1 = vec_perm(but0, but0, perm1); \ |
| 1358 | register vector signed short but1 = vec_mladd(but0, vprod1, op1); \ | 1362 | but1 = vec_mladd(but0, vprod1, op1); \ |
| 1359 | register vector signed short op2 = vec_perm(but1, but1, perm2); \ | 1363 | op2 = vec_perm(but1, but1, perm2); \ |
| 1360 | register vector signed short but2 = vec_mladd(but1, vprod2, op2); \ | 1364 | but2 = vec_mladd(but1, vprod2, op2); \ |
| 1361 | register vector signed short op3 = vec_perm(but2, but2, perm3); \ | 1365 | op3 = vec_perm(but2, but2, perm3); \ |
| 1362 | res = vec_mladd(but2, vprod3, op3); \ | 1366 | res = vec_mladd(but2, vprod3, op3); \ |
| 1363 | } | 1367 | } |
| 1364 | ONEITERBUTTERFLY(0, temp0); | 1368 | ONEITERBUTTERFLY(0, temp0); |
| @@ -1481,37 +1485,63 @@ static int hadamard8_diff16x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, · 116 unmodified lines | |||
| 1481 | 1485 | ||
| 1482 | #define ONEITERBUTTERFLY(i, res1, res2) \ | 1486 | #define ONEITERBUTTERFLY(i, res1, res2) \ |
| 1483 | { \ | 1487 | { \ |
| 1484 | register vector unsigned char src1 REG_v(v22), src2 REG_v(v23); \ | 1488 | register vector unsigned char src1 REG_v(v22), \ |
| 1485 | register vector unsigned char dst1 REG_v(v24), dst2 REG_v(v25); \ | 1489 | src2 REG_v(v23), \ |
| 1490 | dst1 REG_v(v24), \ | ||
| 1491 | dst2 REG_v(v25), \ | ||
| 1492 | srcO REG_v(v22), \ | ||
| 1493 | dstO REG_v(v23); \ | ||
| 1494 | \ | ||
| 1495 | register vector signed short srcV REG_v(v24), \ | ||
| 1496 | dstV REG_v(v25), \ | ||
| 1497 | srcW REG_v(v26), \ | ||
| 1498 | dstW REG_v(v27), \ | ||
| 1499 | but0 REG_v(v28), \ | ||
| 1500 | but0S REG_v(v29), \ | ||
| 1501 | op1 REG_v(v30), \ | ||
| 1502 | but1 REG_v(v22), \ | ||
| 1503 | op1S REG_v(v23), \ | ||
| 1504 | but1S REG_v(v24), \ | ||
| 1505 | op2 REG_v(v25), \ | ||
| 1506 | but2 REG_v(v26), \ | ||
| 1507 | op2S REG_v(v27), \ | ||
| 1508 | but2S REG_v(v28), \ | ||
| 1509 | op3 REG_v(v29), \ | ||
| 1510 | op3S REG_v(v30); \ | ||
| 1511 | \ | ||
| 1486 | src1 = vec_ld(stride * i, src); \ | 1512 | src1 = vec_ld(stride * i, src); \ |
| 1487 | src2 = vec_ld((stride * i) + 16, src); \ | 1513 | src2 = vec_ld((stride * i) + 16, src); \ |
| 1488 | register vector unsigned char srcO REG_v(v22) = vec_perm(src1, src2, vec_lvsl(stride * i, src)); \ | 1514 | srcO = vec_perm(src1, src2, vec_lvsl(stride * i, src)); \ |
| 1489 | dst1 = vec_ld(stride * i, dst); \ | 1515 | dst1 = vec_ld(stride * i, dst); \ |
| 1490 | dst2 = vec_ld((stride * i) + 16, dst); \ | 1516 | dst2 = vec_ld((stride * i) + 16, dst); \ |
| 1491 | register vector unsigned char dstO REG_v(v23) = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ | 1517 | dstO = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ |
| 1492 | /* promote the unsigned chars to signed shorts */ \ | 1518 | /* promote the unsigned chars to signed shorts */ \ |
| 1493 | register vector signed short srcV REG_v(v24) = \ | 1519 | srcV = \ |
| 1494 | (vector signed short)vec_mergeh((vector signed char)vzero, (vector signed char)srcO); \ | 1520 | (vector signed short)vec_mergeh((vector signed char)vzero, \ |
| 1495 | register vector signed short dstV REG_v(v25) = \ | 1521 | (vector signed char)srcO); \ |
| 1496 | (vector signed short)vec_mergeh((vector signed char)vzero, (vector signed char)dstO); \ | 1522 | dstV = \ |
| 1497 | register vector signed short srcW REG_v(v26) = \ | 1523 | (vector signed short)vec_mergeh((vector signed char)vzero, \ |
| 1498 | (vector signed short)vec_mergel((vector signed char)vzero, (vector signed char)srcO); \ | 1524 | (vector signed char)dstO); \ |
| 1499 | register vector signed short dstW REG_v(v27) = \ | 1525 | srcW = \ |
| 1500 | (vector signed short)vec_mergel((vector signed char)vzero, (vector signed char)dstO); \ | 1526 | (vector signed short)vec_mergel((vector signed char)vzero, \ |
| 1527 | (vector signed char)srcO); \ | ||
| 1528 | dstW = \ | ||
| 1529 | (vector signed short)vec_mergel((vector signed char)vzero, \ | ||
| 1530 | (vector signed char)dstO); \ | ||
| 1501 | /* substractions inside the first butterfly */ \ | 1531 | /* substractions inside the first butterfly */ \ |
| 1502 | register vector signed short but0 REG_v(v28) = vec_sub(srcV, dstV); \ | 1532 | but0 = vec_sub(srcV, dstV); \ |
| 1503 | register vector signed short but0S REG_v(v29) = vec_sub(srcW, dstW); \ | 1533 | but0S = vec_sub(srcW, dstW); \ |
| 1504 | register vector signed short op1 REG_v(v30) = vec_perm(but0, but0, perm1); \ | 1534 | op1 = vec_perm(but0, but0, perm1); \ |
| 1505 | register vector signed short but1 REG_v(v22) = vec_mladd(but0, vprod1, op1); \ | 1535 | but1 = vec_mladd(but0, vprod1, op1); \ |
| 1506 | register vector signed short op1S REG_v(v23) = vec_perm(but0S, but0S, perm1); \ | 1536 | op1S = vec_perm(but0S, but0S, perm1); \ |
| 1507 | register vector signed short but1S REG_v(v24) = vec_mladd(but0S, vprod1, op1S); \ | 1537 | but1S = vec_mladd(but0S, vprod1, op1S); \ |
| 1508 | register vector signed short op2 REG_v(v25) = vec_perm(but1, but1, perm2); \ | 1538 | op2 = vec_perm(but1, but1, perm2); \ |
| 1509 | register vector signed short but2 REG_v(v26) = vec_mladd(but1, vprod2, op2); \ | 1539 | but2 = vec_mladd(but1, vprod2, op2); \ |
| 1510 | register vector signed short op2S REG_v(v27) = vec_perm(but1S, but1S, perm2); \ | 1540 | op2S = vec_perm(but1S, but1S, perm2); \ |
| 1511 | register vector signed short but2S REG_v(v28) = vec_mladd(but1S, vprod2, op2S); \ | 1541 | but2S = vec_mladd(but1S, vprod2, op2S); \ |
| 1512 | register vector signed short op3 REG_v(v29) = vec_perm(but2, but2, perm3); \ | 1542 | op3 = vec_perm(but2, but2, perm3); \ |
| 1513 | res1 = vec_mladd(but2, vprod3, op3); \ | 1543 | res1 = vec_mladd(but2, vprod3, op3); \ |
| 1514 | register vector signed short op3S REG_v(v30) = vec_perm(but2S, but2S, perm3); \ | 1544 | op3S = vec_perm(but2S, but2S, perm3); \ |
| 1515 | res2 = vec_mladd(but2S, vprod3, op3S); \ | 1545 | res2 = vec_mladd(but2S, vprod3, op3S); \ |
| 1516 | } | 1546 | } |
| 1517 | ONEITERBUTTERFLY(0, temp0, temp0S); | 1547 | ONEITERBUTTERFLY(0, temp0, temp0S); |
| @@ -1526,6 +1556,12 @@ static int hadamard8_diff16x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, · 8 unmodified lines | |||
| 1526 | #undef ONEITERBUTTERFLY | 1556 | #undef ONEITERBUTTERFLY |
| 1527 | { | 1557 | { |
| 1528 | register vector signed int vsum; | 1558 | register vector signed int vsum; |
| 1559 | register vector signed short line0S, line1S, line2S, line3S, line4S, | ||
| 1560 | line5S, line6S, line7S, line0BS,line2BS, | ||
| 1561 | line1BS,line3BS,line4BS,line6BS,line5BS, | ||
| 1562 | line7BS,line0CS,line4CS,line1CS,line5CS, | ||
| 1563 | line2CS,line6CS,line3CS,line7CS; | ||
| 1564 | |||
| 1529 | register vector signed short line0 = vec_add(temp0, temp1); | 1565 | register vector signed short line0 = vec_add(temp0, temp1); |
| 1530 | register vector signed short line1 = vec_sub(temp0, temp1); | 1566 | register vector signed short line1 = vec_sub(temp0, temp1); |
| 1531 | register vector signed short line2 = vec_add(temp2, temp3); | 1567 | register vector signed short line2 = vec_add(temp2, temp3); |
| @@ -1562,32 +1598,32 @@ static int hadamard8_diff16x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, · 30 unmodified lines | |||
| 1562 | vsum = vec_sum4s(vec_abs(line6C), vsum); | 1598 | vsum = vec_sum4s(vec_abs(line6C), vsum); |
| 1563 | vsum = vec_sum4s(vec_abs(line7C), vsum); | 1599 | vsum = vec_sum4s(vec_abs(line7C), vsum); |
| 1564 | 1600 | ||
| 1565 | register vector signed short line0S = vec_add(temp0S, temp1S); | 1601 | line0S = vec_add(temp0S, temp1S); |
| 1566 | register vector signed short line1S = vec_sub(temp0S, temp1S); | 1602 | line1S = vec_sub(temp0S, temp1S); |
| 1567 | register vector signed short line2S = vec_add(temp2S, temp3S); | 1603 | line2S = vec_add(temp2S, temp3S); |
| 1568 | register vector signed short line3S = vec_sub(temp2S, temp3S); | 1604 | line3S = vec_sub(temp2S, temp3S); |
| 1569 | register vector signed short line4S = vec_add(temp4S, temp5S); | 1605 | line4S = vec_add(temp4S, temp5S); |
| 1570 | register vector signed short line5S = vec_sub(temp4S, temp5S); | 1606 | line5S = vec_sub(temp4S, temp5S); |
| 1571 | register vector signed short line6S = vec_add(temp6S, temp7S); | 1607 | line6S = vec_add(temp6S, temp7S); |
| 1572 | register vector signed short line7S = vec_sub(temp6S, temp7S); | 1608 | line7S = vec_sub(temp6S, temp7S); |
| 1573 | 1609 | ||
| 1574 | register vector signed short line0BS = vec_add(line0S, line2S); | 1610 | line0BS = vec_add(line0S, line2S); |
| 1575 | register vector signed short line2BS = vec_sub(line0S, line2S); | 1611 | line2BS = vec_sub(line0S, line2S); |
| 1576 | register vector signed short line1BS = vec_add(line1S, line3S); | 1612 | line1BS = vec_add(line1S, line3S); |
| 1577 | register vector signed short line3BS = vec_sub(line1S, line3S); | 1613 | line3BS = vec_sub(line1S, line3S); |
| 1578 | register vector signed short line4BS = vec_add(line4S, line6S); | 1614 | line4BS = vec_add(line4S, line6S); |
| 1579 | register vector signed short line6BS = vec_sub(line4S, line6S); | 1615 | line6BS = vec_sub(line4S, line6S); |
| 1580 | register vector signed short line5BS = vec_add(line5S, line7S); | 1616 | line5BS = vec_add(line5S, line7S); |
| 1581 | register vector signed short line7BS = vec_sub(line5S, line7S); | 1617 | line7BS = vec_sub(line5S, line7S); |
| 1582 | 1618 | ||
| 1583 | register vector signed short line0CS = vec_add(line0BS, line4BS); | 1619 | line0CS = vec_add(line0BS, line4BS); |
| 1584 | register vector signed short line4CS = vec_sub(line0BS, line4BS); | 1620 | line4CS = vec_sub(line0BS, line4BS); |
| 1585 | register vector signed short line1CS = vec_add(line1BS, line5BS); | 1621 | line1CS = vec_add(line1BS, line5BS); |
| 1586 | register vector signed short line5CS = vec_sub(line1BS, line5BS); | 1622 | line5CS = vec_sub(line1BS, line5BS); |
| 1587 | register vector signed short line2CS = vec_add(line2BS, line6BS); | 1623 | line2CS = vec_add(line2BS, line6BS); |
| 1588 | register vector signed short line6CS = vec_sub(line2BS, line6BS); | 1624 | line6CS = vec_sub(line2BS, line6BS); |
| 1589 | register vector signed short line3CS = vec_add(line3BS, line7BS); | 1625 | line3CS = vec_add(line3BS, line7BS); |
| 1590 | register vector signed short line7CS = vec_sub(line3BS, line7BS); | 1626 | line7CS = vec_sub(line3BS, line7BS); |
| 1591 | 1627 | ||
| 1592 | vsum = vec_sum4s(vec_abs(line0CS), vsum); | 1628 | vsum = vec_sum4s(vec_abs(line0CS), vsum); |
| 1593 | vsum = vec_sum4s(vec_abs(line1CS), vsum); | 1629 | vsum = vec_sum4s(vec_abs(line1CS), vsum); |
| @@ -19,13 +19,13 @@ · 18 unmodified lines | |||
| 19 | /* this code assume that stride % 16 == 0 */ | 19 | /* this code assume that stride % 16 == 0 */ |
| 20 | void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, int h, int x, int y) { | 20 | void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, int h, int x, int y) { |
| 21 | POWERPC_PERF_DECLARE(PREFIX_h264_chroma_mc8_num, 1); | 21 | POWERPC_PERF_DECLARE(PREFIX_h264_chroma_mc8_num, 1); |
| 22 | POWERPC_PERF_START_COUNT(PREFIX_h264_chroma_mc8_num, 1); | 22 | signed int ABCD[4] __attribute__((aligned(16))) = |
| 23 | signed int ABCD[4] __attribute__((aligned(16))); | 23 | {((8 - x) * (8 - y)), |
| 24 | ((x) * (8 - y)), | ||
| 25 | ((8 - x) * (y)), | ||
| 26 | ((x) * (y))}; | ||
| 24 | register int i; | 27 | register int i; |
| 25 | ABCD[0] = ((8 - x) * (8 - y)); | 28 | vector unsigned char fperm; |
| 26 | ABCD[1] = ((x) * (8 - y)); | ||
| 27 | ABCD[2] = ((8 - x) * (y)); | ||
| 28 | ABCD[3] = ((x) * (y)); | ||
| 29 | const vector signed int vABCD = vec_ld(0, ABCD); | 29 | const vector signed int vABCD = vec_ld(0, ABCD); |
| 30 | const vector signed short vA = vec_splat((vector signed short)vABCD, 1); | 30 | const vector signed short vA = vec_splat((vector signed short)vABCD, 1); |
| 31 | const vector signed short vB = vec_splat((vector signed short)vABCD, 3); | 31 | const vector signed short vB = vec_splat((vector signed short)vABCD, 3); |
| @@ -34,55 +34,61 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, in · 2 unmodified lines | |||
| 34 | const vector signed int vzero = vec_splat_s32(0); | 34 | const vector signed int vzero = vec_splat_s32(0); |
| 35 | const vector signed short v32ss = vec_sl(vec_splat_s16(1),vec_splat_u16(5)); | 35 | const vector signed short v32ss = vec_sl(vec_splat_s16(1),vec_splat_u16(5)); |
| 36 | const vector unsigned short v6us = vec_splat_u16(6); | 36 | const vector unsigned short v6us = vec_splat_u16(6); |
| 37 | register int loadSecond = (((unsigned long)src) % 16) <= 7 ? 0 : 1; | ||
| 38 | register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0; | ||
| 37 | 39 | ||
| 38 | vector unsigned char fperm; | 40 | vector unsigned char vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1; |
| 41 | vector unsigned char vsrc0uc, vsrc1uc; | ||
| 42 | vector signed short vsrc0ssH, vsrc1ssH; | ||
| 43 | vector unsigned char vsrcCuc, vsrc2uc, vsrc3uc; | ||
| 44 | vector signed short vsrc2ssH, vsrc3ssH, psum; | ||
| 45 | vector unsigned char vdst, ppsum, vfdst, fsum; | ||
| 46 | |||
| 47 | POWERPC_PERF_START_COUNT(PREFIX_h264_chroma_mc8_num, 1); | ||
| 39 | 48 | ||
| 40 | if (((unsigned long)dst) % 16 == 0) { | 49 | if (((unsigned long)dst) % 16 == 0) { |
| 41 | fperm = (vector unsigned char)AVV(0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, | 50 | fperm = (vector unsigned char)AVV(0x10, 0x11, 0x12, 0x13, |
| 42 | 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F); | 51 | 0x14, 0x15, 0x16, 0x17, |
| 52 | 0x08, 0x09, 0x0A, 0x0B, | ||
| 53 | 0x0C, 0x0D, 0x0E, 0x0F); | ||
| 43 | } else { | 54 | } else { |
| 44 | fperm = (vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | 55 | fperm = (vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, |
| 45 | 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F); | 56 | 0x04, 0x05, 0x06, 0x07, |
| 57 | 0x18, 0x19, 0x1A, 0x1B, | ||
| 58 | 0x1C, 0x1D, 0x1E, 0x1F); | ||
| 46 | } | 59 | } |
| 47 | 60 | ||
| 48 | register int loadSecond = (((unsigned long)src) % 16) <= 7 ? 0 : 1; | ||
| 49 | register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0; | ||
| 50 | |||
| 51 | vector unsigned char vsrcAuc; | ||
| 52 | vector unsigned char vsrcBuc; | ||
| 53 | vector unsigned char vsrcperm0; | ||
| 54 | vector unsigned char vsrcperm1; | ||
| 55 | vsrcAuc = vec_ld(0, src); | 61 | vsrcAuc = vec_ld(0, src); |
| 62 | |||
| 56 | if (loadSecond) | 63 | if (loadSecond) |
| 57 | vsrcBuc = vec_ld(16, src); | 64 | vsrcBuc = vec_ld(16, src); |
| 58 | vsrcperm0 = vec_lvsl(0, src); | 65 | vsrcperm0 = vec_lvsl(0, src); |
| 59 | vsrcperm1 = vec_lvsl(1, src); | 66 | vsrcperm1 = vec_lvsl(1, src); |
| 60 | 67 | ||
| 61 | vector unsigned char vsrc0uc; | ||
| 62 | vector unsigned char vsrc1uc; | ||
| 63 | vsrc0uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm0); | 68 | vsrc0uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm0); |
| 64 | if (reallyBadAlign) | 69 | if (reallyBadAlign) |
| 65 | vsrc1uc = vsrcBuc; | 70 | vsrc1uc = vsrcBuc; |
| 66 | else | 71 | else |
| 67 | vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1); | 72 | vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1); |
| 68 | 73 | ||
| 69 | vector signed short vsrc0ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc0uc); | 74 | vsrc0ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, |
| 70 | vector signed short vsrc1ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc1uc); | 75 | (vector unsigned char)vsrc0uc); |
| 76 | vsrc1ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, | ||
| 77 | (vector unsigned char)vsrc1uc); | ||
| 71 | 78 | ||
| 72 | if (!loadSecond) {// -> !reallyBadAlign | 79 | if (!loadSecond) {// -> !reallyBadAlign |
| 73 | for (i = 0 ; i < h ; i++) { | 80 | for (i = 0 ; i < h ; i++) { |
| 74 | vector unsigned char vsrcCuc; | 81 | |
| 82 | |||
| 75 | vsrcCuc = vec_ld(stride + 0, src); | 83 | vsrcCuc = vec_ld(stride + 0, src); |
| 76 | 84 | ||
| 77 | vector unsigned char vsrc2uc; | ||
| 78 | vector unsigned char vsrc3uc; | ||
| 79 | vsrc2uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm0); | 85 | vsrc2uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm0); |
| 80 | vsrc3uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm1); | 86 | vsrc3uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm1); |
| 81 | 87 | ||
| 82 | vector signed short vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc2uc); | 88 | vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, |
| 83 | vector signed short vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc3uc); | 89 | (vector unsigned char)vsrc2uc); |
| 84 | 90 | vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, | |
| 85 | vector signed short psum; | 91 | (vector unsigned char)vsrc3uc); |
| 86 | 92 | ||
| 87 | psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); | 93 | psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); |
| 88 | psum = vec_mladd(vB, vsrc1ssH, psum); | 94 | psum = vec_mladd(vB, vsrc1ssH, psum); |
| @@ -91,11 +97,9 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, in · 2 unmodified lines | |||
| 91 | psum = vec_add(v32ss, psum); | 97 | psum = vec_add(v32ss, psum); |
| 92 | psum = vec_sra(psum, v6us); | 98 | psum = vec_sra(psum, v6us); |
| 93 | 99 | ||
| 94 | vector unsigned char vdst = vec_ld(0, dst); | 100 | vdst = vec_ld(0, dst); |
| 95 | vector unsigned char ppsum = (vector unsigned char)vec_packsu(psum, psum); | 101 | ppsum = (vector unsigned char)vec_packsu(psum, psum); |
| 96 | 102 | vfdst = vec_perm(vdst, ppsum, fperm); | |
| 97 | vector unsigned char vfdst = vec_perm(vdst, ppsum, fperm); | ||
| 98 | vector unsigned char fsum; | ||
| 99 | 103 | ||
| 100 | OP_U8_ALTIVEC(fsum, vfdst, vdst); | 104 | OP_U8_ALTIVEC(fsum, vfdst, vdst); |
| 101 | 105 | ||
| @@ -108,24 +112,21 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, in · 6 unmodified lines | |||
| 108 | src += stride; | 112 | src += stride; |
| 109 | } | 113 | } |
| 110 | } else { | 114 | } else { |
| 111 | for (i = 0 ; i < h ; i++) { | ||
| 112 | vector unsigned char vsrcCuc; | ||
| 113 | vector unsigned char vsrcDuc; | 115 | vector unsigned char vsrcDuc; |
| 116 | for (i = 0 ; i < h ; i++) { | ||
| 114 | vsrcCuc = vec_ld(stride + 0, src); | 117 | vsrcCuc = vec_ld(stride + 0, src); |
| 115 | vsrcDuc = vec_ld(stride + 16, src); | 118 | vsrcDuc = vec_ld(stride + 16, src); |
| 116 | 119 | ||
| 117 | vector unsigned char vsrc2uc; | ||
| 118 | vector unsigned char vsrc3uc; | ||
| 119 | vsrc2uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm0); | 120 | vsrc2uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm0); |
| 120 | if (reallyBadAlign) | 121 | if (reallyBadAlign) |
| 121 | vsrc3uc = vsrcDuc; | 122 | vsrc3uc = vsrcDuc; |
| 122 | else | 123 | else |
| 123 | vsrc3uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm1); | 124 | vsrc3uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm1); |
| 124 | 125 | ||
| 125 | vector signed short vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc2uc); | 126 | vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, |
| 126 | vector signed short vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, (vector unsigned char)vsrc3uc); | 127 | (vector unsigned char)vsrc2uc); |
| 127 | 128 | vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, | |
| 128 | vector signed short psum; | 129 | (vector unsigned char)vsrc3uc); |
| 129 | 130 | ||
| 130 | psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); | 131 | psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); |
| 131 | psum = vec_mladd(vB, vsrc1ssH, psum); | 132 | psum = vec_mladd(vB, vsrc1ssH, psum); |
| @@ -134,11 +135,9 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, in · 2 unmodified lines | |||
| 134 | psum = vec_add(v32ss, psum); | 135 | psum = vec_add(v32ss, psum); |
| 135 | psum = vec_sr(psum, v6us); | 136 | psum = vec_sr(psum, v6us); |
| 136 | 137 | ||
| 137 | vector unsigned char vdst = vec_ld(0, dst); | 138 | vdst = vec_ld(0, dst); |
| 138 | vector unsigned char ppsum = (vector unsigned char)vec_pack(psum, psum); | 139 | ppsum = (vector unsigned char)vec_pack(psum, psum); |
| 139 | 140 | vfdst = vec_perm(vdst, ppsum, fperm); | |
| 140 | vector unsigned char vfdst = vec_perm(vdst, ppsum, fperm); | ||
| 141 | vector unsigned char fsum; | ||
| 142 | 141 | ||
| 143 | OP_U8_ALTIVEC(fsum, vfdst, vdst); | 142 | OP_U8_ALTIVEC(fsum, vfdst, vdst); |
| 144 | 143 | ||
| @@ -157,7 +156,6 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, in · 12 unmodified lines | |||
| 157 | /* this code assume stride % 16 == 0 */ | 156 | /* this code assume stride % 16 == 0 */ |
| 158 | static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { | 157 | static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { |
| 159 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_h_lowpass_num, 1); | 158 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_h_lowpass_num, 1); |
| 160 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1); | ||
| 161 | register int i; | 159 | register int i; |
| 162 | 160 | ||
| 163 | const vector signed int vzero = vec_splat_s32(0); | 161 | const vector signed int vzero = vec_splat_s32(0); |
| @@ -172,13 +170,30 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i · 8 unmodified lines | |||
| 172 | const vector signed short v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2)); | 170 | const vector signed short v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2)); |
| 173 | const vector signed short v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4)); | 171 | const vector signed short v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4)); |
| 174 | const vector unsigned char dstperm = vec_lvsr(0, dst); | 172 | const vector unsigned char dstperm = vec_lvsr(0, dst); |
| 175 | const vector unsigned char neg1 = (const vector unsigned char)vec_splat_s8(-1); | 173 | const vector unsigned char neg1 = |
| 176 | const vector unsigned char dstmask = vec_perm((const vector unsigned char)vzero, neg1, dstperm); | 174 | (const vector unsigned char) vec_splat_s8(-1); |
| 175 | |||
| 176 | const vector unsigned char dstmask = | ||
| 177 | vec_perm((const vector unsigned char)vzero, | ||
| 178 | neg1, dstperm); | ||
| 179 | |||
| 180 | vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; | ||
| 177 | 181 | ||
| 178 | register int align = ((((unsigned long)src) - 2) % 16); | 182 | register int align = ((((unsigned long)src) - 2) % 16); |
| 179 | 183 | ||
| 184 | vector signed short srcP0A, srcP0B, srcP1A, srcP1B, | ||
| 185 | srcP2A, srcP2B, srcP3A, srcP3B, | ||
| 186 | srcM1A, srcM1B, srcM2A, srcM2B, | ||
| 187 | sum1A, sum1B, sum2A, sum2B, sum3A, sum3B, | ||
| 188 | pp1A, pp1B, pp2A, pp2B, pp3A, pp3B, | ||
| 189 | psumA, psumB, sumA, sumB; | ||
| 190 | |||
| 191 | vector unsigned char sum, dst1, dst2, vdst, fsum, | ||
| 192 | rsum, fdst1, fdst2; | ||
| 193 | |||
| 194 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1); | ||
| 195 | |||
| 180 | for (i = 0 ; i < 16 ; i ++) { | 196 | for (i = 0 ; i < 16 ; i ++) { |
| 181 | vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; | ||
| 182 | vector unsigned char srcR1 = vec_ld(-2, src); | 197 | vector unsigned char srcR1 = vec_ld(-2, src); |
| 183 | vector unsigned char srcR2 = vec_ld(14, src); | 198 | vector unsigned char srcR2 = vec_ld(14, src); |
| 184 | 199 | ||
| @@ -237,55 +252,54 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i · 52 unmodified lines | |||
| 237 | } break; | 252 | } break; |
| 238 | } | 253 | } |
| 239 | 254 | ||
| 240 | const vector signed short srcP0A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP0); | 255 | srcP0A = vec_mergeh((vector unsigned char)vzero, srcP0); |
| 241 | const vector signed short srcP0B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP0); | 256 | srcP0B = vec_mergel((vector unsigned char)vzero, srcP0); |
| 242 | const vector signed short srcP1A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP1); | 257 | srcP1A = vec_mergeh((vector unsigned char)vzero, srcP1); |
| 243 | const vector signed short srcP1B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP1); | 258 | srcP1B = vec_mergel((vector unsigned char)vzero, srcP1); |
| 244 | 259 | ||
| 245 | const vector signed short srcP2A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP2); | 260 | srcP2A = vec_mergeh((vector unsigned char)vzero, srcP2); |
| 246 | const vector signed short srcP2B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP2); | 261 | srcP2B = vec_mergel((vector unsigned char)vzero, srcP2); |
| 247 | const vector signed short srcP3A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP3); | 262 | srcP3A = vec_mergeh((vector unsigned char)vzero, srcP3); |
| 248 | const vector signed short srcP3B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP3); | 263 | srcP3B = vec_mergel((vector unsigned char)vzero, srcP3); |
| 249 | 264 | ||
| 250 | const vector signed short srcM1A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM1); | 265 | srcM1A = vec_mergeh((vector unsigned char)vzero, srcM1); |
| 251 | const vector signed short srcM1B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM1); | 266 | srcM1B = vec_mergel((vector unsigned char)vzero, srcM1); |
| 252 | const vector signed short srcM2A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM2); | 267 | srcM2A = vec_mergeh((vector unsigned char)vzero, srcM2); |
| 253 | const vector signed short srcM2B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM2); | 268 | srcM2B = vec_mergel((vector unsigned char)vzero, srcM2); |
| 254 | 269 | ||
| 255 | const vector signed short sum1A = vec_adds(srcP0A, srcP1A); | 270 | sum1A = vec_adds(srcP0A, srcP1A); |
| 256 | const vector signed short sum1B = vec_adds(srcP0B, srcP1B); | 271 | sum1B = vec_adds(srcP0B, srcP1B); |
| 257 | const vector signed short sum2A = vec_adds(srcM1A, srcP2A); | 272 | sum2A = vec_adds(srcM1A, srcP2A); |
| 258 | const vector signed short sum2B = vec_adds(srcM1B, srcP2B); | 273 | sum2B = vec_adds(srcM1B, srcP2B); |
| 259 | const vector signed short sum3A = vec_adds(srcM2A, srcP3A); | 274 | sum3A = vec_adds(srcM2A, srcP3A); |
| 260 | const vector signed short sum3B = vec_adds(srcM2B, srcP3B); | 275 | sum3B = vec_adds(srcM2B, srcP3B); |
| 261 | 276 | ||
| 262 | const vector signed short pp1A = vec_mladd(sum1A, v20ss, v16ss); | 277 | pp1A = vec_mladd(sum1A, v20ss, v16ss); |
| 263 | const vector signed short pp1B = vec_mladd(sum1B, v20ss, v16ss); | 278 | pp1B = vec_mladd(sum1B, v20ss, v16ss); |
| 264 | 279 | ||
| 265 | const vector signed short pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); | 280 | pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); |
| 266 | const vector signed short pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); | 281 | pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); |
| 267 | 282 | ||
| 268 | const vector signed short pp3A = vec_add(sum3A, pp1A); | 283 | pp3A = vec_add(sum3A, pp1A); |
| 269 | const vector signed short pp3B = vec_add(sum3B, pp1B); | 284 | pp3B = vec_add(sum3B, pp1B); |
| 270 | 285 | ||
| 271 | const vector signed short psumA = vec_sub(pp3A, pp2A); | 286 | psumA = vec_sub(pp3A, pp2A); |
| 272 | const vector signed short psumB = vec_sub(pp3B, pp2B); | 287 | psumB = vec_sub(pp3B, pp2B); |
| 273 | 288 | ||
| 274 | const vector signed short sumA = vec_sra(psumA, v5us); | 289 | sumA = vec_sra(psumA, v5us); |
| 275 | const vector signed short sumB = vec_sra(psumB, v5us); | 290 | sumB = vec_sra(psumB, v5us); |
| 276 | 291 | ||
| 277 | const vector unsigned char sum = vec_packsu(sumA, sumB); | 292 | sum = vec_packsu(sumA, sumB); |
| 278 | 293 | ||
| 279 | const vector unsigned char dst1 = vec_ld(0, dst); | 294 | dst1 = vec_ld(0, dst); |
| 280 | const vector unsigned char dst2 = vec_ld(16, dst); | 295 | dst2 = vec_ld(16, dst); |
| 281 | const vector unsigned char vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); | 296 | vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); |
| 282 | 297 | ||
| 283 | vector unsigned char fsum; | ||
| 284 | OP_U8_ALTIVEC(fsum, sum, vdst); | 298 | OP_U8_ALTIVEC(fsum, sum, vdst); |
| 285 | 299 | ||
| 286 | const vector unsigned char rsum = vec_perm(fsum, fsum, dstperm); | 300 | rsum = vec_perm(fsum, fsum, dstperm); |
| 287 | const vector unsigned char fdst1 = vec_sel(dst1, rsum, dstmask); | 301 | fdst1 = vec_sel(dst1, rsum, dstmask); |
| 288 | const vector unsigned char fdst2 = vec_sel(rsum, dst2, dstmask); | 302 | fdst2 = vec_sel(rsum, dst2, dstmask); |
| 289 | 303 | ||
| 290 | vec_st(fdst1, 0, dst); | 304 | vec_st(fdst1, 0, dst); |
| 291 | vec_st(fdst2, 16, dst); | 305 | vec_st(fdst2, 16, dst); |
| @@ -299,7 +313,6 @@ POWERPC_PERF_STOP_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1); · 7 unmodified lines | |||
| 299 | /* this code assume stride % 16 == 0 */ | 313 | /* this code assume stride % 16 == 0 */ |
| 300 | static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { | 314 | static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { |
| 301 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_v_lowpass_num, 1); | 315 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_v_lowpass_num, 1); |
| 302 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_v_lowpass_num, 1); | ||
| 303 | 316 | ||
| 304 | register int i; | 317 | register int i; |
| 305 | 318 | ||
| @@ -318,49 +331,71 @@ static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, i · 12 unmodified lines | |||
| 318 | const vector unsigned char srcM2a = vec_ld(0, srcbis); | 331 | const vector unsigned char srcM2a = vec_ld(0, srcbis); |
| 319 | const vector unsigned char srcM2b = vec_ld(16, srcbis); | 332 | const vector unsigned char srcM2b = vec_ld(16, srcbis); |
| 320 | const vector unsigned char srcM2 = vec_perm(srcM2a, srcM2b, perm); | 333 | const vector unsigned char srcM2 = vec_perm(srcM2a, srcM2b, perm); |
| 321 | srcbis += srcStride; | 334 | // srcbis += srcStride; |
| 322 | const vector unsigned char srcM1a = vec_ld(0, srcbis); | 335 | const vector unsigned char srcM1a = vec_ld(0, srcbis += srcStride); |
| 323 | const vector unsigned char srcM1b = vec_ld(16, srcbis); | 336 | const vector unsigned char srcM1b = vec_ld(16, srcbis); |
| 324 | const vector unsigned char srcM1 = vec_perm(srcM1a, srcM1b, perm); | 337 | const vector unsigned char srcM1 = vec_perm(srcM1a, srcM1b, perm); |
| 325 | srcbis += srcStride; | 338 | // srcbis += srcStride; |
| 326 | const vector unsigned char srcP0a = vec_ld(0, srcbis); | 339 | const vector unsigned char srcP0a = vec_ld(0, srcbis += srcStride); |
| 327 | const vector unsigned char srcP0b = vec_ld(16, srcbis); | 340 | const vector unsigned char srcP0b = vec_ld(16, srcbis); |
| 328 | const vector unsigned char srcP0 = vec_perm(srcP0a, srcP0b, perm); | 341 | const vector unsigned char srcP0 = vec_perm(srcP0a, srcP0b, perm); |
| 329 | srcbis += srcStride; | 342 | // srcbis += srcStride; |
| 330 | const vector unsigned char srcP1a = vec_ld(0, srcbis); | 343 | const vector unsigned char srcP1a = vec_ld(0, srcbis += srcStride); |
| 331 | const vector unsigned char srcP1b = vec_ld(16, srcbis); | 344 | const vector unsigned char srcP1b = vec_ld(16, srcbis); |
| 332 | const vector unsigned char srcP1 = vec_perm(srcP1a, srcP1b, perm); | 345 | const vector unsigned char srcP1 = vec_perm(srcP1a, srcP1b, perm); |
| 333 | srcbis += srcStride; | 346 | // srcbis += srcStride; |
| 334 | const vector unsigned char srcP2a = vec_ld(0, srcbis); | 347 | const vector unsigned char srcP2a = vec_ld(0, srcbis += srcStride); |
| 335 | const vector unsigned char srcP2b = vec_ld(16, srcbis); | 348 | const vector unsigned char srcP2b = vec_ld(16, srcbis); |
| 336 | const vector unsigned char srcP2 = vec_perm(srcP2a, srcP2b, perm); | 349 | const vector unsigned char srcP2 = vec_perm(srcP2a, srcP2b, perm); |
| 337 | srcbis += srcStride; | 350 | // srcbis += srcStride; |
| 338 | 351 | ||
| 339 | vector signed short srcM2ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM2); | 352 | vector signed short srcM2ssA = (vector signed short) |
| 340 | vector signed short srcM2ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM2); | 353 | vec_mergeh((vector unsigned char)vzero, srcM2); |
| 341 | vector signed short srcM1ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM1); | 354 | vector signed short srcM2ssB = (vector signed short) |
| 342 | vector signed short srcM1ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM1); | 355 | vec_mergel((vector unsigned char)vzero, srcM2); |
| 343 | vector signed short srcP0ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP0); | 356 | vector signed short srcM1ssA = (vector signed short) |
| 344 | vector signed short srcP0ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP0); | 357 | vec_mergeh((vector unsigned char)vzero, srcM1); |
| 345 | vector signed short srcP1ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP1); | 358 | vector signed short srcM1ssB = (vector signed short) |
| 346 | vector signed short srcP1ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP1); | 359 | vec_mergel((vector unsigned char)vzero, srcM1); |
| 347 | vector signed short srcP2ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP2); | 360 | vector signed short srcP0ssA = (vector signed short) |
| 348 | vector signed short srcP2ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP2); | 361 | vec_mergeh((vector unsigned char)vzero, srcP0); |
| 362 | vector signed short srcP0ssB = (vector signed short) | ||
| 363 | vec_mergel((vector unsigned char)vzero, srcP0); | ||
| 364 | vector signed short srcP1ssA = (vector signed short) | ||
| 365 | vec_mergeh((vector unsigned char)vzero, srcP1); | ||
| 366 | vector signed short srcP1ssB = (vector signed short) | ||
| 367 | vec_mergel((vector unsigned char)vzero, srcP1); | ||
| 368 | vector signed short srcP2ssA = (vector signed short) | ||
| 369 | vec_mergeh((vector unsigned char)vzero, srcP2); | ||
| 370 | vector signed short srcP2ssB = (vector signed short) | ||
| 371 | vec_mergel((vector unsigned char)vzero, srcP2); | ||
| 372 | |||
| 373 | vector signed short pp1A, pp1B, pp2A, pp2B, pp3A, pp3B, | ||
| 374 | psumA, psumB, sumA, sumB, | ||
| 375 | srcP3ssA, srcP3ssB, | ||
| 376 | sum1A, sum1B, sum2A, sum2B, sum3A, sum3B; | ||
| 377 | |||
| 378 | vector unsigned char sum, dst1, dst2, vdst, fsum, rsum, fdst1, fdst2, | ||
| 379 | srcP3a, srcP3b, srcP3; | ||
| 380 | |||
| 381 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_v_lowpass_num, 1); | ||
| 349 | 382 | ||
| 350 | for (i = 0 ; i < 16 ; i++) { | 383 | for (i = 0 ; i < 16 ; i++) { |
| 351 | const vector unsigned char srcP3a = vec_ld(0, srcbis); | 384 | srcP3a = vec_ld(0, srcbis += srcStride); |
| 352 | const vector unsigned char srcP3b = vec_ld(16, srcbis); | 385 | srcP3b = vec_ld(16, srcbis); |
| 353 | const vector unsigned char srcP3 = vec_perm(srcP3a, srcP3b, perm); | 386 | srcP3 = vec_perm(srcP3a, srcP3b, perm); |
| 354 | const vector signed short srcP3ssA = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP3); | 387 | srcP3ssA = (vector signed short) |
| 355 | const vector signed short srcP3ssB = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP3); | 388 | vec_mergeh((vector unsigned char)vzero, srcP3); |
| 356 | srcbis += srcStride; | 389 | srcP3ssB = (vector signed short) |
| 357 | 390 | vec_mergel((vector unsigned char)vzero, srcP3); | |
| 358 | const vector signed short sum1A = vec_adds(srcP0ssA, srcP1ssA); | 391 | // srcbis += srcStride; |
| 359 | const vector signed short sum1B = vec_adds(srcP0ssB, srcP1ssB); | 392 | |
| 360 | const vector signed short sum2A = vec_adds(srcM1ssA, srcP2ssA); | 393 | sum1A = vec_adds(srcP0ssA, srcP1ssA); |
| 361 | const vector signed short sum2B = vec_adds(srcM1ssB, srcP2ssB); | 394 | sum1B = vec_adds(srcP0ssB, srcP1ssB); |
| 362 | const vector signed short sum3A = vec_adds(srcM2ssA, srcP3ssA); | 395 | sum2A = vec_adds(srcM1ssA, srcP2ssA); |
| 363 | const vector signed short sum3B = vec_adds(srcM2ssB, srcP3ssB); | 396 | sum2B = vec_adds(srcM1ssB, srcP2ssB); |
| 397 | sum3A = vec_adds(srcM2ssA, srcP3ssA); | ||
| 398 | sum3B = vec_adds(srcM2ssB, srcP3ssB); | ||
| 364 | 399 | ||
| 365 | srcM2ssA = srcM1ssA; | 400 | srcM2ssA = srcM1ssA; |
| 366 | srcM2ssB = srcM1ssB; | 401 | srcM2ssB = srcM1ssB; |
| @@ -373,33 +408,32 @@ static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, i · 6 unmodified lines | |||
| 373 | srcP2ssA = srcP3ssA; | 408 | srcP2ssA = srcP3ssA; |
| 374 | srcP2ssB = srcP3ssB; | 409 | srcP2ssB = srcP3ssB; |
| 375 | 410 | ||
| 376 | const vector signed short pp1A = vec_mladd(sum1A, v20ss, v16ss); | 411 | pp1A = vec_mladd(sum1A, v20ss, v16ss); |
| 377 | const vector signed short pp1B = vec_mladd(sum1B, v20ss, v16ss); | 412 | pp1B = vec_mladd(sum1B, v20ss, v16ss); |
| 378 | 413 | ||
| 379 | const vector signed short pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); | 414 | pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); |
| 380 | const vector signed short pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); | 415 | pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); |
| 381 | 416 | ||
| 382 | const vector signed short pp3A = vec_add(sum3A, pp1A); | 417 | pp3A = vec_add(sum3A, pp1A); |
| 383 | const vector signed short pp3B = vec_add(sum3B, pp1B); | 418 | pp3B = vec_add(sum3B, pp1B); |
| 384 | 419 | ||
| 385 | const vector signed short psumA = vec_sub(pp3A, pp2A); | 420 | psumA = vec_sub(pp3A, pp2A); |
| 386 | const vector signed short psumB = vec_sub(pp3B, pp2B); | 421 | psumB = vec_sub(pp3B, pp2B); |
| 387 | 422 | ||
| 388 | const vector signed short sumA = vec_sra(psumA, v5us); | 423 | sumA = vec_sra(psumA, v5us); |
| 389 | const vector signed short sumB = vec_sra(psumB, v5us); | 424 | sumB = vec_sra(psumB, v5us); |
| 390 | 425 | ||
| 391 | const vector unsigned char sum = vec_packsu(sumA, sumB); | 426 | sum = vec_packsu(sumA, sumB); |
| 392 | 427 | ||
| 393 | const vector unsigned char dst1 = vec_ld(0, dst); | 428 | dst1 = vec_ld(0, dst); |
| 394 | const vector unsigned char dst2 = vec_ld(16, dst); | 429 | dst2 = vec_ld(16, dst); |
| 395 | const vector unsigned char vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); | 430 | vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); |
| 396 | 431 | ||
| 397 | vector unsigned char fsum; | ||
| 398 | OP_U8_ALTIVEC(fsum, sum, vdst); | 432 | OP_U8_ALTIVEC(fsum, sum, vdst); |
| 399 | 433 | ||
| 400 | const vector unsigned char rsum = vec_perm(fsum, fsum, dstperm); | 434 | rsum = vec_perm(fsum, fsum, dstperm); |
| 401 | const vector unsigned char fdst1 = vec_sel(dst1, rsum, dstmask); | 435 | fdst1 = vec_sel(dst1, rsum, dstmask); |
| 402 | const vector unsigned char fdst2 = vec_sel(rsum, dst2, dstmask); | 436 | fdst2 = vec_sel(rsum, dst2, dstmask); |
| 403 | 437 | ||
| 404 | vec_st(fdst1, 0, dst); | 438 | vec_st(fdst1, 0, dst); |
| 405 | vec_st(fdst2, 16, dst); | 439 | vec_st(fdst2, 16, dst); |
| @@ -412,7 +446,6 @@ static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, i · 6 unmodified lines | |||
| 412 | /* this code assume stride % 16 == 0 *and* tmp is properly aligned */ | 446 | /* this code assume stride % 16 == 0 *and* tmp is properly aligned */ |
| 413 | static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, uint8_t * src, int dstStride, int tmpStride, int srcStride) { | 447 | static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, uint8_t * src, int dstStride, int tmpStride, int srcStride) { |
| 414 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_hv_lowpass_num, 1); | 448 | POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_hv_lowpass_num, 1); |
| 415 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1); | ||
| 416 | register int i; | 449 | register int i; |
| 417 | const vector signed int vzero = vec_splat_s32(0); | 450 | const vector signed int vzero = vec_splat_s32(0); |
| 418 | const vector unsigned char permM2 = vec_lvsl(-2, src); | 451 | const vector unsigned char permM2 = vec_lvsl(-2, src); |
| @@ -430,8 +463,38 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, · 11 unmodified lines | |||
| 430 | 463 | ||
| 431 | register int align = ((((unsigned long)src) - 2) % 16); | 464 | register int align = ((((unsigned long)src) - 2) % 16); |
| 432 | 465 | ||
| 433 | src -= (2 * srcStride); | 466 | const vector unsigned char neg1 = (const vector unsigned char) |
| 467 | vec_splat_s8(-1); | ||
| 468 | |||
| 469 | vector signed short srcP0A, srcP0B, srcP1A, srcP1B, | ||
| 470 | srcP2A, srcP2B, srcP3A, srcP3B, | ||
| 471 | srcM1A, srcM1B, srcM2A, srcM2B, | ||
| 472 | sum1A, sum1B, sum2A, sum2B, sum3A, sum3B, | ||
| 473 | pp1A, pp1B, pp2A, pp2B, psumA, psumB; | ||
| 474 | |||
| 475 | const vector unsigned char dstperm = vec_lvsr(0, dst); | ||
| 476 | |||
| 477 | const vector unsigned char dstmask = vec_perm((const vector unsigned char)vzero, neg1, dstperm); | ||
| 478 | |||
| 479 | const vector unsigned char mperm = (const vector unsigned char) | ||
| 480 | AVV(0x00, 0x08, 0x01, 0x09, 0x02, 0x0A, 0x03, 0x0B, | ||
| 481 | 0x04, 0x0C, 0x05, 0x0D, 0x06, 0x0E, 0x07, 0x0F); | ||
| 482 | int16_t *tmpbis = tmp; | ||
| 483 | |||
| 484 | vector signed short tmpM1ssA, tmpM1ssB, tmpM2ssA, tmpM2ssB, | ||
| 485 | tmpP0ssA, tmpP0ssB, tmpP1ssA, tmpP1ssB, | ||
| 486 | tmpP2ssA, tmpP2ssB; | ||
| 434 | 487 | ||
| 488 | vector signed int pp1Ae, pp1Ao, pp1Be, pp1Bo, pp2Ae, pp2Ao, pp2Be, pp2Bo, | ||
| 489 | pp3Ae, pp3Ao, pp3Be, pp3Bo, pp1cAe, pp1cAo, pp1cBe, pp1cBo, | ||
| 490 | pp32Ae, pp32Ao, pp32Be, pp32Bo, sumAe, sumAo, sumBe, sumBo, | ||
| 491 | ssumAe, ssumAo, ssumBe, ssumBo; | ||
| 492 | vector unsigned char fsum, sumv, sum, dst1, dst2, vdst, | ||
| 493 | rsum, fdst1, fdst2; | ||
| 494 | vector signed short ssume, ssumo; | ||
| 495 | |||
| 496 | POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1); | ||
| 497 | src -= (2 * srcStride); | ||
| 435 | for (i = 0 ; i < 21 ; i ++) { | 498 | for (i = 0 ; i < 21 ; i ++) { |
| 436 | vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; | 499 | vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; |
| 437 | vector unsigned char srcR1 = vec_ld(-2, src); | 500 | vector unsigned char srcR1 = vec_ld(-2, src); |
| @@ -492,36 +555,48 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, · 54 unmodified lines | |||
| 492 | } break; | 555 | } break; |
| 493 | } | 556 | } |
| 494 | 557 | ||
| 495 | const vector signed short srcP0A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP0); | 558 | srcP0A = (vector signed short) |
| 496 | const vector signed short srcP0B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP0); | 559 | vec_mergeh((vector unsigned char)vzero, srcP0); |
| 497 | const vector signed short srcP1A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP1); | 560 | srcP0B = (vector signed short) |
| 498 | const vector signed short srcP1B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP1); | 561 | vec_mergel((vector unsigned char)vzero, srcP0); |
| 499 | 562 | srcP1A = (vector signed short) | |
| 500 | const vector signed short srcP2A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP2); | 563 | vec_mergeh((vector unsigned char)vzero, srcP1); |
| 501 | const vector signed short srcP2B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP2); | 564 | srcP1B = (vector signed short) |
| 502 | const vector signed short srcP3A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcP3); | 565 | vec_mergel((vector unsigned char)vzero, srcP1); |
| 503 | const vector signed short srcP3B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcP3); | 566 | |
| 504 | 567 | srcP2A = (vector signed short) | |
| 505 | const vector signed short srcM1A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM1); | 568 | vec_mergeh((vector unsigned char)vzero, srcP2); |
| 506 | const vector signed short srcM1B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM1); | 569 | srcP2B = (vector signed short) |
| 507 | const vector signed short srcM2A = (vector signed short)vec_mergeh((vector unsigned char)vzero, srcM2); | 570 | vec_mergel((vector unsigned char)vzero, srcP2); |
| 508 | const vector signed short srcM2B = (vector signed short)vec_mergel((vector unsigned char)vzero, srcM2); | 571 | srcP3A = (vector signed short) |
| 509 | 572 | vec_mergeh((vector unsigned char)vzero, srcP3); | |
| 510 | const vector signed short sum1A = vec_adds(srcP0A, srcP1A); | 573 | srcP3B = (vector signed short) |
| 511 | const vector signed short sum1B = vec_adds(srcP0B, srcP1B); | 574 | vec_mergel((vector unsigned char)vzero, srcP3); |
| 512 | const vector signed short sum2A = vec_adds(srcM1A, srcP2A); | 575 | |
| 513 | const vector signed short sum2B = vec_adds(srcM1B, srcP2B); | 576 | srcM1A = (vector signed short) |
| 514 | const vector signed short sum3A = vec_adds(srcM2A, srcP3A); | 577 | vec_mergeh((vector unsigned char)vzero, srcM1); |
| 515 | const vector signed short sum3B = vec_adds(srcM2B, srcP3B); | 578 | srcM1B = (vector signed short) |
| 516 | 579 | vec_mergel((vector unsigned char)vzero, srcM1); | |
| 517 | const vector signed short pp1A = vec_mladd(sum1A, v20ss, sum3A); | 580 | srcM2A = (vector signed short) |
| 518 | const vector signed short pp1B = vec_mladd(sum1B, v20ss, sum3B); | 581 | vec_mergeh((vector unsigned char)vzero, srcM2); |
| 519 | 582 | srcM2B = (vector signed short) | |
| 520 | const vector signed short pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); | 583 | vec_mergel((vector unsigned char)vzero, srcM2); |
| 521 | const vector signed short pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); | 584 | |
| 522 | 585 | sum1A = vec_adds(srcP0A, srcP1A); | |
| 523 | const vector signed short psumA = vec_sub(pp1A, pp2A); | 586 | sum1B = vec_adds(srcP0B, srcP1B); |
| 524 | const vector signed short psumB = vec_sub(pp1B, pp2B); | 587 | sum2A = vec_adds(srcM1A, srcP2A); |
| 588 | sum2B = vec_adds(srcM1B, srcP2B); | ||
| 589 | sum3A = vec_adds(srcM2A, srcP3A); | ||
| 590 | sum3B = vec_adds(srcM2B, srcP3B); | ||
| 591 | |||
| 592 | pp1A = vec_mladd(sum1A, v20ss, sum3A); | ||
| 593 | pp1B = vec_mladd(sum1B, v20ss, sum3B); | ||
| 594 | |||
| 595 | pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); | ||
| 596 | pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); | ||
| 597 | |||
| 598 | psumA = vec_sub(pp1A, pp2A); | ||
| 599 | psumB = vec_sub(pp1B, pp2B); | ||
| 525 | 600 | ||
| 526 | vec_st(psumA, 0, tmp); | 601 | vec_st(psumA, 0, tmp); |
| 527 | vec_st(psumB, 16, tmp); | 602 | vec_st(psumB, 16, tmp); |
| @@ -530,35 +605,25 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, · 2 unmodified lines | |||
| 530 | tmp += tmpStride; /* int16_t*, and stride is 16, so it's OK here */ | 605 | tmp += tmpStride; /* int16_t*, and stride is 16, so it's OK here */ |
| 531 | } | 606 | } |
| 532 | 607 | ||
| 533 | const vector unsigned char dstperm = vec_lvsr(0, dst); | 608 | tmpM2ssA = vec_ld(0, tmpbis); |
| 534 | const vector unsigned char neg1 = (const vector unsigned char)vec_splat_s8(-1); | 609 | tmpM2ssB = vec_ld(16, tmpbis); |
| 535 | const vector unsigned char dstmask = vec_perm((const vector unsigned char)vzero, neg1, dstperm); | ||
| 536 | const vector unsigned char mperm = (const vector unsigned char) | ||
| 537 | AVV(0x00, 0x08, 0x01, 0x09, 0x02, 0x0A, 0x03, 0x0B, | ||
| 538 | 0x04, 0x0C, 0x05, 0x0D, 0x06, 0x0E, 0x07, 0x0F); | ||
| 539 | |||
| 540 | int16_t *tmpbis = tmp - (tmpStride * 21); | ||
| 541 | |||
| 542 | vector signed short tmpM2ssA = vec_ld(0, tmpbis); | ||
| 543 | vector signed short tmpM2ssB = vec_ld(16, tmpbis); | ||
| 544 | tmpbis += tmpStride; | 610 | tmpbis += tmpStride; |
| 545 | vector signed short tmpM1ssA = vec_ld(0, tmpbis); | 611 | tmpM1ssA = vec_ld(0, tmpbis); |
| 546 | vector signed short tmpM1ssB = vec_ld(16, tmpbis); | 612 | tmpM1ssB = vec_ld(16, tmpbis); |
| 547 | tmpbis += tmpStride; | 613 | tmpbis += tmpStride; |
| 548 | vector signed short tmpP0ssA = vec_ld(0, tmpbis); | 614 | tmpP0ssA = vec_ld(0, tmpbis); |
| 549 | vector signed short tmpP0ssB = vec_ld(16, tmpbis); | 615 | tmpP0ssB = vec_ld(16, tmpbis); |
| 550 | tmpbis += tmpStride; | 616 | tmpbis += tmpStride; |
| 551 | vector signed short tmpP1ssA = vec_ld(0, tmpbis); | 617 | tmpP1ssA = vec_ld(0, tmpbis); |
| 552 | vector signed short tmpP1ssB = vec_ld(16, tmpbis); | 618 | tmpP1ssB = vec_ld(16, tmpbis); |
| 553 | tmpbis += tmpStride; | 619 | tmpbis += tmpStride; |
| 554 | vector signed short tmpP2ssA = vec_ld(0, tmpbis); | 620 | tmpP2ssA = vec_ld(0, tmpbis); |
| 555 | vector signed short tmpP2ssB = vec_ld(16, tmpbis); | 621 | tmpP2ssB = vec_ld(16, tmpbis); |
| 556 | tmpbis += tmpStride; | 622 | tmpbis += tmpStride; |
| 557 | 623 | ||
| 558 | for (i = 0 ; i < 16 ; i++) { | 624 | for (i = 0 ; i < 16 ; i++) { |
| 559 | const vector signed short tmpP3ssA = vec_ld(0, tmpbis); | 625 | const vector signed short tmpP3ssA = vec_ld(0, tmpbis); |
| 560 | const vector signed short tmpP3ssB = vec_ld(16, tmpbis); | 626 | const vector signed short tmpP3ssB = vec_ld(16, tmpbis); |
| 561 | tmpbis += tmpStride; | ||
| 562 | 627 | ||
| 563 | const vector signed short sum1A = vec_adds(tmpP0ssA, tmpP1ssA); | 628 | const vector signed short sum1A = vec_adds(tmpP0ssA, tmpP1ssA); |
| 564 | const vector signed short sum1B = vec_adds(tmpP0ssB, tmpP1ssB); | 629 | const vector signed short sum1B = vec_adds(tmpP0ssB, tmpP1ssB); |
| @@ -567,6 +632,8 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, · 2 unmodified lines | |||
| 567 | const vector signed short sum3A = vec_adds(tmpM2ssA, tmpP3ssA); | 632 | const vector signed short sum3A = vec_adds(tmpM2ssA, tmpP3ssA); |
| 568 | const vector signed short sum3B = vec_adds(tmpM2ssB, tmpP3ssB); | 633 | const vector signed short sum3B = vec_adds(tmpM2ssB, tmpP3ssB); |
| 569 | 634 | ||
| 635 | tmpbis += tmpStride; | ||
| 636 | |||
| 570 | tmpM2ssA = tmpM1ssA; | 637 | tmpM2ssA = tmpM1ssA; |
| 571 | tmpM2ssB = tmpM1ssB; | 638 | tmpM2ssB = tmpM1ssB; |
| 572 | tmpM1ssA = tmpP0ssA; | 639 | tmpM1ssA = tmpP0ssA; |
| @@ -578,57 +645,56 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, · 5 unmodified lines | |||
| 578 | tmpP2ssA = tmpP3ssA; | 645 | tmpP2ssA = tmpP3ssA; |
| 579 | tmpP2ssB = tmpP3ssB; | 646 | tmpP2ssB = tmpP3ssB; |
| 580 | 647 | ||
| 581 | const vector signed int pp1Ae = vec_mule(sum1A, v20ss); | 648 | pp1Ae = vec_mule(sum1A, v20ss); |
| 582 | const vector signed int pp1Ao = vec_mulo(sum1A, v20ss); | 649 | pp1Ao = vec_mulo(sum1A, v20ss); |
| 583 | const vector signed int pp1Be = vec_mule(sum1B, v20ss); | 650 | pp1Be = vec_mule(sum1B, v20ss); |
| 584 | const vector signed int pp1Bo = vec_mulo(sum1B, v20ss); | 651 | pp1Bo = vec_mulo(sum1B, v20ss); |
| 585 | 652 | ||
| 586 | const vector signed int pp2Ae = vec_mule(sum2A, v5ss); | 653 | pp2Ae = vec_mule(sum2A, v5ss); |
| 587 | const vector signed int pp2Ao = vec_mulo(sum2A, v5ss); | 654 | pp2Ao = vec_mulo(sum2A, v5ss); |
| 588 | const vector signed int pp2Be = vec_mule(sum2B, v5ss); | 655 | pp2Be = vec_mule(sum2B, v5ss); |
| 589 | const vector signed int pp2Bo = vec_mulo(sum2B, v5ss); | 656 | pp2Bo = vec_mulo(sum2B, v5ss); |
| 590 | 657 | ||
| 591 | const vector signed int pp3Ae = vec_sra((vector signed int)sum3A, v16ui); | 658 | pp3Ae = vec_sra((vector signed int)sum3A, v16ui); |
| 592 | const vector signed int pp3Ao = vec_mulo(sum3A, v1ss); | 659 | pp3Ao = vec_mulo(sum3A, v1ss); |
| 593 | const vector signed int pp3Be = vec_sra((vector signed int)sum3B, v16ui); | 660 | pp3Be = vec_sra((vector signed int)sum3B, v16ui); |
| 594 | const vector signed int pp3Bo = vec_mulo(sum3B, v1ss); | 661 | pp3Bo = vec_mulo(sum3B, v1ss); |
| 595 | 662 | ||
| 596 | const vector signed int pp1cAe = vec_add(pp1Ae, v512si); | 663 | pp1cAe = vec_add(pp1Ae, v512si); |
| 597 | const vector signed int pp1cAo = vec_add(pp1Ao, v512si); | 664 | pp1cAo = vec_add(pp1Ao, v512si); |
| 598 | const vector signed int pp1cBe = vec_add(pp1Be, v512si); | 665 | pp1cBe = vec_add(pp1Be, v512si); |
| 599 | const vector signed int pp1cBo = vec_add(pp1Bo, v512si); | 666 | pp1cBo = vec_add(pp1Bo, v512si); |
| 600 | 667 | ||
| 601 | const vector signed int pp32Ae = vec_sub(pp3Ae, pp2Ae); | 668 | pp32Ae = vec_sub(pp3Ae, pp2Ae); |
| 602 | const vector signed int pp32Ao = vec_sub(pp3Ao, pp2Ao); | 669 | pp32Ao = vec_sub(pp3Ao, pp2Ao); |
| 603 | const vector signed int pp32Be = vec_sub(pp3Be, pp2Be); | 670 | pp32Be = vec_sub(pp3Be, pp2Be); |
| 604 | const vector signed int pp32Bo = vec_sub(pp3Bo, pp2Bo); | 671 | pp32Bo = vec_sub(pp3Bo, pp2Bo); |
| 605 | 672 | ||
| 606 | const vector signed int sumAe = vec_add(pp1cAe, pp32Ae); | 673 | sumAe = vec_add(pp1cAe, pp32Ae); |
| 607 | const vector signed int sumAo = vec_add(pp1cAo, pp32Ao); | 674 | sumAo = vec_add(pp1cAo, pp32Ao); |
| 608 | const vector signed int sumBe = vec_add(pp1cBe, pp32Be); | 675 | sumBe = vec_add(pp1cBe, pp32Be); |
| 609 | const vector signed int sumBo = vec_add(pp1cBo, pp32Bo); | 676 | sumBo = vec_add(pp1cBo, pp32Bo); |
| 610 | 677 | ||
| 611 | const vector signed int ssumAe = vec_sra(sumAe, v10ui); | 678 | ssumAe = vec_sra(sumAe, v10ui); |
| 612 | const vector signed int ssumAo = vec_sra(sumAo, v10ui); | 679 | ssumAo = vec_sra(sumAo, v10ui); |
| 613 | const vector signed int ssumBe = vec_sra(sumBe, v10ui); | 680 | ssumBe = vec_sra(sumBe, v10ui); |
| 614 | const vector signed int ssumBo = vec_sra(sumBo, v10ui); | 681 | ssumBo = vec_sra(sumBo, v10ui); |
| 615 | 682 | ||
| 616 | const vector signed short ssume = vec_packs(ssumAe, ssumBe); | 683 | ssume = vec_packs(ssumAe, ssumBe); |
| 617 | const vector signed short ssumo = vec_packs(ssumAo, ssumBo); | 684 | ssumo = vec_packs(ssumAo, ssumBo); |
| 618 | 685 | ||
| 619 | const vector unsigned char sumv = vec_packsu(ssume, ssumo); | 686 | sumv = vec_packsu(ssume, ssumo); |
| 620 | const vector unsigned char sum = vec_perm(sumv, sumv, mperm); | 687 | sum = vec_perm(sumv, sumv, mperm); |
| 621 | 688 | ||
| 622 | const vector unsigned char dst1 = vec_ld(0, dst); | 689 | dst1 = vec_ld(0, dst); |
| 623 | const vector unsigned char dst2 = vec_ld(16, dst); | 690 | dst2 = vec_ld(16, dst); |
| 624 | const vector unsigned char vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); | 691 | vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); |
| 625 | 692 | ||
| 626 | vector unsigned char fsum; | ||
| 627 | OP_U8_ALTIVEC(fsum, sum, vdst); | 693 | OP_U8_ALTIVEC(fsum, sum, vdst); |
| 628 | 694 | ||
| 629 | const vector unsigned char rsum = vec_perm(fsum, fsum, dstperm); | 695 | rsum = vec_perm(fsum, fsum, dstperm); |
| 630 | const vector unsigned char fdst1 = vec_sel(dst1, rsum, dstmask); | 696 | fdst1 = vec_sel(dst1, rsum, dstmask); |
| 631 | const vector unsigned char fdst2 = vec_sel(rsum, dst2, dstmask); | 697 | fdst2 = vec_sel(rsum, dst2, dstmask); |
| 632 | 698 | ||
| 633 | vec_st(fdst1, 0, dst); | 699 | vec_st(fdst1, 0, dst); |
| 634 | vec_st(fdst2, 16, dst); | 700 | vec_st(fdst2, 16, dst); |