xref: /aosp_15_r20/external/libvpx/vp9/encoder/mips/msa/vp9_fdct8x8_msa.c (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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