1da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian/*
2da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  Copyright (c) 2015 The WebM project authors. All Rights Reserved.
3da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *
4da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  Use of this source code is governed by a BSD-style license
5da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  that can be found in the LICENSE file in the root of the source
6da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  tree. An additional intellectual property rights grant can be found
7da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  in the file PATENTS.  All contributing project authors may
8da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian *  be found in the AUTHORS file in the root of the source tree.
9da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian */
10da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
11da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include <assert.h>
12da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
13da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include "vp9/common/vp9_enums.h"
14da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian#include "vp9/encoder/mips/msa/vp9_fdct_msa.h"
15da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
16da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanianvoid vp9_fht8x8_msa(const int16_t *input, int16_t *output, int32_t stride,
17da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian                    int32_t tx_type) {
18da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
19da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
20da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  LD_SH8(input, stride, in0, in1, in2, in3, in4, in5, in6, in7);
21da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  SLLI_4V(in0, in1, in2, in3, 2);
22da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  SLLI_4V(in4, in5, in6, in7, 2);
23da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
24da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  switch (tx_type) {
25da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case DCT_DCT:
267bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
277bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
287bc9febe8749e98a3812a0dc4380ceae75c29450Johann      TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
297bc9febe8749e98a3812a0dc4380ceae75c29450Johann                         in3, in4, in5, in6, in7);
307bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
317bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
32da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      break;
33da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case ADST_DCT:
347bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
357bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
367bc9febe8749e98a3812a0dc4380ceae75c29450Johann      TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
377bc9febe8749e98a3812a0dc4380ceae75c29450Johann                         in3, in4, in5, in6, in7);
387bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
397bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
40da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      break;
41da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case DCT_ADST:
427bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
437bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
447bc9febe8749e98a3812a0dc4380ceae75c29450Johann      TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
457bc9febe8749e98a3812a0dc4380ceae75c29450Johann                         in3, in4, in5, in6, in7);
467bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
477bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
48da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      break;
49da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian    case ADST_ADST:
507bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
517bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
527bc9febe8749e98a3812a0dc4380ceae75c29450Johann      TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
537bc9febe8749e98a3812a0dc4380ceae75c29450Johann                         in3, in4, in5, in6, in7);
547bc9febe8749e98a3812a0dc4380ceae75c29450Johann      VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
557bc9febe8749e98a3812a0dc4380ceae75c29450Johann                in5, in6, in7);
56da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian      break;
577bc9febe8749e98a3812a0dc4380ceae75c29450Johann    default: assert(0); break;
58da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  }
59da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian
607bc9febe8749e98a3812a0dc4380ceae75c29450Johann  TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3,
617bc9febe8749e98a3812a0dc4380ceae75c29450Johann                     in4, in5, in6, in7);
62da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  SRLI_AVE_S_4V_H(in0, in1, in2, in3, in4, in5, in6, in7);
63da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian  ST_SH8(in0, in1, in2, in3, in4, in5, in6, in7, output, 8);
64da49e34c1fb5e99681f4ad99c21d9cfd83eddb96Vignesh Venkatasubramanian}
65