/*
 *  Copyright (c) 2015 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "vpx_dsp/mips/inv_txfm_msa.h"

void vpx_idct16_1d_rows_msa(const int16_t *input, int16_t *output) {
  v8i16 loc0, loc1, loc2, loc3;
  v8i16 reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14;
  v8i16 reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15;
  v8i16 tmp5, tmp6, tmp7;

  LD_SH8(input, 16, reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7);
  input += 8;
  LD_SH8(input, 16, reg8, reg9, reg10, reg11, reg12, reg13, reg14, reg15);

  TRANSPOSE8x8_SH_SH(reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7, reg0, reg1,
                     reg2, reg3, reg4, reg5, reg6, reg7);
  TRANSPOSE8x8_SH_SH(reg8, reg9, reg10, reg11, reg12, reg13, reg14, reg15, reg8,
                     reg9, reg10, reg11, reg12, reg13, reg14, reg15);
  DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14);
  DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6);
  BUTTERFLY_4(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2);
  DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3);
  DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8);
  DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12);
  BUTTERFLY_4(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14);
  SUB4(reg2, loc1, reg14, loc0, reg6, loc3, reg10, loc2, reg0, reg12, reg4,
       reg8);
  ADD4(reg2, loc1, reg14, loc0, reg6, loc3, reg10, loc2, reg2, reg14, reg6,
       reg10);

  /* stage 2 */
  DOTP_CONST_PAIR(reg1, reg15, cospi_30_64, cospi_2_64, reg1, reg15);
  DOTP_CONST_PAIR(reg9, reg7, cospi_14_64, cospi_18_64, loc2, loc3);

  reg9 = reg1 - loc2;
  reg1 = reg1 + loc2;
  reg7 = reg15 - loc3;
  reg15 = reg15 + loc3;

  DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11);
  DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1);
  BUTTERFLY_4(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5);

  loc1 = reg15 + reg3;
  reg3 = reg15 - reg3;
  loc2 = reg2 + loc1;
  reg15 = reg2 - loc1;

  loc1 = reg1 + reg13;
  reg13 = reg1 - reg13;
  loc0 = reg0 + loc1;
  loc1 = reg0 - loc1;
  tmp6 = loc0;
  tmp7 = loc1;
  reg0 = loc2;

  DOTP_CONST_PAIR(reg7, reg9, cospi_24_64, cospi_8_64, reg7, reg9);
  DOTP_CONST_PAIR((-reg5), (-reg11), cospi_8_64, cospi_24_64, reg5, reg11);

  loc0 = reg9 + reg5;
  reg5 = reg9 - reg5;
  reg2 = reg6 + loc0;
  reg1 = reg6 - loc0;

  loc0 = reg7 + reg11;
  reg11 = reg7 - reg11;
  loc1 = reg4 + loc0;
  loc2 = reg4 - loc0;
  tmp5 = loc1;

  DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11);
  BUTTERFLY_4(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1);

  reg10 = loc0;
  reg11 = loc1;

  DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13);
  BUTTERFLY_4(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5);

  reg13 = loc2;

  /* Transpose and store the output */
  reg12 = tmp5;
  reg14 = tmp6;
  reg3 = tmp7;

  /* transpose block */
  TRANSPOSE8x8_SH_SH(reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14, reg0,
                     reg2, reg4, reg6, reg8, reg10, reg12, reg14);
  ST_SH8(reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14, output, 16);

  /* transpose block */
  TRANSPOSE8x8_SH_SH(reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15, reg3,
                     reg13, reg11, reg5, reg7, reg9, reg1, reg15);
  ST_SH8(reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15, (output + 8), 16);
}

void vpx_idct16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst,
                                      int32_t dst_stride) {
  v8i16 loc0, loc1, loc2, loc3;
  v8i16 reg0, reg2, reg4, reg6, reg8, reg10, reg12, reg14;
  v8i16 reg3, reg13, reg11, reg5, reg7, reg9, reg1, reg15;
  v8i16 tmp5, tmp6, tmp7;

  /* load up 8x8 */
  LD_SH8(input, 16, reg0, reg1, reg2, reg3, reg4, reg5, reg6, reg7);
  input += 8 * 16;
  /* load bottom 8x8 */
  LD_SH8(input, 16, reg8, reg9, reg10, reg11, reg12, reg13, reg14, reg15);

  DOTP_CONST_PAIR(reg2, reg14, cospi_28_64, cospi_4_64, reg2, reg14);
  DOTP_CONST_PAIR(reg10, reg6, cospi_12_64, cospi_20_64, reg10, reg6);
  BUTTERFLY_4(reg2, reg14, reg6, reg10, loc0, loc1, reg14, reg2);
  DOTP_CONST_PAIR(reg14, reg2, cospi_16_64, cospi_16_64, loc2, loc3);
  DOTP_CONST_PAIR(reg0, reg8, cospi_16_64, cospi_16_64, reg0, reg8);
  DOTP_CONST_PAIR(reg4, reg12, cospi_24_64, cospi_8_64, reg4, reg12);
  BUTTERFLY_4(reg8, reg0, reg4, reg12, reg2, reg6, reg10, reg14);

  reg0 = reg2 - loc1;
  reg2 = reg2 + loc1;
  reg12 = reg14 - loc0;
  reg14 = reg14 + loc0;
  reg4 = reg6 - loc3;
  reg6 = reg6 + loc3;
  reg8 = reg10 - loc2;
  reg10 = reg10 + loc2;

  /* stage 2 */
  DOTP_CONST_PAIR(reg1, reg15, cospi_30_64, cospi_2_64, reg1, reg15);
  DOTP_CONST_PAIR(reg9, reg7, cospi_14_64, cospi_18_64, loc2, loc3);

  reg9 = reg1 - loc2;
  reg1 = reg1 + loc2;
  reg7 = reg15 - loc3;
  reg15 = reg15 + loc3;

  DOTP_CONST_PAIR(reg5, reg11, cospi_22_64, cospi_10_64, reg5, reg11);
  DOTP_CONST_PAIR(reg13, reg3, cospi_6_64, cospi_26_64, loc0, loc1);
  BUTTERFLY_4(loc0, loc1, reg11, reg5, reg13, reg3, reg11, reg5);

  loc1 = reg15 + reg3;
  reg3 = reg15 - reg3;
  loc2 = reg2 + loc1;
  reg15 = reg2 - loc1;

  loc1 = reg1 + reg13;
  reg13 = reg1 - reg13;
  loc0 = reg0 + loc1;
  loc1 = reg0 - loc1;
  tmp6 = loc0;
  tmp7 = loc1;
  reg0 = loc2;

  DOTP_CONST_PAIR(reg7, reg9, cospi_24_64, cospi_8_64, reg7, reg9);
  DOTP_CONST_PAIR((-reg5), (-reg11), cospi_8_64, cospi_24_64, reg5, reg11);

  loc0 = reg9 + reg5;
  reg5 = reg9 - reg5;
  reg2 = reg6 + loc0;
  reg1 = reg6 - loc0;

  loc0 = reg7 + reg11;
  reg11 = reg7 - reg11;
  loc1 = reg4 + loc0;
  loc2 = reg4 - loc0;
  tmp5 = loc1;

  DOTP_CONST_PAIR(reg5, reg11, cospi_16_64, cospi_16_64, reg5, reg11);
  BUTTERFLY_4(reg8, reg10, reg11, reg5, loc0, reg4, reg9, loc1);

  reg10 = loc0;
  reg11 = loc1;

  DOTP_CONST_PAIR(reg3, reg13, cospi_16_64, cospi_16_64, reg3, reg13);
  BUTTERFLY_4(reg12, reg14, reg13, reg3, reg8, reg6, reg7, reg5);
  reg13 = loc2;

  /* Transpose and store the output */
  reg12 = tmp5;
  reg14 = tmp6;
  reg3 = tmp7;

  SRARI_H4_SH(reg0, reg2, reg4, reg6, 6);
  VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg0, reg2, reg4, reg6);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg8, reg10, reg12, reg14, 6);
  VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg8, reg10, reg12, reg14);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg3, reg13, reg11, reg5, 6);
  VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg3, reg13, reg11, reg5);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg7, reg9, reg1, reg15, 6);
  VP9_ADDBLK_ST8x4_UB(dst, dst_stride, reg7, reg9, reg1, reg15);
}

void vpx_idct16x16_256_add_msa(const int16_t *input, uint8_t *dst,
                               int32_t dst_stride) {
  int32_t i;
  DECLARE_ALIGNED(32, int16_t, out_arr[16 * 16]);
  int16_t *out = out_arr;

  /* transform rows */
  for (i = 0; i < 2; ++i) {
    /* process 16 * 8 block */
    vpx_idct16_1d_rows_msa((input + (i << 7)), (out + (i << 7)));
  }

  /* transform columns */
  for (i = 0; i < 2; ++i) {
    /* process 8 * 16 block */
    vpx_idct16_1d_columns_addblk_msa((out + (i << 3)), (dst + (i << 3)),
                                     dst_stride);
  }
}

void vpx_idct16x16_10_add_msa(const int16_t *input, uint8_t *dst,
                              int32_t dst_stride) {
  uint8_t i;
  DECLARE_ALIGNED(32, int16_t, out_arr[16 * 16]);
  int16_t *out = out_arr;

  /* process 16 * 8 block */
  vpx_idct16_1d_rows_msa(input, out);

  /* short case just considers top 4 rows as valid output */
  out += 4 * 16;
  for (i = 12; i--;) {
    __asm__ __volatile__(
        "sw     $zero,   0(%[out])     \n\t"
        "sw     $zero,   4(%[out])     \n\t"
        "sw     $zero,   8(%[out])     \n\t"
        "sw     $zero,  12(%[out])     \n\t"
        "sw     $zero,  16(%[out])     \n\t"
        "sw     $zero,  20(%[out])     \n\t"
        "sw     $zero,  24(%[out])     \n\t"
        "sw     $zero,  28(%[out])     \n\t"

        :
        : [out] "r"(out));

    out += 16;
  }

  out = out_arr;

  /* transform columns */
  for (i = 0; i < 2; ++i) {
    /* process 8 * 16 block */
    vpx_idct16_1d_columns_addblk_msa((out + (i << 3)), (dst + (i << 3)),
                                     dst_stride);
  }
}

void vpx_idct16x16_1_add_msa(const int16_t *input, uint8_t *dst,
                             int32_t dst_stride) {
  uint8_t i;
  int16_t out;
  v8i16 vec, res0, res1, res2, res3, res4, res5, res6, res7;
  v16u8 dst0, dst1, dst2, dst3, tmp0, tmp1, tmp2, tmp3;

  out = ROUND_POWER_OF_TWO((input[0] * cospi_16_64), DCT_CONST_BITS);
  out = ROUND_POWER_OF_TWO((out * cospi_16_64), DCT_CONST_BITS);
  out = ROUND_POWER_OF_TWO(out, 6);

  vec = __msa_fill_h(out);

  for (i = 4; i--;) {
    LD_UB4(dst, dst_stride, dst0, dst1, dst2, dst3);
    UNPCK_UB_SH(dst0, res0, res4);
    UNPCK_UB_SH(dst1, res1, res5);
    UNPCK_UB_SH(dst2, res2, res6);
    UNPCK_UB_SH(dst3, res3, res7);
    ADD4(res0, vec, res1, vec, res2, vec, res3, vec, res0, res1, res2, res3);
    ADD4(res4, vec, res5, vec, res6, vec, res7, vec, res4, res5, res6, res7);
    CLIP_SH4_0_255(res0, res1, res2, res3);
    CLIP_SH4_0_255(res4, res5, res6, res7);
    PCKEV_B4_UB(res4, res0, res5, res1, res6, res2, res7, res3, tmp0, tmp1,
                tmp2, tmp3);
    ST_UB4(tmp0, tmp1, tmp2, tmp3, dst, dst_stride);
    dst += (4 * dst_stride);
  }
}

void vpx_iadst16_1d_rows_msa(const int16_t *input, int16_t *output) {
  v8i16 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15;
  v8i16 l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15;

  /* load input data */
  LD_SH16(input, 8, l0, l8, l1, l9, l2, l10, l3, l11, l4, l12, l5, l13, l6, l14,
          l7, l15);
  TRANSPOSE8x8_SH_SH(l0, l1, l2, l3, l4, l5, l6, l7, l0, l1, l2, l3, l4, l5, l6,
                     l7);
  TRANSPOSE8x8_SH_SH(l8, l9, l10, l11, l12, l13, l14, l15, l8, l9, l10, l11,
                     l12, l13, l14, l15);

  /* ADST in horizontal */
  VP9_IADST8x16_1D(l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13,
                   l14, l15, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
                   r12, r13, r14, r15);

  l1 = -r8;
  l3 = -r4;
  l13 = -r13;
  l15 = -r1;

  TRANSPOSE8x8_SH_SH(r0, l1, r12, l3, r6, r14, r10, r2, l0, l1, l2, l3, l4, l5,
                     l6, l7);
  ST_SH8(l0, l1, l2, l3, l4, l5, l6, l7, output, 16);
  TRANSPOSE8x8_SH_SH(r3, r11, r15, r7, r5, l13, r9, l15, l8, l9, l10, l11, l12,
                     l13, l14, l15);
  ST_SH8(l8, l9, l10, l11, l12, l13, l14, l15, (output + 8), 16);
}

void vpx_iadst16_1d_columns_addblk_msa(int16_t *input, uint8_t *dst,
                                       int32_t dst_stride) {
  v8i16 v0, v2, v4, v6, k0, k1, k2, k3;
  v8i16 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15;
  v8i16 out0, out1, out2, out3, out4, out5, out6, out7;
  v8i16 out8, out9, out10, out11, out12, out13, out14, out15;
  v8i16 g0, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15;
  v8i16 h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11;
  v8i16 res0, res1, res2, res3, res4, res5, res6, res7;
  v8i16 res8, res9, res10, res11, res12, res13, res14, res15;
  v16u8 dst0, dst1, dst2, dst3, dst4, dst5, dst6, dst7;
  v16u8 dst8, dst9, dst10, dst11, dst12, dst13, dst14, dst15;
  v16i8 zero = { 0 };

  r0 = LD_SH(input + 0 * 16);
  r3 = LD_SH(input + 3 * 16);
  r4 = LD_SH(input + 4 * 16);
  r7 = LD_SH(input + 7 * 16);
  r8 = LD_SH(input + 8 * 16);
  r11 = LD_SH(input + 11 * 16);
  r12 = LD_SH(input + 12 * 16);
  r15 = LD_SH(input + 15 * 16);

  /* stage 1 */
  k0 = VP9_SET_COSPI_PAIR(cospi_1_64, cospi_31_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_31_64, -cospi_1_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_17_64, cospi_15_64);
  k3 = VP9_SET_COSPI_PAIR(cospi_15_64, -cospi_17_64);
  MADD_BF(r15, r0, r7, r8, k0, k1, k2, k3, g0, g1, g2, g3);
  k0 = VP9_SET_COSPI_PAIR(cospi_9_64, cospi_23_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_23_64, -cospi_9_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_25_64, cospi_7_64);
  k3 = VP9_SET_COSPI_PAIR(cospi_7_64, -cospi_25_64);
  MADD_BF(r11, r4, r3, r12, k0, k1, k2, k3, g8, g9, g10, g11);
  BUTTERFLY_4(g0, g2, g10, g8, h8, h9, v2, v0);
  k0 = VP9_SET_COSPI_PAIR(cospi_4_64, cospi_28_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_28_64, -cospi_4_64);
  k2 = VP9_SET_COSPI_PAIR(-cospi_28_64, cospi_4_64);
  MADD_BF(g1, g3, g9, g11, k0, k1, k2, k0, h0, h1, h2, h3);

  r1 = LD_SH(input + 1 * 16);
  r2 = LD_SH(input + 2 * 16);
  r5 = LD_SH(input + 5 * 16);
  r6 = LD_SH(input + 6 * 16);
  r9 = LD_SH(input + 9 * 16);
  r10 = LD_SH(input + 10 * 16);
  r13 = LD_SH(input + 13 * 16);
  r14 = LD_SH(input + 14 * 16);

  k0 = VP9_SET_COSPI_PAIR(cospi_5_64, cospi_27_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_27_64, -cospi_5_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_21_64, cospi_11_64);
  k3 = VP9_SET_COSPI_PAIR(cospi_11_64, -cospi_21_64);
  MADD_BF(r13, r2, r5, r10, k0, k1, k2, k3, g4, g5, g6, g7);
  k0 = VP9_SET_COSPI_PAIR(cospi_13_64, cospi_19_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_19_64, -cospi_13_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_29_64, cospi_3_64);
  k3 = VP9_SET_COSPI_PAIR(cospi_3_64, -cospi_29_64);
  MADD_BF(r9, r6, r1, r14, k0, k1, k2, k3, g12, g13, g14, g15);
  BUTTERFLY_4(g4, g6, g14, g12, h10, h11, v6, v4);
  BUTTERFLY_4(h8, h9, h11, h10, out0, out1, h11, h10);
  out1 = -out1;
  SRARI_H2_SH(out0, out1, 6);
  dst0 = LD_UB(dst + 0 * dst_stride);
  dst1 = LD_UB(dst + 15 * dst_stride);
  ILVR_B2_SH(zero, dst0, zero, dst1, res0, res1);
  ADD2(res0, out0, res1, out1, res0, res1);
  CLIP_SH2_0_255(res0, res1);
  PCKEV_B2_SH(res0, res0, res1, res1, res0, res1);
  ST8x1_UB(res0, dst);
  ST8x1_UB(res1, dst + 15 * dst_stride);

  k0 = VP9_SET_COSPI_PAIR(cospi_12_64, cospi_20_64);
  k1 = VP9_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_20_64, -cospi_12_64);
  MADD_BF(g7, g5, g15, g13, k0, k1, k2, k0, h4, h5, h6, h7);
  BUTTERFLY_4(h0, h2, h6, h4, out8, out9, out11, out10);
  out8 = -out8;

  SRARI_H2_SH(out8, out9, 6);
  dst8 = LD_UB(dst + 1 * dst_stride);
  dst9 = LD_UB(dst + 14 * dst_stride);
  ILVR_B2_SH(zero, dst8, zero, dst9, res8, res9);
  ADD2(res8, out8, res9, out9, res8, res9);
  CLIP_SH2_0_255(res8, res9);
  PCKEV_B2_SH(res8, res8, res9, res9, res8, res9);
  ST8x1_UB(res8, dst + dst_stride);
  ST8x1_UB(res9, dst + 14 * dst_stride);

  k0 = VP9_SET_COSPI_PAIR(cospi_8_64, cospi_24_64);
  k1 = VP9_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64);
  k2 = VP9_SET_COSPI_PAIR(-cospi_24_64, cospi_8_64);
  MADD_BF(v0, v2, v4, v6, k0, k1, k2, k0, out4, out6, out5, out7);
  out4 = -out4;
  SRARI_H2_SH(out4, out5, 6);
  dst4 = LD_UB(dst + 3 * dst_stride);
  dst5 = LD_UB(dst + 12 * dst_stride);
  ILVR_B2_SH(zero, dst4, zero, dst5, res4, res5);
  ADD2(res4, out4, res5, out5, res4, res5);
  CLIP_SH2_0_255(res4, res5);
  PCKEV_B2_SH(res4, res4, res5, res5, res4, res5);
  ST8x1_UB(res4, dst + 3 * dst_stride);
  ST8x1_UB(res5, dst + 12 * dst_stride);

  MADD_BF(h1, h3, h5, h7, k0, k1, k2, k0, out12, out14, out13, out15);
  out13 = -out13;
  SRARI_H2_SH(out12, out13, 6);
  dst12 = LD_UB(dst + 2 * dst_stride);
  dst13 = LD_UB(dst + 13 * dst_stride);
  ILVR_B2_SH(zero, dst12, zero, dst13, res12, res13);
  ADD2(res12, out12, res13, out13, res12, res13);
  CLIP_SH2_0_255(res12, res13);
  PCKEV_B2_SH(res12, res12, res13, res13, res12, res13);
  ST8x1_UB(res12, dst + 2 * dst_stride);
  ST8x1_UB(res13, dst + 13 * dst_stride);

  k0 = VP9_SET_COSPI_PAIR(cospi_16_64, cospi_16_64);
  k3 = VP9_SET_COSPI_PAIR(-cospi_16_64, cospi_16_64);
  MADD_SHORT(out6, out7, k0, k3, out6, out7);
  SRARI_H2_SH(out6, out7, 6);
  dst6 = LD_UB(dst + 4 * dst_stride);
  dst7 = LD_UB(dst + 11 * dst_stride);
  ILVR_B2_SH(zero, dst6, zero, dst7, res6, res7);
  ADD2(res6, out6, res7, out7, res6, res7);
  CLIP_SH2_0_255(res6, res7);
  PCKEV_B2_SH(res6, res6, res7, res7, res6, res7);
  ST8x1_UB(res6, dst + 4 * dst_stride);
  ST8x1_UB(res7, dst + 11 * dst_stride);

  MADD_SHORT(out10, out11, k0, k3, out10, out11);
  SRARI_H2_SH(out10, out11, 6);
  dst10 = LD_UB(dst + 6 * dst_stride);
  dst11 = LD_UB(dst + 9 * dst_stride);
  ILVR_B2_SH(zero, dst10, zero, dst11, res10, res11);
  ADD2(res10, out10, res11, out11, res10, res11);
  CLIP_SH2_0_255(res10, res11);
  PCKEV_B2_SH(res10, res10, res11, res11, res10, res11);
  ST8x1_UB(res10, dst + 6 * dst_stride);
  ST8x1_UB(res11, dst + 9 * dst_stride);

  k1 = VP9_SET_COSPI_PAIR(-cospi_16_64, -cospi_16_64);
  k2 = VP9_SET_COSPI_PAIR(cospi_16_64, -cospi_16_64);
  MADD_SHORT(h10, h11, k1, k2, out2, out3);
  SRARI_H2_SH(out2, out3, 6);
  dst2 = LD_UB(dst + 7 * dst_stride);
  dst3 = LD_UB(dst + 8 * dst_stride);
  ILVR_B2_SH(zero, dst2, zero, dst3, res2, res3);
  ADD2(res2, out2, res3, out3, res2, res3);
  CLIP_SH2_0_255(res2, res3);
  PCKEV_B2_SH(res2, res2, res3, res3, res2, res3);
  ST8x1_UB(res2, dst + 7 * dst_stride);
  ST8x1_UB(res3, dst + 8 * dst_stride);

  MADD_SHORT(out14, out15, k1, k2, out14, out15);
  SRARI_H2_SH(out14, out15, 6);
  dst14 = LD_UB(dst + 5 * dst_stride);
  dst15 = LD_UB(dst + 10 * dst_stride);
  ILVR_B2_SH(zero, dst14, zero, dst15, res14, res15);
  ADD2(res14, out14, res15, out15, res14, res15);
  CLIP_SH2_0_255(res14, res15);
  PCKEV_B2_SH(res14, res14, res15, res15, res14, res15);
  ST8x1_UB(res14, dst + 5 * dst_stride);
  ST8x1_UB(res15, dst + 10 * dst_stride);
}
