/*
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 */

#include "aom_dsp/mips/inv_txfm_msa.h"

void aom_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 aom_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);
  AOM_ADDBLK_ST8x4_UB(dst, dst_stride, reg0, reg2, reg4, reg6);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg8, reg10, reg12, reg14, 6);
  AOM_ADDBLK_ST8x4_UB(dst, dst_stride, reg8, reg10, reg12, reg14);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg3, reg13, reg11, reg5, 6);
  AOM_ADDBLK_ST8x4_UB(dst, dst_stride, reg3, reg13, reg11, reg5);
  dst += (4 * dst_stride);
  SRARI_H4_SH(reg7, reg9, reg1, reg15, 6);
  AOM_ADDBLK_ST8x4_UB(dst, dst_stride, reg7, reg9, reg1, reg15);
}

void aom_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 */
    aom_idct16_1d_rows_msa((input + (i << 7)), (out + (i << 7)));
  }

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

void aom_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 */
  aom_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 */
    aom_idct16_1d_columns_addblk_msa((out + (i << 3)), (dst + (i << 3)),
                                     dst_stride);
  }
}

void aom_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 aom_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 */
  AOM_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 aom_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 = AOM_SET_COSPI_PAIR(cospi_1_64, cospi_31_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_31_64, -cospi_1_64);
  k2 = AOM_SET_COSPI_PAIR(cospi_17_64, cospi_15_64);
  k3 = AOM_SET_COSPI_PAIR(cospi_15_64, -cospi_17_64);
  MADD_BF(r15, r0, r7, r8, k0, k1, k2, k3, g0, g1, g2, g3);
  k0 = AOM_SET_COSPI_PAIR(cospi_9_64, cospi_23_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_23_64, -cospi_9_64);
  k2 = AOM_SET_COSPI_PAIR(cospi_25_64, cospi_7_64);
  k3 = AOM_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 = AOM_SET_COSPI_PAIR(cospi_4_64, cospi_28_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_28_64, -cospi_4_64);
  k2 = AOM_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 = AOM_SET_COSPI_PAIR(cospi_5_64, cospi_27_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_27_64, -cospi_5_64);
  k2 = AOM_SET_COSPI_PAIR(cospi_21_64, cospi_11_64);
  k3 = AOM_SET_COSPI_PAIR(cospi_11_64, -cospi_21_64);
  MADD_BF(r13, r2, r5, r10, k0, k1, k2, k3, g4, g5, g6, g7);
  k0 = AOM_SET_COSPI_PAIR(cospi_13_64, cospi_19_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_19_64, -cospi_13_64);
  k2 = AOM_SET_COSPI_PAIR(cospi_29_64, cospi_3_64);
  k3 = AOM_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 = AOM_SET_COSPI_PAIR(cospi_12_64, cospi_20_64);
  k1 = AOM_SET_COSPI_PAIR(-cospi_20_64, cospi_12_64);
  k2 = AOM_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 = AOM_SET_COSPI_PAIR(cospi_8_64, cospi_24_64);
  k1 = AOM_SET_COSPI_PAIR(cospi_24_64, -cospi_8_64);
  k2 = AOM_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 = AOM_SET_COSPI_PAIR(cospi_16_64, cospi_16_64);
  k3 = AOM_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 = AOM_SET_COSPI_PAIR(-cospi_16_64, -cospi_16_64);
  k2 = AOM_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);
}
