LCOV - code coverage report
Current view: top level - ASM_AVX2 - av1_inv_txfm_avx2.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1486 1495 99.4 %
Date: 2019-11-25 17:38:06 Functions: 49 49 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2018, 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 "EbDefinitions.h"
      13             : #include "aom_dsp_rtcd.h"
      14             : 
      15             : #include "av1_inv_txfm_avx2.h"
      16             : #include "av1_inv_txfm_ssse3.h"
      17             : #include "EbTransforms.h"
      18             : 
      19             :  // Sqrt2, Sqrt2^2, Sqrt2^3, Sqrt2^4, Sqrt2^5
      20             : static int32_t NewSqrt2list[TX_SIZES] = { 5793, 2 * 4096, 2 * 5793, 4 * 4096,
      21             :                                           4 * 5793 };
      22             : 
      23     8237430 : static INLINE void idct16_stage5_avx2(__m256i *x1, const int32_t *cospi,
      24             :     const __m256i _r, int8_t cos_bit) {
      25     8237430 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
      26     8236840 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
      27     8236140 :     btf_16_adds_subs_avx2(&x1[0], &x1[3]);
      28     8236080 :     btf_16_adds_subs_avx2(&x1[1], &x1[2]);
      29     8235670 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x1[5], &x1[6], _r, cos_bit);
      30             : 
      31     8236770 :     btf_16_adds_subs_avx2(&x1[8], &x1[11]);
      32     8236450 :     btf_16_adds_subs_avx2(&x1[9], &x1[10]);
      33     8235420 :     btf_16_adds_subs_avx2(&x1[15], &x1[12]);
      34     8234920 :     btf_16_adds_subs_avx2(&x1[14], &x1[13]);
      35     8234620 : }
      36             : 
      37     8234960 : static INLINE void idct16_stage6_avx2(__m256i *x, const int32_t *cospi,
      38             :     const __m256i _r, int8_t cos_bit) {
      39     8234960 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
      40     8234530 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
      41     8233900 :     btf_16_adds_subs_avx2(&x[0], &x[7]);
      42     8233920 :     btf_16_adds_subs_avx2(&x[1], &x[6]);
      43     8233930 :     btf_16_adds_subs_avx2(&x[2], &x[5]);
      44     8233830 :     btf_16_adds_subs_avx2(&x[3], &x[4]);
      45     8233940 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[10], &x[13], _r, cos_bit);
      46     8236620 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[11], &x[12], _r, cos_bit);
      47     8237000 : }
      48             : 
      49     8237250 : static INLINE void idct16_stage7_avx2(__m256i *output, __m256i *x1) {
      50     8237250 :     btf_16_adds_subs_out_avx2(&output[0], &output[15], x1[0], x1[15]);
      51     8236740 :     btf_16_adds_subs_out_avx2(&output[1], &output[14], x1[1], x1[14]);
      52     8236160 :     btf_16_adds_subs_out_avx2(&output[2], &output[13], x1[2], x1[13]);
      53     8235980 :     btf_16_adds_subs_out_avx2(&output[3], &output[12], x1[3], x1[12]);
      54     8235710 :     btf_16_adds_subs_out_avx2(&output[4], &output[11], x1[4], x1[11]);
      55     8235340 :     btf_16_adds_subs_out_avx2(&output[5], &output[10], x1[5], x1[10]);
      56     8235240 :     btf_16_adds_subs_out_avx2(&output[6], &output[9], x1[6], x1[9]);
      57     8235140 :     btf_16_adds_subs_out_avx2(&output[7], &output[8], x1[7], x1[8]);
      58     8235110 : }
      59             : 
      60     8235950 : static void idct16_new_avx2(const __m256i *input, __m256i *output,
      61             :     int8_t cos_bit) {
      62             :     (void)(cos_bit);
      63     8235950 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
      64     8235820 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
      65             : 
      66     8235820 :     __m256i cospi_p60_m04 = pair_set_w16_epi16(cospi[60], -cospi[4]);
      67     8235670 :     __m256i cospi_p04_p60 = pair_set_w16_epi16(cospi[4], cospi[60]);
      68     8235160 :     __m256i cospi_p28_m36 = pair_set_w16_epi16(cospi[28], -cospi[36]);
      69     8234750 :     __m256i cospi_p36_p28 = pair_set_w16_epi16(cospi[36], cospi[28]);
      70     8234250 :     __m256i cospi_p44_m20 = pair_set_w16_epi16(cospi[44], -cospi[20]);
      71     8233930 :     __m256i cospi_p20_p44 = pair_set_w16_epi16(cospi[20], cospi[44]);
      72     8233760 :     __m256i cospi_p12_m52 = pair_set_w16_epi16(cospi[12], -cospi[52]);
      73     8233580 :     __m256i cospi_p52_p12 = pair_set_w16_epi16(cospi[52], cospi[12]);
      74     8233490 :     __m256i cospi_p56_m08 = pair_set_w16_epi16(cospi[56], -cospi[8]);
      75     8233390 :     __m256i cospi_p08_p56 = pair_set_w16_epi16(cospi[8], cospi[56]);
      76     8233280 :     __m256i cospi_p24_m40 = pair_set_w16_epi16(cospi[24], -cospi[40]);
      77     8233190 :     __m256i cospi_p40_p24 = pair_set_w16_epi16(cospi[40], cospi[24]);
      78     8233120 :     __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
      79     8233110 :     __m256i cospi_p32_m32 = pair_set_w16_epi16(cospi[32], -cospi[32]);
      80     8233140 :     __m256i cospi_p48_m16 = pair_set_w16_epi16(cospi[48], -cospi[16]);
      81     8233210 :     __m256i cospi_p16_p48 = pair_set_w16_epi16(cospi[16], cospi[48]);
      82     8233190 :     __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
      83     8233210 :     __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
      84     8233230 :     __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
      85             : 
      86             :     // stage 1
      87             :     __m256i x1[16];
      88     8233300 :     x1[0] = input[0];
      89     8233300 :     x1[1] = input[8];
      90     8233300 :     x1[2] = input[4];
      91     8233300 :     x1[3] = input[12];
      92     8233300 :     x1[4] = input[2];
      93     8233300 :     x1[5] = input[10];
      94     8233300 :     x1[6] = input[6];
      95     8233300 :     x1[7] = input[14];
      96     8233300 :     x1[8] = input[1];
      97     8233300 :     x1[9] = input[9];
      98     8233300 :     x1[10] = input[5];
      99     8233300 :     x1[11] = input[13];
     100     8233300 :     x1[12] = input[3];
     101     8233300 :     x1[13] = input[11];
     102     8233300 :     x1[14] = input[7];
     103     8233300 :     x1[15] = input[15];
     104             : 
     105             :     // stage 2
     106     8233300 :     btf_16_w16_avx2(cospi_p60_m04, cospi_p04_p60, &x1[8], &x1[15], _r, cos_bit);
     107     8235560 :     btf_16_w16_avx2(cospi_p28_m36, cospi_p36_p28, &x1[9], &x1[14], _r, cos_bit);
     108     8235710 :     btf_16_w16_avx2(cospi_p44_m20, cospi_p20_p44, &x1[10], &x1[13], _r, cos_bit);
     109     8236010 :     btf_16_w16_avx2(cospi_p12_m52, cospi_p52_p12, &x1[11], &x1[12], _r, cos_bit);
     110             : 
     111             :     // stage 3
     112     8236060 :     btf_16_w16_avx2(cospi_p56_m08, cospi_p08_p56, &x1[4], &x1[7], _r, cos_bit);
     113     8236150 :     btf_16_w16_avx2(cospi_p24_m40, cospi_p40_p24, &x1[5], &x1[6], _r, cos_bit);
     114     8235970 :     btf_16_adds_subs_avx2(&x1[8], &x1[9]);
     115     8235570 :     btf_16_adds_subs_avx2(&x1[11], &x1[10]);
     116     8234890 :     btf_16_adds_subs_avx2(&x1[12], &x1[13]);
     117     8234130 :     btf_16_adds_subs_avx2(&x1[15], &x1[14]);
     118             : 
     119             :     // stage 4
     120     8233710 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[0], &x1[1], _r, cos_bit);
     121     8236250 :     btf_16_w16_avx2(cospi_p48_m16, cospi_p16_p48, &x1[2], &x1[3], _r, cos_bit);
     122     8236190 :     btf_16_adds_subs_avx2(&x1[4], &x1[5]);
     123     8235820 :     btf_16_adds_subs_avx2(&x1[7], &x1[6]);
     124     8235010 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x1[9], &x1[14], _r, cos_bit);
     125     8236270 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x1[10], &x1[13], _r, cos_bit);
     126             : 
     127     8236620 :     idct16_stage5_avx2(x1, cospi, _r, cos_bit);
     128     8233890 :     idct16_stage6_avx2(x1, cospi, _r, cos_bit);
     129     8236210 :     idct16_stage7_avx2(output, x1);
     130     8234580 : }
     131             : 
     132         765 : static void idct16_low8_new_avx2(const __m256i *input, __m256i *output,
     133             :     int8_t cos_bit) {
     134             :     (void)(cos_bit);
     135         765 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     136         765 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     137             : 
     138         765 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
     139         765 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
     140         765 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
     141             : 
     142             :     // stage 1
     143             :     __m256i x1[16];
     144         765 :     x1[0] = input[0];
     145         765 :     x1[2] = input[4];
     146         765 :     x1[4] = input[2];
     147         765 :     x1[6] = input[6];
     148         765 :     x1[8] = input[1];
     149         765 :     x1[10] = input[5];
     150         765 :     x1[12] = input[3];
     151         765 :     x1[14] = input[7];
     152             : 
     153             :     // stage 2
     154        3060 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x1[8], x1[8], x1[15]);
     155        3060 :     btf_16_w16_0_avx2(-cospi[36], cospi[28], x1[14], x1[9], x1[14]);
     156        3060 :     btf_16_w16_0_avx2(cospi[44], cospi[20], x1[10], x1[10], x1[13]);
     157        3060 :     btf_16_w16_0_avx2(-cospi[52], cospi[12], x1[12], x1[11], x1[12]);
     158             : 
     159             :     // stage 3
     160        3060 :     btf_16_w16_0_avx2(cospi[56], cospi[8], x1[4], x1[4], x1[7]);
     161        3060 :     btf_16_w16_0_avx2(-cospi[40], cospi[24], x1[6], x1[5], x1[6]);
     162         765 :     btf_16_adds_subs_avx2(&x1[8], &x1[9]);
     163         765 :     btf_16_adds_subs_avx2(&x1[11], &x1[10]);
     164         765 :     btf_16_adds_subs_avx2(&x1[12], &x1[13]);
     165         765 :     btf_16_adds_subs_avx2(&x1[15], &x1[14]);
     166             : 
     167             :     // stage 4
     168        3060 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x1[0], x1[0], x1[1]);
     169        3060 :     btf_16_w16_0_avx2(cospi[48], cospi[16], x1[2], x1[2], x1[3]);
     170         765 :     btf_16_adds_subs_avx2(&x1[4], &x1[5]);
     171         765 :     btf_16_adds_subs_avx2(&x1[7], &x1[6]);
     172         765 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x1[9], &x1[14], _r, cos_bit);
     173         765 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x1[10], &x1[13], _r, cos_bit);
     174             : 
     175         765 :     idct16_stage5_avx2(x1, cospi, _r, cos_bit);
     176         765 :     idct16_stage6_avx2(x1, cospi, _r, cos_bit);
     177         765 :     idct16_stage7_avx2(output, x1);
     178         765 : }
     179             : 
     180        1472 : static void idct16_low1_new_avx2(const __m256i *input, __m256i *output,
     181             :     int8_t cos_bit) {
     182             :     (void)(cos_bit);
     183        1472 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     184             : 
     185             :     // stage 1
     186             :     __m256i x1[2];
     187        1472 :     x1[0] = input[0];
     188             : 
     189             :     // stage 2
     190             :     // stage 3
     191             :     // stage 4
     192        5888 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x1[0], x1[0], x1[1]);
     193             : 
     194             :     // stage 5
     195             :     // stage 6
     196        1472 :     output[0] = x1[0];
     197        1472 :     output[1] = x1[1];
     198        1472 :     output[2] = x1[1];
     199        1472 :     output[3] = x1[0];
     200        1472 :     output[4] = x1[0];
     201        1472 :     output[5] = x1[1];
     202        1472 :     output[6] = x1[1];
     203        1472 :     output[7] = x1[0];
     204        1472 :     output[8] = x1[0];
     205        1472 :     output[9] = x1[1];
     206        1472 :     output[10] = x1[1];
     207        1472 :     output[11] = x1[0];
     208        1472 :     output[12] = x1[0];
     209        1472 :     output[13] = x1[1];
     210        1472 :     output[14] = x1[1];
     211        1472 :     output[15] = x1[0];
     212        1472 : }
     213             : 
     214     1301800 : static INLINE void iadst16_stage3_avx2(__m256i *x) {
     215     1301800 :     btf_16_adds_subs_avx2(&x[0], &x[8]);
     216     1301790 :     btf_16_adds_subs_avx2(&x[1], &x[9]);
     217     1301760 :     btf_16_adds_subs_avx2(&x[2], &x[10]);
     218     1301750 :     btf_16_adds_subs_avx2(&x[3], &x[11]);
     219     1301740 :     btf_16_adds_subs_avx2(&x[4], &x[12]);
     220     1301730 :     btf_16_adds_subs_avx2(&x[5], &x[13]);
     221     1301720 :     btf_16_adds_subs_avx2(&x[6], &x[14]);
     222     1301720 :     btf_16_adds_subs_avx2(&x[7], &x[15]);
     223     1301720 : }
     224             : 
     225     1301760 : static INLINE void iadst16_stage4_avx2(__m256i *x, const int32_t *cospi,
     226             :     const __m256i _r, int8_t cos_bit) {
     227     1301760 :     const __m256i cospi_p08_p56 = pair_set_w16_epi16(cospi[8], cospi[56]);
     228     1301740 :     const __m256i cospi_p56_m08 = pair_set_w16_epi16(cospi[56], -cospi[8]);
     229     1301720 :     const __m256i cospi_p40_p24 = pair_set_w16_epi16(cospi[40], cospi[24]);
     230     1301700 :     const __m256i cospi_p24_m40 = pair_set_w16_epi16(cospi[24], -cospi[40]);
     231     1301690 :     const __m256i cospi_m56_p08 = pair_set_w16_epi16(-cospi[56], cospi[8]);
     232     1301680 :     const __m256i cospi_m24_p40 = pair_set_w16_epi16(-cospi[24], cospi[40]);
     233     1301690 :     btf_16_w16_avx2(cospi_p08_p56, cospi_p56_m08, &x[8], &x[9], _r, cos_bit);
     234     1301800 :     btf_16_w16_avx2(cospi_p40_p24, cospi_p24_m40, &x[10], &x[11], _r, cos_bit);
     235     1301810 :     btf_16_w16_avx2(cospi_m56_p08, cospi_p08_p56, &x[12], &x[13], _r, cos_bit);
     236     1301800 :     btf_16_w16_avx2(cospi_m24_p40, cospi_p40_p24, &x[14], &x[15], _r, cos_bit);
     237     1301800 : }
     238             : 
     239     1301800 : static INLINE void iadst16_stage5_avx2(__m256i *x) {
     240     1301800 :     btf_16_adds_subs_avx2(&x[0], &x[4]);
     241     1301800 :     btf_16_adds_subs_avx2(&x[1], &x[5]);
     242     1301780 :     btf_16_adds_subs_avx2(&x[2], &x[6]);
     243     1301760 :     btf_16_adds_subs_avx2(&x[3], &x[7]);
     244     1301760 :     btf_16_adds_subs_avx2(&x[8], &x[12]);
     245     1301750 :     btf_16_adds_subs_avx2(&x[9], &x[13]);
     246     1301740 :     btf_16_adds_subs_avx2(&x[10], &x[14]);
     247     1301740 :     btf_16_adds_subs_avx2(&x[11], &x[15]);
     248     1301740 : }
     249             : 
     250     1301760 : static INLINE void iadst16_stage6_avx2(__m256i *x, const int32_t *cospi,
     251             :     const __m256i _r, int8_t cos_bit) {
     252     1301760 :     const __m256i cospi_p16_p48 = pair_set_w16_epi16(cospi[16], cospi[48]);
     253     1301750 :     const __m256i cospi_p48_m16 = pair_set_w16_epi16(cospi[48], -cospi[16]);
     254     1301730 :     const __m256i cospi_m48_p16 = pair_set_w16_epi16(-cospi[48], cospi[16]);
     255     1301720 :     btf_16_w16_avx2(cospi_p16_p48, cospi_p48_m16, &x[4], &x[5], _r, cos_bit);
     256     1301810 :     btf_16_w16_avx2(cospi_m48_p16, cospi_p16_p48, &x[6], &x[7], _r, cos_bit);
     257     1301810 :     btf_16_w16_avx2(cospi_p16_p48, cospi_p48_m16, &x[12], &x[13], _r, cos_bit);
     258     1301800 :     btf_16_w16_avx2(cospi_m48_p16, cospi_p16_p48, &x[14], &x[15], _r, cos_bit);
     259     1301800 : }
     260             : 
     261     1301800 : static INLINE void iadst16_stage7_avx2(__m256i *x) {
     262     1301800 :     btf_16_adds_subs_avx2(&x[0], &x[2]);
     263     1301800 :     btf_16_adds_subs_avx2(&x[1], &x[3]);
     264     1301780 :     btf_16_adds_subs_avx2(&x[4], &x[6]);
     265     1301760 :     btf_16_adds_subs_avx2(&x[5], &x[7]);
     266     1301760 :     btf_16_adds_subs_avx2(&x[8], &x[10]);
     267     1301760 :     btf_16_adds_subs_avx2(&x[9], &x[11]);
     268     1301750 :     btf_16_adds_subs_avx2(&x[12], &x[14]);
     269     1301750 :     btf_16_adds_subs_avx2(&x[13], &x[15]);
     270     1301750 : }
     271             : 
     272     1302190 : static INLINE void iadst16_stage8_avx2(__m256i *x1, const int32_t *cospi,
     273             :     const __m256i _r, int8_t cos_bit) {
     274     1302190 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
     275     1302190 :     const __m256i cospi_p32_m32 = pair_set_w16_epi16(cospi[32], -cospi[32]);
     276     1302180 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[2], &x1[3], _r, cos_bit);
     277     1302230 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[6], &x1[7], _r, cos_bit);
     278     1302240 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[10], &x1[11], _r, cos_bit);
     279     1302210 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[14], &x1[15], _r, cos_bit);
     280     1302220 : }
     281             : 
     282     1302220 : static INLINE void iadst16_stage9_avx2(__m256i *output, __m256i *x1) {
     283     1302220 :     const __m256i __zero = _mm256_setzero_si256();
     284     1302220 :     output[0] = x1[0];
     285     1302220 :     output[1] = _mm256_subs_epi16(__zero, x1[8]);
     286     1302220 :     output[2] = x1[12];
     287     1302220 :     output[3] = _mm256_subs_epi16(__zero, x1[4]);
     288     1302220 :     output[4] = x1[6];
     289     1302220 :     output[5] = _mm256_subs_epi16(__zero, x1[14]);
     290     1302220 :     output[6] = x1[10];
     291     1302220 :     output[7] = _mm256_subs_epi16(__zero, x1[2]);
     292     1302220 :     output[8] = x1[3];
     293     1302220 :     output[9] = _mm256_subs_epi16(__zero, x1[11]);
     294     1302220 :     output[10] = x1[15];
     295     1302220 :     output[11] = _mm256_subs_epi16(__zero, x1[7]);
     296     1302220 :     output[12] = x1[5];
     297     1302220 :     output[13] = _mm256_subs_epi16(__zero, x1[13]);
     298     1302220 :     output[14] = x1[9];
     299     1302220 :     output[15] = _mm256_subs_epi16(__zero, x1[1]);
     300     1302220 : }
     301             : 
     302     1301330 : static void iadst16_new_avx2(const __m256i *input, __m256i *output,
     303             :     int8_t cos_bit) {
     304             :     (void)(cos_bit);
     305     1301330 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     306             : 
     307     1301320 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     308             : 
     309     1301320 :     __m256i cospi_p02_p62 = pair_set_w16_epi16(cospi[2], cospi[62]);
     310     1301310 :     __m256i cospi_p62_m02 = pair_set_w16_epi16(cospi[62], -cospi[2]);
     311     1301280 :     __m256i cospi_p10_p54 = pair_set_w16_epi16(cospi[10], cospi[54]);
     312     1301250 :     __m256i cospi_p54_m10 = pair_set_w16_epi16(cospi[54], -cospi[10]);
     313     1301250 :     __m256i cospi_p18_p46 = pair_set_w16_epi16(cospi[18], cospi[46]);
     314     1301240 :     __m256i cospi_p46_m18 = pair_set_w16_epi16(cospi[46], -cospi[18]);
     315     1301240 :     __m256i cospi_p26_p38 = pair_set_w16_epi16(cospi[26], cospi[38]);
     316     1301240 :     __m256i cospi_p38_m26 = pair_set_w16_epi16(cospi[38], -cospi[26]);
     317     1301220 :     __m256i cospi_p34_p30 = pair_set_w16_epi16(cospi[34], cospi[30]);
     318     1301220 :     __m256i cospi_p30_m34 = pair_set_w16_epi16(cospi[30], -cospi[34]);
     319     1301210 :     __m256i cospi_p42_p22 = pair_set_w16_epi16(cospi[42], cospi[22]);
     320     1301210 :     __m256i cospi_p22_m42 = pair_set_w16_epi16(cospi[22], -cospi[42]);
     321     1301200 :     __m256i cospi_p50_p14 = pair_set_w16_epi16(cospi[50], cospi[14]);
     322     1301200 :     __m256i cospi_p14_m50 = pair_set_w16_epi16(cospi[14], -cospi[50]);
     323     1301200 :     __m256i cospi_p58_p06 = pair_set_w16_epi16(cospi[58], cospi[6]);
     324     1301190 :     __m256i cospi_p06_m58 = pair_set_w16_epi16(cospi[6], -cospi[58]);
     325             : 
     326             :     // stage 1
     327             :     __m256i x1[16];
     328     1301190 :     x1[0] = input[15];
     329     1301190 :     x1[1] = input[0];
     330     1301190 :     x1[2] = input[13];
     331     1301190 :     x1[3] = input[2];
     332     1301190 :     x1[4] = input[11];
     333     1301190 :     x1[5] = input[4];
     334     1301190 :     x1[6] = input[9];
     335     1301190 :     x1[7] = input[6];
     336     1301190 :     x1[8] = input[7];
     337     1301190 :     x1[9] = input[8];
     338     1301190 :     x1[10] = input[5];
     339     1301190 :     x1[11] = input[10];
     340     1301190 :     x1[12] = input[3];
     341     1301190 :     x1[13] = input[12];
     342     1301190 :     x1[14] = input[1];
     343     1301190 :     x1[15] = input[14];
     344             : 
     345             :     // stage 2
     346     1301190 :     btf_16_w16_avx2(cospi_p02_p62, cospi_p62_m02, &x1[0], &x1[1], _r, cos_bit);
     347     1301310 :     btf_16_w16_avx2(cospi_p10_p54, cospi_p54_m10, &x1[2], &x1[3], _r, cos_bit);
     348     1301320 :     btf_16_w16_avx2(cospi_p18_p46, cospi_p46_m18, &x1[4], &x1[5], _r, cos_bit);
     349     1301320 :     btf_16_w16_avx2(cospi_p26_p38, cospi_p38_m26, &x1[6], &x1[7], _r, cos_bit);
     350     1301330 :     btf_16_w16_avx2(cospi_p34_p30, cospi_p30_m34, &x1[8], &x1[9], _r, cos_bit);
     351     1301330 :     btf_16_w16_avx2(cospi_p42_p22, cospi_p22_m42, &x1[10], &x1[11], _r, cos_bit);
     352     1301330 :     btf_16_w16_avx2(cospi_p50_p14, cospi_p14_m50, &x1[12], &x1[13], _r, cos_bit);
     353     1301340 :     btf_16_w16_avx2(cospi_p58_p06, cospi_p06_m58, &x1[14], &x1[15], _r, cos_bit);
     354             : 
     355     1301340 :     iadst16_stage3_avx2(x1);
     356     1301270 :     iadst16_stage4_avx2(x1, cospi, _r, cos_bit);
     357     1301350 :     iadst16_stage5_avx2(x1);
     358     1301290 :     iadst16_stage6_avx2(x1, cospi, _r, cos_bit);
     359     1301340 :     iadst16_stage7_avx2(x1);
     360     1301290 :     iadst16_stage8_avx2(x1, cospi, _r, cos_bit);
     361     1301330 :     iadst16_stage9_avx2(output, x1);
     362     1301350 : }
     363             : 
     364         458 : static void iadst16_low8_new_avx2(const __m256i *input, __m256i *output,
     365             :     int8_t cos_bit) {
     366             :     (void)(cos_bit);
     367         458 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     368         458 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     369             : 
     370             :     // stage 1
     371             :     __m256i x1[16];
     372         458 :     x1[1] = input[0];
     373         458 :     x1[3] = input[2];
     374         458 :     x1[5] = input[4];
     375         458 :     x1[7] = input[6];
     376         458 :     x1[8] = input[7];
     377         458 :     x1[10] = input[5];
     378         458 :     x1[12] = input[3];
     379         458 :     x1[14] = input[1];
     380             : 
     381             :     // stage 2
     382        1832 :     btf_16_w16_0_avx2(cospi[62], -cospi[2], x1[1], x1[0], x1[1]);
     383        1832 :     btf_16_w16_0_avx2(cospi[54], -cospi[10], x1[3], x1[2], x1[3]);
     384        1832 :     btf_16_w16_0_avx2(cospi[46], -cospi[18], x1[5], x1[4], x1[5]);
     385        1832 :     btf_16_w16_0_avx2(cospi[38], -cospi[26], x1[7], x1[6], x1[7]);
     386        1832 :     btf_16_w16_0_avx2(cospi[34], cospi[30], x1[8], x1[8], x1[9]);
     387        1832 :     btf_16_w16_0_avx2(cospi[42], cospi[22], x1[10], x1[10], x1[11]);
     388        1832 :     btf_16_w16_0_avx2(cospi[50], cospi[14], x1[12], x1[12], x1[13]);
     389        1832 :     btf_16_w16_0_avx2(cospi[58], cospi[06], x1[14], x1[14], x1[15]);
     390             : 
     391         458 :     iadst16_stage3_avx2(x1);
     392         458 :     iadst16_stage4_avx2(x1, cospi, _r, cos_bit);
     393         458 :     iadst16_stage5_avx2(x1);
     394         458 :     iadst16_stage6_avx2(x1, cospi, _r, cos_bit);
     395         458 :     iadst16_stage7_avx2(x1);
     396         458 :     iadst16_stage8_avx2(x1, cospi, _r, cos_bit);
     397         458 :     iadst16_stage9_avx2(output, x1);
     398         458 : }
     399             : 
     400         431 : static void iadst16_low1_new_avx2(const __m256i *input, __m256i *output,
     401             :     int8_t cos_bit) {
     402             :     (void)(cos_bit);
     403         431 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     404         431 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     405             : 
     406         431 :     const __m256i cospi_p08_p56 = pair_set_w16_epi16(cospi[8], cospi[56]);
     407         431 :     const __m256i cospi_p56_m08 = pair_set_w16_epi16(cospi[56], -cospi[8]);
     408         431 :     const __m256i cospi_p16_p48 = pair_set_w16_epi16(cospi[16], cospi[48]);
     409         431 :     const __m256i cospi_p48_m16 = pair_set_w16_epi16(cospi[48], -cospi[16]);
     410             : 
     411             :     // stage 1
     412             :     __m256i x1[16];
     413         431 :     x1[1] = input[0];
     414             : 
     415             :     // stage 2
     416        1724 :     btf_16_w16_0_avx2(cospi[62], -cospi[2], x1[1], x1[0], x1[1]);
     417             : 
     418             :     // stage 3
     419         431 :     x1[8] = x1[0];
     420         431 :     x1[9] = x1[1];
     421             : 
     422             :     // stage 4
     423         431 :     btf_16_w16_avx2(cospi_p08_p56, cospi_p56_m08, &x1[8], &x1[9], _r, cos_bit);
     424             : 
     425             :     // stage 5
     426         431 :     x1[4] = x1[0];
     427         431 :     x1[5] = x1[1];
     428             : 
     429         431 :     x1[12] = x1[8];
     430         431 :     x1[13] = x1[9];
     431             : 
     432             :     // stage 6
     433         431 :     btf_16_w16_avx2(cospi_p16_p48, cospi_p48_m16, &x1[4], &x1[5], _r, cos_bit);
     434         431 :     btf_16_w16_avx2(cospi_p16_p48, cospi_p48_m16, &x1[12], &x1[13], _r, cos_bit);
     435             : 
     436             :     // stage 7
     437         431 :     x1[2] = x1[0];
     438         431 :     x1[3] = x1[1];
     439         431 :     x1[6] = x1[4];
     440         431 :     x1[7] = x1[5];
     441         431 :     x1[10] = x1[8];
     442         431 :     x1[11] = x1[9];
     443         431 :     x1[14] = x1[12];
     444         431 :     x1[15] = x1[13];
     445             : 
     446         431 :     iadst16_stage8_avx2(x1, cospi, _r, cos_bit);
     447         431 :     iadst16_stage9_avx2(output, x1);
     448         431 : }
     449             : 
     450     4766690 : static INLINE void idct32_high16_stage3_avx2(__m256i *x) {
     451     4766690 :     btf_16_adds_subs_avx2(&x[16], &x[17]);
     452     4766640 :     btf_16_adds_subs_avx2(&x[19], &x[18]);
     453     4766530 :     btf_16_adds_subs_avx2(&x[20], &x[21]);
     454     4766400 :     btf_16_adds_subs_avx2(&x[23], &x[22]);
     455     4766350 :     btf_16_adds_subs_avx2(&x[24], &x[25]);
     456     4766290 :     btf_16_adds_subs_avx2(&x[27], &x[26]);
     457     4766250 :     btf_16_adds_subs_avx2(&x[28], &x[29]);
     458     4766220 :     btf_16_adds_subs_avx2(&x[31], &x[30]);
     459     4766190 : }
     460             : 
     461     4766750 : static INLINE void idct32_high16_stage4_avx2(__m256i *x, const int32_t *cospi,
     462             :     const __m256i _r, int8_t cos_bit) {
     463     4766750 :     const __m256i cospi_m08_p56 = pair_set_w16_epi16(-cospi[8], cospi[56]);
     464     4766580 :     const __m256i cospi_p56_p08 = pair_set_w16_epi16(cospi[56], cospi[8]);
     465     4766320 :     const __m256i cospi_m56_m08 = pair_set_w16_epi16(-cospi[56], -cospi[8]);
     466     4766160 :     const __m256i cospi_m40_p24 = pair_set_w16_epi16(-cospi[40], cospi[24]);
     467     4766060 :     const __m256i cospi_p24_p40 = pair_set_w16_epi16(cospi[24], cospi[40]);
     468     4766030 :     const __m256i cospi_m24_m40 = pair_set_w16_epi16(-cospi[24], -cospi[40]);
     469     4765970 :     btf_16_w16_avx2(cospi_m08_p56, cospi_p56_p08, &x[17], &x[30], _r, cos_bit);
     470     4767020 :     btf_16_w16_avx2(cospi_m56_m08, cospi_m08_p56, &x[18], &x[29], _r, cos_bit);
     471     4767230 :     btf_16_w16_avx2(cospi_m40_p24, cospi_p24_p40, &x[21], &x[26], _r, cos_bit);
     472     4767140 :     btf_16_w16_avx2(cospi_m24_m40, cospi_m40_p24, &x[22], &x[25], _r, cos_bit);
     473     4767190 : }
     474             : 
     475     4766730 : static INLINE void idct32_high24_stage5_avx2(__m256i *x, const int32_t *cospi,
     476             :     const __m256i _r, int8_t cos_bit) {
     477     4766730 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
     478     4766580 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
     479     4766400 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
     480     4766300 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[9], &x[14], _r, cos_bit);
     481     4767100 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[10], &x[13], _r, cos_bit);
     482     4767110 :     btf_16_adds_subs_avx2(&x[16], &x[19]);
     483     4766990 :     btf_16_adds_subs_avx2(&x[17], &x[18]);
     484     4766850 :     btf_16_adds_subs_avx2(&x[23], &x[20]);
     485     4766730 :     btf_16_adds_subs_avx2(&x[22], &x[21]);
     486     4766660 :     btf_16_adds_subs_avx2(&x[24], &x[27]);
     487     4766530 :     btf_16_adds_subs_avx2(&x[25], &x[26]);
     488     4766460 :     btf_16_adds_subs_avx2(&x[31], &x[28]);
     489     4766400 :     btf_16_adds_subs_avx2(&x[30], &x[29]);
     490     4766390 : }
     491             : 
     492     4766510 : static INLINE void idct32_high28_stage6_avx2(__m256i *x, const int32_t *cospi,
     493             :     const __m256i _r, int8_t cos_bit) {
     494     4766510 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
     495     4766370 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
     496     4766270 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
     497     4766180 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
     498     4766130 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
     499     4766110 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[5], &x[6], _r, cos_bit);
     500     4767070 :     btf_16_adds_subs_avx2(&x[8], &x[11]);
     501     4766970 :     btf_16_adds_subs_avx2(&x[9], &x[10]);
     502     4766760 :     btf_16_adds_subs_avx2(&x[15], &x[12]);
     503     4766630 :     btf_16_adds_subs_avx2(&x[14], &x[13]);
     504     4766420 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[18], &x[29], _r, cos_bit);
     505     4767180 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[19], &x[28], _r, cos_bit);
     506     4767180 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[20], &x[27], _r, cos_bit);
     507     4767220 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[21], &x[26], _r, cos_bit);
     508     4767250 : }
     509             : 
     510     4767240 : static INLINE void idct32_stage7_avx2(__m256i *x, const int32_t *cospi,
     511             :     const __m256i _r, int8_t cos_bit) {
     512     4767240 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
     513     4767160 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
     514     4767020 :     btf_16_adds_subs_avx2(&x[0], &x[7]);
     515     4767030 :     btf_16_adds_subs_avx2(&x[1], &x[6]);
     516     4766990 :     btf_16_adds_subs_avx2(&x[2], &x[5]);
     517     4766930 :     btf_16_adds_subs_avx2(&x[3], &x[4]);
     518     4766910 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[10], &x[13], _r, cos_bit);
     519     4767370 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[11], &x[12], _r, cos_bit);
     520     4767380 :     btf_16_adds_subs_avx2(&x[16], &x[23]);
     521     4767310 :     btf_16_adds_subs_avx2(&x[17], &x[22]);
     522     4767190 :     btf_16_adds_subs_avx2(&x[18], &x[21]);
     523     4767030 :     btf_16_adds_subs_avx2(&x[19], &x[20]);
     524     4766950 :     btf_16_adds_subs_avx2(&x[31], &x[24]);
     525     4766890 :     btf_16_adds_subs_avx2(&x[30], &x[25]);
     526     4766760 :     btf_16_adds_subs_avx2(&x[29], &x[26]);
     527     4766700 :     btf_16_adds_subs_avx2(&x[28], &x[27]);
     528     4766670 : }
     529             : 
     530     4766790 : static INLINE void idct32_stage8_avx2(__m256i *x, const int32_t *cospi,
     531             :     const __m256i _r, int8_t cos_bit) {
     532     4766790 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
     533     4766690 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
     534     4766590 :     btf_16_adds_subs_avx2(&x[0], &x[15]);
     535     4766580 :     btf_16_adds_subs_avx2(&x[1], &x[14]);
     536     4766610 :     btf_16_adds_subs_avx2(&x[2], &x[13]);
     537     4766590 :     btf_16_adds_subs_avx2(&x[3], &x[12]);
     538     4766620 :     btf_16_adds_subs_avx2(&x[4], &x[11]);
     539     4766620 :     btf_16_adds_subs_avx2(&x[5], &x[10]);
     540     4766610 :     btf_16_adds_subs_avx2(&x[6], &x[9]);
     541     4766610 :     btf_16_adds_subs_avx2(&x[7], &x[8]);
     542     4766600 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[20], &x[27], _r, cos_bit);
     543     4767310 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[21], &x[26], _r, cos_bit);
     544     4767420 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[22], &x[25], _r, cos_bit);
     545     4767320 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[23], &x[24], _r, cos_bit);
     546     4767330 : }
     547             : 
     548     4767330 : static INLINE void idct32_stage9_avx2(__m256i *output, __m256i *x) {
     549     4767330 :     btf_16_adds_subs_out_avx2(&output[0], &output[31], x[0], x[31]);
     550     4767220 :     btf_16_adds_subs_out_avx2(&output[1], &output[30], x[1], x[30]);
     551     4767090 :     btf_16_adds_subs_out_avx2(&output[2], &output[29], x[2], x[29]);
     552     4766980 :     btf_16_adds_subs_out_avx2(&output[3], &output[28], x[3], x[28]);
     553     4766900 :     btf_16_adds_subs_out_avx2(&output[4], &output[27], x[4], x[27]);
     554     4766860 :     btf_16_adds_subs_out_avx2(&output[5], &output[26], x[5], x[26]);
     555     4766840 :     btf_16_adds_subs_out_avx2(&output[6], &output[25], x[6], x[25]);
     556     4766830 :     btf_16_adds_subs_out_avx2(&output[7], &output[24], x[7], x[24]);
     557     4766830 :     btf_16_adds_subs_out_avx2(&output[8], &output[23], x[8], x[23]);
     558     4766770 :     btf_16_adds_subs_out_avx2(&output[9], &output[22], x[9], x[22]);
     559     4766760 :     btf_16_adds_subs_out_avx2(&output[10], &output[21], x[10], x[21]);
     560     4766770 :     btf_16_adds_subs_out_avx2(&output[11], &output[20], x[11], x[20]);
     561     4766780 :     btf_16_adds_subs_out_avx2(&output[12], &output[19], x[12], x[19]);
     562     4766770 :     btf_16_adds_subs_out_avx2(&output[13], &output[18], x[13], x[18]);
     563     4766760 :     btf_16_adds_subs_out_avx2(&output[14], &output[17], x[14], x[17]);
     564     4766780 :     btf_16_adds_subs_out_avx2(&output[15], &output[16], x[15], x[16]);
     565     4766820 : }
     566             : 
     567         872 : static void idct32_low1_new_avx2(const __m256i *input, __m256i *output,
     568             :     int8_t cos_bit) {
     569             :     (void)cos_bit;
     570         872 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     571             : 
     572             :     // stage 1
     573             :     __m256i x[2];
     574         872 :     x[0] = input[0];
     575             : 
     576             :     // stage 2
     577             :     // stage 3
     578             :     // stage 4
     579             :     // stage 5
     580        3488 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
     581             : 
     582             :     // stage 6
     583             :     // stage 7
     584             :     // stage 8
     585             :     // stage 9
     586         872 :     output[0] = x[0];
     587         872 :     output[31] = x[0];
     588         872 :     output[1] = x[1];
     589         872 :     output[30] = x[1];
     590         872 :     output[2] = x[1];
     591         872 :     output[29] = x[1];
     592         872 :     output[3] = x[0];
     593         872 :     output[28] = x[0];
     594         872 :     output[4] = x[0];
     595         872 :     output[27] = x[0];
     596         872 :     output[5] = x[1];
     597         872 :     output[26] = x[1];
     598         872 :     output[6] = x[1];
     599         872 :     output[25] = x[1];
     600         872 :     output[7] = x[0];
     601         872 :     output[24] = x[0];
     602         872 :     output[8] = x[0];
     603         872 :     output[23] = x[0];
     604         872 :     output[9] = x[1];
     605         872 :     output[22] = x[1];
     606         872 :     output[10] = x[1];
     607         872 :     output[21] = x[1];
     608         872 :     output[11] = x[0];
     609         872 :     output[20] = x[0];
     610         872 :     output[12] = x[0];
     611         872 :     output[19] = x[0];
     612         872 :     output[13] = x[1];
     613         872 :     output[18] = x[1];
     614         872 :     output[14] = x[1];
     615         872 :     output[17] = x[1];
     616         872 :     output[15] = x[0];
     617         872 :     output[16] = x[0];
     618         872 : }
     619             : 
     620         550 : static void idct32_low8_new_avx2(const __m256i *input, __m256i *output,
     621             :     int8_t cos_bit) {
     622             :     (void)cos_bit;
     623         550 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     624         550 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     625             : 
     626             :     // stage 1
     627             :     __m256i x[32];
     628         550 :     x[0] = input[0];
     629         550 :     x[4] = input[4];
     630         550 :     x[8] = input[2];
     631         550 :     x[12] = input[6];
     632         550 :     x[16] = input[1];
     633         550 :     x[20] = input[5];
     634         550 :     x[24] = input[3];
     635         550 :     x[28] = input[7];
     636             : 
     637             :     // stage 2
     638        2200 :     btf_16_w16_0_avx2(cospi[62], cospi[2], x[16], x[16], x[31]);
     639        2200 :     btf_16_w16_0_avx2(-cospi[50], cospi[14], x[28], x[19], x[28]);
     640        2200 :     btf_16_w16_0_avx2(cospi[54], cospi[10], x[20], x[20], x[27]);
     641        2200 :     btf_16_w16_0_avx2(-cospi[58], cospi[6], x[24], x[23], x[24]);
     642             : 
     643             :     // stage 3
     644        2200 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x[8], x[8], x[15]);
     645        2200 :     btf_16_w16_0_avx2(-cospi[52], cospi[12], x[12], x[11], x[12]);
     646         550 :     x[17] = x[16];
     647         550 :     x[18] = x[19];
     648         550 :     x[21] = x[20];
     649         550 :     x[22] = x[23];
     650         550 :     x[25] = x[24];
     651         550 :     x[26] = x[27];
     652         550 :     x[29] = x[28];
     653         550 :     x[30] = x[31];
     654             : 
     655             :     // stage 4
     656        2200 :     btf_16_w16_0_avx2(cospi[56], cospi[8], x[4], x[4], x[7]);
     657         550 :     x[9] = x[8];
     658         550 :     x[10] = x[11];
     659         550 :     x[13] = x[12];
     660         550 :     x[14] = x[15];
     661         550 :     idct32_high16_stage4_avx2(x, cospi, _r, cos_bit);
     662             : 
     663             :     // stage 5
     664        2200 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
     665         550 :     x[5] = x[4];
     666         550 :     x[6] = x[7];
     667         550 :     idct32_high24_stage5_avx2(x, cospi, _r, cos_bit);
     668             :     // stage 6
     669         550 :     x[3] = x[0];
     670         550 :     x[2] = x[1];
     671         550 :     idct32_high28_stage6_avx2(x, cospi, _r, cos_bit);
     672             : 
     673         550 :     idct32_stage7_avx2(x, cospi, _r, cos_bit);
     674         550 :     idct32_stage8_avx2(x, cospi, _r, cos_bit);
     675         550 :     idct32_stage9_avx2(output, x);
     676         550 : }
     677             : 
     678          47 : static void idct32_low16_new_avx2(const __m256i *input, __m256i *output,
     679             :     int8_t cos_bit) {
     680             :     (void)cos_bit;
     681          47 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     682          47 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     683             : 
     684             :     // stage 1
     685             :     __m256i x[32];
     686          47 :     x[0] = input[0];
     687          47 :     x[2] = input[8];
     688          47 :     x[4] = input[4];
     689          47 :     x[6] = input[12];
     690          47 :     x[8] = input[2];
     691          47 :     x[10] = input[10];
     692          47 :     x[12] = input[6];
     693          47 :     x[14] = input[14];
     694          47 :     x[16] = input[1];
     695          47 :     x[18] = input[9];
     696          47 :     x[20] = input[5];
     697          47 :     x[22] = input[13];
     698          47 :     x[24] = input[3];
     699          47 :     x[26] = input[11];
     700          47 :     x[28] = input[7];
     701          47 :     x[30] = input[15];
     702             : 
     703             :     // stage 2
     704         188 :     btf_16_w16_0_avx2(cospi[62], cospi[2], x[16], x[16], x[31]);
     705         188 :     btf_16_w16_0_avx2(-cospi[34], cospi[30], x[30], x[17], x[30]);
     706         188 :     btf_16_w16_0_avx2(cospi[46], cospi[18], x[18], x[18], x[29]);
     707         188 :     btf_16_w16_0_avx2(-cospi[50], cospi[14], x[28], x[19], x[28]);
     708         188 :     btf_16_w16_0_avx2(cospi[54], cospi[10], x[20], x[20], x[27]);
     709         188 :     btf_16_w16_0_avx2(-cospi[42], cospi[22], x[26], x[21], x[26]);
     710         188 :     btf_16_w16_0_avx2(cospi[38], cospi[26], x[22], x[22], x[25]);
     711         188 :     btf_16_w16_0_avx2(-cospi[58], cospi[6], x[24], x[23], x[24]);
     712             : 
     713             :     // stage 3
     714         188 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x[8], x[8], x[15]);
     715         188 :     btf_16_w16_0_avx2(-cospi[36], cospi[28], x[14], x[9], x[14]);
     716         188 :     btf_16_w16_0_avx2(cospi[44], cospi[20], x[10], x[10], x[13]);
     717         188 :     btf_16_w16_0_avx2(-cospi[52], cospi[12], x[12], x[11], x[12]);
     718          47 :     idct32_high16_stage3_avx2(x);
     719             : 
     720             :     // stage 4
     721         188 :     btf_16_w16_0_avx2(cospi[56], cospi[8], x[4], x[4], x[7]);
     722         188 :     btf_16_w16_0_avx2(-cospi[40], cospi[24], x[6], x[5], x[6]);
     723          47 :     btf_16_adds_subs_avx2(&x[8], &x[9]);
     724          47 :     btf_16_adds_subs_avx2(&x[11], &x[10]);
     725          47 :     btf_16_adds_subs_avx2(&x[12], &x[13]);
     726          47 :     btf_16_adds_subs_avx2(&x[15], &x[14]);
     727          47 :     idct32_high16_stage4_avx2(x, cospi, _r, cos_bit);
     728             : 
     729             :     // stage 5
     730         188 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
     731         188 :     btf_16_w16_0_avx2(cospi[48], cospi[16], x[2], x[2], x[3]);
     732          47 :     btf_16_adds_subs_avx2(&x[4], &x[5]);
     733          47 :     btf_16_adds_subs_avx2(&x[7], &x[6]);
     734          47 :     idct32_high24_stage5_avx2(x, cospi, _r, cos_bit);
     735             : 
     736          47 :     btf_16_adds_subs_avx2(&x[0], &x[3]);
     737          47 :     btf_16_adds_subs_avx2(&x[1], &x[2]);
     738          47 :     idct32_high28_stage6_avx2(x, cospi, _r, cos_bit);
     739             : 
     740          47 :     idct32_stage7_avx2(x, cospi, _r, cos_bit);
     741          47 :     idct32_stage8_avx2(x, cospi, _r, cos_bit);
     742          47 :     idct32_stage9_avx2(output, x);
     743          47 : }
     744             : 
     745     4766500 : static void idct32_new_avx2(const __m256i *input, __m256i *output,
     746             :     int8_t cos_bit) {
     747             :     (void)(cos_bit);
     748     4766500 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
     749     4766460 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
     750             : 
     751     4766460 :     __m256i cospi_p62_m02 = pair_set_w16_epi16(cospi[62], -cospi[2]);
     752     4766410 :     __m256i cospi_p02_p62 = pair_set_w16_epi16(cospi[2], cospi[62]);
     753     4766240 :     __m256i cospi_p30_m34 = pair_set_w16_epi16(cospi[30], -cospi[34]);
     754     4766070 :     __m256i cospi_p34_p30 = pair_set_w16_epi16(cospi[34], cospi[30]);
     755     4765890 :     __m256i cospi_p46_m18 = pair_set_w16_epi16(cospi[46], -cospi[18]);
     756     4765810 :     __m256i cospi_p18_p46 = pair_set_w16_epi16(cospi[18], cospi[46]);
     757     4765720 :     __m256i cospi_p14_m50 = pair_set_w16_epi16(cospi[14], -cospi[50]);
     758     4765650 :     __m256i cospi_p50_p14 = pair_set_w16_epi16(cospi[50], cospi[14]);
     759     4765600 :     __m256i cospi_p54_m10 = pair_set_w16_epi16(cospi[54], -cospi[10]);
     760     4765560 :     __m256i cospi_p10_p54 = pair_set_w16_epi16(cospi[10], cospi[54]);
     761     4765530 :     __m256i cospi_p22_m42 = pair_set_w16_epi16(cospi[22], -cospi[42]);
     762     4765510 :     __m256i cospi_p42_p22 = pair_set_w16_epi16(cospi[42], cospi[22]);
     763     4765480 :     __m256i cospi_p38_m26 = pair_set_w16_epi16(cospi[38], -cospi[26]);
     764     4765470 :     __m256i cospi_p26_p38 = pair_set_w16_epi16(cospi[26], cospi[38]);
     765     4765460 :     __m256i cospi_p06_m58 = pair_set_w16_epi16(cospi[6], -cospi[58]);
     766     4765510 :     __m256i cospi_p58_p06 = pair_set_w16_epi16(cospi[58], cospi[6]);
     767     4765520 :     __m256i cospi_p60_m04 = pair_set_w16_epi16(cospi[60], -cospi[4]);
     768     4765520 :     __m256i cospi_p04_p60 = pair_set_w16_epi16(cospi[4], cospi[60]);
     769     4765520 :     __m256i cospi_p28_m36 = pair_set_w16_epi16(cospi[28], -cospi[36]);
     770     4765580 :     __m256i cospi_p36_p28 = pair_set_w16_epi16(cospi[36], cospi[28]);
     771     4765560 :     __m256i cospi_p44_m20 = pair_set_w16_epi16(cospi[44], -cospi[20]);
     772     4765480 :     __m256i cospi_p20_p44 = pair_set_w16_epi16(cospi[20], cospi[44]);
     773     4765410 :     __m256i cospi_p12_m52 = pair_set_w16_epi16(cospi[12], -cospi[52]);
     774     4765340 :     __m256i cospi_p52_p12 = pair_set_w16_epi16(cospi[52], cospi[12]);
     775     4765290 :     __m256i cospi_p56_m08 = pair_set_w16_epi16(cospi[56], -cospi[8]);
     776     4765250 :     __m256i cospi_p08_p56 = pair_set_w16_epi16(cospi[8], cospi[56]);
     777     4765230 :     __m256i cospi_p24_m40 = pair_set_w16_epi16(cospi[24], -cospi[40]);
     778     4765180 :     __m256i cospi_p40_p24 = pair_set_w16_epi16(cospi[40], cospi[24]);
     779     4765160 :     __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
     780     4765170 :     __m256i cospi_p32_m32 = pair_set_w16_epi16(cospi[32], -cospi[32]);
     781     4765180 :     __m256i cospi_p48_m16 = pair_set_w16_epi16(cospi[48], -cospi[16]);
     782     4765200 :     __m256i cospi_p16_p48 = pair_set_w16_epi16(cospi[16], cospi[48]);
     783             : 
     784             :     // stage 1
     785             :     __m256i x1[32];
     786     4765220 :     x1[0] = input[0];
     787     4765220 :     x1[1] = input[16];
     788     4765220 :     x1[2] = input[8];
     789     4765220 :     x1[3] = input[24];
     790     4765220 :     x1[4] = input[4];
     791     4765220 :     x1[5] = input[20];
     792     4765220 :     x1[6] = input[12];
     793     4765220 :     x1[7] = input[28];
     794     4765220 :     x1[8] = input[2];
     795     4765220 :     x1[9] = input[18];
     796     4765220 :     x1[10] = input[10];
     797     4765220 :     x1[11] = input[26];
     798     4765220 :     x1[12] = input[6];
     799     4765220 :     x1[13] = input[22];
     800     4765220 :     x1[14] = input[14];
     801     4765220 :     x1[15] = input[30];
     802     4765220 :     x1[16] = input[1];
     803     4765220 :     x1[17] = input[17];
     804     4765220 :     x1[18] = input[9];
     805     4765220 :     x1[19] = input[25];
     806     4765220 :     x1[20] = input[5];
     807     4765220 :     x1[21] = input[21];
     808     4765220 :     x1[22] = input[13];
     809     4765220 :     x1[23] = input[29];
     810     4765220 :     x1[24] = input[3];
     811     4765220 :     x1[25] = input[19];
     812     4765220 :     x1[26] = input[11];
     813     4765220 :     x1[27] = input[27];
     814     4765220 :     x1[28] = input[7];
     815     4765220 :     x1[29] = input[23];
     816     4765220 :     x1[30] = input[15];
     817     4765220 :     x1[31] = input[31];
     818             : 
     819             :     // stage 2
     820     4765220 :     btf_16_w16_avx2(cospi_p62_m02, cospi_p02_p62, &x1[16], &x1[31], _r, cos_bit);
     821     4766380 :     btf_16_w16_avx2(cospi_p30_m34, cospi_p34_p30, &x1[17], &x1[30], _r, cos_bit);
     822     4766580 :     btf_16_w16_avx2(cospi_p46_m18, cospi_p18_p46, &x1[18], &x1[29], _r, cos_bit);
     823     4766680 :     btf_16_w16_avx2(cospi_p14_m50, cospi_p50_p14, &x1[19], &x1[28], _r, cos_bit);
     824     4766660 :     btf_16_w16_avx2(cospi_p54_m10, cospi_p10_p54, &x1[20], &x1[27], _r, cos_bit);
     825     4766680 :     btf_16_w16_avx2(cospi_p22_m42, cospi_p42_p22, &x1[21], &x1[26], _r, cos_bit);
     826     4766720 :     btf_16_w16_avx2(cospi_p38_m26, cospi_p26_p38, &x1[22], &x1[25], _r, cos_bit);
     827     4766710 :     btf_16_w16_avx2(cospi_p06_m58, cospi_p58_p06, &x1[23], &x1[24], _r, cos_bit);
     828             : 
     829             :     // stage 3
     830     4766700 :     btf_16_w16_avx2(cospi_p60_m04, cospi_p04_p60, &x1[8], &x1[15], _r, cos_bit);
     831     4766720 :     btf_16_w16_avx2(cospi_p28_m36, cospi_p36_p28, &x1[9], &x1[14], _r, cos_bit);
     832     4766670 :     btf_16_w16_avx2(cospi_p44_m20, cospi_p20_p44, &x1[10], &x1[13], _r, cos_bit);
     833     4766680 :     btf_16_w16_avx2(cospi_p12_m52, cospi_p52_p12, &x1[11], &x1[12], _r, cos_bit);
     834     4766660 :     idct32_high16_stage3_avx2(x1);
     835             : 
     836             :     // stage 4
     837     4766170 :     btf_16_w16_avx2(cospi_p56_m08, cospi_p08_p56, &x1[4], &x1[7], _r, cos_bit);
     838     4766730 :     btf_16_w16_avx2(cospi_p24_m40, cospi_p40_p24, &x1[5], &x1[6], _r, cos_bit);
     839     4766700 :     btf_16_adds_subs_avx2(&x1[8], &x1[9]);
     840     4766570 :     btf_16_adds_subs_avx2(&x1[11], &x1[10]);
     841     4766300 :     btf_16_adds_subs_avx2(&x1[12], &x1[13]);
     842     4766060 :     btf_16_adds_subs_avx2(&x1[15], &x1[14]);
     843     4765940 :     idct32_high16_stage4_avx2(x1, cospi, _r, cos_bit);
     844             : 
     845             :     // stage 5
     846     4766620 :     btf_16_w16_avx2(cospi_p32_p32, cospi_p32_m32, &x1[0], &x1[1], _r, cos_bit);
     847     4766700 :     btf_16_w16_avx2(cospi_p48_m16, cospi_p16_p48, &x1[2], &x1[3], _r, cos_bit);
     848     4766590 :     btf_16_adds_subs_avx2(&x1[4], &x1[5]);
     849     4766440 :     btf_16_adds_subs_avx2(&x1[7], &x1[6]);
     850     4766100 :     idct32_high24_stage5_avx2(x1, cospi, _r, cos_bit);
     851             : 
     852             :     // stage 6
     853     4765800 :     btf_16_adds_subs_avx2(&x1[0], &x1[3]);
     854     4765780 :     btf_16_adds_subs_avx2(&x1[1], &x1[2]);
     855     4765720 :     idct32_high28_stage6_avx2(x1, cospi, _r, cos_bit);
     856             : 
     857     4766660 :     idct32_stage7_avx2(x1, cospi, _r, cos_bit);
     858     4766080 :     idct32_stage8_avx2(x1, cospi, _r, cos_bit);
     859     4766740 :     idct32_stage9_avx2(output, x1);
     860     4766300 : }
     861             : 
     862     2042900 : static INLINE void idct64_stage4_high32_avx2(__m256i *x, const int32_t *cospi,
     863             :     const __m256i _r, int8_t cos_bit) {
     864             :     (void)cos_bit;
     865     2042900 :     const __m256i cospi_m04_p60 = pair_set_w16_epi16(-cospi[4], cospi[60]);
     866     2042870 :     const __m256i cospi_p60_p04 = pair_set_w16_epi16(cospi[60], cospi[4]);
     867     2042850 :     const __m256i cospi_m60_m04 = pair_set_w16_epi16(-cospi[60], -cospi[4]);
     868     2042820 :     const __m256i cospi_m36_p28 = pair_set_w16_epi16(-cospi[36], cospi[28]);
     869     2042790 :     const __m256i cospi_p28_p36 = pair_set_w16_epi16(cospi[28], cospi[36]);
     870     2042790 :     const __m256i cospi_m28_m36 = pair_set_w16_epi16(-cospi[28], -cospi[36]);
     871     2042790 :     const __m256i cospi_m20_p44 = pair_set_w16_epi16(-cospi[20], cospi[44]);
     872     2042780 :     const __m256i cospi_p44_p20 = pair_set_w16_epi16(cospi[44], cospi[20]);
     873     2042780 :     const __m256i cospi_m44_m20 = pair_set_w16_epi16(-cospi[44], -cospi[20]);
     874     2042790 :     const __m256i cospi_m52_p12 = pair_set_w16_epi16(-cospi[52], cospi[12]);
     875     2042800 :     const __m256i cospi_p12_p52 = pair_set_w16_epi16(cospi[12], cospi[52]);
     876     2042800 :     const __m256i cospi_m12_m52 = pair_set_w16_epi16(-cospi[12], -cospi[52]);
     877     2042810 :     btf_16_w16_avx2(cospi_m04_p60, cospi_p60_p04, &x[33], &x[62], _r, cos_bit);
     878     2043030 :     btf_16_w16_avx2(cospi_m60_m04, cospi_m04_p60, &x[34], &x[61], _r, cos_bit);
     879     2043050 :     btf_16_w16_avx2(cospi_m36_p28, cospi_p28_p36, &x[37], &x[58], _r, cos_bit);
     880     2043060 :     btf_16_w16_avx2(cospi_m28_m36, cospi_m36_p28, &x[38], &x[57], _r, cos_bit);
     881     2043070 :     btf_16_w16_avx2(cospi_m20_p44, cospi_p44_p20, &x[41], &x[54], _r, cos_bit);
     882     2043090 :     btf_16_w16_avx2(cospi_m44_m20, cospi_m20_p44, &x[42], &x[53], _r, cos_bit);
     883     2043100 :     btf_16_w16_avx2(cospi_m52_p12, cospi_p12_p52, &x[45], &x[50], _r, cos_bit);
     884     2043110 :     btf_16_w16_avx2(cospi_m12_m52, cospi_m52_p12, &x[46], &x[49], _r, cos_bit);
     885     2043120 : }
     886             : 
     887     2042990 : static INLINE void idct64_stage5_high48_avx2(__m256i *x, const int32_t *cospi,
     888             :     const __m256i _r, int8_t cos_bit) {
     889             :     (void)cos_bit;
     890     2042990 :     const __m256i cospi_m08_p56 = pair_set_w16_epi16(-cospi[8], cospi[56]);
     891     2042950 :     const __m256i cospi_p56_p08 = pair_set_w16_epi16(cospi[56], cospi[8]);
     892     2042910 :     const __m256i cospi_m56_m08 = pair_set_w16_epi16(-cospi[56], -cospi[8]);
     893     2042860 :     const __m256i cospi_m40_p24 = pair_set_w16_epi16(-cospi[40], cospi[24]);
     894     2042850 :     const __m256i cospi_p24_p40 = pair_set_w16_epi16(cospi[24], cospi[40]);
     895     2042840 :     const __m256i cospi_m24_m40 = pair_set_w16_epi16(-cospi[24], -cospi[40]);
     896     2042840 :     btf_16_w16_avx2(cospi_m08_p56, cospi_p56_p08, &x[17], &x[30], _r, cos_bit);
     897     2043070 :     btf_16_w16_avx2(cospi_m56_m08, cospi_m08_p56, &x[18], &x[29], _r, cos_bit);
     898     2043150 :     btf_16_w16_avx2(cospi_m40_p24, cospi_p24_p40, &x[21], &x[26], _r, cos_bit);
     899     2043120 :     btf_16_w16_avx2(cospi_m24_m40, cospi_m40_p24, &x[22], &x[25], _r, cos_bit);
     900     2043100 :     btf_16_adds_subs_avx2(&x[32], &x[35]);
     901     2043070 :     btf_16_adds_subs_avx2(&x[33], &x[34]);
     902     2043020 :     btf_16_adds_subs_avx2(&x[39], &x[36]);
     903     2042980 :     btf_16_adds_subs_avx2(&x[38], &x[37]);
     904     2042970 :     btf_16_adds_subs_avx2(&x[40], &x[43]);
     905     2042950 :     btf_16_adds_subs_avx2(&x[41], &x[42]);
     906     2042950 :     btf_16_adds_subs_avx2(&x[47], &x[44]);
     907     2042940 :     btf_16_adds_subs_avx2(&x[46], &x[45]);
     908     2042940 :     btf_16_adds_subs_avx2(&x[48], &x[51]);
     909     2042920 :     btf_16_adds_subs_avx2(&x[49], &x[50]);
     910     2042920 :     btf_16_adds_subs_avx2(&x[55], &x[52]);
     911     2042920 :     btf_16_adds_subs_avx2(&x[54], &x[53]);
     912     2042910 :     btf_16_adds_subs_avx2(&x[56], &x[59]);
     913     2042920 :     btf_16_adds_subs_avx2(&x[57], &x[58]);
     914     2042920 :     btf_16_adds_subs_avx2(&x[63], &x[60]);
     915     2042910 :     btf_16_adds_subs_avx2(&x[62], &x[61]);
     916     2042890 : }
     917             : 
     918     2043550 : static INLINE void idct64_stage6_high32_avx2(__m256i *x, const int32_t *cospi,
     919             :     const __m256i _r, int8_t cos_bit) {
     920             :     (void)cos_bit;
     921     2043550 :     const __m256i cospi_m08_p56 = pair_set_w16_epi16(-cospi[8], cospi[56]);
     922     2043530 :     const __m256i cospi_p56_p08 = pair_set_w16_epi16(cospi[56], cospi[8]);
     923     2043510 :     const __m256i cospi_m56_m08 = pair_set_w16_epi16(-cospi[56], -cospi[8]);
     924     2043480 :     const __m256i cospi_m40_p24 = pair_set_w16_epi16(-cospi[40], cospi[24]);
     925     2043450 :     const __m256i cospi_p24_p40 = pair_set_w16_epi16(cospi[24], cospi[40]);
     926     2043460 :     const __m256i cospi_m24_m40 = pair_set_w16_epi16(-cospi[24], -cospi[40]);
     927     2043450 :     btf_16_w16_avx2(cospi_m08_p56, cospi_p56_p08, &x[34], &x[61], _r, cos_bit);
     928     2043690 :     btf_16_w16_avx2(cospi_m08_p56, cospi_p56_p08, &x[35], &x[60], _r, cos_bit);
     929     2043740 :     btf_16_w16_avx2(cospi_m56_m08, cospi_m08_p56, &x[36], &x[59], _r, cos_bit);
     930     2043730 :     btf_16_w16_avx2(cospi_m56_m08, cospi_m08_p56, &x[37], &x[58], _r, cos_bit);
     931     2043730 :     btf_16_w16_avx2(cospi_m40_p24, cospi_p24_p40, &x[42], &x[53], _r, cos_bit);
     932     2043740 :     btf_16_w16_avx2(cospi_m40_p24, cospi_p24_p40, &x[43], &x[52], _r, cos_bit);
     933     2043730 :     btf_16_w16_avx2(cospi_m24_m40, cospi_m40_p24, &x[44], &x[51], _r, cos_bit);
     934     2043730 :     btf_16_w16_avx2(cospi_m24_m40, cospi_m40_p24, &x[45], &x[50], _r, cos_bit);
     935     2043730 : }
     936             : 
     937     2043070 : static INLINE void idct64_stage6_high48_avx2(__m256i *x, const int32_t *cospi,
     938             :     const __m256i _r, int8_t cos_bit) {
     939     2043070 :     btf_16_adds_subs_avx2(&x[16], &x[19]);
     940     2043070 :     btf_16_adds_subs_avx2(&x[17], &x[18]);
     941     2043040 :     btf_16_adds_subs_avx2(&x[23], &x[20]);
     942     2043010 :     btf_16_adds_subs_avx2(&x[22], &x[21]);
     943     2043000 :     btf_16_adds_subs_avx2(&x[24], &x[27]);
     944     2042980 :     btf_16_adds_subs_avx2(&x[25], &x[26]);
     945     2042950 :     btf_16_adds_subs_avx2(&x[31], &x[28]);
     946     2042940 :     btf_16_adds_subs_avx2(&x[30], &x[29]);
     947     2042930 :     idct64_stage6_high32_avx2(x, cospi, _r, cos_bit);
     948     2043130 : }
     949             : 
     950     2043650 : static INLINE void idct64_stage7_high48_avx2(__m256i *x, const int32_t *cospi,
     951             :     const __m256i _r, int8_t cos_bit) {
     952             :     (void)cos_bit;
     953     2043650 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
     954     2043630 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
     955     2043600 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
     956     2043580 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[18], &x[29], _r, cos_bit);
     957     2043730 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[19], &x[28], _r, cos_bit);
     958     2043740 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[20], &x[27], _r, cos_bit);
     959     2043740 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[21], &x[26], _r, cos_bit);
     960     2043740 :     btf_16_adds_subs_avx2(&x[32], &x[39]);
     961     2043710 :     btf_16_adds_subs_avx2(&x[33], &x[38]);
     962     2043670 :     btf_16_adds_subs_avx2(&x[34], &x[37]);
     963     2043620 :     btf_16_adds_subs_avx2(&x[35], &x[36]);
     964     2043600 :     btf_16_adds_subs_avx2(&x[47], &x[40]);
     965     2043590 :     btf_16_adds_subs_avx2(&x[46], &x[41]);
     966     2043580 :     btf_16_adds_subs_avx2(&x[45], &x[42]);
     967     2043560 :     btf_16_adds_subs_avx2(&x[44], &x[43]);
     968     2043540 :     btf_16_adds_subs_avx2(&x[48], &x[55]);
     969     2043540 :     btf_16_adds_subs_avx2(&x[49], &x[54]);
     970     2043540 :     btf_16_adds_subs_avx2(&x[50], &x[53]);
     971     2043540 :     btf_16_adds_subs_avx2(&x[51], &x[52]);
     972     2043540 :     btf_16_adds_subs_avx2(&x[63], &x[56]);
     973     2043540 :     btf_16_adds_subs_avx2(&x[62], &x[57]);
     974     2043540 :     btf_16_adds_subs_avx2(&x[61], &x[58]);
     975     2043540 :     btf_16_adds_subs_avx2(&x[60], &x[59]);
     976     2043540 : }
     977             : 
     978     2043700 : static INLINE void idct64_stage8_high48_avx2(__m256i *x, const int32_t *cospi,
     979             :     const __m256i _r, int8_t cos_bit) {
     980             :     (void)cos_bit;
     981     2043700 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
     982     2043660 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
     983     2043630 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
     984     2043610 :     btf_16_adds_subs_avx2(&x[16], &x[23]);
     985     2043610 :     btf_16_adds_subs_avx2(&x[17], &x[22]);
     986     2043630 :     btf_16_adds_subs_avx2(&x[18], &x[21]);
     987     2043610 :     btf_16_adds_subs_avx2(&x[19], &x[20]);
     988     2043620 :     btf_16_adds_subs_avx2(&x[31], &x[24]);
     989     2043620 :     btf_16_adds_subs_avx2(&x[30], &x[25]);
     990     2043620 :     btf_16_adds_subs_avx2(&x[29], &x[26]);
     991     2043620 :     btf_16_adds_subs_avx2(&x[28], &x[27]);
     992     2043620 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[36], &x[59], _r, cos_bit);
     993     2043720 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[37], &x[58], _r, cos_bit);
     994     2043740 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[38], &x[57], _r, cos_bit);
     995     2043740 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[39], &x[56], _r, cos_bit);
     996     2043750 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[40], &x[55], _r, cos_bit);
     997     2043760 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[41], &x[54], _r, cos_bit);
     998     2043740 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[42], &x[53], _r, cos_bit);
     999     2043750 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[43], &x[52], _r, cos_bit);
    1000     2043760 : }
    1001             : 
    1002     2043750 : static INLINE void idct64_stage9_avx2(__m256i *x, const int32_t *cospi,
    1003             :     const __m256i _r, int8_t cos_bit) {
    1004             :     (void)cos_bit;
    1005     2043750 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
    1006     2043740 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
    1007     2043730 :     btf_16_adds_subs_avx2(&x[0], &x[15]);
    1008     2043730 :     btf_16_adds_subs_avx2(&x[1], &x[14]);
    1009     2043720 :     btf_16_adds_subs_avx2(&x[2], &x[13]);
    1010     2043710 :     btf_16_adds_subs_avx2(&x[3], &x[12]);
    1011     2043700 :     btf_16_adds_subs_avx2(&x[4], &x[11]);
    1012     2043700 :     btf_16_adds_subs_avx2(&x[5], &x[10]);
    1013     2043700 :     btf_16_adds_subs_avx2(&x[6], &x[9]);
    1014     2043700 :     btf_16_adds_subs_avx2(&x[7], &x[8]);
    1015     2043700 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[20], &x[27], _r, cos_bit);
    1016     2043770 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[21], &x[26], _r, cos_bit);
    1017     2043780 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[22], &x[25], _r, cos_bit);
    1018     2043770 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[23], &x[24], _r, cos_bit);
    1019     2043770 :     btf_16_adds_subs_avx2(&x[32], &x[47]);
    1020     2043750 :     btf_16_adds_subs_avx2(&x[33], &x[46]);
    1021     2043730 :     btf_16_adds_subs_avx2(&x[34], &x[45]);
    1022     2043710 :     btf_16_adds_subs_avx2(&x[35], &x[44]);
    1023     2043690 :     btf_16_adds_subs_avx2(&x[36], &x[43]);
    1024     2043670 :     btf_16_adds_subs_avx2(&x[37], &x[42]);
    1025     2043660 :     btf_16_adds_subs_avx2(&x[38], &x[41]);
    1026     2043650 :     btf_16_adds_subs_avx2(&x[39], &x[40]);
    1027     2043650 :     btf_16_adds_subs_avx2(&x[63], &x[48]);
    1028     2043650 :     btf_16_adds_subs_avx2(&x[62], &x[49]);
    1029     2043660 :     btf_16_adds_subs_avx2(&x[61], &x[50]);
    1030     2043650 :     btf_16_adds_subs_avx2(&x[60], &x[51]);
    1031     2043650 :     btf_16_adds_subs_avx2(&x[59], &x[52]);
    1032     2043660 :     btf_16_adds_subs_avx2(&x[58], &x[53]);
    1033     2043650 :     btf_16_adds_subs_avx2(&x[57], &x[54]);
    1034     2043650 :     btf_16_adds_subs_avx2(&x[56], &x[55]);
    1035     2043640 : }
    1036             : 
    1037     2043660 : static INLINE void idct64_stage10_avx2(__m256i *x, const int32_t *cospi,
    1038             :     const __m256i _r, int8_t cos_bit) {
    1039             :     (void)cos_bit;
    1040     2043660 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
    1041     2043650 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
    1042     2043630 :     btf_16_adds_subs_avx2(&x[0], &x[31]);
    1043     2043620 :     btf_16_adds_subs_avx2(&x[1], &x[30]);
    1044     2043620 :     btf_16_adds_subs_avx2(&x[2], &x[29]);
    1045     2043620 :     btf_16_adds_subs_avx2(&x[3], &x[28]);
    1046     2043620 :     btf_16_adds_subs_avx2(&x[4], &x[27]);
    1047     2043620 :     btf_16_adds_subs_avx2(&x[5], &x[26]);
    1048     2043620 :     btf_16_adds_subs_avx2(&x[6], &x[25]);
    1049     2043620 :     btf_16_adds_subs_avx2(&x[7], &x[24]);
    1050     2043620 :     btf_16_adds_subs_avx2(&x[8], &x[23]);
    1051     2043620 :     btf_16_adds_subs_avx2(&x[9], &x[22]);
    1052     2043620 :     btf_16_adds_subs_avx2(&x[10], &x[21]);
    1053     2043620 :     btf_16_adds_subs_avx2(&x[11], &x[20]);
    1054     2043610 :     btf_16_adds_subs_avx2(&x[12], &x[19]);
    1055     2043600 :     btf_16_adds_subs_avx2(&x[13], &x[18]);
    1056     2043590 :     btf_16_adds_subs_avx2(&x[14], &x[17]);
    1057     2043580 :     btf_16_adds_subs_avx2(&x[15], &x[16]);
    1058     2043580 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[40], &x[55], _r, cos_bit);
    1059     2043710 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[41], &x[54], _r, cos_bit);
    1060     2043720 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[42], &x[53], _r, cos_bit);
    1061     2043720 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[43], &x[52], _r, cos_bit);
    1062     2043740 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[44], &x[51], _r, cos_bit);
    1063     2043750 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[45], &x[50], _r, cos_bit);
    1064     2043750 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[46], &x[49], _r, cos_bit);
    1065     2043750 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[47], &x[48], _r, cos_bit);
    1066     2043750 : }
    1067             : 
    1068     2043740 : static INLINE void idct64_stage11_avx2(__m256i *output, __m256i *x) {
    1069     2043740 :     btf_16_adds_subs_out_avx2(&output[0], &output[63], x[0], x[63]);
    1070     2043720 :     btf_16_adds_subs_out_avx2(&output[1], &output[62], x[1], x[62]);
    1071     2043710 :     btf_16_adds_subs_out_avx2(&output[2], &output[61], x[2], x[61]);
    1072     2043680 :     btf_16_adds_subs_out_avx2(&output[3], &output[60], x[3], x[60]);
    1073     2043680 :     btf_16_adds_subs_out_avx2(&output[4], &output[59], x[4], x[59]);
    1074     2043680 :     btf_16_adds_subs_out_avx2(&output[5], &output[58], x[5], x[58]);
    1075     2043670 :     btf_16_adds_subs_out_avx2(&output[6], &output[57], x[6], x[57]);
    1076     2043660 :     btf_16_adds_subs_out_avx2(&output[7], &output[56], x[7], x[56]);
    1077     2043670 :     btf_16_adds_subs_out_avx2(&output[8], &output[55], x[8], x[55]);
    1078     2043670 :     btf_16_adds_subs_out_avx2(&output[9], &output[54], x[9], x[54]);
    1079     2043670 :     btf_16_adds_subs_out_avx2(&output[10], &output[53], x[10], x[53]);
    1080     2043670 :     btf_16_adds_subs_out_avx2(&output[11], &output[52], x[11], x[52]);
    1081     2043670 :     btf_16_adds_subs_out_avx2(&output[12], &output[51], x[12], x[51]);
    1082     2043660 :     btf_16_adds_subs_out_avx2(&output[13], &output[50], x[13], x[50]);
    1083     2043660 :     btf_16_adds_subs_out_avx2(&output[14], &output[49], x[14], x[49]);
    1084     2043660 :     btf_16_adds_subs_out_avx2(&output[15], &output[48], x[15], x[48]);
    1085     2043680 :     btf_16_adds_subs_out_avx2(&output[16], &output[47], x[16], x[47]);
    1086     2043670 :     btf_16_adds_subs_out_avx2(&output[17], &output[46], x[17], x[46]);
    1087     2043670 :     btf_16_adds_subs_out_avx2(&output[18], &output[45], x[18], x[45]);
    1088     2043660 :     btf_16_adds_subs_out_avx2(&output[19], &output[44], x[19], x[44]);
    1089     2043640 :     btf_16_adds_subs_out_avx2(&output[20], &output[43], x[20], x[43]);
    1090     2043640 :     btf_16_adds_subs_out_avx2(&output[21], &output[42], x[21], x[42]);
    1091     2043640 :     btf_16_adds_subs_out_avx2(&output[22], &output[41], x[22], x[41]);
    1092     2043630 :     btf_16_adds_subs_out_avx2(&output[23], &output[40], x[23], x[40]);
    1093     2043630 :     btf_16_adds_subs_out_avx2(&output[24], &output[39], x[24], x[39]);
    1094     2043630 :     btf_16_adds_subs_out_avx2(&output[25], &output[38], x[25], x[38]);
    1095     2043640 :     btf_16_adds_subs_out_avx2(&output[26], &output[37], x[26], x[37]);
    1096     2043630 :     btf_16_adds_subs_out_avx2(&output[27], &output[36], x[27], x[36]);
    1097     2043620 :     btf_16_adds_subs_out_avx2(&output[28], &output[35], x[28], x[35]);
    1098     2043620 :     btf_16_adds_subs_out_avx2(&output[29], &output[34], x[29], x[34]);
    1099     2043630 :     btf_16_adds_subs_out_avx2(&output[30], &output[33], x[30], x[33]);
    1100     2043630 :     btf_16_adds_subs_out_avx2(&output[31], &output[32], x[31], x[32]);
    1101     2043660 : }
    1102             : 
    1103         465 : static void idct64_low1_new_avx2(const __m256i *input, __m256i *output,
    1104             :     int8_t cos_bit) {
    1105             :     (void)cos_bit;
    1106         465 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
    1107             : 
    1108             :     // stage 1
    1109             :     __m256i x[32];
    1110         465 :     x[0] = input[0];
    1111             : 
    1112             :     // stage 2
    1113             :     // stage 3
    1114             :     // stage 4
    1115             :     // stage 5
    1116             :     // stage 6
    1117        1860 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
    1118             : 
    1119             :     // stage 7
    1120             :     // stage 8
    1121             :     // stage 9
    1122             :     // stage 10
    1123             :     // stage 11
    1124         465 :     output[0] = x[0];
    1125         465 :     output[63] = x[0];
    1126         465 :     output[1] = x[1];
    1127         465 :     output[62] = x[1];
    1128         465 :     output[2] = x[1];
    1129         465 :     output[61] = x[1];
    1130         465 :     output[3] = x[0];
    1131         465 :     output[60] = x[0];
    1132         465 :     output[4] = x[0];
    1133         465 :     output[59] = x[0];
    1134         465 :     output[5] = x[1];
    1135         465 :     output[58] = x[1];
    1136         465 :     output[6] = x[1];
    1137         465 :     output[57] = x[1];
    1138         465 :     output[7] = x[0];
    1139         465 :     output[56] = x[0];
    1140         465 :     output[8] = x[0];
    1141         465 :     output[55] = x[0];
    1142         465 :     output[9] = x[1];
    1143         465 :     output[54] = x[1];
    1144         465 :     output[10] = x[1];
    1145         465 :     output[53] = x[1];
    1146         465 :     output[11] = x[0];
    1147         465 :     output[52] = x[0];
    1148         465 :     output[12] = x[0];
    1149         465 :     output[51] = x[0];
    1150         465 :     output[13] = x[1];
    1151         465 :     output[50] = x[1];
    1152         465 :     output[14] = x[1];
    1153         465 :     output[49] = x[1];
    1154         465 :     output[15] = x[0];
    1155         465 :     output[48] = x[0];
    1156         465 :     output[16] = x[0];
    1157         465 :     output[47] = x[0];
    1158         465 :     output[17] = x[1];
    1159         465 :     output[46] = x[1];
    1160         465 :     output[18] = x[1];
    1161         465 :     output[45] = x[1];
    1162         465 :     output[19] = x[0];
    1163         465 :     output[44] = x[0];
    1164         465 :     output[20] = x[0];
    1165         465 :     output[43] = x[0];
    1166         465 :     output[21] = x[1];
    1167         465 :     output[42] = x[1];
    1168         465 :     output[22] = x[1];
    1169         465 :     output[41] = x[1];
    1170         465 :     output[23] = x[0];
    1171         465 :     output[40] = x[0];
    1172         465 :     output[24] = x[0];
    1173         465 :     output[39] = x[0];
    1174         465 :     output[25] = x[1];
    1175         465 :     output[38] = x[1];
    1176         465 :     output[26] = x[1];
    1177         465 :     output[37] = x[1];
    1178         465 :     output[27] = x[0];
    1179         465 :     output[36] = x[0];
    1180         465 :     output[28] = x[0];
    1181         465 :     output[35] = x[0];
    1182         465 :     output[29] = x[1];
    1183         465 :     output[34] = x[1];
    1184         465 :     output[30] = x[1];
    1185         465 :     output[33] = x[1];
    1186         465 :     output[31] = x[0];
    1187         465 :     output[32] = x[0];
    1188         465 : }
    1189             : 
    1190         600 : static void idct64_low8_new_avx2(const __m256i *input, __m256i *output,
    1191             :     int8_t cos_bit) {
    1192             :     (void)cos_bit;
    1193         600 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
    1194         600 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
    1195         600 :     const __m256i cospi_m04_p60 = pair_set_w16_epi16(-cospi[4], cospi[60]);
    1196         600 :     const __m256i cospi_p60_p04 = pair_set_w16_epi16(cospi[60], cospi[4]);
    1197         600 :     const __m256i cospi_m36_p28 = pair_set_w16_epi16(-cospi[36], cospi[28]);
    1198         600 :     const __m256i cospi_m28_m36 = pair_set_w16_epi16(-cospi[28], -cospi[36]);
    1199         600 :     const __m256i cospi_m20_p44 = pair_set_w16_epi16(-cospi[20], cospi[44]);
    1200         600 :     const __m256i cospi_p44_p20 = pair_set_w16_epi16(cospi[44], cospi[20]);
    1201         600 :     const __m256i cospi_m52_p12 = pair_set_w16_epi16(-cospi[52], cospi[12]);
    1202         600 :     const __m256i cospi_m12_m52 = pair_set_w16_epi16(-cospi[12], -cospi[52]);
    1203         600 :     const __m256i cospi_m08_p56 = pair_set_w16_epi16(-cospi[8], cospi[56]);
    1204         600 :     const __m256i cospi_p56_p08 = pair_set_w16_epi16(cospi[56], cospi[8]);
    1205         600 :     const __m256i cospi_m40_p24 = pair_set_w16_epi16(-cospi[40], cospi[24]);
    1206         600 :     const __m256i cospi_m24_m40 = pair_set_w16_epi16(-cospi[24], -cospi[40]);
    1207         600 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
    1208         600 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
    1209         600 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
    1210         600 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
    1211             : 
    1212             :     // stage 1
    1213             :     __m256i x[64];
    1214         600 :     x[0] = input[0];
    1215         600 :     x[8] = input[4];
    1216         600 :     x[16] = input[2];
    1217         600 :     x[24] = input[6];
    1218         600 :     x[32] = input[1];
    1219         600 :     x[40] = input[5];
    1220         600 :     x[48] = input[3];
    1221         600 :     x[56] = input[7];
    1222             : 
    1223             :     // stage 2
    1224        2400 :     btf_16_w16_0_avx2(cospi[63], cospi[1], x[32], x[32], x[63]);
    1225        2400 :     btf_16_w16_0_avx2(-cospi[57], cospi[7], x[56], x[39], x[56]);
    1226        2400 :     btf_16_w16_0_avx2(cospi[59], cospi[5], x[40], x[40], x[55]);
    1227        2400 :     btf_16_w16_0_avx2(-cospi[61], cospi[3], x[48], x[47], x[48]);
    1228             : 
    1229             :     // stage 3
    1230        2400 :     btf_16_w16_0_avx2(cospi[62], cospi[2], x[16], x[16], x[31]);
    1231        2400 :     btf_16_w16_0_avx2(-cospi[58], cospi[6], x[24], x[23], x[24]);
    1232         600 :     x[33] = x[32];
    1233         600 :     x[38] = x[39];
    1234         600 :     x[41] = x[40];
    1235         600 :     x[46] = x[47];
    1236         600 :     x[49] = x[48];
    1237         600 :     x[54] = x[55];
    1238         600 :     x[57] = x[56];
    1239         600 :     x[62] = x[63];
    1240             : 
    1241             :     // stage 4
    1242        2400 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x[8], x[8], x[15]);
    1243         600 :     x[17] = x[16];
    1244         600 :     x[22] = x[23];
    1245         600 :     x[25] = x[24];
    1246         600 :     x[30] = x[31];
    1247         600 :     btf_16_w16_avx2(cospi_m04_p60, cospi_p60_p04, &x[33], &x[62], _r, cos_bit);
    1248         600 :     btf_16_w16_avx2(cospi_m28_m36, cospi_m36_p28, &x[38], &x[57], _r, cos_bit);
    1249         600 :     btf_16_w16_avx2(cospi_m20_p44, cospi_p44_p20, &x[41], &x[54], _r, cos_bit);
    1250         600 :     btf_16_w16_avx2(cospi_m12_m52, cospi_m52_p12, &x[46], &x[49], _r, cos_bit);
    1251             : 
    1252             :     // stage 5
    1253         600 :     x[9] = x[8];
    1254         600 :     x[14] = x[15];
    1255         600 :     btf_16_w16_avx2(cospi_m08_p56, cospi_p56_p08, &x[17], &x[30], _r, cos_bit);
    1256         600 :     btf_16_w16_avx2(cospi_m24_m40, cospi_m40_p24, &x[22], &x[25], _r, cos_bit);
    1257         600 :     x[35] = x[32];
    1258         600 :     x[34] = x[33];
    1259         600 :     x[36] = x[39];
    1260         600 :     x[37] = x[38];
    1261         600 :     x[43] = x[40];
    1262         600 :     x[42] = x[41];
    1263         600 :     x[44] = x[47];
    1264         600 :     x[45] = x[46];
    1265         600 :     x[51] = x[48];
    1266         600 :     x[50] = x[49];
    1267         600 :     x[52] = x[55];
    1268         600 :     x[53] = x[54];
    1269         600 :     x[59] = x[56];
    1270         600 :     x[58] = x[57];
    1271         600 :     x[60] = x[63];
    1272         600 :     x[61] = x[62];
    1273             : 
    1274             :     // stage 6
    1275        2400 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
    1276         600 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[9], &x[14], _r, cos_bit);
    1277         600 :     x[19] = x[16];
    1278         600 :     x[18] = x[17];
    1279         600 :     x[20] = x[23];
    1280         600 :     x[21] = x[22];
    1281         600 :     x[27] = x[24];
    1282         600 :     x[26] = x[25];
    1283         600 :     x[28] = x[31];
    1284         600 :     x[29] = x[30];
    1285         600 :     idct64_stage6_high32_avx2(x, cospi, _r, cos_bit);
    1286             : 
    1287             :     // stage 7
    1288         600 :     x[3] = x[0];
    1289         600 :     x[2] = x[1];
    1290         600 :     x[11] = x[8];
    1291         600 :     x[10] = x[9];
    1292         600 :     x[12] = x[15];
    1293         600 :     x[13] = x[14];
    1294         600 :     idct64_stage7_high48_avx2(x, cospi, _r, cos_bit);
    1295             : 
    1296             :     // stage 8
    1297         600 :     x[7] = x[0];
    1298         600 :     x[6] = x[1];
    1299         600 :     x[5] = x[2];
    1300         600 :     x[4] = x[3];
    1301         600 :     x[9] = x[9];
    1302         600 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[10], &x[13], _r, cos_bit);
    1303         600 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[11], &x[12], _r, cos_bit);
    1304         600 :     idct64_stage8_high48_avx2(x, cospi, _r, cos_bit);
    1305             : 
    1306         600 :     idct64_stage9_avx2(x, cospi, _r, cos_bit);
    1307         600 :     idct64_stage10_avx2(x, cospi, _r, cos_bit);
    1308         600 :     idct64_stage11_avx2(output, x);
    1309         600 : }
    1310             : 
    1311          55 : static void idct64_low16_new_avx2(const __m256i *input, __m256i *output,
    1312             :     int8_t cos_bit) {
    1313             :     (void)cos_bit;
    1314          55 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
    1315          55 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
    1316             : 
    1317          55 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
    1318          55 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
    1319          55 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
    1320          55 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
    1321          55 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
    1322             : 
    1323             :     // stage 1
    1324             :     __m256i x[64];
    1325          55 :     x[0] = input[0];
    1326          55 :     x[4] = input[8];
    1327          55 :     x[8] = input[4];
    1328          55 :     x[12] = input[12];
    1329          55 :     x[16] = input[2];
    1330          55 :     x[20] = input[10];
    1331          55 :     x[24] = input[6];
    1332          55 :     x[28] = input[14];
    1333          55 :     x[32] = input[1];
    1334          55 :     x[36] = input[9];
    1335          55 :     x[40] = input[5];
    1336          55 :     x[44] = input[13];
    1337          55 :     x[48] = input[3];
    1338          55 :     x[52] = input[11];
    1339          55 :     x[56] = input[7];
    1340          55 :     x[60] = input[15];
    1341             : 
    1342             :     // stage 2
    1343         220 :     btf_16_w16_0_avx2(cospi[63], cospi[1], x[32], x[32], x[63]);
    1344         220 :     btf_16_w16_0_avx2(-cospi[49], cospi[15], x[60], x[35], x[60]);
    1345         220 :     btf_16_w16_0_avx2(cospi[55], cospi[9], x[36], x[36], x[59]);
    1346         220 :     btf_16_w16_0_avx2(-cospi[57], cospi[7], x[56], x[39], x[56]);
    1347         220 :     btf_16_w16_0_avx2(cospi[59], cospi[5], x[40], x[40], x[55]);
    1348         220 :     btf_16_w16_0_avx2(-cospi[53], cospi[11], x[52], x[43], x[52]);
    1349         220 :     btf_16_w16_0_avx2(cospi[51], cospi[13], x[44], x[44], x[51]);
    1350         220 :     btf_16_w16_0_avx2(-cospi[61], cospi[3], x[48], x[47], x[48]);
    1351             : 
    1352             :     // stage 3
    1353         220 :     btf_16_w16_0_avx2(cospi[62], cospi[2], x[16], x[16], x[31]);
    1354         220 :     btf_16_w16_0_avx2(-cospi[50], cospi[14], x[28], x[19], x[28]);
    1355         220 :     btf_16_w16_0_avx2(cospi[54], cospi[10], x[20], x[20], x[27]);
    1356         220 :     btf_16_w16_0_avx2(-cospi[58], cospi[6], x[24], x[23], x[24]);
    1357          55 :     x[33] = x[32];
    1358          55 :     x[34] = x[35];
    1359          55 :     x[37] = x[36];
    1360          55 :     x[38] = x[39];
    1361          55 :     x[41] = x[40];
    1362          55 :     x[42] = x[43];
    1363          55 :     x[45] = x[44];
    1364          55 :     x[46] = x[47];
    1365          55 :     x[49] = x[48];
    1366          55 :     x[50] = x[51];
    1367          55 :     x[53] = x[52];
    1368          55 :     x[54] = x[55];
    1369          55 :     x[57] = x[56];
    1370          55 :     x[58] = x[59];
    1371          55 :     x[61] = x[60];
    1372          55 :     x[62] = x[63];
    1373             : 
    1374             :     // stage 4
    1375         220 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x[8], x[8], x[15]);
    1376         220 :     btf_16_w16_0_avx2(-cospi[52], cospi[12], x[12], x[11], x[12]);
    1377          55 :     x[17] = x[16];
    1378          55 :     x[18] = x[19];
    1379          55 :     x[21] = x[20];
    1380          55 :     x[22] = x[23];
    1381          55 :     x[25] = x[24];
    1382          55 :     x[26] = x[27];
    1383          55 :     x[29] = x[28];
    1384          55 :     x[30] = x[31];
    1385          55 :     idct64_stage4_high32_avx2(x, cospi, _r, cos_bit);
    1386             : 
    1387             :     // stage 5
    1388         220 :     btf_16_w16_0_avx2(cospi[56], cospi[8], x[4], x[4], x[7]);
    1389          55 :     x[9] = x[8];
    1390          55 :     x[10] = x[11];
    1391          55 :     x[13] = x[12];
    1392          55 :     x[14] = x[15];
    1393          55 :     idct64_stage5_high48_avx2(x, cospi, _r, cos_bit);
    1394             : 
    1395             :     // stage 6
    1396         220 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
    1397          55 :     x[5] = x[4];
    1398          55 :     x[6] = x[7];
    1399          55 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[9], &x[14], _r, cos_bit);
    1400          55 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[10], &x[13], _r, cos_bit);
    1401          55 :     idct64_stage6_high48_avx2(x, cospi, _r, cos_bit);
    1402             : 
    1403             :     // stage 7
    1404          55 :     x[3] = x[0];
    1405          55 :     x[2] = x[1];
    1406          55 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[5], &x[6], _r, cos_bit);
    1407          55 :     btf_16_adds_subs_avx2(&x[8], &x[11]);
    1408          55 :     btf_16_adds_subs_avx2(&x[9], &x[10]);
    1409          55 :     btf_16_adds_subs_avx2(&x[15], &x[12]);
    1410          55 :     btf_16_adds_subs_avx2(&x[14], &x[13]);
    1411          55 :     idct64_stage7_high48_avx2(x, cospi, _r, cos_bit);
    1412             : 
    1413             :     // stage 8
    1414          55 :     btf_16_adds_subs_avx2(&x[0], &x[7]);
    1415          55 :     btf_16_adds_subs_avx2(&x[1], &x[6]);
    1416          55 :     btf_16_adds_subs_avx2(&x[2], &x[5]);
    1417          55 :     btf_16_adds_subs_avx2(&x[3], &x[4]);
    1418          55 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[10], &x[13], _r, cos_bit);
    1419          55 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[11], &x[12], _r, cos_bit);
    1420          55 :     idct64_stage8_high48_avx2(x, cospi, _r, cos_bit);
    1421             : 
    1422          55 :     idct64_stage9_avx2(x, cospi, _r, cos_bit);
    1423          55 :     idct64_stage10_avx2(x, cospi, _r, cos_bit);
    1424          55 :     idct64_stage11_avx2(output, x);
    1425          55 : }
    1426             : 
    1427     2043030 : static void idct64_low32_new_avx2(const __m256i *input, __m256i *output,
    1428             :     int8_t cos_bit) {
    1429             :     (void)cos_bit;
    1430     2043030 :     const int32_t *cospi = cospi_arr(INV_COS_BIT);
    1431     2043020 :     const __m256i _r = _mm256_set1_epi32(1 << (INV_COS_BIT - 1));
    1432             : 
    1433     2043020 :     const __m256i cospi_p32_p32 = pair_set_w16_epi16(cospi[32], cospi[32]);
    1434     2043000 :     const __m256i cospi_m16_p48 = pair_set_w16_epi16(-cospi[16], cospi[48]);
    1435     2042960 :     const __m256i cospi_p48_p16 = pair_set_w16_epi16(cospi[48], cospi[16]);
    1436     2042920 :     const __m256i cospi_m48_m16 = pair_set_w16_epi16(-cospi[48], -cospi[16]);
    1437     2042900 :     const __m256i cospi_m32_p32 = pair_set_w16_epi16(-cospi[32], cospi[32]);
    1438             : 
    1439             :     // stage 1
    1440             :     __m256i x[64];
    1441     2043040 :     x[0] = input[0];
    1442     2043040 :     x[2] = input[16];
    1443     2043040 :     x[4] = input[8];
    1444     2043040 :     x[6] = input[24];
    1445     2043040 :     x[8] = input[4];
    1446     2043040 :     x[10] = input[20];
    1447     2043040 :     x[12] = input[12];
    1448     2043040 :     x[14] = input[28];
    1449     2043040 :     x[16] = input[2];
    1450     2043040 :     x[18] = input[18];
    1451     2043040 :     x[20] = input[10];
    1452     2043040 :     x[22] = input[26];
    1453     2043040 :     x[24] = input[6];
    1454     2043040 :     x[26] = input[22];
    1455     2043040 :     x[28] = input[14];
    1456     2043040 :     x[30] = input[30];
    1457     2043040 :     x[32] = input[1];
    1458     2043040 :     x[34] = input[17];
    1459     2043040 :     x[36] = input[9];
    1460     2043040 :     x[38] = input[25];
    1461     2043040 :     x[40] = input[5];
    1462     2043040 :     x[42] = input[21];
    1463     2043040 :     x[44] = input[13];
    1464     2043040 :     x[46] = input[29];
    1465     2043040 :     x[48] = input[3];
    1466     2043040 :     x[50] = input[19];
    1467     2043040 :     x[52] = input[11];
    1468     2043040 :     x[54] = input[27];
    1469     2043040 :     x[56] = input[7];
    1470     2043040 :     x[58] = input[23];
    1471     2043040 :     x[60] = input[15];
    1472     2043040 :     x[62] = input[31];
    1473             : 
    1474             :     // stage 2
    1475     8172150 :     btf_16_w16_0_avx2(cospi[63], cospi[1], x[32], x[32], x[63]);
    1476     8172150 :     btf_16_w16_0_avx2(-cospi[33], cospi[31], x[62], x[33], x[62]);
    1477     8172150 :     btf_16_w16_0_avx2(cospi[47], cospi[17], x[34], x[34], x[61]);
    1478     8172150 :     btf_16_w16_0_avx2(-cospi[49], cospi[15], x[60], x[35], x[60]);
    1479     8172150 :     btf_16_w16_0_avx2(cospi[55], cospi[9], x[36], x[36], x[59]);
    1480     8172150 :     btf_16_w16_0_avx2(-cospi[41], cospi[23], x[58], x[37], x[58]);
    1481     8172150 :     btf_16_w16_0_avx2(cospi[39], cospi[25], x[38], x[38], x[57]);
    1482     8172150 :     btf_16_w16_0_avx2(-cospi[57], cospi[7], x[56], x[39], x[56]);
    1483     8172150 :     btf_16_w16_0_avx2(cospi[59], cospi[5], x[40], x[40], x[55]);
    1484     8172150 :     btf_16_w16_0_avx2(-cospi[37], cospi[27], x[54], x[41], x[54]);
    1485     8172150 :     btf_16_w16_0_avx2(cospi[43], cospi[21], x[42], x[42], x[53]);
    1486     8172150 :     btf_16_w16_0_avx2(-cospi[53], cospi[11], x[52], x[43], x[52]);
    1487     8172150 :     btf_16_w16_0_avx2(cospi[51], cospi[13], x[44], x[44], x[51]);
    1488     8172150 :     btf_16_w16_0_avx2(-cospi[45], cospi[19], x[50], x[45], x[50]);
    1489     8172150 :     btf_16_w16_0_avx2(cospi[35], cospi[29], x[46], x[46], x[49]);
    1490     8172150 :     btf_16_w16_0_avx2(-cospi[61], cospi[3], x[48], x[47], x[48]);
    1491             : 
    1492             :     // stage 3
    1493     8172150 :     btf_16_w16_0_avx2(cospi[62], cospi[2], x[16], x[16], x[31]);
    1494     8172150 :     btf_16_w16_0_avx2(-cospi[34], cospi[30], x[30], x[17], x[30]);
    1495     8172150 :     btf_16_w16_0_avx2(cospi[46], cospi[18], x[18], x[18], x[29]);
    1496     8172150 :     btf_16_w16_0_avx2(-cospi[50], cospi[14], x[28], x[19], x[28]);
    1497     8172150 :     btf_16_w16_0_avx2(cospi[54], cospi[10], x[20], x[20], x[27]);
    1498     8172150 :     btf_16_w16_0_avx2(-cospi[42], cospi[22], x[26], x[21], x[26]);
    1499     8172150 :     btf_16_w16_0_avx2(cospi[38], cospi[26], x[22], x[22], x[25]);
    1500     8172150 :     btf_16_w16_0_avx2(-cospi[58], cospi[6], x[24], x[23], x[24]);
    1501     2043040 :     btf_16_adds_subs_avx2(&x[32], &x[33]);
    1502     2042940 :     btf_16_adds_subs_avx2(&x[35], &x[34]);
    1503     2042950 :     btf_16_adds_subs_avx2(&x[36], &x[37]);
    1504     2042910 :     btf_16_adds_subs_avx2(&x[39], &x[38]);
    1505     2042900 :     btf_16_adds_subs_avx2(&x[40], &x[41]);
    1506     2042880 :     btf_16_adds_subs_avx2(&x[43], &x[42]);
    1507     2042880 :     btf_16_adds_subs_avx2(&x[44], &x[45]);
    1508     2042880 :     btf_16_adds_subs_avx2(&x[47], &x[46]);
    1509     2042860 :     btf_16_adds_subs_avx2(&x[48], &x[49]);
    1510     2042840 :     btf_16_adds_subs_avx2(&x[51], &x[50]);
    1511     2042820 :     btf_16_adds_subs_avx2(&x[52], &x[53]);
    1512     2042810 :     btf_16_adds_subs_avx2(&x[55], &x[54]);
    1513     2042810 :     btf_16_adds_subs_avx2(&x[56], &x[57]);
    1514     2042810 :     btf_16_adds_subs_avx2(&x[59], &x[58]);
    1515     2042810 :     btf_16_adds_subs_avx2(&x[60], &x[61]);
    1516     2042810 :     btf_16_adds_subs_avx2(&x[63], &x[62]);
    1517             : 
    1518             :     // stage 4
    1519     8171780 :     btf_16_w16_0_avx2(cospi[60], cospi[4], x[8], x[8], x[15]);
    1520     8171780 :     btf_16_w16_0_avx2(-cospi[36], cospi[28], x[14], x[9], x[14]);
    1521     8171780 :     btf_16_w16_0_avx2(cospi[44], cospi[20], x[10], x[10], x[13]);
    1522     8171780 :     btf_16_w16_0_avx2(-cospi[52], cospi[12], x[12], x[11], x[12]);
    1523     2042940 :     btf_16_adds_subs_avx2(&x[16], &x[17]);
    1524     2042970 :     btf_16_adds_subs_avx2(&x[19], &x[18]);
    1525     2042950 :     btf_16_adds_subs_avx2(&x[20], &x[21]);
    1526     2042880 :     btf_16_adds_subs_avx2(&x[23], &x[22]);
    1527     2042840 :     btf_16_adds_subs_avx2(&x[24], &x[25]);
    1528     2042840 :     btf_16_adds_subs_avx2(&x[27], &x[26]);
    1529     2042830 :     btf_16_adds_subs_avx2(&x[28], &x[29]);
    1530     2042830 :     btf_16_adds_subs_avx2(&x[31], &x[30]);
    1531     2042800 :     idct64_stage4_high32_avx2(x, cospi, _r, cos_bit);
    1532             : 
    1533             :     // stage 5
    1534     8172310 :     btf_16_w16_0_avx2(cospi[56], cospi[8], x[4], x[4], x[7]);
    1535     8172310 :     btf_16_w16_0_avx2(-cospi[40], cospi[24], x[6], x[5], x[6]);
    1536     2043080 :     btf_16_adds_subs_avx2(&x[8], &x[9]);
    1537     2043040 :     btf_16_adds_subs_avx2(&x[11], &x[10]);
    1538     2043020 :     btf_16_adds_subs_avx2(&x[12], &x[13]);
    1539     2042960 :     btf_16_adds_subs_avx2(&x[15], &x[14]);
    1540     2042910 :     idct64_stage5_high48_avx2(x, cospi, _r, cos_bit);
    1541             : 
    1542             :     // stage 6
    1543     8171870 :     btf_16_w16_0_avx2(cospi[32], cospi[32], x[0], x[0], x[1]);
    1544     8171870 :     btf_16_w16_0_avx2(cospi[48], cospi[16], x[2], x[2], x[3]);
    1545     2042970 :     btf_16_adds_subs_avx2(&x[4], &x[5]);
    1546     2043010 :     btf_16_adds_subs_avx2(&x[7], &x[6]);
    1547     2042990 :     btf_16_w16_avx2(cospi_m16_p48, cospi_p48_p16, &x[9], &x[14], _r, cos_bit);
    1548     2043030 :     btf_16_w16_avx2(cospi_m48_m16, cospi_m16_p48, &x[10], &x[13], _r, cos_bit);
    1549     2043030 :     idct64_stage6_high48_avx2(x, cospi, _r, cos_bit);
    1550             : 
    1551             :     // stage 7
    1552     2043080 :     btf_16_adds_subs_avx2(&x[0], &x[3]);
    1553     2043060 :     btf_16_adds_subs_avx2(&x[1], &x[2]);
    1554     2043030 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[5], &x[6], _r, cos_bit);
    1555     2043120 :     btf_16_adds_subs_avx2(&x[8], &x[11]);
    1556     2043080 :     btf_16_adds_subs_avx2(&x[9], &x[10]);
    1557     2043030 :     btf_16_adds_subs_avx2(&x[15], &x[12]);
    1558     2042970 :     btf_16_adds_subs_avx2(&x[14], &x[13]);
    1559     2042960 :     idct64_stage7_high48_avx2(x, cospi, _r, cos_bit);
    1560             : 
    1561             :     // stage 8
    1562     2042890 :     btf_16_adds_subs_avx2(&x[0], &x[7]);
    1563     2042890 :     btf_16_adds_subs_avx2(&x[1], &x[6]);
    1564     2042880 :     btf_16_adds_subs_avx2(&x[2], &x[5]);
    1565     2042880 :     btf_16_adds_subs_avx2(&x[3], &x[4]);
    1566     2042880 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[10], &x[13], _r, cos_bit);
    1567     2043030 :     btf_16_w16_avx2(cospi_m32_p32, cospi_p32_p32, &x[11], &x[12], _r, cos_bit);
    1568     2043040 :     idct64_stage8_high48_avx2(x, cospi, _r, cos_bit);
    1569             : 
    1570             :     // stage 9~11
    1571     2043100 :     idct64_stage9_avx2(x, cospi, _r, cos_bit);
    1572     2042990 :     idct64_stage10_avx2(x, cospi, _r, cos_bit);
    1573     2043100 :     idct64_stage11_avx2(output, x);
    1574     2043010 : }
    1575             : 
    1576             : typedef void(*transform_1d_avx2)(const __m256i *input, __m256i *output,
    1577             :     int8_t cos_bit);
    1578             : 
    1579             : // 1D functions process 16 pixels at one time.
    1580             : static const transform_1d_avx2
    1581             : lowbd_txfm_all_1d_zeros_w16_arr[TX_SIZES][ITX_TYPES_1D][4] = {
    1582             :     {
    1583             :         { NULL, NULL, NULL, NULL },
    1584             :         { NULL, NULL, NULL, NULL },
    1585             :         { NULL, NULL, NULL, NULL },
    1586             :     },
    1587             :     {
    1588             :         { NULL, NULL, NULL, NULL },
    1589             :         { NULL, NULL, NULL, NULL },
    1590             :         { NULL, NULL, NULL, NULL } },
    1591             :     {
    1592             :         { idct16_low1_new_avx2, idct16_low8_new_avx2, idct16_new_avx2, NULL },
    1593             :         { iadst16_low1_new_avx2, iadst16_low8_new_avx2, iadst16_new_avx2,
    1594             :         NULL },
    1595             :         { NULL, NULL, NULL, NULL },
    1596             :     },
    1597             :     {
    1598             :         { idct32_low1_new_avx2, idct32_low8_new_avx2, idct32_low16_new_avx2,
    1599             :           idct32_new_avx2 },
    1600             :         { NULL, NULL, NULL, NULL },
    1601             :         { NULL, NULL, NULL, NULL } },
    1602             :     {
    1603             :         { idct64_low1_new_avx2, idct64_low8_new_avx2, idct64_low16_new_avx2,
    1604             :         idct64_low32_new_avx2 },
    1605             :         { NULL, NULL, NULL, NULL },
    1606             :         { NULL, NULL, NULL, NULL } }
    1607             : };
    1608             : 
    1609             : // only process w >= 16 h >= 16
    1610     5639900 : static INLINE void lowbd_inv_txfm2d_add_no_identity_avx2(
    1611             :     const int32_t *input,
    1612             :     uint8_t *output_r, int32_t stride_r,
    1613             :     uint8_t *output_w, int32_t stride_w,
    1614             :     TxType tx_type, TxSize tx_size, int eob) {
    1615             :     __m256i buf1[64 * 16];
    1616             :     int eobx, eoby;
    1617     5639900 :     get_eobx_eoby_scan_default(&eobx, &eoby, tx_size, eob);
    1618     5639920 :     const int8_t *shift = eb_inv_txfm_shift_ls[tx_size];
    1619     5639920 :     const int txw_idx = get_txw_idx(tx_size);
    1620     5639820 :     const int txh_idx = get_txh_idx(tx_size);
    1621     5639780 :     const int cos_bit_col = inv_cos_bit_col[txw_idx][txh_idx];
    1622     5639780 :     const int cos_bit_row = inv_cos_bit_row[txw_idx][txh_idx];
    1623     5639780 :     const int txfm_size_col = tx_size_wide[tx_size];
    1624     5639780 :     const int txfm_size_row = tx_size_high[tx_size];
    1625     5639780 :     const int buf_size_w_div16 = txfm_size_col >> 4;
    1626     5639780 :     const int buf_size_nonzero_w_div16 = (eobx + 16) >> 4;
    1627     5639780 :     const int buf_size_nonzero_h_div16 = (eoby + 16) >> 4;
    1628     5639780 :     const int input_stride = AOMMIN(32, txfm_size_col);
    1629     5639780 :     const int rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
    1630             : 
    1631     5639750 :     const int fun_idx_x = lowbd_txfm_all_1d_zeros_idx[eobx];
    1632     5639750 :     const int fun_idx_y = lowbd_txfm_all_1d_zeros_idx[eoby];
    1633     5639750 :     const transform_1d_avx2 row_txfm =
    1634     5639750 :         lowbd_txfm_all_1d_zeros_w16_arr[txw_idx][hitx_1d_tab[tx_type]][fun_idx_x];
    1635     5639750 :     const transform_1d_avx2 col_txfm =
    1636     5639750 :         lowbd_txfm_all_1d_zeros_w16_arr[txh_idx][vitx_1d_tab[tx_type]][fun_idx_y];
    1637             : 
    1638     5639750 :     assert(col_txfm != NULL);
    1639     5639750 :     assert(row_txfm != NULL);
    1640             :     int ud_flip, lr_flip;
    1641     5639750 :     get_flip_cfg(tx_type, &ud_flip, &lr_flip);
    1642     5639960 :     const __m256i scale0 = _mm256_set1_epi16(1 << (15 + shift[0]));
    1643    13304700 :     for (int i = 0; i < buf_size_nonzero_h_div16; i++) {
    1644             :         __m256i buf0[64];
    1645     7664130 :         const int32_t *input_row = input + (i << 4) * input_stride;
    1646    18396900 :         for (int j = 0; j < buf_size_nonzero_w_div16; ++j) {
    1647    10731900 :             __m256i *buf0_cur = buf0 + j * 16;
    1648    10731900 :             const int32_t *input_cur = input_row + j * 16;
    1649    10731900 :             load_buffer_32bit_to_16bit_w16_avx2(input_cur, input_stride, buf0_cur,
    1650             :                 16);
    1651    10729000 :             transpose_16bit_16x16_avx2(buf0_cur, buf0_cur);
    1652             :         }
    1653     7664950 :         if (rect_type == 1 || rect_type == -1)
    1654     2600300 :             round_shift_avx2(buf0, buf0, input_stride);  // rect special code
    1655     7665130 :         row_txfm(buf0, buf0, cos_bit_row);
    1656   205216000 :         for (int j = 0; j < txfm_size_col; ++j)
    1657   395103000 :             buf0[j] = _mm256_mulhrs_epi16(buf0[j], scale0);
    1658             : 
    1659     7664150 :         __m256i *buf1_cur = buf1 + (i << 4);
    1660     7664150 :         if (lr_flip) {
    1661      187164 :             for (int j = 0; j < buf_size_w_div16; ++j) {
    1662             :                 __m256i temp[16];
    1663       93147 :                 flip_buf_avx2(buf0 + 16 * j, temp, 16);
    1664       93147 :                 int offset = txfm_size_row * (buf_size_w_div16 - 1 - j);
    1665       93147 :                 transpose_16bit_16x16_avx2(temp, buf1_cur + offset);
    1666             :             }
    1667             :         }
    1668             :         else {
    1669    19829700 :             for (int j = 0; j < buf_size_w_div16; ++j)
    1670    12259000 :                 transpose_16bit_16x16_avx2(buf0 + 16 * j, buf1_cur + txfm_size_row * j);
    1671             :         }
    1672             :     }
    1673     5640620 :     const __m256i scale1 = _mm256_set1_epi16(1 << (15 + shift[1]));
    1674    14252100 :     for (int i = 0; i < buf_size_w_div16; i++) {
    1675     8612380 :         __m256i *buf1_cur = buf1 + i * txfm_size_row;
    1676     8612380 :         col_txfm(buf1_cur, buf1_cur, cos_bit_col);
    1677   245669000 :         for (int j = 0; j < txfm_size_row; ++j)
    1678   474114000 :             buf1_cur[j] = _mm256_mulhrs_epi16(buf1_cur[j], scale1);
    1679             :     }
    1680    14251000 :     for (int i = 0; i < buf_size_w_div16; i++)
    1681     8612030 :         lowbd_write_buffer_16xn_avx2(buf1 + i * txfm_size_row,
    1682     8612030 :             output_r + 16 * i, stride_r,
    1683     8612030 :             output_w + 16 * i, stride_w,
    1684             :             ud_flip, txfm_size_row);
    1685     5638960 : }
    1686             : 
    1687      389911 : static INLINE void iidentity_row_16xn_avx2(__m256i *out, const int32_t *input,
    1688             :     int stride, int shift, int height, int txw_idx, int rect_type) {
    1689      389911 :     const int32_t *input_row = input;
    1690      389911 :     const __m256i scale = _mm256_set1_epi16(NewSqrt2list[txw_idx]);
    1691      389911 :     const __m256i _r = _mm256_set1_epi16((1 << (NewSqrt2Bits - 1)) +
    1692      389911 :         (1 << (NewSqrt2Bits - shift - 1)));
    1693      389911 :     const __m256i one = _mm256_set1_epi16(1);
    1694      389911 :     const __m256i scale__r = _mm256_unpacklo_epi16(scale, _r);
    1695      389911 :     if (rect_type != 1 && rect_type != -1) {
    1696     6215220 :         for (int i = 0; i < height; ++i) {
    1697     5885950 :             const __m256i src = load_32bit_to_16bit_w16_avx2(input_row);
    1698     5885690 :             input_row += stride;
    1699     5885690 :             __m256i lo = _mm256_unpacklo_epi16(src, one);
    1700     5885690 :             __m256i hi = _mm256_unpackhi_epi16(src, one);
    1701     5885690 :             lo = _mm256_madd_epi16(lo, scale__r);
    1702     5885690 :             hi = _mm256_madd_epi16(hi, scale__r);
    1703     5885690 :             lo = _mm256_srai_epi32(lo, NewSqrt2Bits - shift);
    1704     5885690 :             hi = _mm256_srai_epi32(hi, NewSqrt2Bits - shift);
    1705    11771400 :             out[i] = _mm256_packs_epi32(lo, hi);
    1706             :         }
    1707             :     }
    1708             :     else {
    1709             :         const __m256i rect_scale =
    1710       60375 :             _mm256_set1_epi16(NewInvSqrt2 << (15 - NewSqrt2Bits));
    1711     1328100 :         for (int i = 0; i < height; ++i) {
    1712     1267780 :             __m256i src = load_32bit_to_16bit_w16_avx2(input_row);
    1713     1267730 :             src = _mm256_mulhrs_epi16(src, rect_scale);
    1714     1267730 :             input_row += stride;
    1715     1267730 :             __m256i lo = _mm256_unpacklo_epi16(src, one);
    1716     1267730 :             __m256i hi = _mm256_unpackhi_epi16(src, one);
    1717     1267730 :             lo = _mm256_madd_epi16(lo, scale__r);
    1718     1267730 :             hi = _mm256_madd_epi16(hi, scale__r);
    1719     1267730 :             lo = _mm256_srai_epi32(lo, NewSqrt2Bits - shift);
    1720     1267730 :             hi = _mm256_srai_epi32(hi, NewSqrt2Bits - shift);
    1721     2535460 :             out[i] = _mm256_packs_epi32(lo, hi);
    1722             :         }
    1723             :     }
    1724      389599 : }
    1725             : 
    1726      381627 : static INLINE void iidentity_col_16xn_avx2(
    1727             :     uint8_t *output_r, int32_t stride_r,
    1728             :     uint8_t *output_w, int32_t stride_w,
    1729             :     __m256i *buf, int shift, int height, int txh_idx) {
    1730      381627 :     const __m256i scale = _mm256_set1_epi16(NewSqrt2list[txh_idx]);
    1731      381627 :     const __m256i scale__r = _mm256_set1_epi16(1 << (NewSqrt2Bits - 1));
    1732      763254 :     const __m256i shift__r = _mm256_set1_epi32(1 << (-shift - 1));
    1733      381627 :     const __m256i one = _mm256_set1_epi16(1);
    1734      381627 :     const __m256i scale_coeff = _mm256_unpacklo_epi16(scale, scale__r);
    1735     7412590 :     for (int h = 0; h < height; ++h) {
    1736     7030940 :         __m256i lo = _mm256_unpacklo_epi16(buf[h], one);
    1737    14061900 :         __m256i hi = _mm256_unpackhi_epi16(buf[h], one);
    1738     7030940 :         lo = _mm256_madd_epi16(lo, scale_coeff);
    1739     7030940 :         hi = _mm256_madd_epi16(hi, scale_coeff);
    1740     7030940 :         lo = _mm256_srai_epi32(lo, NewSqrt2Bits);
    1741    14061900 :         hi = _mm256_srai_epi32(hi, NewSqrt2Bits);
    1742     7030940 :         lo = _mm256_add_epi32(lo, shift__r);
    1743     7030940 :         hi = _mm256_add_epi32(hi, shift__r);
    1744     7030940 :         lo = _mm256_srai_epi32(lo, -shift);
    1745    14061900 :         hi = _mm256_srai_epi32(hi, -shift);
    1746     7030940 :         const __m256i x = _mm256_packs_epi32(lo, hi);
    1747     7030940 :         write_recon_w16_avx2(x, output_r, output_w);
    1748     7030960 :         output_r += stride_r;
    1749     7030960 :         output_w += stride_w;
    1750             :     }
    1751      381648 : }
    1752             : 
    1753      308105 : static INLINE void lowbd_inv_txfm2d_add_idtx_avx2(const int32_t *input,
    1754             :     uint8_t *output_r, int32_t stride_r,
    1755             :     uint8_t *output_w, int32_t stride_w,
    1756             :     TxSize tx_size, int32_t eob) {
    1757             :     (void)eob;
    1758      308105 :     const int8_t *shift = eb_inv_txfm_shift_ls[tx_size];
    1759      308105 :     const int txw_idx = get_txw_idx(tx_size);
    1760      308105 :     const int txh_idx = get_txh_idx(tx_size);
    1761      308105 :     const int txfm_size_col = tx_size_wide[tx_size];
    1762      308105 :     const int txfm_size_row = tx_size_high[tx_size];
    1763      308105 :     const int input_stride = AOMMIN(32, txfm_size_col);
    1764      308105 :     const int row_max = AOMMIN(32, txfm_size_row);
    1765      308105 :     const int rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
    1766             :     __m256i buf[32];
    1767      656471 :     for (int i = 0; i < input_stride; i += 16) {
    1768      348369 :         iidentity_row_16xn_avx2(buf, input + i, input_stride, shift[0], row_max,
    1769             :             txw_idx, rect_type);
    1770      348369 :         iidentity_col_16xn_avx2(output_r + i, stride_r, output_w + i, stride_w,
    1771      348369 :             buf, shift[1], row_max, txh_idx);
    1772             :     }
    1773      308102 : }
    1774             : 
    1775       41541 : static INLINE void lowbd_inv_txfm2d_add_h_identity_avx2(
    1776             :     const int32_t *input,
    1777             :     uint8_t *output_r, int32_t stride_r,
    1778             :     uint8_t *output_w, int32_t stride_w,
    1779             :     TxType tx_type, TxSize tx_size, int eob) {
    1780             :     int eobx, eoby;
    1781       41541 :     get_eobx_eoby_scan_h_identity(&eobx, &eoby, tx_size, eob);
    1782       41541 :     const int8_t *shift = eb_inv_txfm_shift_ls[tx_size];
    1783       41541 :     const int txw_idx = get_txw_idx(tx_size);
    1784       41541 :     const int txh_idx = get_txh_idx(tx_size);
    1785       41541 :     const int cos_bit_col = inv_cos_bit_col[txw_idx][txh_idx];
    1786       41541 :     const int txfm_size_col = tx_size_wide[tx_size];
    1787       41541 :     const int txfm_size_row = tx_size_high[tx_size];
    1788       41541 :     const int txfm_size_col_notzero = AOMMIN(32, txfm_size_col);
    1789       41541 :     const int input_stride = txfm_size_col_notzero;
    1790       41541 :     const int buf_size_w_div16 = (eobx + 16) >> 4;
    1791       41541 :     const int rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
    1792             : 
    1793       41541 :     const int fun_idx_y = lowbd_txfm_all_1d_zeros_idx[eoby];
    1794       41541 :     const transform_1d_avx2 col_txfm =
    1795       41541 :         lowbd_txfm_all_1d_zeros_w16_arr[txh_idx][vitx_1d_tab[tx_type]][fun_idx_y];
    1796             : 
    1797       41541 :     assert(col_txfm != NULL);
    1798             : 
    1799             :     int ud_flip, lr_flip;
    1800       41541 :     get_flip_cfg(tx_type, &ud_flip, &lr_flip);
    1801       83082 :     for (int i = 0; i < buf_size_w_div16; i++) {
    1802             :         __m256i buf0[64];
    1803       41541 :         iidentity_row_16xn_avx2(buf0, input + (i << 4), input_stride, shift[0],
    1804             :             eoby + 1, txw_idx, rect_type);
    1805       41541 :         col_txfm(buf0, buf0, cos_bit_col);
    1806       41541 :         __m256i mshift = _mm256_set1_epi16(1 << (15 + shift[1]));
    1807       41541 :         int k = ud_flip ? (txfm_size_row - 1) : 0;
    1808       41541 :         const int step = ud_flip ? -1 : 1;
    1809      706197 :         for (int j = 0; j < txfm_size_row; ++j, k += step) {
    1810      664656 :             __m256i res = _mm256_mulhrs_epi16(buf0[k], mshift);
    1811      664656 :             write_recon_w16_avx2(res,
    1812      664656 :                 output_r + (i << 4) + j * stride_r,
    1813      664656 :                 output_w + (i << 4) + j * stride_w);
    1814             :         }
    1815             :     }
    1816       41541 : }
    1817             : 
    1818       33257 : static INLINE void lowbd_inv_txfm2d_add_v_identity_avx2(
    1819             :     const int32_t *input,
    1820             :     uint8_t *output_r, int32_t stride_r,
    1821             :     uint8_t *output_w, int32_t stride_w,
    1822             :     TxType tx_type, TxSize tx_size, int eob) {
    1823             :     __m256i buf1[64];
    1824             :     int eobx, eoby;
    1825       33257 :     get_eobx_eoby_scan_v_identity(&eobx, &eoby, tx_size, eob);
    1826       33257 :     const int8_t *shift = eb_inv_txfm_shift_ls[tx_size];
    1827       33257 :     const int txw_idx = get_txw_idx(tx_size);
    1828       33257 :     const int txh_idx = get_txh_idx(tx_size);
    1829       33257 :     const int cos_bit_row = inv_cos_bit_row[txw_idx][txh_idx];
    1830       33257 :     const int txfm_size_col = tx_size_wide[tx_size];
    1831       33257 :     const int txfm_size_row = tx_size_high[tx_size];
    1832       33257 :     const int buf_size_w_div16 = txfm_size_col >> 4;
    1833       33257 :     const int buf_size_h_div16 = (eoby + 16) >> 4;
    1834       33257 :     const int input_stride = AOMMIN(32, txfm_size_col);
    1835       33257 :     const int rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
    1836             : 
    1837       33257 :     const int fun_idx_x = lowbd_txfm_all_1d_zeros_idx[eobx];
    1838       33257 :     const transform_1d_avx2 row_txfm =
    1839       33257 :         lowbd_txfm_all_1d_zeros_w16_arr[txw_idx][hitx_1d_tab[tx_type]][fun_idx_x];
    1840             : 
    1841       33257 :     assert(row_txfm != NULL);
    1842             : 
    1843             :     int ud_flip, lr_flip;
    1844       33257 :     get_flip_cfg(tx_type, &ud_flip, &lr_flip);
    1845       66514 :     for (int i = 0; i < buf_size_h_div16; i++) {
    1846             :         __m256i buf0[64];
    1847       33257 :         const int32_t *input_row = input + i * input_stride * 16;
    1848       66514 :         for (int j = 0; j < AOMMIN(4, buf_size_w_div16); ++j) {
    1849       33257 :             __m256i *buf0_cur = buf0 + j * 16;
    1850       33257 :             load_buffer_32bit_to_16bit_w16_avx2(input_row + j * 16, input_stride,
    1851             :                 buf0_cur, 16);
    1852       33257 :             transpose_16bit_16x16_avx2(buf0_cur, buf0_cur);
    1853             :         }
    1854       33257 :         if (rect_type == 1 || rect_type == -1)
    1855           0 :             round_shift_avx2(buf0, buf0, input_stride);  // rect special code
    1856       33257 :         row_txfm(buf0, buf0, cos_bit_row);
    1857       33257 :         round_shift_16bit_w16_avx2(buf0, txfm_size_col, shift[0]);
    1858       33257 :         __m256i *_buf1 = buf1;
    1859       33257 :         if (lr_flip) {
    1860           0 :             for (int j = 0; j < buf_size_w_div16; ++j) {
    1861             :                 __m256i temp[16];
    1862           0 :                 flip_buf_avx2(buf0 + 16 * j, temp, 16);
    1863           0 :                 transpose_16bit_16x16_avx2(temp,
    1864           0 :                     _buf1 + 16 * (buf_size_w_div16 - 1 - j));
    1865             :             }
    1866             :         }
    1867             :         else {
    1868       66514 :             for (int j = 0; j < buf_size_w_div16; ++j)
    1869       33257 :                 transpose_16bit_16x16_avx2(buf0 + 16 * j, _buf1 + 16 * j);
    1870             :         }
    1871       66514 :         for (int j = 0; j < buf_size_w_div16; ++j)
    1872       33257 :             iidentity_col_16xn_avx2(
    1873       33257 :                 output_r + i * 16 * stride_r + j * 16, stride_r,
    1874       33257 :                 output_w + i * 16 * stride_w + j * 16, stride_w,
    1875       33257 :                 buf1 + j * 16, shift[1], 16, txh_idx);
    1876             :     }
    1877       33257 : }
    1878             : 
    1879             : // for 32x32,32x64,64x32,64x64,16x32,32x16,64x16,16x64
    1880     6023120 : static INLINE void lowbd_inv_txfm2d_add_universe_avx2(
    1881             :     const int32_t *input,
    1882             :     uint8_t *output_r, int32_t stride_r,
    1883             :     uint8_t *output_w, int32_t stride_w,
    1884             :     TxType tx_type, TxSize tx_size, int eob) {
    1885             :     (void)eob;
    1886     6023120 :     switch (tx_type) {
    1887     5640420 :     case DCT_DCT:
    1888             :     case ADST_DCT:   // ADST in vertical, DCT in horizontal
    1889             :     case DCT_ADST:   // DCT  in vertical, ADST in horizontal
    1890             :     case ADST_ADST:  // ADST in both directions
    1891             :     case FLIPADST_DCT:
    1892             :     case DCT_FLIPADST:
    1893             :     case FLIPADST_FLIPADST:
    1894             :     case ADST_FLIPADST:
    1895             :     case FLIPADST_ADST:
    1896     5640420 :         lowbd_inv_txfm2d_add_no_identity_avx2(input,
    1897             :             output_r, stride_r, output_w, stride_w,
    1898             :             tx_type, tx_size, eob);
    1899     5640370 :         break;
    1900      308105 :     case IDTX:
    1901      308105 :         lowbd_inv_txfm2d_add_idtx_avx2(input,
    1902             :             output_r, stride_r, output_w, stride_w,
    1903             :             tx_size, eob);
    1904      308104 :         break;
    1905       41541 :     case V_DCT:
    1906             :     case V_ADST:
    1907             :     case V_FLIPADST:
    1908       41541 :         lowbd_inv_txfm2d_add_h_identity_avx2(input,
    1909             :             output_r, stride_r, output_w, stride_w,
    1910             :             tx_type, tx_size, eob);
    1911       41541 :         break;
    1912       33257 :     case H_DCT:
    1913             :     case H_ADST:
    1914             :     case H_FLIPADST:
    1915       33257 :         lowbd_inv_txfm2d_add_v_identity_avx2(input,
    1916             :             output_r, stride_r, output_w, stride_w,
    1917             :             tx_type, tx_size, eob);
    1918       33257 :         break;
    1919           0 :     default:
    1920           0 :         eb_av1_lowbd_inv_txfm2d_add_ssse3(input,
    1921             :             output_r, stride_r, output_w, stride_w,
    1922             :             tx_type, tx_size, eob);
    1923           0 :         break;
    1924             :     }
    1925     6023270 : }
    1926             : 
    1927    44080900 : void eb_av1_lowbd_inv_txfm2d_add_avx2(const int32_t *input,
    1928             :     uint8_t *output_r, int32_t stride_r,
    1929             :     uint8_t *output_w, int32_t stride_w,
    1930             :     TxType tx_type, TxSize tx_size, int32_t eob) {
    1931    44080900 :     switch (tx_size) {
    1932    38080600 :     case TX_4X4:
    1933             :     case TX_8X8:
    1934             :     case TX_4X8:
    1935             :     case TX_8X4:
    1936             :     case TX_8X16:
    1937             :     case TX_16X8:
    1938             :     case TX_4X16:
    1939             :     case TX_16X4:
    1940             :     case TX_8X32:
    1941             :     case TX_32X8:
    1942    38080600 :         eb_av1_lowbd_inv_txfm2d_add_ssse3(input,
    1943             :             output_r, stride_r, output_w, stride_w,
    1944             :             tx_type, tx_size, eob);
    1945    38068200 :         break;
    1946     6000280 :     case TX_16X16:
    1947             :     case TX_32X32:
    1948             :     case TX_64X64:
    1949             :     case TX_16X32:
    1950             :     case TX_32X16:
    1951             :     case TX_32X64:
    1952             :     case TX_64X32:
    1953             :     case TX_16X64:
    1954             :     case TX_64X16:
    1955             :     default:
    1956     6000280 :         lowbd_inv_txfm2d_add_universe_avx2(input,
    1957             :             output_r, stride_r, output_w, stride_w,
    1958             :             tx_type, tx_size, eob);
    1959     6023140 :         break;
    1960             :     }
    1961    44091300 : }
    1962             : 
    1963    44090100 : void eb_av1_inv_txfm_add_avx2(const TranLow *dqcoeff,
    1964             :     uint8_t *dst_r, int32_t stride_r,
    1965             :     uint8_t *dst_w, int32_t stride_w,
    1966             :     const TxfmParam *txfm_param) {
    1967    44090100 :     const TxType tx_type = txfm_param->tx_type;
    1968    44090100 :     if (!txfm_param->lossless)
    1969    44093800 :         eb_av1_lowbd_inv_txfm2d_add_avx2(dqcoeff,
    1970             :             dst_r, stride_r, dst_w, stride_w,
    1971    44093800 :             tx_type, txfm_param->tx_size, txfm_param->eob);
    1972             :     else
    1973           0 :         eb_av1_inv_txfm_add_c(dqcoeff,
    1974             :             dst_r, stride_r, dst_w, stride_w,
    1975             :             txfm_param);
    1976    44078400 : }

Generated by: LCOV version 1.14