LCOV - code coverage report
Current view: top level - src/libavcodec/x86 - vp9dsp_init.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 123 147 83.7 %
Date: 2017-01-22 02:20:28 Functions: 201 241 83.4 %

          Line data    Source code
       1             : /*
       2             :  * VP9 SIMD optimizations
       3             :  *
       4             :  * Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com>
       5             :  *
       6             :  * This file is part of FFmpeg.
       7             :  *
       8             :  * FFmpeg is free software; you can redistribute it and/or
       9             :  * modify it under the terms of the GNU Lesser General Public
      10             :  * License as published by the Free Software Foundation; either
      11             :  * version 2.1 of the License, or (at your option) any later version.
      12             :  *
      13             :  * FFmpeg is distributed in the hope that it will be useful,
      14             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      16             :  * Lesser General Public License for more details.
      17             :  *
      18             :  * You should have received a copy of the GNU Lesser General Public
      19             :  * License along with FFmpeg; if not, write to the Free Software
      20             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      21             :  */
      22             : 
      23             : #include "libavutil/attributes.h"
      24             : #include "libavutil/cpu.h"
      25             : #include "libavutil/mem.h"
      26             : #include "libavutil/x86/cpu.h"
      27             : #include "libavcodec/vp9dsp.h"
      28             : #include "libavcodec/x86/vp9dsp_init.h"
      29             : 
      30             : #if HAVE_YASM
      31             : 
      32             : decl_fpel_func(put,  4,   , mmx);
      33             : decl_fpel_func(put,  8,   , mmx);
      34             : decl_fpel_func(put, 16,   , sse);
      35             : decl_fpel_func(put, 32,   , sse);
      36             : decl_fpel_func(put, 64,   , sse);
      37             : decl_fpel_func(avg,  4, _8, mmxext);
      38             : decl_fpel_func(avg,  8, _8, mmxext);
      39             : decl_fpel_func(avg, 16, _8, sse2);
      40             : decl_fpel_func(avg, 32, _8, sse2);
      41             : decl_fpel_func(avg, 64, _8, sse2);
      42             : decl_fpel_func(put, 32,   , avx);
      43             : decl_fpel_func(put, 64,   , avx);
      44             : decl_fpel_func(avg, 32, _8, avx2);
      45             : decl_fpel_func(avg, 64, _8, avx2);
      46             : 
      47             : decl_mc_funcs(4, mmxext, int16_t, 8, 8);
      48             : decl_mc_funcs(8, sse2, int16_t,  8, 8);
      49             : decl_mc_funcs(4, ssse3, int8_t, 32, 8);
      50             : decl_mc_funcs(8, ssse3, int8_t, 32, 8);
      51             : #if ARCH_X86_64
      52             : decl_mc_funcs(16, ssse3, int8_t, 32, 8);
      53             : decl_mc_funcs(32, avx2, int8_t, 32, 8);
      54             : #endif
      55             : 
      56         336 : mc_rep_funcs(16,  8,  8,  sse2, int16_t,  8, 8)
      57             : #if ARCH_X86_32
      58             : mc_rep_funcs(16,  8,  8, ssse3, int8_t,  32, 8)
      59             : #endif
      60         144 : mc_rep_funcs(32, 16, 16, sse2,  int16_t,  8, 8)
      61          72 : mc_rep_funcs(32, 16, 16, ssse3, int8_t,  32, 8)
      62          48 : mc_rep_funcs(64, 32, 32, sse2,  int16_t,  8, 8)
      63          24 : mc_rep_funcs(64, 32, 32, ssse3, int8_t,  32, 8)
      64             : #if ARCH_X86_64 && HAVE_AVX2_EXTERNAL
      65           0 : mc_rep_funcs(64, 32, 32, avx2,  int8_t,  32, 8)
      66             : #endif
      67             : 
      68             : extern const int8_t ff_filters_ssse3[3][15][4][32];
      69             : extern const int16_t ff_filters_sse2[3][15][8][8];
      70             : 
      71          30 : filters_8tap_2d_fn2(put, 16, 8, 1, mmxext, sse2, sse2)
      72          30 : filters_8tap_2d_fn2(avg, 16, 8, 1, mmxext, sse2, sse2)
      73          15 : filters_8tap_2d_fn2(put, 16, 8, 1, ssse3, ssse3, ssse3)
      74          15 : filters_8tap_2d_fn2(avg, 16, 8, 1, ssse3, ssse3, ssse3)
      75             : #if ARCH_X86_64 && HAVE_AVX2_EXTERNAL
      76           0 : filters_8tap_2d_fn(put, 64, 32, 8, 1, avx2, ssse3)
      77           0 : filters_8tap_2d_fn(put, 32, 32, 8, 1, avx2, ssse3)
      78           0 : filters_8tap_2d_fn(avg, 64, 32, 8, 1, avx2, ssse3)
      79           0 : filters_8tap_2d_fn(avg, 32, 32, 8, 1, avx2, ssse3)
      80             : #endif
      81             : 
      82          60 : filters_8tap_1d_fn3(put, 8, mmxext, sse2, sse2)
      83          60 : filters_8tap_1d_fn3(avg, 8, mmxext, sse2, sse2)
      84          30 : filters_8tap_1d_fn3(put, 8, ssse3, ssse3, ssse3)
      85          30 : filters_8tap_1d_fn3(avg, 8, ssse3, ssse3, ssse3)
      86             : #if ARCH_X86_64 && HAVE_AVX2_EXTERNAL
      87           0 : filters_8tap_1d_fn2(put, 64, 8, avx2, ssse3)
      88           0 : filters_8tap_1d_fn2(put, 32, 8, avx2, ssse3)
      89           0 : filters_8tap_1d_fn2(avg, 64, 8, avx2, ssse3)
      90           0 : filters_8tap_1d_fn2(avg, 32, 8, avx2, ssse3)
      91             : #endif
      92             : 
      93             : #define itxfm_func(typea, typeb, size, opt) \
      94             : void ff_vp9_##typea##_##typeb##_##size##x##size##_add_##opt(uint8_t *dst, ptrdiff_t stride, \
      95             :                                                             int16_t *block, int eob)
      96             : #define itxfm_funcs(size, opt) \
      97             : itxfm_func(idct,  idct,  size, opt); \
      98             : itxfm_func(iadst, idct,  size, opt); \
      99             : itxfm_func(idct,  iadst, size, opt); \
     100             : itxfm_func(iadst, iadst, size, opt)
     101             : 
     102             : itxfm_func(idct,  idct,  4, mmxext);
     103             : itxfm_func(idct,  iadst, 4, sse2);
     104             : itxfm_func(iadst, idct,  4, sse2);
     105             : itxfm_func(iadst, iadst, 4, sse2);
     106             : itxfm_funcs(4, ssse3);
     107             : itxfm_funcs(8, sse2);
     108             : itxfm_funcs(8, ssse3);
     109             : itxfm_funcs(8, avx);
     110             : itxfm_funcs(16, sse2);
     111             : itxfm_funcs(16, ssse3);
     112             : itxfm_funcs(16, avx);
     113             : itxfm_func(idct, idct, 32, sse2);
     114             : itxfm_func(idct, idct, 32, ssse3);
     115             : itxfm_func(idct, idct, 32, avx);
     116             : itxfm_func(iwht, iwht, 4, mmx);
     117             : itxfm_funcs(16, avx2);
     118             : itxfm_func(idct, idct, 32, avx2);
     119             : 
     120             : #undef itxfm_func
     121             : #undef itxfm_funcs
     122             : 
     123             : #define lpf_funcs(size1, size2, opt) \
     124             : void ff_vp9_loop_filter_v_##size1##_##size2##_##opt(uint8_t *dst, ptrdiff_t stride, \
     125             :                                                     int E, int I, int H); \
     126             : void ff_vp9_loop_filter_h_##size1##_##size2##_##opt(uint8_t *dst, ptrdiff_t stride, \
     127             :                                                     int E, int I, int H)
     128             : 
     129             : lpf_funcs(4, 8, mmxext);
     130             : lpf_funcs(8, 8, mmxext);
     131             : lpf_funcs(16, 16, sse2);
     132             : lpf_funcs(16, 16, ssse3);
     133             : lpf_funcs(16, 16, avx);
     134             : lpf_funcs(44, 16, sse2);
     135             : lpf_funcs(44, 16, ssse3);
     136             : lpf_funcs(44, 16, avx);
     137             : lpf_funcs(84, 16, sse2);
     138             : lpf_funcs(84, 16, ssse3);
     139             : lpf_funcs(84, 16, avx);
     140             : lpf_funcs(48, 16, sse2);
     141             : lpf_funcs(48, 16, ssse3);
     142             : lpf_funcs(48, 16, avx);
     143             : lpf_funcs(88, 16, sse2);
     144             : lpf_funcs(88, 16, ssse3);
     145             : lpf_funcs(88, 16, avx);
     146             : 
     147             : #undef lpf_funcs
     148             : 
     149             : #define ipred_func(size, type, opt) \
     150             : void ff_vp9_ipred_##type##_##size##x##size##_##opt(uint8_t *dst, ptrdiff_t stride, \
     151             :                                                    const uint8_t *l, const uint8_t *a)
     152             : 
     153             : ipred_func(8, v, mmx);
     154             : 
     155             : #define ipred_dc_funcs(size, opt) \
     156             : ipred_func(size, dc, opt); \
     157             : ipred_func(size, dc_left, opt); \
     158             : ipred_func(size, dc_top, opt)
     159             : 
     160             : ipred_dc_funcs(4, mmxext);
     161             : ipred_dc_funcs(8, mmxext);
     162             : 
     163             : #define ipred_dir_tm_funcs(size, opt) \
     164             : ipred_func(size, tm, opt); \
     165             : ipred_func(size, dl, opt); \
     166             : ipred_func(size, dr, opt); \
     167             : ipred_func(size, hd, opt); \
     168             : ipred_func(size, hu, opt); \
     169             : ipred_func(size, vl, opt); \
     170             : ipred_func(size, vr, opt)
     171             : 
     172             : ipred_dir_tm_funcs(4, mmxext);
     173             : 
     174             : ipred_func(16, v, sse);
     175             : ipred_func(32, v, sse);
     176             : 
     177             : ipred_dc_funcs(16, sse2);
     178             : ipred_dc_funcs(32, sse2);
     179             : 
     180             : #define ipred_dir_tm_h_funcs(size, opt) \
     181             : ipred_dir_tm_funcs(size, opt); \
     182             : ipred_func(size, h, opt)
     183             : 
     184             : ipred_dir_tm_h_funcs(8, sse2);
     185             : ipred_dir_tm_h_funcs(16, sse2);
     186             : ipred_dir_tm_h_funcs(32, sse2);
     187             : 
     188             : ipred_func(4, h, sse2);
     189             : 
     190             : #define ipred_all_funcs(size, opt) \
     191             : ipred_dc_funcs(size, opt); \
     192             : ipred_dir_tm_h_funcs(size, opt)
     193             : 
     194             : // FIXME hd/vl_4x4_ssse3 does not exist
     195             : ipred_all_funcs(4, ssse3);
     196             : ipred_all_funcs(8, ssse3);
     197             : ipred_all_funcs(16, ssse3);
     198             : ipred_all_funcs(32, ssse3);
     199             : 
     200             : ipred_dir_tm_h_funcs(8, avx);
     201             : ipred_dir_tm_h_funcs(16, avx);
     202             : ipred_dir_tm_h_funcs(32, avx);
     203             : 
     204             : ipred_func(32, v, avx);
     205             : 
     206             : ipred_dc_funcs(32, avx2);
     207             : ipred_func(32, h, avx2);
     208             : ipred_func(32, tm, avx2);
     209             : 
     210             : #undef ipred_func
     211             : #undef ipred_dir_tm_h_funcs
     212             : #undef ipred_dir_tm_funcs
     213             : #undef ipred_dc_funcs
     214             : 
     215             : #endif /* HAVE_YASM */
     216             : 
     217         616 : av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact)
     218             : {
     219             : #if HAVE_YASM
     220             :     int cpu_flags;
     221             : 
     222         616 :     if (bpp == 10) {
     223          63 :         ff_vp9dsp_init_10bpp_x86(dsp, bitexact);
     224          63 :         return;
     225         553 :     } else if (bpp == 12) {
     226          63 :         ff_vp9dsp_init_12bpp_x86(dsp, bitexact);
     227          63 :         return;
     228             :     }
     229             : 
     230         490 :     cpu_flags = av_get_cpu_flags();
     231             : 
     232             : #define init_lpf(opt) do { \
     233             :     dsp->loop_filter_16[0] = ff_vp9_loop_filter_h_16_16_##opt; \
     234             :     dsp->loop_filter_16[1] = ff_vp9_loop_filter_v_16_16_##opt; \
     235             :     dsp->loop_filter_mix2[0][0][0] = ff_vp9_loop_filter_h_44_16_##opt; \
     236             :     dsp->loop_filter_mix2[0][0][1] = ff_vp9_loop_filter_v_44_16_##opt; \
     237             :     dsp->loop_filter_mix2[0][1][0] = ff_vp9_loop_filter_h_48_16_##opt; \
     238             :     dsp->loop_filter_mix2[0][1][1] = ff_vp9_loop_filter_v_48_16_##opt; \
     239             :     dsp->loop_filter_mix2[1][0][0] = ff_vp9_loop_filter_h_84_16_##opt; \
     240             :     dsp->loop_filter_mix2[1][0][1] = ff_vp9_loop_filter_v_84_16_##opt; \
     241             :     dsp->loop_filter_mix2[1][1][0] = ff_vp9_loop_filter_h_88_16_##opt; \
     242             :     dsp->loop_filter_mix2[1][1][1] = ff_vp9_loop_filter_v_88_16_##opt; \
     243             : } while (0)
     244             : 
     245             : #define init_ipred(sz, opt, t, e) \
     246             :     dsp->intra_pred[TX_##sz##X##sz][e##_PRED] = ff_vp9_ipred_##t##_##sz##x##sz##_##opt
     247             : 
     248             : #define ff_vp9_ipred_hd_4x4_ssse3 ff_vp9_ipred_hd_4x4_mmxext
     249             : #define ff_vp9_ipred_vl_4x4_ssse3 ff_vp9_ipred_vl_4x4_mmxext
     250             : #define init_dir_tm_ipred(sz, opt) do { \
     251             :     init_ipred(sz, opt, dl, DIAG_DOWN_LEFT); \
     252             :     init_ipred(sz, opt, dr, DIAG_DOWN_RIGHT); \
     253             :     init_ipred(sz, opt, hd, HOR_DOWN); \
     254             :     init_ipred(sz, opt, vl, VERT_LEFT); \
     255             :     init_ipred(sz, opt, hu, HOR_UP); \
     256             :     init_ipred(sz, opt, tm, TM_VP8); \
     257             :     init_ipred(sz, opt, vr, VERT_RIGHT); \
     258             : } while (0)
     259             : #define init_dir_tm_h_ipred(sz, opt) do { \
     260             :     init_dir_tm_ipred(sz, opt); \
     261             :     init_ipred(sz, opt, h,  HOR); \
     262             : } while (0)
     263             : #define init_dc_ipred(sz, opt) do { \
     264             :     init_ipred(sz, opt, dc,      DC); \
     265             :     init_ipred(sz, opt, dc_left, LEFT_DC); \
     266             :     init_ipred(sz, opt, dc_top,  TOP_DC); \
     267             : } while (0)
     268             : #define init_all_ipred(sz, opt) do { \
     269             :     init_dc_ipred(sz, opt); \
     270             :     init_dir_tm_h_ipred(sz, opt); \
     271             : } while (0)
     272             : 
     273         490 :     if (EXTERNAL_MMX(cpu_flags)) {
     274          50 :         init_fpel_func(4, 0,  4, put, , mmx);
     275          50 :         init_fpel_func(3, 0,  8, put, , mmx);
     276          50 :         if (!bitexact) {
     277          50 :             dsp->itxfm_add[4 /* lossless */][DCT_DCT] =
     278          50 :             dsp->itxfm_add[4 /* lossless */][ADST_DCT] =
     279          50 :             dsp->itxfm_add[4 /* lossless */][DCT_ADST] =
     280          50 :             dsp->itxfm_add[4 /* lossless */][ADST_ADST] = ff_vp9_iwht_iwht_4x4_add_mmx;
     281             :         }
     282          50 :         init_ipred(8, mmx, v, VERT);
     283             :     }
     284             : 
     285         490 :     if (EXTERNAL_MMXEXT(cpu_flags)) {
     286          45 :         dsp->loop_filter_8[0][0] = ff_vp9_loop_filter_h_4_8_mmxext;
     287          45 :         dsp->loop_filter_8[0][1] = ff_vp9_loop_filter_v_4_8_mmxext;
     288          45 :         dsp->loop_filter_8[1][0] = ff_vp9_loop_filter_h_8_8_mmxext;
     289          45 :         dsp->loop_filter_8[1][1] = ff_vp9_loop_filter_v_8_8_mmxext;
     290          45 :         init_subpel2(4, 0, 4, put, 8, mmxext);
     291          45 :         init_subpel2(4, 1, 4, avg, 8, mmxext);
     292          45 :         init_fpel_func(4, 1,  4, avg, _8, mmxext);
     293          45 :         init_fpel_func(3, 1,  8, avg, _8, mmxext);
     294          45 :         dsp->itxfm_add[TX_4X4][DCT_DCT] = ff_vp9_idct_idct_4x4_add_mmxext;
     295          45 :         init_dc_ipred(4, mmxext);
     296          45 :         init_dc_ipred(8, mmxext);
     297          45 :         init_dir_tm_ipred(4, mmxext);
     298             :     }
     299             : 
     300         490 :     if (EXTERNAL_SSE(cpu_flags)) {
     301          40 :         init_fpel_func(2, 0, 16, put, , sse);
     302          40 :         init_fpel_func(1, 0, 32, put, , sse);
     303          40 :         init_fpel_func(0, 0, 64, put, , sse);
     304          40 :         init_ipred(16, sse, v, VERT);
     305          40 :         init_ipred(32, sse, v, VERT);
     306             :     }
     307             : 
     308         490 :     if (EXTERNAL_SSE2(cpu_flags)) {
     309          35 :         init_subpel3_8to64(0, put, 8, sse2);
     310          35 :         init_subpel3_8to64(1, avg, 8, sse2);
     311          35 :         init_fpel_func(2, 1, 16, avg,  _8, sse2);
     312          35 :         init_fpel_func(1, 1, 32, avg,  _8, sse2);
     313          35 :         init_fpel_func(0, 1, 64, avg,  _8, sse2);
     314          35 :         init_lpf(sse2);
     315          35 :         dsp->itxfm_add[TX_4X4][ADST_DCT]  = ff_vp9_idct_iadst_4x4_add_sse2;
     316          35 :         dsp->itxfm_add[TX_4X4][DCT_ADST]  = ff_vp9_iadst_idct_4x4_add_sse2;
     317          35 :         dsp->itxfm_add[TX_4X4][ADST_ADST] = ff_vp9_iadst_iadst_4x4_add_sse2;
     318          35 :         dsp->itxfm_add[TX_8X8][DCT_DCT] = ff_vp9_idct_idct_8x8_add_sse2;
     319          35 :         dsp->itxfm_add[TX_8X8][ADST_DCT]  = ff_vp9_idct_iadst_8x8_add_sse2;
     320          35 :         dsp->itxfm_add[TX_8X8][DCT_ADST]  = ff_vp9_iadst_idct_8x8_add_sse2;
     321          35 :         dsp->itxfm_add[TX_8X8][ADST_ADST] = ff_vp9_iadst_iadst_8x8_add_sse2;
     322          35 :         dsp->itxfm_add[TX_16X16][DCT_DCT]   = ff_vp9_idct_idct_16x16_add_sse2;
     323          35 :         dsp->itxfm_add[TX_16X16][ADST_DCT]  = ff_vp9_idct_iadst_16x16_add_sse2;
     324          35 :         dsp->itxfm_add[TX_16X16][DCT_ADST]  = ff_vp9_iadst_idct_16x16_add_sse2;
     325          35 :         dsp->itxfm_add[TX_16X16][ADST_ADST] = ff_vp9_iadst_iadst_16x16_add_sse2;
     326          35 :         dsp->itxfm_add[TX_32X32][ADST_ADST] =
     327          35 :         dsp->itxfm_add[TX_32X32][ADST_DCT] =
     328          35 :         dsp->itxfm_add[TX_32X32][DCT_ADST] =
     329          35 :         dsp->itxfm_add[TX_32X32][DCT_DCT] = ff_vp9_idct_idct_32x32_add_sse2;
     330          35 :         init_dc_ipred(16, sse2);
     331          35 :         init_dc_ipred(32, sse2);
     332          35 :         init_dir_tm_h_ipred(8, sse2);
     333          35 :         init_dir_tm_h_ipred(16, sse2);
     334          35 :         init_dir_tm_h_ipred(32, sse2);
     335          35 :         init_ipred(4, sse2, h, HOR);
     336             :     }
     337             : 
     338         490 :     if (EXTERNAL_SSSE3(cpu_flags)) {
     339          25 :         init_subpel3(0, put, 8, ssse3);
     340          25 :         init_subpel3(1, avg, 8, ssse3);
     341          25 :         dsp->itxfm_add[TX_4X4][DCT_DCT] = ff_vp9_idct_idct_4x4_add_ssse3;
     342          25 :         dsp->itxfm_add[TX_4X4][ADST_DCT]  = ff_vp9_idct_iadst_4x4_add_ssse3;
     343          25 :         dsp->itxfm_add[TX_4X4][DCT_ADST]  = ff_vp9_iadst_idct_4x4_add_ssse3;
     344          25 :         dsp->itxfm_add[TX_4X4][ADST_ADST] = ff_vp9_iadst_iadst_4x4_add_ssse3;
     345          25 :         dsp->itxfm_add[TX_8X8][DCT_DCT] = ff_vp9_idct_idct_8x8_add_ssse3;
     346          25 :         dsp->itxfm_add[TX_8X8][ADST_DCT]  = ff_vp9_idct_iadst_8x8_add_ssse3;
     347          25 :         dsp->itxfm_add[TX_8X8][DCT_ADST]  = ff_vp9_iadst_idct_8x8_add_ssse3;
     348          25 :         dsp->itxfm_add[TX_8X8][ADST_ADST] = ff_vp9_iadst_iadst_8x8_add_ssse3;
     349          25 :         dsp->itxfm_add[TX_16X16][DCT_DCT]   = ff_vp9_idct_idct_16x16_add_ssse3;
     350          25 :         dsp->itxfm_add[TX_16X16][ADST_DCT]  = ff_vp9_idct_iadst_16x16_add_ssse3;
     351          25 :         dsp->itxfm_add[TX_16X16][DCT_ADST]  = ff_vp9_iadst_idct_16x16_add_ssse3;
     352          25 :         dsp->itxfm_add[TX_16X16][ADST_ADST] = ff_vp9_iadst_iadst_16x16_add_ssse3;
     353          25 :         dsp->itxfm_add[TX_32X32][ADST_ADST] =
     354          25 :         dsp->itxfm_add[TX_32X32][ADST_DCT] =
     355          25 :         dsp->itxfm_add[TX_32X32][DCT_ADST] =
     356          25 :         dsp->itxfm_add[TX_32X32][DCT_DCT] = ff_vp9_idct_idct_32x32_add_ssse3;
     357          25 :         init_lpf(ssse3);
     358          25 :         init_all_ipred(4, ssse3);
     359          25 :         init_all_ipred(8, ssse3);
     360          25 :         init_all_ipred(16, ssse3);
     361          25 :         init_all_ipred(32, ssse3);
     362             :     }
     363             : 
     364         490 :     if (EXTERNAL_AVX(cpu_flags)) {
     365           5 :         dsp->itxfm_add[TX_8X8][DCT_DCT] = ff_vp9_idct_idct_8x8_add_avx;
     366           5 :         dsp->itxfm_add[TX_8X8][ADST_DCT]  = ff_vp9_idct_iadst_8x8_add_avx;
     367           5 :         dsp->itxfm_add[TX_8X8][DCT_ADST]  = ff_vp9_iadst_idct_8x8_add_avx;
     368           5 :         dsp->itxfm_add[TX_8X8][ADST_ADST] = ff_vp9_iadst_iadst_8x8_add_avx;
     369           5 :         dsp->itxfm_add[TX_16X16][DCT_DCT] = ff_vp9_idct_idct_16x16_add_avx;
     370           5 :         dsp->itxfm_add[TX_16X16][ADST_DCT]  = ff_vp9_idct_iadst_16x16_add_avx;
     371           5 :         dsp->itxfm_add[TX_16X16][DCT_ADST]  = ff_vp9_iadst_idct_16x16_add_avx;
     372           5 :         dsp->itxfm_add[TX_16X16][ADST_ADST] = ff_vp9_iadst_iadst_16x16_add_avx;
     373           5 :         dsp->itxfm_add[TX_32X32][ADST_ADST] =
     374           5 :         dsp->itxfm_add[TX_32X32][ADST_DCT] =
     375           5 :         dsp->itxfm_add[TX_32X32][DCT_ADST] =
     376           5 :         dsp->itxfm_add[TX_32X32][DCT_DCT] = ff_vp9_idct_idct_32x32_add_avx;
     377           5 :         init_lpf(avx);
     378           5 :         init_dir_tm_h_ipred(8, avx);
     379           5 :         init_dir_tm_h_ipred(16, avx);
     380           5 :         init_dir_tm_h_ipred(32, avx);
     381             :     }
     382         490 :     if (EXTERNAL_AVX_FAST(cpu_flags)) {
     383           5 :         init_fpel_func(1, 0, 32, put, , avx);
     384           5 :         init_fpel_func(0, 0, 64, put, , avx);
     385           5 :         init_ipred(32, avx, v, VERT);
     386             :     }
     387             : 
     388         490 :     if (EXTERNAL_AVX2_FAST(cpu_flags)) {
     389           0 :         init_fpel_func(1, 1, 32, avg, _8, avx2);
     390           0 :         init_fpel_func(0, 1, 64, avg, _8, avx2);
     391             :         if (ARCH_X86_64) {
     392             : #if ARCH_X86_64 && HAVE_AVX2_EXTERNAL
     393           0 :             dsp->itxfm_add[TX_16X16][DCT_DCT] = ff_vp9_idct_idct_16x16_add_avx2;
     394           0 :             dsp->itxfm_add[TX_16X16][ADST_DCT]  = ff_vp9_idct_iadst_16x16_add_avx2;
     395           0 :             dsp->itxfm_add[TX_16X16][DCT_ADST]  = ff_vp9_iadst_idct_16x16_add_avx2;
     396           0 :             dsp->itxfm_add[TX_16X16][ADST_ADST] = ff_vp9_iadst_iadst_16x16_add_avx2;
     397           0 :             dsp->itxfm_add[TX_32X32][ADST_ADST] =
     398           0 :             dsp->itxfm_add[TX_32X32][ADST_DCT] =
     399           0 :             dsp->itxfm_add[TX_32X32][DCT_ADST] =
     400           0 :             dsp->itxfm_add[TX_32X32][DCT_DCT] = ff_vp9_idct_idct_32x32_add_avx2;
     401           0 :             init_subpel3_32_64(0, put, 8, avx2);
     402           0 :             init_subpel3_32_64(1, avg, 8, avx2);
     403             : #endif
     404             :         }
     405           0 :         init_dc_ipred(32, avx2);
     406           0 :         init_ipred(32, avx2, h,  HOR);
     407           0 :         init_ipred(32, avx2, tm, TM_VP8);
     408             :     }
     409             : 
     410             : #undef init_fpel
     411             : #undef init_subpel1
     412             : #undef init_subpel2
     413             : #undef init_subpel3
     414             : 
     415             : #endif /* HAVE_YASM */
     416             : }

Generated by: LCOV version 1.12