| @@ -87,6 +87,26 @@ QPEL_TABLE 12, 4, w, sse4 · 86 unmodified lines |
| 87 | 87 | QPEL_TABLE 8,16, b, avx2 |
| 88 | 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 | 110 | SECTION .text |
| 91 | 111 | |
| 92 | 112 | %define MAX_PB_SIZE 64 |
| @@ -1670,3 +1690,120 @@ HEVC_PUT_HEVC_QPEL_HV 16, 10 · 1577 unmodified lines |
| 1670 | 1690 | |
| 1671 | 1691 | %endif ;AVX2 |
| 1672 | 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 |