LCOV - code coverage report
Current view: top level - third_party/aom/av1/common/x86 - hybrid_inv_txfm_avx2.c (source / functions) Hit Total Coverage
Test: output.info Lines: 0 335 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 13 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2016, Alliance for Open Media. All rights reserved
       3             :  *
       4             :  * This source code is subject to the terms of the BSD 2 Clause License and
       5             :  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
       6             :  * was not distributed with this source code in the LICENSE file, you can
       7             :  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
       8             :  * Media Patent License 1.0 was not distributed with this source code in the
       9             :  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
      10             :  */
      11             : 
      12             : #include <immintrin.h>  // avx2
      13             : 
      14             : #include "./aom_config.h"
      15             : #include "./av1_rtcd.h"
      16             : 
      17             : #include "aom_dsp/x86/inv_txfm_common_avx2.h"
      18             : 
      19           0 : void av1_idct16_avx2(__m256i *in) {
      20           0 :   const __m256i cospi_p30_m02 = pair256_set_epi16(cospi_30_64, -cospi_2_64);
      21           0 :   const __m256i cospi_p02_p30 = pair256_set_epi16(cospi_2_64, cospi_30_64);
      22           0 :   const __m256i cospi_p14_m18 = pair256_set_epi16(cospi_14_64, -cospi_18_64);
      23           0 :   const __m256i cospi_p18_p14 = pair256_set_epi16(cospi_18_64, cospi_14_64);
      24           0 :   const __m256i cospi_p22_m10 = pair256_set_epi16(cospi_22_64, -cospi_10_64);
      25           0 :   const __m256i cospi_p10_p22 = pair256_set_epi16(cospi_10_64, cospi_22_64);
      26           0 :   const __m256i cospi_p06_m26 = pair256_set_epi16(cospi_6_64, -cospi_26_64);
      27           0 :   const __m256i cospi_p26_p06 = pair256_set_epi16(cospi_26_64, cospi_6_64);
      28           0 :   const __m256i cospi_p28_m04 = pair256_set_epi16(cospi_28_64, -cospi_4_64);
      29           0 :   const __m256i cospi_p04_p28 = pair256_set_epi16(cospi_4_64, cospi_28_64);
      30           0 :   const __m256i cospi_p12_m20 = pair256_set_epi16(cospi_12_64, -cospi_20_64);
      31           0 :   const __m256i cospi_p20_p12 = pair256_set_epi16(cospi_20_64, cospi_12_64);
      32           0 :   const __m256i cospi_p16_p16 = _mm256_set1_epi16((int16_t)cospi_16_64);
      33           0 :   const __m256i cospi_p16_m16 = pair256_set_epi16(cospi_16_64, -cospi_16_64);
      34           0 :   const __m256i cospi_p24_m08 = pair256_set_epi16(cospi_24_64, -cospi_8_64);
      35           0 :   const __m256i cospi_p08_p24 = pair256_set_epi16(cospi_8_64, cospi_24_64);
      36           0 :   const __m256i cospi_m08_p24 = pair256_set_epi16(-cospi_8_64, cospi_24_64);
      37           0 :   const __m256i cospi_p24_p08 = pair256_set_epi16(cospi_24_64, cospi_8_64);
      38           0 :   const __m256i cospi_m24_m08 = pair256_set_epi16(-cospi_24_64, -cospi_8_64);
      39             :   __m256i u0, u1, u2, u3, u4, u5, u6, u7;
      40             :   __m256i v0, v1, v2, v3, v4, v5, v6, v7;
      41             :   __m256i t0, t1, t2, t3, t4, t5, t6, t7;
      42             : 
      43             :   // stage 1, (0-7)
      44           0 :   u0 = in[0];
      45           0 :   u1 = in[8];
      46           0 :   u2 = in[4];
      47           0 :   u3 = in[12];
      48           0 :   u4 = in[2];
      49           0 :   u5 = in[10];
      50           0 :   u6 = in[6];
      51           0 :   u7 = in[14];
      52             : 
      53             :   // stage 2, (0-7)
      54             :   // stage 3, (0-7)
      55           0 :   t0 = u0;
      56           0 :   t1 = u1;
      57           0 :   t2 = u2;
      58           0 :   t3 = u3;
      59           0 :   unpack_butter_fly(&u4, &u7, &cospi_p28_m04, &cospi_p04_p28, &t4, &t7);
      60           0 :   unpack_butter_fly(&u5, &u6, &cospi_p12_m20, &cospi_p20_p12, &t5, &t6);
      61             : 
      62             :   // stage 4, (0-7)
      63           0 :   unpack_butter_fly(&t0, &t1, &cospi_p16_p16, &cospi_p16_m16, &u0, &u1);
      64           0 :   unpack_butter_fly(&t2, &t3, &cospi_p24_m08, &cospi_p08_p24, &u2, &u3);
      65           0 :   u4 = _mm256_add_epi16(t4, t5);
      66           0 :   u5 = _mm256_sub_epi16(t4, t5);
      67           0 :   u6 = _mm256_sub_epi16(t7, t6);
      68           0 :   u7 = _mm256_add_epi16(t7, t6);
      69             : 
      70             :   // stage 5, (0-7)
      71           0 :   t0 = _mm256_add_epi16(u0, u3);
      72           0 :   t1 = _mm256_add_epi16(u1, u2);
      73           0 :   t2 = _mm256_sub_epi16(u1, u2);
      74           0 :   t3 = _mm256_sub_epi16(u0, u3);
      75           0 :   t4 = u4;
      76           0 :   t7 = u7;
      77           0 :   unpack_butter_fly(&u6, &u5, &cospi_p16_m16, &cospi_p16_p16, &t5, &t6);
      78             : 
      79             :   // stage 6, (0-7)
      80           0 :   u0 = _mm256_add_epi16(t0, t7);
      81           0 :   u1 = _mm256_add_epi16(t1, t6);
      82           0 :   u2 = _mm256_add_epi16(t2, t5);
      83           0 :   u3 = _mm256_add_epi16(t3, t4);
      84           0 :   u4 = _mm256_sub_epi16(t3, t4);
      85           0 :   u5 = _mm256_sub_epi16(t2, t5);
      86           0 :   u6 = _mm256_sub_epi16(t1, t6);
      87           0 :   u7 = _mm256_sub_epi16(t0, t7);
      88             : 
      89             :   // stage 1, (8-15)
      90           0 :   v0 = in[1];
      91           0 :   v1 = in[9];
      92           0 :   v2 = in[5];
      93           0 :   v3 = in[13];
      94           0 :   v4 = in[3];
      95           0 :   v5 = in[11];
      96           0 :   v6 = in[7];
      97           0 :   v7 = in[15];
      98             : 
      99             :   // stage 2, (8-15)
     100           0 :   unpack_butter_fly(&v0, &v7, &cospi_p30_m02, &cospi_p02_p30, &t0, &t7);
     101           0 :   unpack_butter_fly(&v1, &v6, &cospi_p14_m18, &cospi_p18_p14, &t1, &t6);
     102           0 :   unpack_butter_fly(&v2, &v5, &cospi_p22_m10, &cospi_p10_p22, &t2, &t5);
     103           0 :   unpack_butter_fly(&v3, &v4, &cospi_p06_m26, &cospi_p26_p06, &t3, &t4);
     104             : 
     105             :   // stage 3, (8-15)
     106           0 :   v0 = _mm256_add_epi16(t0, t1);
     107           0 :   v1 = _mm256_sub_epi16(t0, t1);
     108           0 :   v2 = _mm256_sub_epi16(t3, t2);
     109           0 :   v3 = _mm256_add_epi16(t2, t3);
     110           0 :   v4 = _mm256_add_epi16(t4, t5);
     111           0 :   v5 = _mm256_sub_epi16(t4, t5);
     112           0 :   v6 = _mm256_sub_epi16(t7, t6);
     113           0 :   v7 = _mm256_add_epi16(t6, t7);
     114             : 
     115             :   // stage 4, (8-15)
     116           0 :   t0 = v0;
     117           0 :   t7 = v7;
     118           0 :   t3 = v3;
     119           0 :   t4 = v4;
     120           0 :   unpack_butter_fly(&v1, &v6, &cospi_m08_p24, &cospi_p24_p08, &t1, &t6);
     121           0 :   unpack_butter_fly(&v2, &v5, &cospi_m24_m08, &cospi_m08_p24, &t2, &t5);
     122             : 
     123             :   // stage 5, (8-15)
     124           0 :   v0 = _mm256_add_epi16(t0, t3);
     125           0 :   v1 = _mm256_add_epi16(t1, t2);
     126           0 :   v2 = _mm256_sub_epi16(t1, t2);
     127           0 :   v3 = _mm256_sub_epi16(t0, t3);
     128           0 :   v4 = _mm256_sub_epi16(t7, t4);
     129           0 :   v5 = _mm256_sub_epi16(t6, t5);
     130           0 :   v6 = _mm256_add_epi16(t6, t5);
     131           0 :   v7 = _mm256_add_epi16(t7, t4);
     132             : 
     133             :   // stage 6, (8-15)
     134           0 :   t0 = v0;
     135           0 :   t1 = v1;
     136           0 :   t6 = v6;
     137           0 :   t7 = v7;
     138           0 :   unpack_butter_fly(&v5, &v2, &cospi_p16_m16, &cospi_p16_p16, &t2, &t5);
     139           0 :   unpack_butter_fly(&v4, &v3, &cospi_p16_m16, &cospi_p16_p16, &t3, &t4);
     140             : 
     141             :   // stage 7
     142           0 :   in[0] = _mm256_add_epi16(u0, t7);
     143           0 :   in[1] = _mm256_add_epi16(u1, t6);
     144           0 :   in[2] = _mm256_add_epi16(u2, t5);
     145           0 :   in[3] = _mm256_add_epi16(u3, t4);
     146           0 :   in[4] = _mm256_add_epi16(u4, t3);
     147           0 :   in[5] = _mm256_add_epi16(u5, t2);
     148           0 :   in[6] = _mm256_add_epi16(u6, t1);
     149           0 :   in[7] = _mm256_add_epi16(u7, t0);
     150           0 :   in[8] = _mm256_sub_epi16(u7, t0);
     151           0 :   in[9] = _mm256_sub_epi16(u6, t1);
     152           0 :   in[10] = _mm256_sub_epi16(u5, t2);
     153           0 :   in[11] = _mm256_sub_epi16(u4, t3);
     154           0 :   in[12] = _mm256_sub_epi16(u3, t4);
     155           0 :   in[13] = _mm256_sub_epi16(u2, t5);
     156           0 :   in[14] = _mm256_sub_epi16(u1, t6);
     157           0 :   in[15] = _mm256_sub_epi16(u0, t7);
     158           0 : }
     159             : 
     160           0 : static void idct16(__m256i *in) {
     161           0 :   mm256_transpose_16x16(in, in);
     162           0 :   av1_idct16_avx2(in);
     163           0 : }
     164             : 
     165           0 : static INLINE void butterfly_32b(const __m256i *a0, const __m256i *a1,
     166             :                                  const __m256i *c0, const __m256i *c1,
     167             :                                  __m256i *b) {
     168             :   __m256i x0, x1;
     169           0 :   x0 = _mm256_unpacklo_epi16(*a0, *a1);
     170           0 :   x1 = _mm256_unpackhi_epi16(*a0, *a1);
     171           0 :   b[0] = _mm256_madd_epi16(x0, *c0);
     172           0 :   b[1] = _mm256_madd_epi16(x1, *c0);
     173           0 :   b[2] = _mm256_madd_epi16(x0, *c1);
     174           0 :   b[3] = _mm256_madd_epi16(x1, *c1);
     175           0 : }
     176             : 
     177           0 : static INLINE void group_rounding(__m256i *a, int num) {
     178           0 :   const __m256i dct_rounding = _mm256_set1_epi32(DCT_CONST_ROUNDING);
     179             :   int i;
     180           0 :   for (i = 0; i < num; ++i) {
     181           0 :     a[i] = _mm256_add_epi32(a[i], dct_rounding);
     182           0 :     a[i] = _mm256_srai_epi32(a[i], DCT_CONST_BITS);
     183             :   }
     184           0 : }
     185             : 
     186           0 : static INLINE void add_rnd(const __m256i *a, const __m256i *b, __m256i *out) {
     187             :   __m256i x[4];
     188           0 :   x[0] = _mm256_add_epi32(a[0], b[0]);
     189           0 :   x[1] = _mm256_add_epi32(a[1], b[1]);
     190           0 :   x[2] = _mm256_add_epi32(a[2], b[2]);
     191           0 :   x[3] = _mm256_add_epi32(a[3], b[3]);
     192             : 
     193           0 :   group_rounding(x, 4);
     194             : 
     195           0 :   out[0] = _mm256_packs_epi32(x[0], x[1]);
     196           0 :   out[1] = _mm256_packs_epi32(x[2], x[3]);
     197           0 : }
     198             : 
     199           0 : static INLINE void sub_rnd(const __m256i *a, const __m256i *b, __m256i *out) {
     200             :   __m256i x[4];
     201           0 :   x[0] = _mm256_sub_epi32(a[0], b[0]);
     202           0 :   x[1] = _mm256_sub_epi32(a[1], b[1]);
     203           0 :   x[2] = _mm256_sub_epi32(a[2], b[2]);
     204           0 :   x[3] = _mm256_sub_epi32(a[3], b[3]);
     205             : 
     206           0 :   group_rounding(x, 4);
     207             : 
     208           0 :   out[0] = _mm256_packs_epi32(x[0], x[1]);
     209           0 :   out[1] = _mm256_packs_epi32(x[2], x[3]);
     210           0 : }
     211             : 
     212           0 : static INLINE void butterfly_rnd(__m256i *a, __m256i *out) {
     213           0 :   group_rounding(a, 4);
     214           0 :   out[0] = _mm256_packs_epi32(a[0], a[1]);
     215           0 :   out[1] = _mm256_packs_epi32(a[2], a[3]);
     216           0 : }
     217             : 
     218           0 : static void iadst16_avx2(__m256i *in) {
     219           0 :   const __m256i cospi_p01_p31 = pair256_set_epi16(cospi_1_64, cospi_31_64);
     220           0 :   const __m256i cospi_p31_m01 = pair256_set_epi16(cospi_31_64, -cospi_1_64);
     221           0 :   const __m256i cospi_p05_p27 = pair256_set_epi16(cospi_5_64, cospi_27_64);
     222           0 :   const __m256i cospi_p27_m05 = pair256_set_epi16(cospi_27_64, -cospi_5_64);
     223           0 :   const __m256i cospi_p09_p23 = pair256_set_epi16(cospi_9_64, cospi_23_64);
     224           0 :   const __m256i cospi_p23_m09 = pair256_set_epi16(cospi_23_64, -cospi_9_64);
     225           0 :   const __m256i cospi_p13_p19 = pair256_set_epi16(cospi_13_64, cospi_19_64);
     226           0 :   const __m256i cospi_p19_m13 = pair256_set_epi16(cospi_19_64, -cospi_13_64);
     227           0 :   const __m256i cospi_p17_p15 = pair256_set_epi16(cospi_17_64, cospi_15_64);
     228           0 :   const __m256i cospi_p15_m17 = pair256_set_epi16(cospi_15_64, -cospi_17_64);
     229           0 :   const __m256i cospi_p21_p11 = pair256_set_epi16(cospi_21_64, cospi_11_64);
     230           0 :   const __m256i cospi_p11_m21 = pair256_set_epi16(cospi_11_64, -cospi_21_64);
     231           0 :   const __m256i cospi_p25_p07 = pair256_set_epi16(cospi_25_64, cospi_7_64);
     232           0 :   const __m256i cospi_p07_m25 = pair256_set_epi16(cospi_7_64, -cospi_25_64);
     233           0 :   const __m256i cospi_p29_p03 = pair256_set_epi16(cospi_29_64, cospi_3_64);
     234           0 :   const __m256i cospi_p03_m29 = pair256_set_epi16(cospi_3_64, -cospi_29_64);
     235           0 :   const __m256i cospi_p04_p28 = pair256_set_epi16(cospi_4_64, cospi_28_64);
     236           0 :   const __m256i cospi_p28_m04 = pair256_set_epi16(cospi_28_64, -cospi_4_64);
     237           0 :   const __m256i cospi_p20_p12 = pair256_set_epi16(cospi_20_64, cospi_12_64);
     238           0 :   const __m256i cospi_p12_m20 = pair256_set_epi16(cospi_12_64, -cospi_20_64);
     239           0 :   const __m256i cospi_m28_p04 = pair256_set_epi16(-cospi_28_64, cospi_4_64);
     240           0 :   const __m256i cospi_m12_p20 = pair256_set_epi16(-cospi_12_64, cospi_20_64);
     241           0 :   const __m256i cospi_p08_p24 = pair256_set_epi16(cospi_8_64, cospi_24_64);
     242           0 :   const __m256i cospi_p24_m08 = pair256_set_epi16(cospi_24_64, -cospi_8_64);
     243           0 :   const __m256i cospi_m24_p08 = pair256_set_epi16(-cospi_24_64, cospi_8_64);
     244           0 :   const __m256i cospi_m16_m16 = _mm256_set1_epi16((int16_t)-cospi_16_64);
     245           0 :   const __m256i cospi_p16_p16 = _mm256_set1_epi16((int16_t)cospi_16_64);
     246           0 :   const __m256i cospi_p16_m16 = pair256_set_epi16(cospi_16_64, -cospi_16_64);
     247           0 :   const __m256i cospi_m16_p16 = pair256_set_epi16(-cospi_16_64, cospi_16_64);
     248           0 :   const __m256i zero = _mm256_setzero_si256();
     249             :   __m256i x[16], s[16];
     250             :   __m256i u[4], v[4];
     251             : 
     252             :   // stage 1
     253           0 :   butterfly_32b(&in[15], &in[0], &cospi_p01_p31, &cospi_p31_m01, u);
     254           0 :   butterfly_32b(&in[7], &in[8], &cospi_p17_p15, &cospi_p15_m17, v);
     255           0 :   add_rnd(u, v, &x[0]);
     256           0 :   sub_rnd(u, v, &x[8]);
     257             : 
     258           0 :   butterfly_32b(&in[13], &in[2], &cospi_p05_p27, &cospi_p27_m05, u);
     259           0 :   butterfly_32b(&in[5], &in[10], &cospi_p21_p11, &cospi_p11_m21, v);
     260           0 :   add_rnd(u, v, &x[2]);
     261           0 :   sub_rnd(u, v, &x[10]);
     262             : 
     263           0 :   butterfly_32b(&in[11], &in[4], &cospi_p09_p23, &cospi_p23_m09, u);
     264           0 :   butterfly_32b(&in[3], &in[12], &cospi_p25_p07, &cospi_p07_m25, v);
     265           0 :   add_rnd(u, v, &x[4]);
     266           0 :   sub_rnd(u, v, &x[12]);
     267             : 
     268           0 :   butterfly_32b(&in[9], &in[6], &cospi_p13_p19, &cospi_p19_m13, u);
     269           0 :   butterfly_32b(&in[1], &in[14], &cospi_p29_p03, &cospi_p03_m29, v);
     270           0 :   add_rnd(u, v, &x[6]);
     271           0 :   sub_rnd(u, v, &x[14]);
     272             : 
     273             :   // stage 2
     274           0 :   s[0] = _mm256_add_epi16(x[0], x[4]);
     275           0 :   s[1] = _mm256_add_epi16(x[1], x[5]);
     276           0 :   s[2] = _mm256_add_epi16(x[2], x[6]);
     277           0 :   s[3] = _mm256_add_epi16(x[3], x[7]);
     278           0 :   s[4] = _mm256_sub_epi16(x[0], x[4]);
     279           0 :   s[5] = _mm256_sub_epi16(x[1], x[5]);
     280           0 :   s[6] = _mm256_sub_epi16(x[2], x[6]);
     281           0 :   s[7] = _mm256_sub_epi16(x[3], x[7]);
     282           0 :   butterfly_32b(&x[8], &x[9], &cospi_p04_p28, &cospi_p28_m04, u);
     283           0 :   butterfly_32b(&x[12], &x[13], &cospi_m28_p04, &cospi_p04_p28, v);
     284           0 :   add_rnd(u, v, &s[8]);
     285           0 :   sub_rnd(u, v, &s[12]);
     286             : 
     287           0 :   butterfly_32b(&x[10], &x[11], &cospi_p20_p12, &cospi_p12_m20, u);
     288           0 :   butterfly_32b(&x[14], &x[15], &cospi_m12_p20, &cospi_p20_p12, v);
     289           0 :   add_rnd(u, v, &s[10]);
     290           0 :   sub_rnd(u, v, &s[14]);
     291             : 
     292             :   // stage 3
     293           0 :   x[0] = _mm256_add_epi16(s[0], s[2]);
     294           0 :   x[1] = _mm256_add_epi16(s[1], s[3]);
     295           0 :   x[2] = _mm256_sub_epi16(s[0], s[2]);
     296           0 :   x[3] = _mm256_sub_epi16(s[1], s[3]);
     297             : 
     298           0 :   x[8] = _mm256_add_epi16(s[8], s[10]);
     299           0 :   x[9] = _mm256_add_epi16(s[9], s[11]);
     300           0 :   x[10] = _mm256_sub_epi16(s[8], s[10]);
     301           0 :   x[11] = _mm256_sub_epi16(s[9], s[11]);
     302             : 
     303           0 :   butterfly_32b(&s[4], &s[5], &cospi_p08_p24, &cospi_p24_m08, u);
     304           0 :   butterfly_32b(&s[6], &s[7], &cospi_m24_p08, &cospi_p08_p24, v);
     305           0 :   add_rnd(u, v, &x[4]);
     306           0 :   sub_rnd(u, v, &x[6]);
     307             : 
     308           0 :   butterfly_32b(&s[12], &s[13], &cospi_p08_p24, &cospi_p24_m08, u);
     309           0 :   butterfly_32b(&s[14], &s[15], &cospi_m24_p08, &cospi_p08_p24, v);
     310           0 :   add_rnd(u, v, &x[12]);
     311           0 :   sub_rnd(u, v, &x[14]);
     312             : 
     313             :   // stage 4
     314           0 :   butterfly_32b(&x[2], &x[3], &cospi_m16_m16, &cospi_p16_m16, u);
     315           0 :   butterfly_32b(&x[6], &x[7], &cospi_p16_p16, &cospi_m16_p16, v);
     316           0 :   butterfly_rnd(u, &x[2]);
     317           0 :   butterfly_rnd(v, &x[6]);
     318             : 
     319           0 :   butterfly_32b(&x[10], &x[11], &cospi_p16_p16, &cospi_m16_p16, u);
     320           0 :   butterfly_32b(&x[14], &x[15], &cospi_m16_m16, &cospi_p16_m16, v);
     321           0 :   butterfly_rnd(u, &x[10]);
     322           0 :   butterfly_rnd(v, &x[14]);
     323             : 
     324           0 :   in[0] = x[0];
     325           0 :   in[1] = _mm256_sub_epi16(zero, x[8]);
     326           0 :   in[2] = x[12];
     327           0 :   in[3] = _mm256_sub_epi16(zero, x[4]);
     328           0 :   in[4] = x[6];
     329           0 :   in[5] = x[14];
     330           0 :   in[6] = x[10];
     331           0 :   in[7] = x[2];
     332           0 :   in[8] = x[3];
     333           0 :   in[9] = x[11];
     334           0 :   in[10] = x[15];
     335           0 :   in[11] = x[7];
     336           0 :   in[12] = x[5];
     337           0 :   in[13] = _mm256_sub_epi16(zero, x[13]);
     338           0 :   in[14] = x[9];
     339           0 :   in[15] = _mm256_sub_epi16(zero, x[1]);
     340           0 : }
     341             : 
     342           0 : static void iadst16(__m256i *in) {
     343           0 :   mm256_transpose_16x16(in, in);
     344           0 :   iadst16_avx2(in);
     345           0 : }
     346             : 
     347             : #if CONFIG_EXT_TX
     348           0 : static void flip_row(__m256i *in, int rows) {
     349             :   int i;
     350           0 :   for (i = 0; i < rows; ++i) {
     351           0 :     mm256_reverse_epi16(&in[i]);
     352             :   }
     353           0 : }
     354             : 
     355           0 : static void flip_col(uint8_t **dest, int *stride, int rows) {
     356           0 :   *dest = *dest + (rows - 1) * (*stride);
     357           0 :   *stride = -*stride;
     358           0 : }
     359             : 
     360           0 : static void iidtx16(__m256i *in) {
     361           0 :   mm256_transpose_16x16(in, in);
     362           0 :   txfm_scaling16_avx2((int16_t)Sqrt2, in);
     363           0 : }
     364             : #endif
     365             : 
     366           0 : void av1_iht16x16_256_add_avx2(const tran_low_t *input, uint8_t *dest,
     367             :                                int stride, int tx_type) {
     368             :   __m256i in[16];
     369             : 
     370           0 :   load_buffer_16x16(input, in);
     371           0 :   switch (tx_type) {
     372             :     case DCT_DCT:
     373           0 :       idct16(in);
     374           0 :       idct16(in);
     375           0 :       break;
     376             :     case ADST_DCT:
     377           0 :       idct16(in);
     378           0 :       iadst16(in);
     379           0 :       break;
     380             :     case DCT_ADST:
     381           0 :       iadst16(in);
     382           0 :       idct16(in);
     383           0 :       break;
     384             :     case ADST_ADST:
     385           0 :       iadst16(in);
     386           0 :       iadst16(in);
     387           0 :       break;
     388             : #if CONFIG_EXT_TX
     389             :     case FLIPADST_DCT:
     390           0 :       idct16(in);
     391           0 :       iadst16(in);
     392           0 :       flip_col(&dest, &stride, 16);
     393           0 :       break;
     394             :     case DCT_FLIPADST:
     395           0 :       iadst16(in);
     396           0 :       idct16(in);
     397           0 :       flip_row(in, 16);
     398           0 :       break;
     399             :     case FLIPADST_FLIPADST:
     400           0 :       iadst16(in);
     401           0 :       iadst16(in);
     402           0 :       flip_row(in, 16);
     403           0 :       flip_col(&dest, &stride, 16);
     404           0 :       break;
     405             :     case ADST_FLIPADST:
     406           0 :       iadst16(in);
     407           0 :       iadst16(in);
     408           0 :       flip_row(in, 16);
     409           0 :       break;
     410             :     case FLIPADST_ADST:
     411           0 :       iadst16(in);
     412           0 :       iadst16(in);
     413           0 :       flip_col(&dest, &stride, 16);
     414           0 :       break;
     415             :     case IDTX:
     416           0 :       iidtx16(in);
     417           0 :       iidtx16(in);
     418           0 :       break;
     419             :     case V_DCT:
     420           0 :       iidtx16(in);
     421           0 :       idct16(in);
     422           0 :       break;
     423             :     case H_DCT:
     424           0 :       idct16(in);
     425           0 :       iidtx16(in);
     426           0 :       break;
     427             :     case V_ADST:
     428           0 :       iidtx16(in);
     429           0 :       iadst16(in);
     430           0 :       break;
     431             :     case H_ADST:
     432           0 :       iadst16(in);
     433           0 :       iidtx16(in);
     434           0 :       break;
     435             :     case V_FLIPADST:
     436           0 :       iidtx16(in);
     437           0 :       iadst16(in);
     438           0 :       flip_col(&dest, &stride, 16);
     439           0 :       break;
     440             :     case H_FLIPADST:
     441           0 :       iadst16(in);
     442           0 :       iidtx16(in);
     443           0 :       flip_row(in, 16);
     444           0 :       break;
     445             : #endif  // CONFIG_EXT_TX
     446           0 :     default: assert(0); break;
     447             :   }
     448           0 :   store_buffer_16xN(in, stride, dest, 16);
     449           0 : }

Generated by: LCOV version 1.13