1 /*
2 * Copyright (c) 2015 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include <assert.h>
12
13 #include "./vp9_rtcd.h"
14 #include "vp9/common/vp9_enums.h"
15 #include "vp9/encoder/mips/msa/vp9_fdct_msa.h"
16
vp9_fht8x8_msa(const int16_t * input,int16_t * output,int32_t stride,int32_t tx_type)17 void vp9_fht8x8_msa(const int16_t *input, int16_t *output, int32_t stride,
18 int32_t tx_type) {
19 v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
20
21 LD_SH8(input, stride, in0, in1, in2, in3, in4, in5, in6, in7);
22 SLLI_4V(in0, in1, in2, in3, 2);
23 SLLI_4V(in4, in5, in6, in7, 2);
24
25 switch (tx_type) {
26 case DCT_DCT:
27 VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
28 in5, in6, in7);
29 TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
30 in3, in4, in5, in6, in7);
31 VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
32 in5, in6, in7);
33 break;
34 case ADST_DCT:
35 VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
36 in5, in6, in7);
37 TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
38 in3, in4, in5, in6, in7);
39 VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
40 in5, in6, in7);
41 break;
42 case DCT_ADST:
43 VP9_FDCT8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
44 in5, in6, in7);
45 TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
46 in3, in4, in5, in6, in7);
47 VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
48 in5, in6, in7);
49 break;
50 case ADST_ADST:
51 VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
52 in5, in6, in7);
53 TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2,
54 in3, in4, in5, in6, in7);
55 VP9_ADST8(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3, in4,
56 in5, in6, in7);
57 break;
58 default: assert(0); break;
59 }
60
61 TRANSPOSE8x8_SH_SH(in0, in1, in2, in3, in4, in5, in6, in7, in0, in1, in2, in3,
62 in4, in5, in6, in7);
63 SRLI_AVE_S_4V_H(in0, in1, in2, in3, in4, in5, in6, in7);
64 ST_SH8(in0, in1, in2, in3, in4, in5, in6, in7, output, 8);
65 }
66