| @@ -87,6 +87,26 @@ QPEL_TABLE 12, 4, w, sse4 · 86 unmodified lines |
| 87 | QPEL_TABLE 8,16, b, avx2 | 87 | QPEL_TABLE 8,16, b, avx2 |
| 88 | QPEL_TABLE 10, 8, w, avx2 | 88 | QPEL_TABLE 10, 8, w, avx2 |
| 89 | | 89 | |
| | 90 | QPEL_TABLE 8, 1, b, avx512icl_h |
| | 91 | QPEL_TABLE 8, 1, d, avx512icl_v |
| | 92 | |
| | 93 | pb_qpel_shuffle_index: db 0, 1, 2, 3 |
| | 94 | db 1, 2, 3, 4 |
| | 95 | db 2, 3, 4, 5 |
| | 96 | db 3, 4, 5, 6 |
| | 97 | db 4, 5, 6, 7 |
| | 98 | db 5, 6, 7, 8 |
| | 99 | db 6, 7, 8, 9 |
| | 100 | db 7, 8, 9, 10 |
| | 101 | db 4, 5, 6, 7 |
| | 102 | db 5, 6, 7, 8 |
| | 103 | db 6, 7, 8, 9 |
| | 104 | db 7, 8, 9, 10 |
| | 105 | db 8, 9, 10, 11 |
| | 106 | db 9, 10, 11, 12 |
| | 107 | db 10, 11, 12, 13 |
| | 108 | db 11, 12, 13, 14 |
| | 109 | |
| 90 | SECTION .text | 110 | SECTION .text |
| 91 | | 111 | |
| 92 | %define MAX_PB_SIZE 64 | 112 | %define MAX_PB_SIZE 64 |
| @@ -1670,3 +1690,120 @@ HEVC_PUT_HEVC_QPEL_HV 16, 10 · 1577 unmodified lines |
| 1670 | | 1690 | |
| 1671 | %endif ;AVX2 | 1691 | %endif ;AVX2 |
| 1672 | %endif ; ARCH_X86_64 | 1692 | %endif ; ARCH_X86_64 |
| | 1693 | |
| | 1694 | %macro QPEL_FILTER_H 5 |
| | 1695 | %define %%table hevc_qpel_filters_avx512icl_h_%1 |
| | 1696 | %assign %%offset 4 |
| | 1697 | dec %2q |
| | 1698 | shl %2q, 3 |
| | 1699 | %ifdef PIC |
| | 1700 | lea %5q, [%%table] |
| | 1701 | %define FILTER %5q |
| | 1702 | %else |
| | 1703 | %define FILTER %%table |
| | 1704 | %endif |
| | 1705 | vpbroadcastd m%3, [FILTER + %2q + 0*%%offset] |
| | 1706 | vpbroadcastd m%4, [FILTER + %2q + 1*%%offset] |
| | 1707 | %endmacro |
| | 1708 | |
| | 1709 | %macro QPEL_FILTER_V 5 |
| | 1710 | vpbroadcastd m%3, [%5 + %2q + 4*%4] |
| | 1711 | %endmacro |
| | 1712 | |
| | 1713 | %macro QPEL_LOAD_SHUF 2 |
| | 1714 | movu m%1, [pb_qpel_shuffle_index + 0] |
| | 1715 | movu m%2, [pb_qpel_shuffle_index + 32] |
| | 1716 | %endmacro |
| | 1717 | |
| | 1718 | ; required: m0-m5 |
| | 1719 | ; %1: dst register index |
| | 1720 | ; %2: name for src |
| | 1721 | %macro QPEL_H_LOAD_COMPUTE 2 |
| | 1722 | pxor m%1, m%1 |
| | 1723 | movu xm4, [%2q - 3] |
| | 1724 | vpermb m5, m2, m4 |
| | 1725 | vpermb m4, m3, m4 |
| | 1726 | vpdpbusd m%1, m5, m0 |
| | 1727 | vpdpbusd m%1, m4, m1 |
| | 1728 | %endmacro |
| | 1729 | |
| | 1730 | %macro HEVC_PUT_HEVC_QPEL_AVX512ICL 2 |
| | 1731 | cglobal hevc_put_hevc_qpel_h%1_%2, 5, 6, 8, dst, src, srcstride, height, mx, tmp |
| | 1732 | QPEL_FILTER_H %1, mx, 0, 1, tmp |
| | 1733 | QPEL_LOAD_SHUF 2, 3 |
| | 1734 | .loop: |
| | 1735 | QPEL_H_LOAD_COMPUTE 6, src |
| | 1736 | vpmovdw [dstq], m6 |
| | 1737 | LOOP_END dst, src, srcstride |
| | 1738 | RET |
| | 1739 | %endmacro |
| | 1740 | |
| | 1741 | %macro HEVC_PUT_HEVC_QPEL_HV_AVX512ICL 2 |
| | 1742 | cglobal hevc_put_hevc_qpel_hv%1_%2, 6, 7, 27, dst, src, srcstride, height, mx, my, tmp |
| | 1743 | %assign %%shift 6 |
| | 1744 | %assign %%extra 7 |
| | 1745 | QPEL_FILTER_H %1, mx, 0, 1, tmp |
| | 1746 | QPEL_LOAD_SHUF 2, 3 |
| | 1747 | lea tmpq, [srcstrideq*3] |
| | 1748 | sub srcq, tmpq |
| | 1749 | sub myq, 1 |
| | 1750 | shl myq, 5 |
| | 1751 | %ifdef PIC |
| | 1752 | %define %%table hevc_qpel_filters_avx512icl_v_%1 |
| | 1753 | lea tmpq, [%%table] |
| | 1754 | %define FILTER tmpq |
| | 1755 | %else |
| | 1756 | %define FILTER %%table |
| | 1757 | %endif |
| | 1758 | %assign %%i 6 |
| | 1759 | %assign %%j 0 |
| | 1760 | %rep %1 |
| | 1761 | QPEL_FILTER_V %1, my, %%i, %%j, FILTER |
| | 1762 | %assign %%i %%i+1 |
| | 1763 | %assign %%j %%j+1 |
| | 1764 | %endrep |
| | 1765 | %rep %%extra |
| | 1766 | QPEL_H_LOAD_COMPUTE %%i, src |
| | 1767 | add srcq, srcstrideq |
| | 1768 | %assign %%i %%i+1 |
| | 1769 | %endrep |
| | 1770 | .loop: |
| | 1771 | QPEL_H_LOAD_COMPUTE %%i, src |
| | 1772 | vpmulld m22, m14, m6 |
| | 1773 | vpmulld m23, m15, m7 |
| | 1774 | vpmulld m24, m16, m8 |
| | 1775 | vpmulld m25, m17, m9 |
| | 1776 | vpaddd m26, m22, m23 |
| | 1777 | vpaddd m24, m25 |
| | 1778 | vpaddd m26, m24 |
| | 1779 | vpmulld m22, m18, m10 |
| | 1780 | vpmulld m23, m19, m11 |
| | 1781 | vpmulld m24, m20, m12 |
| | 1782 | vpmulld m25, m21, m13 |
| | 1783 | vpaddd m22, m22, m23 |
| | 1784 | vpaddd m24, m25 |
| | 1785 | vpaddd m26, m24 |
| | 1786 | vpaddd m22, m26 |
| | 1787 | mova m14, m15 |
| | 1788 | mova m15, m16 |
| | 1789 | mova m16, m17 |
| | 1790 | mova m17, m18 |
| | 1791 | mova m18, m19 |
| | 1792 | mova m19, m20 |
| | 1793 | mova m20, m21 |
| | 1794 | vpsrad m22, %%shift |
| | 1795 | vpmovdw [dstq], m22 |
| | 1796 | LOOP_END dst, src, srcstride |
| | 1797 | |
| | 1798 | RET |
| | 1799 | %endmacro |
| | 1800 | |
| | 1801 | %if ARCH_X86_64 |
| | 1802 | %if HAVE_AVX512ICL_EXTERNAL |
| | 1803 | |
| | 1804 | INIT_YMM avx512icl |
| | 1805 | HEVC_PUT_HEVC_QPEL_AVX512ICL 8, 8 |
| | 1806 | HEVC_PUT_HEVC_QPEL_HV_AVX512ICL 8, 8 |
| | 1807 | |
| | 1808 | %endif |
| | 1809 | %endif |