xref: /aosp_15_r20/external/libdav1d/src/loongarch/itx.S (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker/*
2*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, Loongson Technology Corporation Limited
4*c0909341SAndroid Build Coastguard Worker * All rights reserved.
5*c0909341SAndroid Build Coastguard Worker *
6*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
7*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
8*c0909341SAndroid Build Coastguard Worker *
9*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this
10*c0909341SAndroid Build Coastguard Worker *    list of conditions and the following disclaimer.
11*c0909341SAndroid Build Coastguard Worker *
12*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice,
13*c0909341SAndroid Build Coastguard Worker *    this list of conditions and the following disclaimer in the documentation
14*c0909341SAndroid Build Coastguard Worker *    and/or other materials provided with the distribution.
15*c0909341SAndroid Build Coastguard Worker *
16*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*c0909341SAndroid Build Coastguard Worker */
27*c0909341SAndroid Build Coastguard Worker
28*c0909341SAndroid Build Coastguard Worker#include "src/loongarch/loongson_asm.S"
29*c0909341SAndroid Build Coastguard Worker#include "src/loongarch/loongson_util.S"
30*c0909341SAndroid Build Coastguard Worker
31*c0909341SAndroid Build Coastguard Worker.macro PUSH_REG
32*c0909341SAndroid Build Coastguard Worker    addi.d           sp,     sp,    -64
33*c0909341SAndroid Build Coastguard Worker    fst.d            f24,    sp,     0
34*c0909341SAndroid Build Coastguard Worker    fst.d            f25,    sp,     8
35*c0909341SAndroid Build Coastguard Worker    fst.d            f26,    sp,     16
36*c0909341SAndroid Build Coastguard Worker    fst.d            f27,    sp,     24
37*c0909341SAndroid Build Coastguard Worker    fst.d            f28,    sp,     32
38*c0909341SAndroid Build Coastguard Worker    fst.d            f29,    sp,     40
39*c0909341SAndroid Build Coastguard Worker    fst.d            f30,    sp,     48
40*c0909341SAndroid Build Coastguard Worker    fst.d            f31,    sp,     56
41*c0909341SAndroid Build Coastguard Worker.endm
42*c0909341SAndroid Build Coastguard Worker
43*c0909341SAndroid Build Coastguard Worker.macro POP_REG
44*c0909341SAndroid Build Coastguard Worker    fld.d            f24,    sp,     0
45*c0909341SAndroid Build Coastguard Worker    fld.d            f25,    sp,     8
46*c0909341SAndroid Build Coastguard Worker    fld.d            f26,    sp,     16
47*c0909341SAndroid Build Coastguard Worker    fld.d            f27,    sp,     24
48*c0909341SAndroid Build Coastguard Worker    fld.d            f28,    sp,     32
49*c0909341SAndroid Build Coastguard Worker    fld.d            f29,    sp,     40
50*c0909341SAndroid Build Coastguard Worker    fld.d            f30,    sp,     48
51*c0909341SAndroid Build Coastguard Worker    fld.d            f31,    sp,     56
52*c0909341SAndroid Build Coastguard Worker    addi.d           sp,     sp,     64
53*c0909341SAndroid Build Coastguard Worker.endm
54*c0909341SAndroid Build Coastguard Worker
55*c0909341SAndroid Build Coastguard Worker.macro malloc_space number
56*c0909341SAndroid Build Coastguard Worker    li.w          t0,       \number
57*c0909341SAndroid Build Coastguard Worker    sub.d         sp,       sp,       t0
58*c0909341SAndroid Build Coastguard Worker    addi.d        sp,       sp,       -64
59*c0909341SAndroid Build Coastguard Worker    PUSH_REG
60*c0909341SAndroid Build Coastguard Worker.endm
61*c0909341SAndroid Build Coastguard Worker
62*c0909341SAndroid Build Coastguard Worker.macro free_space number
63*c0909341SAndroid Build Coastguard Worker    POP_REG
64*c0909341SAndroid Build Coastguard Worker    li.w          t0,       \number
65*c0909341SAndroid Build Coastguard Worker    add.d         sp,       sp,       t0
66*c0909341SAndroid Build Coastguard Worker    addi.d        sp,       sp,       64
67*c0909341SAndroid Build Coastguard Worker.endm
68*c0909341SAndroid Build Coastguard Worker
69*c0909341SAndroid Build Coastguard Worker.macro iwht4
70*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,       vr0,     vr1
71*c0909341SAndroid Build Coastguard Worker    vsub.h        vr4,       vr2,     vr3
72*c0909341SAndroid Build Coastguard Worker    vsub.h        vr5,       vr0,     vr4
73*c0909341SAndroid Build Coastguard Worker    vsrai.h       vr5,       vr5,     1
74*c0909341SAndroid Build Coastguard Worker    vsub.h        vr2,       vr5,     vr1
75*c0909341SAndroid Build Coastguard Worker    vsub.h        vr1,       vr5,     vr3
76*c0909341SAndroid Build Coastguard Worker    vadd.h        vr3,       vr4,     vr2
77*c0909341SAndroid Build Coastguard Worker    vsub.h        vr0,       vr0,     vr1
78*c0909341SAndroid Build Coastguard Worker.endm
79*c0909341SAndroid Build Coastguard Worker
80*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W4 in0, in1, in2, in3, in4, in5
81*c0909341SAndroid Build Coastguard Worker    vilvl.w       \in0,     \in1,     \in0  // 0 1  2  3  4  5  6  7 x ...
82*c0909341SAndroid Build Coastguard Worker    vilvl.w       \in2,     \in3,     \in2  // 8 9 10 11 12 13 14 15 x ...
83*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu \in0,     \in0,     0
84*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu \in2,     \in2,     0
85*c0909341SAndroid Build Coastguard Worker    vadd.h        \in0,     \in4,     \in0
86*c0909341SAndroid Build Coastguard Worker    vadd.h        \in2,     \in5,     \in2
87*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  \in2,     \in0,     0
88*c0909341SAndroid Build Coastguard Worker    vstelm.w      \in2,     a0,       0,    0
89*c0909341SAndroid Build Coastguard Worker    vstelmx.w     \in2,     a0,       a1,   1
90*c0909341SAndroid Build Coastguard Worker    vstelmx.w     \in2,     a0,       a1,   2
91*c0909341SAndroid Build Coastguard Worker    vstelmx.w     \in2,     a0,       a1,   3
92*c0909341SAndroid Build Coastguard Worker.endm
93*c0909341SAndroid Build Coastguard Worker
94*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W4 in0, in1
95*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a0,       0
96*c0909341SAndroid Build Coastguard Worker    vldx          vr1,      a0,       a1
97*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t2,       0
98*c0909341SAndroid Build Coastguard Worker    vldx          vr3,      t2,       a1
99*c0909341SAndroid Build Coastguard Worker
100*c0909341SAndroid Build Coastguard Worker    DST_ADD_W4    vr0, vr1, vr2, vr3, \in0, \in1
101*c0909341SAndroid Build Coastguard Worker.endm
102*c0909341SAndroid Build Coastguard Worker
103*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_wht_wht_4x4_8bpc_lsx
104*c0909341SAndroid Build Coastguard Worker    vld           vr0,       a2,      0
105*c0909341SAndroid Build Coastguard Worker    vld           vr2,       a2,      16
106*c0909341SAndroid Build Coastguard Worker
107*c0909341SAndroid Build Coastguard Worker    vxor.v        vr20,      vr20,    vr20
108*c0909341SAndroid Build Coastguard Worker    vsrai.h       vr0,       vr0,     2
109*c0909341SAndroid Build Coastguard Worker    vsrai.h       vr2,       vr2,     2
110*c0909341SAndroid Build Coastguard Worker    vst           vr20,      a2,      0
111*c0909341SAndroid Build Coastguard Worker    vpickod.d     vr1,       vr0,     vr0
112*c0909341SAndroid Build Coastguard Worker    vpickod.d     vr3,       vr2,     vr2
113*c0909341SAndroid Build Coastguard Worker    vst           vr20,      a2,      16
114*c0909341SAndroid Build Coastguard Worker
115*c0909341SAndroid Build Coastguard Worker    iwht4
116*c0909341SAndroid Build Coastguard Worker
117*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5
118*c0909341SAndroid Build Coastguard Worker
119*c0909341SAndroid Build Coastguard Worker    iwht4
120*c0909341SAndroid Build Coastguard Worker
121*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr4,       vr1,     vr0
122*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr5,       vr3,     vr2
123*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,        a1,      a0,    1
124*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr4, vr5
125*c0909341SAndroid Build Coastguard Workerendfunc
126*c0909341SAndroid Build Coastguard Worker
127*c0909341SAndroid Build Coastguard Workerconst idct_coeffs, align=4
128*c0909341SAndroid Build Coastguard Worker    .word          2896, 2896*8, 1567, 3784
129*c0909341SAndroid Build Coastguard Worker    .word          799, 4017, 3406, 2276
130*c0909341SAndroid Build Coastguard Worker    .word          401, 4076, 3166, 2598
131*c0909341SAndroid Build Coastguard Worker    .word          1931, 3612, 3920, 1189
132*c0909341SAndroid Build Coastguard Worker    .word          201, 4091, 3035, 2751
133*c0909341SAndroid Build Coastguard Worker    .word          1751, 3703, 3857, 1380
134*c0909341SAndroid Build Coastguard Worker    .word          995, 3973, 3513, 2106
135*c0909341SAndroid Build Coastguard Worker    .word          2440, 3290, 4052, 601
136*c0909341SAndroid Build Coastguard Workerendconst
137*c0909341SAndroid Build Coastguard Worker
138*c0909341SAndroid Build Coastguard Worker.macro vsrari_h_x4 in0, in1, in2, in3, out0, out1, out2, out3, shift
139*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out0,    \in0,     \shift
140*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out1,    \in1,     \shift
141*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out2,    \in2,     \shift
142*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out3,    \in3,     \shift
143*c0909341SAndroid Build Coastguard Worker.endm
144*c0909341SAndroid Build Coastguard Worker
145*c0909341SAndroid Build Coastguard Worker.macro vsrari_h_x8 in0, in1, in2, in3, in4, in5, in6, in7, out0, \
146*c0909341SAndroid Build Coastguard Worker                   out1, out2, out3, out4, out5, out6, out7, shift
147*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out0,    \in0,     \shift
148*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out1,    \in1,     \shift
149*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out2,    \in2,     \shift
150*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out3,    \in3,     \shift
151*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out4,    \in4,     \shift
152*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out5,    \in5,     \shift
153*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out6,    \in6,     \shift
154*c0909341SAndroid Build Coastguard Worker    vsrari.h      \out7,    \in7,     \shift
155*c0909341SAndroid Build Coastguard Worker.endm
156*c0909341SAndroid Build Coastguard Worker
157*c0909341SAndroid Build Coastguard Worker.macro vmulev_vmaddod_lsx in0, in1, in2, in3, out0, out1, sz
158*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   \out0,    \in0,     \in2
159*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   \out1,    \in0,     \in2
160*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  \out0,    \in1,     \in3
161*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  \out1,    \in1,     \in3
162*c0909341SAndroid Build Coastguard Worker.ifc \sz, .4h
163*c0909341SAndroid Build Coastguard Worker    vilvl.w       \out0,    \out1,    \out0
164*c0909341SAndroid Build Coastguard Worker.else
165*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr22,     \out1,    \out0
166*c0909341SAndroid Build Coastguard Worker    vilvh.w       \out1,    \out1,    \out0
167*c0909341SAndroid Build Coastguard Worker    vor.v         \out0,    vr22,     vr22
168*c0909341SAndroid Build Coastguard Worker.endif
169*c0909341SAndroid Build Coastguard Worker.endm
170*c0909341SAndroid Build Coastguard Worker
171*c0909341SAndroid Build Coastguard Workerconst idct_coeffs_h, align=4
172*c0909341SAndroid Build Coastguard Worker    .short          2896, 2896*8, 1567, 3784
173*c0909341SAndroid Build Coastguard Worker    .short          799, 4017, 3406, 2276
174*c0909341SAndroid Build Coastguard Worker    .short          401, 4076, 3166, 2598
175*c0909341SAndroid Build Coastguard Worker    .short          1931, 3612, 3920, 1189
176*c0909341SAndroid Build Coastguard Worker    .short          201, 4091, 3035, 2751
177*c0909341SAndroid Build Coastguard Worker    .short          1751, 3703, 3857, 1380
178*c0909341SAndroid Build Coastguard Worker    .short          995, 3973, 3513, 2106
179*c0909341SAndroid Build Coastguard Worker    .short          2440, 3290, 4052, 601
180*c0909341SAndroid Build Coastguard Workerendconst
181*c0909341SAndroid Build Coastguard Worker
182*c0909341SAndroid Build Coastguard Workerconst iadst4_coeffs, align=4
183*c0909341SAndroid Build Coastguard Worker    .word          1321, 3803, 2482, 3344
184*c0909341SAndroid Build Coastguard Workerendconst
185*c0909341SAndroid Build Coastguard Worker
186*c0909341SAndroid Build Coastguard Worker.macro inv_dct4_lsx in0, in1, in2, in3, out0, out1, out2, out3, sz
187*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
188*c0909341SAndroid Build Coastguard Worker
189*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       0    // 2896
190*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx \in0, \in2, vr20, vr20, vr16, vr18, \sz
191*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr20
192*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx \in0, \in2, vr20, vr21, vr17, vr19, \sz
193*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr16,     12   // t0
194*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr17,     12   // t1
195*c0909341SAndroid Build Coastguard Worker
196*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       4    // 1567
197*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       6    // 3784
198*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx \in1, \in3, vr21, vr20, \in0, vr16, \sz
199*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
200*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx \in1, \in3, vr20, vr21, \in2, vr17, \sz
201*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     \in0,     12   // t3
202*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     \in2,     12   // t2
203*c0909341SAndroid Build Coastguard Worker
204*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr18,     vr16
205*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out1,    vr19,     vr17
206*c0909341SAndroid Build Coastguard Worker    vssub.h       \out2,    vr19,     vr17
207*c0909341SAndroid Build Coastguard Worker    vssub.h       \out3,    vr18,     vr16
208*c0909341SAndroid Build Coastguard Worker.endm
209*c0909341SAndroid Build Coastguard Worker
210*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x4_lsx
211*c0909341SAndroid Build Coastguard Worker    inv_dct4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, .4h
212*c0909341SAndroid Build Coastguard Workerendfuncl
213*c0909341SAndroid Build Coastguard Worker
214*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x4_lsx
215*c0909341SAndroid Build Coastguard Worker    inv_dct4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, .8h
216*c0909341SAndroid Build Coastguard Workerendfuncl
217*c0909341SAndroid Build Coastguard Worker
218*c0909341SAndroid Build Coastguard Worker.macro inv_adst4_core_lsx in0, in1, in2, in3, out0, out1, out2, out3
219*c0909341SAndroid Build Coastguard Worker    vsub.w        vr16,     \in0,    \in2  // in0-in2
220*c0909341SAndroid Build Coastguard Worker    vmul.w        vr17,     \in0,    vr20  // in0*1321
221*c0909341SAndroid Build Coastguard Worker    vmul.w        vr19,     \in0,    vr22  // in0*2482
222*c0909341SAndroid Build Coastguard Worker    vmul.w        vr18,     \in1,    vr23  // in1*3344
223*c0909341SAndroid Build Coastguard Worker    vmadd.w       vr17,     \in2,    vr21  // in0*1321+in2*3803
224*c0909341SAndroid Build Coastguard Worker    vmsub.w       vr19,     \in2,    vr20  // in2*1321
225*c0909341SAndroid Build Coastguard Worker    vadd.w        vr16,     vr16,    \in3  // in0-in2+in3
226*c0909341SAndroid Build Coastguard Worker    vmadd.w       vr17,     \in3,    vr22  // in0*1321+in2*3803+in3*2482
227*c0909341SAndroid Build Coastguard Worker    vmsub.w       vr19,     \in3,    vr21  // in0*2482-in2*1321-in3*3803
228*c0909341SAndroid Build Coastguard Worker    vadd.w        vr15,     vr17,    vr19
229*c0909341SAndroid Build Coastguard Worker    vmul.w        \out2,    vr16,    vr23  // out[2] 8  9  10 11
230*c0909341SAndroid Build Coastguard Worker    vadd.w        \out0,    vr17,    vr18  // out[0] 0  1  2  3
231*c0909341SAndroid Build Coastguard Worker    vadd.w        \out1,    vr19,    vr18  // out[1] 4  5  6  7
232*c0909341SAndroid Build Coastguard Worker    vsub.w        \out3,    vr15,    vr18  // out[3] 12 13 14 15
233*c0909341SAndroid Build Coastguard Worker.endm
234*c0909341SAndroid Build Coastguard Worker
235*c0909341SAndroid Build Coastguard Worker.macro inv_adst4_lsx in0, in1, in2, in3, out0, out1, out2, out3
236*c0909341SAndroid Build Coastguard Worker    la.local      t0,       iadst4_coeffs
237*c0909341SAndroid Build Coastguard Worker
238*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,      0     // 1321
239*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,      4     // 3803
240*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr22,     t0,      8     // 2482
241*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,     t0,      12    // 3344
242*c0909341SAndroid Build Coastguard Worker
243*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr0,      \in0,    0
244*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr1,      \in1,    0
245*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr2,      \in2,    0
246*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr3,      \in3,    0
247*c0909341SAndroid Build Coastguard Worker    inv_adst4_core_lsx vr0, vr1, vr2, vr3, \out0, \out1, \out2, \out3
248*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out0,    \out0,   12
249*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out1,    \out1,   12
250*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out2,    \out2,   12
251*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out3,    \out3,   12
252*c0909341SAndroid Build Coastguard Worker.endm
253*c0909341SAndroid Build Coastguard Worker
254*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x4_lsx
255*c0909341SAndroid Build Coastguard Worker    inv_adst4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3
256*c0909341SAndroid Build Coastguard Workerendfuncl
257*c0909341SAndroid Build Coastguard Worker
258*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x4_lsx
259*c0909341SAndroid Build Coastguard Worker    inv_adst4_lsx vr0, vr1, vr2, vr3, vr3, vr2, vr1, vr0
260*c0909341SAndroid Build Coastguard Workerendfuncl
261*c0909341SAndroid Build Coastguard Worker
262*c0909341SAndroid Build Coastguard Worker.macro inv_adst_8x4_lsx in0, in1, in2, in3, out0, out1, out2, out3
263*c0909341SAndroid Build Coastguard Worker    la.local      t0,       iadst4_coeffs
264*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,      0     // 1321
265*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,      4     // 3803
266*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr22,     t0,      8     // 2482
267*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,     t0,      12    // 3344
268*c0909341SAndroid Build Coastguard Worker
269*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr10,     \in0,     0     // in0
270*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr11,     \in1,     0     // in1
271*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr12,     \in2,     0     // in2
272*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr13,     \in3,     0     // in3
273*c0909341SAndroid Build Coastguard Worker    inv_adst4_core_lsx vr10, vr11, vr12, vr13, vr10, vr11, vr12, vr13
274*c0909341SAndroid Build Coastguard Worker
275*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \in0,      \in0           // in0
276*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \in1,      \in1           // in1
277*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \in2,      \in2           // in2
278*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \in3,      \in3           // in3
279*c0909341SAndroid Build Coastguard Worker    inv_adst4_core_lsx \in0, \in1, \in2, \in3, \out0, \out1, \out2, \out3
280*c0909341SAndroid Build Coastguard Worker
281*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out0,     vr10,    12
282*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out1,     vr11,    12
283*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out2,     vr12,    12
284*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out3,     vr13,    12
285*c0909341SAndroid Build Coastguard Worker.endm
286*c0909341SAndroid Build Coastguard Worker
287*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x4_lsx
288*c0909341SAndroid Build Coastguard Worker    inv_adst_8x4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3
289*c0909341SAndroid Build Coastguard Workerendfuncl
290*c0909341SAndroid Build Coastguard Worker
291*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x4_lsx
292*c0909341SAndroid Build Coastguard Worker    inv_adst_8x4_lsx vr0, vr1, vr2, vr3, vr3, vr2, vr1, vr0
293*c0909341SAndroid Build Coastguard Workerendfuncl
294*c0909341SAndroid Build Coastguard Worker
295*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x4_lsx
296*c0909341SAndroid Build Coastguard Worker    li.w          t0,       1697
297*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h  vr20,     t0
298*c0909341SAndroid Build Coastguard Worker
299*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr0,      vr1,      vr0
300*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr2,      vr3,      vr2
301*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr16,     vr0,      vr20
302*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr17,     vr0,      vr20
303*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr18,     vr2,      vr20
304*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr19,     vr2,      vr20
305*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr1,      vr17,     vr16
306*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr3,      vr17,     vr16
307*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr22,     vr19,     vr18
308*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr23,     vr19,     vr18
309*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr3,      vr1,      12
310*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr23,     vr22,     12
311*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr3,      vr0  // t0
312*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr23,     vr2  // t2
313*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr1,      vr0,      vr0  // t1
314*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr3,      vr2,      vr2  // t3
315*c0909341SAndroid Build Coastguard Workerendfuncl
316*c0909341SAndroid Build Coastguard Worker
317*c0909341SAndroid Build Coastguard Worker.macro inv_identity4_lsx1 in0, in1, in2, out0, out1
318*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr16,     \in0,     0
319*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr17,     \in1
320*c0909341SAndroid Build Coastguard Worker    vmul.w        vr18,     vr16,     \in2
321*c0909341SAndroid Build Coastguard Worker    vmul.w        vr19,     vr17,     \in2
322*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr18,     vr18,     12
323*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr19,     vr19,     12
324*c0909341SAndroid Build Coastguard Worker    vadd.w        \out0,    vr18,     vr16
325*c0909341SAndroid Build Coastguard Worker    vadd.w        \out1,    vr19,     vr17
326*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out1,    \out0,    1
327*c0909341SAndroid Build Coastguard Worker.endm
328*c0909341SAndroid Build Coastguard Worker
329*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x4_lsx
330*c0909341SAndroid Build Coastguard Worker    li.w          t0,        1697
331*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h  vr20,      t0
332*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr16,      vr0,     vr20
333*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr17,      vr0,     vr20
334*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr18,      vr1,     vr20
335*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr19,      vr1,     vr20
336*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr21,      vr17,    vr16
337*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr22,      vr17,    vr16
338*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr23,      vr19,    vr18
339*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr16,      vr19,    vr18
340*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr22,      vr21,    12
341*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,      vr23,    12
342*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,       vr22,    vr0  // t0
343*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,       vr16,    vr1  // t1
344*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr16,      vr2,     vr20
345*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr17,      vr2,     vr20
346*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr18,      vr3,     vr20
347*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr19,      vr3,     vr20
348*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr21,      vr17,    vr16
349*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr22,      vr17,    vr16
350*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr23,      vr19,    vr18
351*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr16,      vr19,    vr18
352*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr22,      vr21,    12
353*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,      vr23,    12
354*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,       vr22,    vr2  // t2
355*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,       vr16,    vr3  // t3
356*c0909341SAndroid Build Coastguard Workerendfuncl
357*c0909341SAndroid Build Coastguard Worker
358*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x4_lsx1
359*c0909341SAndroid Build Coastguard Worker    li.w          t0,        1697
360*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr20,      t0
361*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3
362*c0909341SAndroid Build Coastguard Worker    inv_identity4_lsx1 \i, \i vr20, vr21, \i
363*c0909341SAndroid Build Coastguard Worker.endr
364*c0909341SAndroid Build Coastguard Workerendfuncl
365*c0909341SAndroid Build Coastguard Worker
366*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_4x4_lsx
367*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
368*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a2,       0
369*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a2,       16
370*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr1,      vr0,      vr0
371*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr3,      vr2,      vr2
372*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       0
373*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       16
374*c0909341SAndroid Build Coastguard Worker
375*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
376*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
377*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
378*c0909341SAndroid Build Coastguard Worker
379*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5
380*c0909341SAndroid Build Coastguard Worker
381*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
382*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
383*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
384*c0909341SAndroid Build Coastguard Worker
385*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr4,      vr1,      vr0
386*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr5,      vr3,      vr2
387*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr4,      vr4,      4
388*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr5,      vr5,      4
389*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
390*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr4, vr5
391*c0909341SAndroid Build Coastguard Workerendfuncl
392*c0909341SAndroid Build Coastguard Worker
393*c0909341SAndroid Build Coastguard Worker.macro idct_dc w, h, shift
394*c0909341SAndroid Build Coastguard Worker    ld.h          t2,       a2,       0      // dc
395*c0909341SAndroid Build Coastguard Worker    vldi          vr0,      0x8b5            // 181
396*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr1,      t2
397*c0909341SAndroid Build Coastguard Worker    vldi          vr20,     0x880            // 128
398*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr0,      vr1    // dc * 181
399*c0909341SAndroid Build Coastguard Worker    st.h          zero,     a2,       0
400*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8      // (dc * 181 + 128) >> 8
401*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0      // 0 1 2 3 4 5 6 7
402*c0909341SAndroid Build Coastguard Worker
403*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w)
404*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr0,      vr2
405*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8      // (dc * 181 + 128) >> 8
406*c0909341SAndroid Build Coastguard Worker.endif
407*c0909341SAndroid Build Coastguard Worker.if \shift>0
408*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      \shift      // (dc + rnd) >> shift
409*c0909341SAndroid Build Coastguard Worker.endif
410*c0909341SAndroid Build Coastguard Worker    vldx          vr11,     a0,       a1     // 8 9 10 11 12 13 14 15
411*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
412*c0909341SAndroid Build Coastguard Worker    vmadd.w       vr20,     vr2,      vr0
413*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0      // 16 17 18 19 20 21 22 23
414*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr20,     vr20,     12
415*c0909341SAndroid Build Coastguard Worker    vldx          vr13,     t2,       a1     // 24 25 26 27 28 29 30 31
416*c0909341SAndroid Build Coastguard Worker.endm
417*c0909341SAndroid Build Coastguard Worker
418*c0909341SAndroid Build Coastguard Worker.macro fun4x4 txfm1, txfm2
419*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x4_8bpc_lsx
420*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
421*c0909341SAndroid Build Coastguard Worker    bnez          a3,       1f
422*c0909341SAndroid Build Coastguard Worker
423*c0909341SAndroid Build Coastguard Worker    idct_dc 4, 4, 0
424*c0909341SAndroid Build Coastguard Worker
425*c0909341SAndroid Build Coastguard Worker    DST_ADD_W4    vr10, vr11, vr12, vr13, vr20, vr20
426*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_4X4_END
427*c0909341SAndroid Build Coastguard Worker1:
428*c0909341SAndroid Build Coastguard Worker.endif
429*c0909341SAndroid Build Coastguard Worker
430*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_\txfm1\()_4h_x4_lsx
431*c0909341SAndroid Build Coastguard Worker    la.local     t8,    inv_\txfm2\()_4h_x4_lsx
432*c0909341SAndroid Build Coastguard Worker
433*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_add_4x4_lsx
434*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X4_END:
435*c0909341SAndroid Build Coastguard Workerendfunc
436*c0909341SAndroid Build Coastguard Worker.endm
437*c0909341SAndroid Build Coastguard Worker
438*c0909341SAndroid Build Coastguard Workerfun4x4 dct, dct
439*c0909341SAndroid Build Coastguard Workerfun4x4 identity, identity
440*c0909341SAndroid Build Coastguard Workerfun4x4 adst, dct
441*c0909341SAndroid Build Coastguard Workerfun4x4 dct, adst
442*c0909341SAndroid Build Coastguard Workerfun4x4 adst, adst
443*c0909341SAndroid Build Coastguard Workerfun4x4 dct, flipadst
444*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, adst
445*c0909341SAndroid Build Coastguard Workerfun4x4 adst, flipadst
446*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, dct
447*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, flipadst
448*c0909341SAndroid Build Coastguard Workerfun4x4 dct, identity
449*c0909341SAndroid Build Coastguard Workerfun4x4 identity, dct
450*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, identity
451*c0909341SAndroid Build Coastguard Workerfun4x4 identity, flipadst
452*c0909341SAndroid Build Coastguard Workerfun4x4 identity, adst
453*c0909341SAndroid Build Coastguard Workerfun4x4 adst, identity
454*c0909341SAndroid Build Coastguard Worker
455*c0909341SAndroid Build Coastguard Workerconst iadst8_coeffs_h, align=4
456*c0909341SAndroid Build Coastguard Worker    .short          4076, 401, 3612, 1931
457*c0909341SAndroid Build Coastguard Worker    .short          2598, 3166, 1189, 3920
458*c0909341SAndroid Build Coastguard Worker    .short          2896, 0, 1567, 3784, 0, 0, 0, 0
459*c0909341SAndroid Build Coastguard Workerendconst
460*c0909341SAndroid Build Coastguard Worker
461*c0909341SAndroid Build Coastguard Worker.macro inv_adst8_lsx out0, out1, out2, out3, out4, out5, out6, out7, sz
462*c0909341SAndroid Build Coastguard Worker    la.local      t0,       iadst8_coeffs_h
463*c0909341SAndroid Build Coastguard Worker
464*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       0     // 4076
465*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       2     // 401
466*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr0, vr20, vr21, vr16, vr17, \sz
467*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
468*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr0, vr21, vr20, vr18, vr19, \sz
469*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr16,     12    // t0a
470*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr18,     12    // t1a
471*c0909341SAndroid Build Coastguard Worker
472*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       4     // 3612
473*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       6     // 1931
474*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr2, vr20, vr21, vr0, vr16, \sz
475*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
476*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr2, vr21, vr20, vr7, vr18, \sz
477*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr0,      12    // t2a
478*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr7,      12    // t3a
479*c0909341SAndroid Build Coastguard Worker
480*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       8     // 2598
481*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       10    // 3166
482*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr4, vr20, vr21, vr2, vr0, \sz
483*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
484*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr4, vr21, vr20, vr5, vr7, \sz
485*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr2,      12    // t4a
486*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr5,      12    // t5a
487*c0909341SAndroid Build Coastguard Worker
488*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       12    // 1189
489*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       14    // 3920
490*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr6, vr20, vr21, vr3, vr2, \sz
491*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
492*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr6, vr21, vr20, vr4, vr5, \sz
493*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr3,      12    // t6a
494*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr4,      12    // t7a
495*c0909341SAndroid Build Coastguard Worker
496*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr17,     vr0   // t0
497*c0909341SAndroid Build Coastguard Worker    vssub.h       vr4,      vr17,     vr0   // t4
498*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr19,     vr7   // t1
499*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr19,     vr7   // t5
500*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr17,     vr16,     vr2   // t2
501*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr16,     vr2   // t6
502*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr18,     vr5   // t3
503*c0909341SAndroid Build Coastguard Worker    vssub.h       vr7,      vr18,     vr5   // t7
504*c0909341SAndroid Build Coastguard Worker
505*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
506*c0909341SAndroid Build Coastguard Worker
507*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       4     // 1567
508*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       6     // 3784
509*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr4, vr6, vr21, vr20, vr16, vr5, \sz
510*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
511*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr4, vr6, vr20, vr21, vr18, vr2, \sz
512*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr16,     12    // t4a
513*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr18,     12    // t5a
514*c0909341SAndroid Build Coastguard Worker
515*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
516*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr19, vr20, vr21, vr4, vr16, \sz
517*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
518*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr19, vr21, vr20, vr6, vr18, \sz
519*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr4,      12    // t7a
520*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr6,      12    // t6a
521*c0909341SAndroid Build Coastguard Worker
522*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr5,      vr18  // out1
523*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr5,      vr18  // t6
524*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr20,     vr1,      vr0   // out7
525*c0909341SAndroid Build Coastguard Worker    vssub.h       vr18,     vr1,      vr0   // t3
526*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr3,      vr17  // out0
527*c0909341SAndroid Build Coastguard Worker    vssub.h       vr5,      vr3,      vr17  // t2
528*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out6,    vr2,      vr16  // out6
529*c0909341SAndroid Build Coastguard Worker    vssub.h       vr23,     vr2,      vr16  // t7
530*c0909341SAndroid Build Coastguard Worker
531*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr3,      vr20,     0     // out7
532*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \out7,    vr20            // out7
533*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr21,     vr4,      0     // out1
534*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \out1,    vr4             // out1
535*c0909341SAndroid Build Coastguard Worker    vneg.w        vr3,      vr3
536*c0909341SAndroid Build Coastguard Worker    vneg.w        \out7,    \out7
537*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
538*c0909341SAndroid Build Coastguard Worker    vneg.w        \out1,    \out1
539*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out7,    vr3,      0
540*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out1,    vr21,     0
541*c0909341SAndroid Build Coastguard Worker
542*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
543*c0909341SAndroid Build Coastguard Worker
544*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       0     // 2896
545*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr18, vr20, vr20, vr16, \out3, \sz
546*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr20
547*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr18, vr20, vr21, vr17, \out4, \sz
548*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr16,     vr16,     12
549*c0909341SAndroid Build Coastguard Worker    vsrari.w      \out3,    \out3,    12
550*c0909341SAndroid Build Coastguard Worker    vneg.w        vr16,     vr16
551*c0909341SAndroid Build Coastguard Worker    vneg.w        \out3,    \out3
552*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out3,    vr16,     0     // out3
553*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out4,    vr17,     12    // out4
554*c0909341SAndroid Build Coastguard Worker
555*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr19, vr23, vr20, vr20, vr16, \out2, \sz
556*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr19, vr23, vr20, vr21, vr17, \out5, \sz
557*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out2,    vr16,     12    // out2
558*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr17,     vr17,     12
559*c0909341SAndroid Build Coastguard Worker    vsrari.w      \out5,    \out5,    12
560*c0909341SAndroid Build Coastguard Worker    vneg.w        vr17,     vr17
561*c0909341SAndroid Build Coastguard Worker    vneg.w        \out5,    \out5
562*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out5,    vr17,     0     // out5
563*c0909341SAndroid Build Coastguard Worker.endm
564*c0909341SAndroid Build Coastguard Worker
565*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x8_lsx
566*c0909341SAndroid Build Coastguard Worker    inv_adst8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h
567*c0909341SAndroid Build Coastguard Workerendfuncl
568*c0909341SAndroid Build Coastguard Worker
569*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x8_lsx
570*c0909341SAndroid Build Coastguard Worker    inv_adst8_lsx vr7, vr6, vr5, vr4, vr3, vr2, vr1, vr0, .8h
571*c0909341SAndroid Build Coastguard Workerendfuncl
572*c0909341SAndroid Build Coastguard Worker
573*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x8_lsx
574*c0909341SAndroid Build Coastguard Worker    inv_adst8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h
575*c0909341SAndroid Build Coastguard Workerendfuncl
576*c0909341SAndroid Build Coastguard Worker
577*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x8_lsx
578*c0909341SAndroid Build Coastguard Worker    inv_adst8_lsx vr7, vr6, vr5, vr4, vr3, vr2, vr1, vr0, .8h
579*c0909341SAndroid Build Coastguard Workerendfuncl
580*c0909341SAndroid Build Coastguard Worker
581*c0909341SAndroid Build Coastguard Worker.macro inv_dct8_lsx in0, in1, in2, in3, in4, in5, in6, in7, sz
582*c0909341SAndroid Build Coastguard Worker    inv_dct4_lsx \in0, \in2, \in4, \in6, \in0, \in2, \in4, \in6, \sz
583*c0909341SAndroid Build Coastguard Worker
584*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
585*c0909341SAndroid Build Coastguard Worker
586*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       8        // 799
587*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       10       // 4017
588*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in1, \in7, vr21, vr20, vr16, vr17, \sz
589*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
590*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in1, \in7, vr20, vr21, vr18, vr19, \sz
591*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr16,     12       // t7a
592*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr18,     12       // t4a
593*c0909341SAndroid Build Coastguard Worker
594*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       12       // 3406
595*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       14       // 2276
596*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in5, \in3, vr21, vr20, \in1, vr16, \sz
597*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
598*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in5, \in3, vr20, vr21, \in7, vr18, \sz
599*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     \in1,       12      // t6a
600*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     \in7,       12      // t5a
601*c0909341SAndroid Build Coastguard Worker
602*c0909341SAndroid Build Coastguard Worker    vssub.h       \in7,     vr19,      vr18     // t5a
603*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr18,     vr19,      vr18     // t4
604*c0909341SAndroid Build Coastguard Worker    vssub.h       \in5,     vr17,      vr16     // t6a
605*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr16,     vr17,      vr16     // t7
606*c0909341SAndroid Build Coastguard Worker
607*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        0        // 2896
608*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in5, \in7, vr20, vr20, \in1, vr17, \sz
609*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr20
610*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx  \in5, \in7, vr20, vr21, vr23, vr19, \sz
611*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     \in1,      12       // t6
612*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr23,      12       // t5
613*c0909341SAndroid Build Coastguard Worker
614*c0909341SAndroid Build Coastguard Worker    vssub.h       \in7,      \in0,     vr16     //c[7]
615*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in0,      \in0,     vr16     //c[0]
616*c0909341SAndroid Build Coastguard Worker    vssub.h       \in5,      \in4,     vr19     //c[5]
617*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr23,      \in4,     vr19     //c[2]
618*c0909341SAndroid Build Coastguard Worker    vssub.h       \in4,      \in6,     vr18     //c[4]
619*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in3,      \in6,     vr18     //c[3]
620*c0909341SAndroid Build Coastguard Worker    vssub.h       \in6,      \in2,     vr17     //c[6]
621*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in1,      \in2,     vr17     //c[1]
622*c0909341SAndroid Build Coastguard Worker    vor.v         \in2,      vr23,     vr23
623*c0909341SAndroid Build Coastguard Worker.endm
624*c0909341SAndroid Build Coastguard Worker
625*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x8_lsx
626*c0909341SAndroid Build Coastguard Worker    inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h
627*c0909341SAndroid Build Coastguard Workerendfuncl
628*c0909341SAndroid Build Coastguard Worker
629*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x8_lsx
630*c0909341SAndroid Build Coastguard Worker    inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .4h
631*c0909341SAndroid Build Coastguard Workerendfuncl
632*c0909341SAndroid Build Coastguard Worker
633*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W8 in0, in1, in2, in3, in4, in5, in6, in7
634*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr0,      \in0,     0
635*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr1,      \in1,     0
636*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr2,      \in2,     0
637*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr3,      \in3,     0
638*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,      \in4,     vr0
639*c0909341SAndroid Build Coastguard Worker    vadd.h        vr1,      \in5,     vr1
640*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,      \in6,     vr2
641*c0909341SAndroid Build Coastguard Worker    vadd.h        vr3,      \in7,     vr3
642*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr1,      vr0,      0
643*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr3,      vr2,      0
644*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr1,      a0,       0,    0
645*c0909341SAndroid Build Coastguard Worker    vstelmx.d     vr1,      a0,       a1,   1
646*c0909341SAndroid Build Coastguard Worker    vstelmx.d     vr3,      a0,       a1,   0
647*c0909341SAndroid Build Coastguard Worker    vstelmx.d     vr3,      a0,       a1,   1
648*c0909341SAndroid Build Coastguard Worker.endm
649*c0909341SAndroid Build Coastguard Worker
650*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8 in0, in1, in2, in3
651*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a0,       0
652*c0909341SAndroid Build Coastguard Worker    vldx          vr1,      a0,       a1
653*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t2,       0
654*c0909341SAndroid Build Coastguard Worker    vldx          vr3,      t2,       a1
655*c0909341SAndroid Build Coastguard Worker
656*c0909341SAndroid Build Coastguard Worker    DST_ADD_W8 vr0, vr1, vr2, vr3, \in0, \in1, \in2, \in3
657*c0909341SAndroid Build Coastguard Worker.endm
658*c0909341SAndroid Build Coastguard Worker
659*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x8_lsx
660*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
661*c0909341SAndroid Build Coastguard Worker    vsadd.h       \i,       \i,       \i
662*c0909341SAndroid Build Coastguard Worker.endr
663*c0909341SAndroid Build Coastguard Workerendfuncl
664*c0909341SAndroid Build Coastguard Worker
665*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x8_lsx
666*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
667*c0909341SAndroid Build Coastguard Worker    vsadd.h       \i,       \i,       \i
668*c0909341SAndroid Build Coastguard Worker.endr
669*c0909341SAndroid Build Coastguard Workerendfuncl
670*c0909341SAndroid Build Coastguard Worker
671*c0909341SAndroid Build Coastguard Worker.macro def_fn_8x8_base variant
672*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\variant\()add_8x8_lsx
673*c0909341SAndroid Build Coastguard Worker    vxor.v  vr23, vr23, vr23
674*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
675*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112
676*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
677*c0909341SAndroid Build Coastguard Worker.endr
678*c0909341SAndroid Build Coastguard Worker
679*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
680*c0909341SAndroid Build Coastguard Worker    // The identity shl #1 and downshift srshr #1 cancel out
681*c0909341SAndroid Build Coastguard Worker    b             .itx_8x8_epilog
682*c0909341SAndroid Build Coastguard Worker.else
683*c0909341SAndroid Build Coastguard Worker
684*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
685*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
686*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
687*c0909341SAndroid Build Coastguard Worker
688*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
689*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       1
690*c0909341SAndroid Build Coastguard Worker.endr
691*c0909341SAndroid Build Coastguard Worker
692*c0909341SAndroid Build Coastguard Worker.itx_8x8_epilog:
693*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
694*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
695*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
696*c0909341SAndroid Build Coastguard Worker
697*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
698*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
699*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
700*c0909341SAndroid Build Coastguard Worker
701*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
702*c0909341SAndroid Build Coastguard Worker                vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, 4
703*c0909341SAndroid Build Coastguard Worker
704*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
705*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr16, vr17, vr18, vr19
706*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a0,       a1
707*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
708*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr20, vr21, vr22, vr23
709*c0909341SAndroid Build Coastguard Worker.endif
710*c0909341SAndroid Build Coastguard Workerendfuncl
711*c0909341SAndroid Build Coastguard Worker.endm
712*c0909341SAndroid Build Coastguard Worker
713*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base identity_
714*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base
715*c0909341SAndroid Build Coastguard Worker
716*c0909341SAndroid Build Coastguard Worker.macro fn8x8 txfm1, txfm2
717*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x8_8bpc_lsx
718*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
719*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_8x8
720*c0909341SAndroid Build Coastguard Worker
721*c0909341SAndroid Build Coastguard Worker    idct_dc 8, 8, 1
722*c0909341SAndroid Build Coastguard Worker
723*c0909341SAndroid Build Coastguard Worker    DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20
724*c0909341SAndroid Build Coastguard Worker
725*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
726*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
727*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr20, vr20, vr20, vr20
728*c0909341SAndroid Build Coastguard Worker
729*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_8X8_END
730*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x8:
731*c0909341SAndroid Build Coastguard Worker.endif
732*c0909341SAndroid Build Coastguard Worker    la.local      t8,       inv_\txfm2\()_8h_x8_lsx
733*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
734*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_identity_add_8x8_lsx
735*c0909341SAndroid Build Coastguard Worker.else
736*c0909341SAndroid Build Coastguard Worker    la.local      t7,       inv_\txfm1\()_8h_x8_lsx
737*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_add_8x8_lsx
738*c0909341SAndroid Build Coastguard Worker.endif
739*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8X8_END:
740*c0909341SAndroid Build Coastguard Workerendfunc
741*c0909341SAndroid Build Coastguard Worker.endm
742*c0909341SAndroid Build Coastguard Worker
743*c0909341SAndroid Build Coastguard Workerfn8x8 dct, dct
744*c0909341SAndroid Build Coastguard Workerfn8x8 identity, identity
745*c0909341SAndroid Build Coastguard Workerfn8x8 dct, adst
746*c0909341SAndroid Build Coastguard Workerfn8x8 dct, flipadst
747*c0909341SAndroid Build Coastguard Workerfn8x8 dct, identity
748*c0909341SAndroid Build Coastguard Workerfn8x8 adst, dct
749*c0909341SAndroid Build Coastguard Workerfn8x8 adst, adst
750*c0909341SAndroid Build Coastguard Workerfn8x8 adst, flipadst
751*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, dct
752*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, adst
753*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, flipadst
754*c0909341SAndroid Build Coastguard Workerfn8x8 identity, dct
755*c0909341SAndroid Build Coastguard Workerfn8x8 adst, identity
756*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, identity
757*c0909341SAndroid Build Coastguard Workerfn8x8 identity, adst
758*c0909341SAndroid Build Coastguard Workerfn8x8 identity, flipadst
759*c0909341SAndroid Build Coastguard Worker
760*c0909341SAndroid Build Coastguard Worker.macro rect2_lsx in0, in1, out0
761*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in0,     0     // in1
762*c0909341SAndroid Build Coastguard Worker    vexth.w.h     \in0,     \in0            // in1
763*c0909341SAndroid Build Coastguard Worker    vmul.w        vr22,     vr22,     \in1
764*c0909341SAndroid Build Coastguard Worker    vmul.w        \out0,    \in0,     \in1
765*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out0,    vr22,     12
766*c0909341SAndroid Build Coastguard Worker.endm
767*c0909341SAndroid Build Coastguard Worker
768*c0909341SAndroid Build Coastguard Worker.macro LSX_TRANSPOSE8x4_H in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, \
769*c0909341SAndroid Build Coastguard Worker                          out2, out3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5
770*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp0,    \in1,     \in0
771*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp1,    \in3,     \in2
772*c0909341SAndroid Build Coastguard Worker    vilvl.w       \tmp2,    \tmp1,    \tmp0
773*c0909341SAndroid Build Coastguard Worker    vilvh.w       \tmp3,    \tmp1,    \tmp0
774*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp0,    \in5,     \in4
775*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp1,    \in7,     \in6
776*c0909341SAndroid Build Coastguard Worker    vilvl.w       \tmp4,    \tmp1,    \tmp0
777*c0909341SAndroid Build Coastguard Worker    vilvh.w       \tmp5,    \tmp1,    \tmp0
778*c0909341SAndroid Build Coastguard Worker    vilvl.d       \out0,    \tmp4,    \tmp2
779*c0909341SAndroid Build Coastguard Worker    vilvh.d       \out1,    \tmp4,    \tmp2
780*c0909341SAndroid Build Coastguard Worker    vilvl.d       \out2,    \tmp5,    \tmp3
781*c0909341SAndroid Build Coastguard Worker    vilvh.d       \out3,    \tmp5,    \tmp3
782*c0909341SAndroid Build Coastguard Worker.endm
783*c0909341SAndroid Build Coastguard Worker
784*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_8x4_lsx
785*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
786*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a2,       0
787*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a2,       16
788*c0909341SAndroid Build Coastguard Worker    vld           vr4,      a2,       32
789*c0909341SAndroid Build Coastguard Worker    vld           vr6,      a2,       48
790*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48
791*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
792*c0909341SAndroid Build Coastguard Worker.endr
793*c0909341SAndroid Build Coastguard Worker
794*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
795*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
796*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr0,      vr23,     vr0
797*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr2,      vr23,     vr2
798*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr4,      vr23,     vr4
799*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr6,      vr23,     vr6
800*c0909341SAndroid Build Coastguard Worker
801*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr1,      vr0,      vr0
802*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr3,      vr2,      vr2
803*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr5,      vr4,      vr4
804*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr7,      vr6,      vr6
805*c0909341SAndroid Build Coastguard Worker
806*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
807*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
808*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
809*c0909341SAndroid Build Coastguard Worker
810*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x4_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr0, vr1, \
811*c0909341SAndroid Build Coastguard Worker                       vr2, vr3, vr16, vr17, vr18, vr19, vr20, vr21
812*c0909341SAndroid Build Coastguard Worker
813*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
814*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
815*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
816*c0909341SAndroid Build Coastguard Worker
817*c0909341SAndroid Build Coastguard Worker    vsrari_h_x4 vr0, vr1, vr2, vr3, vr16, vr17, vr18, vr19, 4
818*c0909341SAndroid Build Coastguard Worker
819*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
820*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr16, vr17, vr18, vr19
821*c0909341SAndroid Build Coastguard Workerendfuncl
822*c0909341SAndroid Build Coastguard Worker
823*c0909341SAndroid Build Coastguard Worker.macro LSX_TRANSPOSE4x8_H in0, in1, in2, in3, out0, out1, out2, out3, out4, \
824*c0909341SAndroid Build Coastguard Worker                          out5, out6, out7, tmp0, tmp1, tmp2, tmp3
825*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp0,    \in1,     \in0
826*c0909341SAndroid Build Coastguard Worker    vilvl.h       \tmp1,    \in3,     \in2
827*c0909341SAndroid Build Coastguard Worker    vilvh.h       \tmp2,    \in1,     \in0
828*c0909341SAndroid Build Coastguard Worker    vilvh.h       \tmp3,    \in3,     \in2
829*c0909341SAndroid Build Coastguard Worker    vilvl.w       \out0,    \tmp1,    \tmp0
830*c0909341SAndroid Build Coastguard Worker    vilvh.w       \out2,    \tmp1,    \tmp0
831*c0909341SAndroid Build Coastguard Worker    vilvl.w       \out4,    \tmp3,    \tmp2
832*c0909341SAndroid Build Coastguard Worker    vilvh.w       \out6,    \tmp3,    \tmp2
833*c0909341SAndroid Build Coastguard Worker
834*c0909341SAndroid Build Coastguard Worker    vbsrl.v       \out1,    \out0,    8
835*c0909341SAndroid Build Coastguard Worker    vbsrl.v       \out3,    \out2,    8
836*c0909341SAndroid Build Coastguard Worker    vbsrl.v       \out5,    \out4,    8
837*c0909341SAndroid Build Coastguard Worker    vbsrl.v       \out7,    \out6,    8
838*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.d   \out0,    zero,     1
839*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.d   \out2,    zero,     1
840*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.d   \out4,    zero,     1
841*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.d   \out6,    zero,     1
842*c0909341SAndroid Build Coastguard Worker.endm
843*c0909341SAndroid Build Coastguard Worker
844*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_4x8_lsx
845*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
846*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a2,       0
847*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a2,       16
848*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a2,       32
849*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a2,       48
850*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48
851*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
852*c0909341SAndroid Build Coastguard Worker.endr
853*c0909341SAndroid Build Coastguard Worker
854*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
855*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
856*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr0,      vr23,     vr0
857*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr1,      vr23,     vr1
858*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr2,      vr23,     vr2
859*c0909341SAndroid Build Coastguard Worker    rect2_lsx     vr3,      vr23,     vr3
860*c0909341SAndroid Build Coastguard Worker
861*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
862*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
863*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
864*c0909341SAndroid Build Coastguard Worker
865*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5, \
866*c0909341SAndroid Build Coastguard Worker                       vr6, vr7, vr16, vr17, vr18, vr19
867*c0909341SAndroid Build Coastguard Worker
868*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
869*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
870*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
871*c0909341SAndroid Build Coastguard Worker
872*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr0,      vr1,      vr0
873*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr1,      vr3,      vr2
874*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr2,      vr5,      vr4
875*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr3,      vr7,      vr6
876*c0909341SAndroid Build Coastguard Worker
877*c0909341SAndroid Build Coastguard Worker    vsrari_h_x4 vr0, vr1, vr2, vr3, vr16, vr17, vr18, vr19, 4
878*c0909341SAndroid Build Coastguard Worker
879*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
880*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr16, vr17
881*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
882*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
883*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr18, vr19
884*c0909341SAndroid Build Coastguard Workerendfuncl
885*c0909341SAndroid Build Coastguard Worker
886*c0909341SAndroid Build Coastguard Worker.macro fn8x4 txfm1, txfm2
887*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x4_8bpc_lsx
888*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct
889*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_8x4
890*c0909341SAndroid Build Coastguard Worker
891*c0909341SAndroid Build Coastguard Worker    idct_dc 8, 4, 0
892*c0909341SAndroid Build Coastguard Worker
893*c0909341SAndroid Build Coastguard Worker    DST_ADD_W8 vr10, vr11, vr12, vr13, vr5, vr5, vr5, vr5
894*c0909341SAndroid Build Coastguard Worker
895*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_8X4_END
896*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x4:
897*c0909341SAndroid Build Coastguard Worker.endif
898*c0909341SAndroid Build Coastguard Worker    la.local      t7,       inv_\txfm1\()_4h_x8_lsx
899*c0909341SAndroid Build Coastguard Worker    la.local      t8,       inv_\txfm2\()_8h_x4_lsx
900*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_add_8x4_lsx
901*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8X4_END:
902*c0909341SAndroid Build Coastguard Workerendfunc
903*c0909341SAndroid Build Coastguard Worker.endm
904*c0909341SAndroid Build Coastguard Worker
905*c0909341SAndroid Build Coastguard Workerfn8x4 dct, dct
906*c0909341SAndroid Build Coastguard Workerfn8x4 identity, identity
907*c0909341SAndroid Build Coastguard Workerfn8x4 dct, adst
908*c0909341SAndroid Build Coastguard Workerfn8x4 dct, flipadst
909*c0909341SAndroid Build Coastguard Workerfn8x4 dct, identity
910*c0909341SAndroid Build Coastguard Workerfn8x4 adst, dct
911*c0909341SAndroid Build Coastguard Workerfn8x4 adst, adst
912*c0909341SAndroid Build Coastguard Workerfn8x4 adst, flipadst
913*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, dct
914*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, adst
915*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, flipadst
916*c0909341SAndroid Build Coastguard Workerfn8x4 identity, dct
917*c0909341SAndroid Build Coastguard Workerfn8x4 adst, identity
918*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, identity
919*c0909341SAndroid Build Coastguard Workerfn8x4 identity, adst
920*c0909341SAndroid Build Coastguard Workerfn8x4 identity, flipadst
921*c0909341SAndroid Build Coastguard Worker
922*c0909341SAndroid Build Coastguard Worker.macro fn4x8 txfm1, txfm2
923*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x8_8bpc_lsx
924*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct
925*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_4x8
926*c0909341SAndroid Build Coastguard Worker
927*c0909341SAndroid Build Coastguard Worker    idct_dc 4, 8, 0
928*c0909341SAndroid Build Coastguard Worker
929*c0909341SAndroid Build Coastguard Worker    DST_ADD_W4 vr10, vr11, vr12, vr13, vr20, vr20
930*c0909341SAndroid Build Coastguard Worker
931*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a0,       a1
932*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,   1
933*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr5, vr5
934*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_4X8_END
935*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_4x8:
936*c0909341SAndroid Build Coastguard Worker.endif
937*c0909341SAndroid Build Coastguard Worker    la.local      t7,       inv_\txfm1\()_8h_x4_lsx
938*c0909341SAndroid Build Coastguard Worker    la.local      t8,       inv_\txfm2\()_4h_x8_lsx
939*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_add_4x8_lsx
940*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X8_END:
941*c0909341SAndroid Build Coastguard Workerendfunc
942*c0909341SAndroid Build Coastguard Worker.endm
943*c0909341SAndroid Build Coastguard Worker
944*c0909341SAndroid Build Coastguard Workerfn4x8 dct, dct
945*c0909341SAndroid Build Coastguard Workerfn4x8 identity, identity
946*c0909341SAndroid Build Coastguard Workerfn4x8 dct, adst
947*c0909341SAndroid Build Coastguard Workerfn4x8 dct, flipadst
948*c0909341SAndroid Build Coastguard Workerfn4x8 dct, identity
949*c0909341SAndroid Build Coastguard Workerfn4x8 adst, dct
950*c0909341SAndroid Build Coastguard Workerfn4x8 adst, adst
951*c0909341SAndroid Build Coastguard Workerfn4x8 adst, flipadst
952*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, dct
953*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, adst
954*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, flipadst
955*c0909341SAndroid Build Coastguard Workerfn4x8 identity, dct
956*c0909341SAndroid Build Coastguard Workerfn4x8 adst, identity
957*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, identity
958*c0909341SAndroid Build Coastguard Workerfn4x8 identity, adst
959*c0909341SAndroid Build Coastguard Workerfn4x8 identity, flipadst
960*c0909341SAndroid Build Coastguard Worker
961*c0909341SAndroid Build Coastguard Worker.macro inv_identity4_lsx_x2 in0, in1, in2, in3, in4, out0, out1
962*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr4,      \in0,    0
963*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr5,      \in0
964*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr6,      \in1,    0
965*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr7,      \in1
966*c0909341SAndroid Build Coastguard Worker    vmul.w        vr4,      vr4,     \in2
967*c0909341SAndroid Build Coastguard Worker    vmul.w        vr5,      vr5,     \in2
968*c0909341SAndroid Build Coastguard Worker    vmul.w        vr6,      vr6,     \in2
969*c0909341SAndroid Build Coastguard Worker    vmul.w        vr7,      vr7,     \in2
970*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr4,     12
971*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr6,     12
972*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr5,     \in3
973*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out1,    vr7,     \in4
974*c0909341SAndroid Build Coastguard Worker.endm
975*c0909341SAndroid Build Coastguard Worker
976*c0909341SAndroid Build Coastguard Worker.macro vmul_vmadd_w in0, in1, in2, in3, out0, out1
977*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in0,     0
978*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in0
979*c0909341SAndroid Build Coastguard Worker    vmul.w        \out0,    vr22,     \in2
980*c0909341SAndroid Build Coastguard Worker    vmul.w        \out1,    vr23,     \in2
981*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in1,     0
982*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in1
983*c0909341SAndroid Build Coastguard Worker    vmadd.w       \out0,    vr22,     \in3
984*c0909341SAndroid Build Coastguard Worker    vmadd.w       \out1,    vr23,     \in3
985*c0909341SAndroid Build Coastguard Worker.endm
986*c0909341SAndroid Build Coastguard Worker
987*c0909341SAndroid Build Coastguard Worker.macro vmul_vmsub_w in0, in1, in2, in3, out0, out1
988*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in0,     0
989*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in0
990*c0909341SAndroid Build Coastguard Worker    vmul.w        \out0,    vr22,     \in2
991*c0909341SAndroid Build Coastguard Worker    vmul.w        \out1,    vr23,     \in2
992*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in1,     0
993*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in1
994*c0909341SAndroid Build Coastguard Worker    vmsub.w       \out0,    vr22,     \in3
995*c0909341SAndroid Build Coastguard Worker    vmsub.w       \out1,    vr23,     \in3
996*c0909341SAndroid Build Coastguard Worker.endm
997*c0909341SAndroid Build Coastguard Worker
998*c0909341SAndroid Build Coastguard Worker.macro inv_dct16_lsx sz
999*c0909341SAndroid Build Coastguard Worker    inv_dct8_lsx vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14, \sz
1000*c0909341SAndroid Build Coastguard Worker
1001*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
1002*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       16        // 401
1003*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       18        // 4076
1004*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr15, vr21, vr20, vr16, vr17, \sz
1005*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1006*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr15, vr20, vr21, vr18, vr19, \sz
1007*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr16,     12        // t15a
1008*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr18,     12        // t8a
1009*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       20        // 3166 -> 1583
1010*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       22        // 2598 -> 1299
1011*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr7, vr21, vr20, vr1, vr16, \sz
1012*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1013*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr7, vr20, vr21, vr15, vr18, \sz
1014*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr1,      12        // t14a
1015*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr15,     12        // t9a
1016*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       24        // 1931
1017*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       26        // 3612
1018*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr11, vr21, vr20, vr7, vr1, \sz
1019*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1020*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr11, vr20, vr21, vr9, vr15, \sz
1021*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr7,      12        // t13a
1022*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr15,     vr9,      12        // t10a
1023*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       28        // 3920
1024*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       30        // 1189
1025*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr3, vr21, vr20, vr5, vr7, \sz
1026*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1027*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr3, vr20, vr21, vr11, vr9, \sz
1028*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr5,      12        // t12a
1029*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr11,     12        // t11a
1030*c0909341SAndroid Build Coastguard Worker
1031*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr19,     vr18     // t8
1032*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr19,     vr18     // t9
1033*c0909341SAndroid Build Coastguard Worker    vssub.h       vr3,      vr9,      vr15     // t10
1034*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr9,      vr15     // t11
1035*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr18,     vr7,      vr1      // t12
1036*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr7,      vr1      // t13
1037*c0909341SAndroid Build Coastguard Worker    vssub.h       vr9,      vr17,     vr16     // t14
1038*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr15,     vr17,     vr16     // t15
1039*c0909341SAndroid Build Coastguard Worker
1040*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       4        // 1567
1041*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,       6        // 3784
1042*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr11, vr21, vr20, vr1, vr16, \sz
1043*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1044*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr11, vr20, vr21, vr7, vr17, \sz
1045*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr1,      12       // t14a
1046*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr7,      12       // t9a
1047*c0909341SAndroid Build Coastguard Worker
1048*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1049*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr19, vr3, vr21, vr20, vr9, vr1, \sz
1050*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1051*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr19, vr3, vr20, vr21, vr11, vr7, \sz
1052*c0909341SAndroid Build Coastguard Worker    vneg.w        vr1,      vr1
1053*c0909341SAndroid Build Coastguard Worker    vneg.w        vr9,      vr9
1054*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr11,     12       // t13a
1055*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr9,      12       // t10a
1056*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr5,      vr13     // t8a
1057*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr5,      vr13     // t11a
1058*c0909341SAndroid Build Coastguard Worker    vssub.h       vr3,      vr15,     vr18     // t12a
1059*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr19,     vr15,     vr18     // t15a
1060*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr17,     vr1      // t9
1061*c0909341SAndroid Build Coastguard Worker    vssub.h       vr13,     vr17,     vr1      // t10
1062*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr16,     vr7      // t13
1063*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr18,     vr16,     vr7      // t14
1064*c0909341SAndroid Build Coastguard Worker
1065*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,       0        // 2896
1066*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr13, vr20, vr20, vr1, vr7, \sz
1067*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr20
1068*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr13, vr20, vr21, vr17, vr16, \sz
1069*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr1,      12       // t13a
1070*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr17,     12       // t10a
1071*c0909341SAndroid Build Coastguard Worker
1072*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr11, vr20, vr20, vr13, vr23, \sz
1073*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr11, vr20, vr21, vr15, vr17, \sz
1074*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr23,     vr13,     12       // t12
1075*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr15,     12       // t11
1076*c0909341SAndroid Build Coastguard Worker
1077*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr0,     vr19      // c[15]
1078*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr0,     vr19      // c[0]
1079*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr2,     vr18      // c[1]
1080*c0909341SAndroid Build Coastguard Worker    vssub.h       vr20,     vr2,     vr18      // c[14]
1081*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr4,     vr7       // c[2]
1082*c0909341SAndroid Build Coastguard Worker    vssub.h       vr13,     vr4,     vr7       // c[13]
1083*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr6,     vr23      // c[3]
1084*c0909341SAndroid Build Coastguard Worker    vssub.h       vr21,     vr6,     vr23      // c[12]
1085*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr8,     vr17      // c[4]
1086*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr8,     vr17      // c[11]
1087*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr14,    vr9       // c[7]
1088*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr14,    vr9       // c[8]
1089*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr12,    vr5       // c[6]
1090*c0909341SAndroid Build Coastguard Worker    vssub.h       vr9,      vr12,    vr5       // c[9]
1091*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr10,    vr16      // c[5]
1092*c0909341SAndroid Build Coastguard Worker    vssub.h       vr10,     vr10,    vr16      // c[10]
1093*c0909341SAndroid Build Coastguard Worker    vor.v         vr14,     vr20,    vr20
1094*c0909341SAndroid Build Coastguard Worker    vor.v         vr12,     vr21,    vr21
1095*c0909341SAndroid Build Coastguard Worker.endm
1096*c0909341SAndroid Build Coastguard Worker
1097*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x16_lsx
1098*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
1099*c0909341SAndroid Build Coastguard Workerendfuncl
1100*c0909341SAndroid Build Coastguard Worker
1101*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x16_lsx
1102*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .4h
1103*c0909341SAndroid Build Coastguard Workerendfuncl
1104*c0909341SAndroid Build Coastguard Worker
1105*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W4_x4 in0, in1, in2, in3, in4, in5, in6 ,in7
1106*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1107*c0909341SAndroid Build Coastguard Worker
1108*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 \in0, \in1
1109*c0909341SAndroid Build Coastguard Worker
1110*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1111*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1112*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 \in2, \in3
1113*c0909341SAndroid Build Coastguard Worker
1114*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1115*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1116*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 \in4, \in5
1117*c0909341SAndroid Build Coastguard Worker
1118*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1119*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1120*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 \in6, \in7
1121*c0909341SAndroid Build Coastguard Worker.endm
1122*c0909341SAndroid Build Coastguard Worker
1123*c0909341SAndroid Build Coastguard Worker.macro def_fn_4x16_base txfm
1124*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm\()add_4x16_lsx
1125*c0909341SAndroid Build Coastguard Worker    PUSH_REG
1126*c0909341SAndroid Build Coastguard Worker    blt           a3,       t5,       416f
1127*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a2,       16
1128*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a2,       48
1129*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a2,       80
1130*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a2,       112
1131*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1132*c0909341SAndroid Build Coastguard Worker.irp i, 16, 48, 80, 112
1133*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1134*c0909341SAndroid Build Coastguard Worker.endr
1135*c0909341SAndroid Build Coastguard Worker
1136*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1137*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1138*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1139*c0909341SAndroid Build Coastguard Worker
1140*c0909341SAndroid Build Coastguard Worker.ifnc \txfm, identity_
1141*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr0,      vr0,      1
1142*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr1,      vr1,      1
1143*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr2,      vr2,      1
1144*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr3,      vr3,      1
1145*c0909341SAndroid Build Coastguard Worker.endif
1146*c0909341SAndroid Build Coastguard Worker
1147*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr8, vr9, vr24, vr25, vr26, \
1148*c0909341SAndroid Build Coastguard Worker                       vr27, vr14, vr28, vr10, vr11, vr12, vr13
1149*c0909341SAndroid Build Coastguard Worker
1150*c0909341SAndroid Build Coastguard Worker416:
1151*c0909341SAndroid Build Coastguard Worker    ble           t5,       a3,       416416f
1152*c0909341SAndroid Build Coastguard Worker.irp i, vr8, vr9, vr24, vr25, vr26, vr27, vr14, vr28
1153*c0909341SAndroid Build Coastguard Worker    vxor.v        \i,       \i,       \i
1154*c0909341SAndroid Build Coastguard Worker.endr
1155*c0909341SAndroid Build Coastguard Worker
1156*c0909341SAndroid Build Coastguard Worker416416:
1157*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a2,       0
1158*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a2,       32
1159*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a2,       64
1160*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a2,       96
1161*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1162*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96
1163*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1164*c0909341SAndroid Build Coastguard Worker.endr
1165*c0909341SAndroid Build Coastguard Worker
1166*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1167*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1168*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1169*c0909341SAndroid Build Coastguard Worker
1170*c0909341SAndroid Build Coastguard Worker.ifnc \txfm, identity_
1171*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr0,      vr0,      1
1172*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr1,      vr1,      1
1173*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr2,      vr2,      1
1174*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr3,      vr3,      1
1175*c0909341SAndroid Build Coastguard Worker.endif
1176*c0909341SAndroid Build Coastguard Worker
1177*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5, \
1178*c0909341SAndroid Build Coastguard Worker                       vr6, vr7, vr16, vr17, vr18, vr19
1179*c0909341SAndroid Build Coastguard Worker
1180*c0909341SAndroid Build Coastguard Worker    vor.v         vr10,     vr24,     vr24
1181*c0909341SAndroid Build Coastguard Worker    vor.v         vr11,     vr25,     vr25
1182*c0909341SAndroid Build Coastguard Worker    vor.v         vr12,     vr26,     vr26
1183*c0909341SAndroid Build Coastguard Worker    vor.v         vr13,     vr27,     vr27
1184*c0909341SAndroid Build Coastguard Worker    vor.v         vr15,     vr28,     vr28
1185*c0909341SAndroid Build Coastguard Worker
1186*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1187*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
1188*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1189*c0909341SAndroid Build Coastguard Worker
1190*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr16,     vr1,      vr0
1191*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr17,     vr3,      vr2
1192*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr18,     vr5,      vr4
1193*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr19,     vr7,      vr6
1194*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr20,     vr9,      vr8
1195*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr21,     vr11,     vr10
1196*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr22,     vr13,     vr12
1197*c0909341SAndroid Build Coastguard Worker    vilvl.d       vr23,     vr15,     vr14
1198*c0909341SAndroid Build Coastguard Worker
1199*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1200*c0909341SAndroid Build Coastguard Worker    vsrari.h     \i,       \i,       4
1201*c0909341SAndroid Build Coastguard Worker.endr
1202*c0909341SAndroid Build Coastguard Worker
1203*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4_x4 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1204*c0909341SAndroid Build Coastguard Worker    POP_REG
1205*c0909341SAndroid Build Coastguard Workerendfuncl
1206*c0909341SAndroid Build Coastguard Worker.endm
1207*c0909341SAndroid Build Coastguard Worker
1208*c0909341SAndroid Build Coastguard Workerdef_fn_4x16_base identity_
1209*c0909341SAndroid Build Coastguard Workerdef_fn_4x16_base
1210*c0909341SAndroid Build Coastguard Worker
1211*c0909341SAndroid Build Coastguard Worker.macro fn4x16 txfm1, txfm2, eob_half
1212*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x16_8bpc_lsx
1213*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct
1214*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_4x16
1215*c0909341SAndroid Build Coastguard Worker
1216*c0909341SAndroid Build Coastguard Worker    idct_dc 4, 16, 1
1217*c0909341SAndroid Build Coastguard Worker
1218*c0909341SAndroid Build Coastguard Worker    DST_ADD_W4 vr10, vr11, vr12, vr13, vr5, vr5
1219*c0909341SAndroid Build Coastguard Worker
1220*c0909341SAndroid Build Coastguard Worker.rept 3
1221*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1222*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,   1
1223*c0909341SAndroid Build Coastguard Worker
1224*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W4 vr5, vr5
1225*c0909341SAndroid Build Coastguard Worker.endr
1226*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_4X16_END
1227*c0909341SAndroid Build Coastguard Worker
1228*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_4x16:
1229*c0909341SAndroid Build Coastguard Worker.endif
1230*c0909341SAndroid Build Coastguard Worker    li.w          t5,       \eob_half
1231*c0909341SAndroid Build Coastguard Worker    la.local      t7,       inv_\txfm1\()_8h_x4_lsx
1232*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1233*c0909341SAndroid Build Coastguard Worker    la.local      t7,       inv_\txfm1\()_8h_x4_lsx1
1234*c0909341SAndroid Build Coastguard Worker.endif
1235*c0909341SAndroid Build Coastguard Worker    la.local      t8,       inv_\txfm2\()_4h_x16_lsx
1236*c0909341SAndroid Build Coastguard Worker
1237*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1238*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_identity_add_4x16_lsx
1239*c0909341SAndroid Build Coastguard Worker.else
1240*c0909341SAndroid Build Coastguard Worker    b             inv_txfm_add_4x16_lsx
1241*c0909341SAndroid Build Coastguard Worker.endif
1242*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X16_END:
1243*c0909341SAndroid Build Coastguard Workerendfunc
1244*c0909341SAndroid Build Coastguard Worker.endm
1245*c0909341SAndroid Build Coastguard Worker
1246*c0909341SAndroid Build Coastguard Workerfn4x16 dct, dct, 29
1247*c0909341SAndroid Build Coastguard Workerfn4x16 identity, identity, 29
1248*c0909341SAndroid Build Coastguard Workerfn4x16 dct, adst, 29
1249*c0909341SAndroid Build Coastguard Workerfn4x16 dct, flipadst, 29
1250*c0909341SAndroid Build Coastguard Workerfn4x16 dct, identity, 8
1251*c0909341SAndroid Build Coastguard Workerfn4x16 adst, dct, 29
1252*c0909341SAndroid Build Coastguard Workerfn4x16 adst, adst, 29
1253*c0909341SAndroid Build Coastguard Workerfn4x16 adst, flipadst, 29
1254*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, dct, 29
1255*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, adst, 29
1256*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, flipadst, 29
1257*c0909341SAndroid Build Coastguard Workerfn4x16 identity, dct, 32
1258*c0909341SAndroid Build Coastguard Workerfn4x16 adst, identity, 8
1259*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, identity, 8
1260*c0909341SAndroid Build Coastguard Workerfn4x16 identity, adst, 32
1261*c0909341SAndroid Build Coastguard Workerfn4x16 identity, flipadst, 32
1262*c0909341SAndroid Build Coastguard Worker
1263*c0909341SAndroid Build Coastguard Worker.macro inv_identity16_lsx in0, in1, in2, out0, sz
1264*c0909341SAndroid Build Coastguard Worker.ifc \sz, .8h
1265*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr16,     \in0,     0
1266*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr17,     \in0
1267*c0909341SAndroid Build Coastguard Worker    vmul.w        vr16,     vr16,     \in1
1268*c0909341SAndroid Build Coastguard Worker    vmul.w        vr17,     vr17,     \in1
1269*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in2,     \in2,     \in2
1270*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr16,     11
1271*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr17,     \in2
1272*c0909341SAndroid Build Coastguard Worker.else
1273*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr16,     \in0,     0
1274*c0909341SAndroid Build Coastguard Worker    vmul.w        vr16,     vr16,     \in1
1275*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in2,     \in2,     \in2
1276*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr16,     11
1277*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr16,     \in2
1278*c0909341SAndroid Build Coastguard Worker.endif
1279*c0909341SAndroid Build Coastguard Worker.endm
1280*c0909341SAndroid Build Coastguard Worker
1281*c0909341SAndroid Build Coastguard Worker.macro inv_identity16_lsx1 in0, in1, in2, out0
1282*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr16,     \in0,     0
1283*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr17,     \in1
1284*c0909341SAndroid Build Coastguard Worker    vmul.w        vr18,     vr16,     \in2
1285*c0909341SAndroid Build Coastguard Worker    vmul.w        vr19,     vr17,     \in2
1286*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr18,     vr18,     11
1287*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr19,     vr19,     11
1288*c0909341SAndroid Build Coastguard Worker    vslli.w       vr16,     vr16,     1
1289*c0909341SAndroid Build Coastguard Worker    vslli.w       vr17,     vr17,     1
1290*c0909341SAndroid Build Coastguard Worker    vadd.w        vr16,     vr18,     vr16
1291*c0909341SAndroid Build Coastguard Worker    vadd.w        \out0,    vr19,     vr17
1292*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out0,    vr16,     1
1293*c0909341SAndroid Build Coastguard Worker.endm
1294*c0909341SAndroid Build Coastguard Worker
1295*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x16_lsx
1296*c0909341SAndroid Build Coastguard Worker    li.w          t0,       1697
1297*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr20,     t0
1298*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \
1299*c0909341SAndroid Build Coastguard Worker    vr9, vr10, vr11, vr12, vr13, vr14, vr15
1300*c0909341SAndroid Build Coastguard Worker    inv_identity16_lsx \i, vr20, \i, \i, .8h
1301*c0909341SAndroid Build Coastguard Worker.endr
1302*c0909341SAndroid Build Coastguard Workerendfuncl
1303*c0909341SAndroid Build Coastguard Worker
1304*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x16_lsx
1305*c0909341SAndroid Build Coastguard Worker    li.w          t0,       1697
1306*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr20,     t0
1307*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \
1308*c0909341SAndroid Build Coastguard Worker    vr9, vr10, vr11, vr12, vr13, vr14, vr15
1309*c0909341SAndroid Build Coastguard Worker    inv_identity16_lsx \i, vr20, \i, \i, .4h
1310*c0909341SAndroid Build Coastguard Worker.endr
1311*c0909341SAndroid Build Coastguard Workerendfuncl
1312*c0909341SAndroid Build Coastguard Worker
1313*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x16_lsx1
1314*c0909341SAndroid Build Coastguard Worker    li.w          t0,       1697
1315*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr20,     t0
1316*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \
1317*c0909341SAndroid Build Coastguard Worker    vr9, vr10, vr11, vr12, vr13, vr14, vr15
1318*c0909341SAndroid Build Coastguard Worker    inv_identity16_lsx1 \i, \i, vr20, \i
1319*c0909341SAndroid Build Coastguard Worker.endr
1320*c0909341SAndroid Build Coastguard Workerendfuncl
1321*c0909341SAndroid Build Coastguard Worker
1322*c0909341SAndroid Build Coastguard Workerconst iadst16_coeffs_h, align=4
1323*c0909341SAndroid Build Coastguard Worker    .short         4091, 201, 3973, 995
1324*c0909341SAndroid Build Coastguard Worker    .short         3703, 1751, 3290, 2440
1325*c0909341SAndroid Build Coastguard Worker    .short         2751, 3035, 2106, 3513
1326*c0909341SAndroid Build Coastguard Worker    .short         1380, 3857, 601, 4052
1327*c0909341SAndroid Build Coastguard Workerendconst
1328*c0909341SAndroid Build Coastguard Worker
1329*c0909341SAndroid Build Coastguard Worker.macro inv_adst16_lsx txfm, sz
1330*c0909341SAndroid Build Coastguard Worker    la.local      t0,       iadst16_coeffs_h
1331*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        0        // 4091
1332*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        2        // 201
1333*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr0, vr20, vr21, vr16, vr18, \sz
1334*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1335*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr0, vr21, vr20, vr17, vr19, \sz
1336*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr16,      12       // t0
1337*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr17,      12       // t1
1338*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        4        // 3973
1339*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        6        // 995
1340*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr2, vr20, vr21, vr16, vr0, \sz
1341*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1342*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr2, vr21, vr20, vr17, vr15, \sz
1343*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr16,      12       // t2
1344*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr15,     vr17,      12       // t3
1345*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        8       // 3703
1346*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        10       // 1751
1347*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr11, vr4, vr20, vr21, vr16, vr2, \sz
1348*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1349*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr11, vr4, vr21, vr20, vr17, vr13, \sz
1350*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr16,      12       // t4
1351*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr13,     vr17,      12       // t5
1352*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        12       // 3290 -> 1645
1353*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        14       // 2440 -> 1220
1354*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr6, vr20, vr21, vr16, vr4, \sz
1355*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1356*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr9, vr6, vr21, vr20, vr17, vr11, \sz
1357*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr16,      12       // t6
1358*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr11,     vr17,      12       // t7
1359*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        16       // 2751
1360*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        18       // 3035
1361*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr8, vr20, vr21, vr16, vr6, \sz
1362*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1363*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr7, vr8, vr21, vr20, vr17, vr9, \sz
1364*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr16,      12       // t8
1365*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr17,      12       // t9
1366*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        20       // 2106
1367*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        22       // 3513
1368*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr10, vr20, vr21, vr16, vr7, \sz
1369*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1370*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr5, vr10, vr21, vr20, vr17, vr8, \sz
1371*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr16,      12       // t10
1372*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr17,      12       // t11
1373*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        24       // 1380
1374*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        26       // 3857
1375*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr12, vr20, vr21, vr16, vr5, \sz
1376*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1377*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr3, vr12, vr21, vr20, vr17, vr10, \sz
1378*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr16,      12       // t12
1379*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr17,      12       // t13
1380*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        28       // 601
1381*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        30       // 4052
1382*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr14, vr20, vr21, vr16, vr3, \sz
1383*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1384*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr1, vr14, vr21, vr20, vr17, vr12, \sz
1385*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr3,      vr16,      12       // t14
1386*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr12,     vr17,      12       // t15
1387*c0909341SAndroid Build Coastguard Worker
1388*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr18,      vr6      // t0a
1389*c0909341SAndroid Build Coastguard Worker    vssub.h       vr14,     vr18,      vr6      // t8a
1390*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr16,     vr19,      vr9      // t1a
1391*c0909341SAndroid Build Coastguard Worker    vssub.h       vr17,     vr19,      vr9      // t9a
1392*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr0,       vr7      // t2a
1393*c0909341SAndroid Build Coastguard Worker    vssub.h       vr18,     vr0,       vr7      // t10a
1394*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr15,      vr8      // t3a
1395*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr15,      vr8      // t11a
1396*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr2,       vr5      // t4a
1397*c0909341SAndroid Build Coastguard Worker    vssub.h       vr7,      vr2,       vr5      // t12a
1398*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr8,      vr13,      vr10     // t5a
1399*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr13,      vr10     // t13a
1400*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr4,       vr3      // t6a
1401*c0909341SAndroid Build Coastguard Worker    vssub.h       vr5,      vr4,       vr3      // t14a
1402*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr11,      vr12     // t7a
1403*c0909341SAndroid Build Coastguard Worker    vssub.h       vr13,     vr11,      vr12     // t15a
1404*c0909341SAndroid Build Coastguard Worker
1405*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
1406*c0909341SAndroid Build Coastguard Worker
1407*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        8        // 799
1408*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        10       // 4017
1409*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr14, vr17, vr21, vr20, vr3, vr11, \sz
1410*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1411*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr14, vr17, vr20, vr21, vr4, vr12, \sz
1412*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr11,     vr3,       12       // t8
1413*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr12,     vr4,       12       // t9
1414*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1415*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr7, vr20, vr21, vr3, vr14, \sz
1416*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1417*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr15, vr7, vr21, vr20, vr4, vr17, \sz
1418*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr14,     vr3,       12       // t13
1419*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr4,       12       // t12
1420*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        12       // 3406
1421*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        14       // 2276
1422*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr18, vr19, vr21, vr20, vr3, vr7, \sz
1423*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1424*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr18, vr19, vr20, vr21, vr4, vr15, \sz
1425*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr3,       12       // t10
1426*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr15,     vr4,       12       // t11
1427*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1428*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr5, vr20, vr21, vr3, vr18, \sz
1429*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1430*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr5, vr21, vr20, vr4, vr19, \sz
1431*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr3,       12       // t15
1432*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr4,       12       // t14
1433*c0909341SAndroid Build Coastguard Worker
1434*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr1,       vr0      // t0
1435*c0909341SAndroid Build Coastguard Worker    vssub.h       vr13,     vr1,       vr0      // t4
1436*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr16,      vr8      // t1
1437*c0909341SAndroid Build Coastguard Worker    vssub.h       vr4,      vr16,      vr8      // t5
1438*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr6,       vr2      // t2
1439*c0909341SAndroid Build Coastguard Worker    vssub.h       vr1,      vr6,       vr2      // t6
1440*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr8,      vr9,       vr10     // t3
1441*c0909341SAndroid Build Coastguard Worker    vssub.h       vr16,     vr9,       vr10     // t7
1442*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr11,      vr17     // t8a
1443*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr11,      vr17     // t12a
1444*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr12,      vr14     // t9a
1445*c0909341SAndroid Build Coastguard Worker    vssub.h       vr10,     vr12,      vr14     // t13a
1446*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr7,       vr19     // t10a
1447*c0909341SAndroid Build Coastguard Worker    vssub.h       vr17,     vr7,       vr19     // t14a
1448*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr12,     vr15,      vr18     // t11a
1449*c0909341SAndroid Build Coastguard Worker    vssub.h       vr14,     vr15,      vr18     // t15a
1450*c0909341SAndroid Build Coastguard Worker
1451*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        4        // 1567
1452*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr21,     t0,        6       // 3784
1453*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr4, vr21, vr20, vr7, vr18, \sz
1454*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1455*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr13, vr4, vr20, vr21, vr15, vr19, \sz
1456*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr7,       12       // t4a
1457*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr15,      12       // t5a
1458*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1459*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr16, vr1, vr20, vr21, vr7, vr4, \sz
1460*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1461*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr16, vr1, vr21, vr20, vr15, vr13, \sz
1462*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr7,       12       // t7a
1463*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr13,     vr15,      12       // t6a
1464*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1465*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr6, vr10, vr21, vr20, vr7, vr1, \sz
1466*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1467*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr6, vr10, vr20, vr21, vr15, vr16, \sz
1468*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr7,       12       // t12
1469*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr16,     vr15,      12       // t13
1470*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr21
1471*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr14, vr17, vr20, vr21, vr7, vr6, \sz
1472*c0909341SAndroid Build Coastguard Worker    vneg.h        vr20,     vr20
1473*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr14, vr17, vr21, vr20, vr15, vr10, \sz
1474*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr7,       12       // t15
1475*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr15,      12       // t14
1476*c0909341SAndroid Build Coastguard Worker
1477*c0909341SAndroid Build Coastguard Worker    vssub.h       vr17,     vr5,       vr0      // t2a
1478*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr5,       vr0      // out[0]
1479*c0909341SAndroid Build Coastguard Worker    vssub.h       vr7,      vr3,       vr8      // t3a
1480*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr15,     vr3,       vr8      // out[15]
1481*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr15,      0
1482*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr15,     vr15
1483*c0909341SAndroid Build Coastguard Worker    vneg.w        vr22,     vr22
1484*c0909341SAndroid Build Coastguard Worker    vneg.w        vr15,     vr15
1485*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr15,     vr22,      0        // out[15]
1486*c0909341SAndroid Build Coastguard Worker
1487*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr19,      vr4      // out[12]
1488*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr19,      vr4      // t7
1489*c0909341SAndroid Build Coastguard Worker    vssub.h       vr0,      vr18,      vr13     // t6
1490*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr18,      vr13     // out[3]
1491*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr5,       0
1492*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr5,      vr5
1493*c0909341SAndroid Build Coastguard Worker    vneg.w        vr22,     vr22
1494*c0909341SAndroid Build Coastguard Worker    vneg.w        vr5,      vr5
1495*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr22,      0        // out[3]
1496*c0909341SAndroid Build Coastguard Worker
1497*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr9,       vr12     // out[14]
1498*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr9,       vr12     // t11
1499*c0909341SAndroid Build Coastguard Worker    vssub.h       vr4,      vr2,       vr11     // t10
1500*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr18,     vr2,       vr11     // out[1]
1501*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr18,      0
1502*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr18,     vr18
1503*c0909341SAndroid Build Coastguard Worker    vneg.w        vr22,     vr22
1504*c0909341SAndroid Build Coastguard Worker    vneg.w        vr18,     vr18
1505*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr18,     vr22,      0        // out[1]
1506*c0909341SAndroid Build Coastguard Worker
1507*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr1,       vr10     // out[2]
1508*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr1,       vr10     // t14a
1509*c0909341SAndroid Build Coastguard Worker    vssub.h       vr12,     vr16,      vr6      // t15a
1510*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr16,      vr6      // out[13]
1511*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr9,       0
1512*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr9,      vr9
1513*c0909341SAndroid Build Coastguard Worker    vneg.w        vr22,     vr22
1514*c0909341SAndroid Build Coastguard Worker    vneg.w        vr9,      vr9
1515*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr22,      0        // out[13]
1516*c0909341SAndroid Build Coastguard Worker
1517*c0909341SAndroid Build Coastguard Worker    vldrepl.h     vr20,     t0,        0        // 2896
1518*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr17, vr7, vr20, vr20, vr6, vr10, \sz
1519*c0909341SAndroid Build Coastguard Worker    vneg.h        vr21,     vr20
1520*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr17, vr7, vr20, vr21, vr16, vr1, \sz
1521*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr16,      12       // out[8]
1522*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr6,      vr6,       12
1523*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr10,     vr10,      12
1524*c0909341SAndroid Build Coastguard Worker    vneg.w        vr6,      vr6
1525*c0909341SAndroid Build Coastguard Worker    vneg.w        vr10,     vr10
1526*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr6,       0        // out[7]
1527*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr0, vr8, vr20, vr21, vr16, vr17, \sz
1528*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr0, vr8, vr20, vr20, vr6, vr7, \sz
1529*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr6,       12       // out[4]
1530*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr16,     vr16,      12
1531*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr17,     vr17,      12
1532*c0909341SAndroid Build Coastguard Worker    vneg.w        vr16,     vr16
1533*c0909341SAndroid Build Coastguard Worker    vneg.w        vr17,     vr17
1534*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr17,     vr16,       0        // out[11]
1535*c0909341SAndroid Build Coastguard Worker
1536*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr4, vr19, vr20, vr21, vr16, vr0, \sz
1537*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr4, vr19, vr20, vr20, vr6, vr8, \sz
1538*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr6,       12       // out[6]
1539*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr16,     vr16,      12
1540*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr0,      vr0,       12
1541*c0909341SAndroid Build Coastguard Worker    vneg.w        vr16,     vr16
1542*c0909341SAndroid Build Coastguard Worker    vneg.w        vr0,      vr0
1543*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr16,      0    // out[9]
1544*c0909341SAndroid Build Coastguard Worker
1545*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr11, vr12, vr20, vr20, vr6, vr4, \sz
1546*c0909341SAndroid Build Coastguard Worker    vmulev_vmaddod_lsx vr11, vr12, vr20, vr21, vr16, vr19, \sz
1547*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr16,      12       // out[10]
1548*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr6,      vr6,       12
1549*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr4,      vr4,       12
1550*c0909341SAndroid Build Coastguard Worker    vneg.w        vr6,      vr6
1551*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
1552*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr6,       0        // out[5]
1553*c0909341SAndroid Build Coastguard Worker
1554*c0909341SAndroid Build Coastguard Worker.ifc \txfm, adst
1555*c0909341SAndroid Build Coastguard Worker    vor.v         vr12,     vr3,       vr3
1556*c0909341SAndroid Build Coastguard Worker    vor.v         vr3,      vr5,       vr5
1557*c0909341SAndroid Build Coastguard Worker    vor.v         vr5,      vr4,       vr4
1558*c0909341SAndroid Build Coastguard Worker    vor.v         vr4,      vr7,       vr7
1559*c0909341SAndroid Build Coastguard Worker    vor.v         vr7,      vr10,      vr10
1560*c0909341SAndroid Build Coastguard Worker    vor.v         vr10,     vr19,      vr19
1561*c0909341SAndroid Build Coastguard Worker    vor.v         vr6,      vr8,       vr8
1562*c0909341SAndroid Build Coastguard Worker    vor.v         vr8,      vr1,       vr1
1563*c0909341SAndroid Build Coastguard Worker    vor.v         vr11,     vr17,      vr17
1564*c0909341SAndroid Build Coastguard Worker    vor.v         vr20,     vr13,      vr13
1565*c0909341SAndroid Build Coastguard Worker    vor.v         vr13,     vr9,       vr9
1566*c0909341SAndroid Build Coastguard Worker    vor.v         vr9,      vr0,       vr0
1567*c0909341SAndroid Build Coastguard Worker    vor.v         vr0,      vr14,      vr14
1568*c0909341SAndroid Build Coastguard Worker    vor.v         vr14,     vr20,      vr20
1569*c0909341SAndroid Build Coastguard Worker    vor.v         vr1,      vr18,      vr18
1570*c0909341SAndroid Build Coastguard Worker.else
1571*c0909341SAndroid Build Coastguard Worker    vor.v         vr6,      vr0,       vr0
1572*c0909341SAndroid Build Coastguard Worker    vor.v         vr0,      vr15,      vr15
1573*c0909341SAndroid Build Coastguard Worker    vor.v         vr15,     vr14,      vr14
1574*c0909341SAndroid Build Coastguard Worker    vor.v         vr14,     vr18,      vr18
1575*c0909341SAndroid Build Coastguard Worker    vor.v         vr11,     vr7,       vr7
1576*c0909341SAndroid Build Coastguard Worker    vor.v         vr7,      vr1,       vr1
1577*c0909341SAndroid Build Coastguard Worker    vor.v         vr1,      vr13,      vr13
1578*c0909341SAndroid Build Coastguard Worker    vor.v         vr13,     vr2,       vr2
1579*c0909341SAndroid Build Coastguard Worker    vor.v         vr2,      vr9,       vr9
1580*c0909341SAndroid Build Coastguard Worker    vor.v         vr9,      vr8,       vr8
1581*c0909341SAndroid Build Coastguard Worker    vor.v         vr8,      vr10,      vr10
1582*c0909341SAndroid Build Coastguard Worker    vor.v         vr10,     vr4,       vr4
1583*c0909341SAndroid Build Coastguard Worker    vor.v         vr4,      vr17,      vr17
1584*c0909341SAndroid Build Coastguard Worker    vor.v         vr12,     vr5,       vr5
1585*c0909341SAndroid Build Coastguard Worker    vor.v         vr5,      vr19,      vr19
1586*c0909341SAndroid Build Coastguard Worker.endif
1587*c0909341SAndroid Build Coastguard Worker.endm // inv_adst16_lsx
1588*c0909341SAndroid Build Coastguard Worker
1589*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x16_lsx
1590*c0909341SAndroid Build Coastguard Worker    inv_adst16_lsx adst, 8h
1591*c0909341SAndroid Build Coastguard Workerendfuncl
1592*c0909341SAndroid Build Coastguard Worker
1593*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x16_lsx
1594*c0909341SAndroid Build Coastguard Worker    inv_adst16_lsx flipadst, 8h
1595*c0909341SAndroid Build Coastguard Workerendfuncl
1596*c0909341SAndroid Build Coastguard Worker
1597*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x16_lsx
1598*c0909341SAndroid Build Coastguard Worker    inv_adst16_lsx adst, 4h
1599*c0909341SAndroid Build Coastguard Workerendfuncl
1600*c0909341SAndroid Build Coastguard Worker
1601*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x16_lsx
1602*c0909341SAndroid Build Coastguard Worker    inv_adst16_lsx flipadst, 4h
1603*c0909341SAndroid Build Coastguard Workerendfuncl
1604*c0909341SAndroid Build Coastguard Worker
1605*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8_x4 in0, in1, in2, in3, in4, in5, in6, in7, in8, \
1606*c0909341SAndroid Build Coastguard Worker                         in9, in10, in11, in12, in13, in14, in15
1607*c0909341SAndroid Build Coastguard Worker
1608*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1609*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 \in0, \in1, \in2, \in3
1610*c0909341SAndroid Build Coastguard Worker
1611*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1612*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1613*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 \in4, \in5, \in6, \in7
1614*c0909341SAndroid Build Coastguard Worker
1615*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1616*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1617*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 \in8, \in9, \in10, \in11
1618*c0909341SAndroid Build Coastguard Worker
1619*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1620*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1621*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 \in12, \in13, \in14, \in15
1622*c0909341SAndroid Build Coastguard Worker.endm
1623*c0909341SAndroid Build Coastguard Worker
1624*c0909341SAndroid Build Coastguard Worker.macro def_base_8x16 txfm1
1625*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm1\()add_8x16_lsx
1626*c0909341SAndroid Build Coastguard Worker    blt     a3,    t5,   816f
1627*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1628*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1629*c0909341SAndroid Build Coastguard Worker.irp i, 16, 48, 80, 112, 144, 176, 208, 240
1630*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1631*c0909341SAndroid Build Coastguard Worker.endr
1632*c0909341SAndroid Build Coastguard Worker
1633*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
1634*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
1635*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1636*c0909341SAndroid Build Coastguard Worker    rect2_lsx     \i,       vr23,     \i
1637*c0909341SAndroid Build Coastguard Worker.endr
1638*c0909341SAndroid Build Coastguard Worker
1639*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity_
1640*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1641*c0909341SAndroid Build Coastguard Worker                       vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1642*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1643*c0909341SAndroid Build Coastguard Worker.else
1644*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1645*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1646*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1647*c0909341SAndroid Build Coastguard Worker
1648*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1649*c0909341SAndroid Build Coastguard Worker                vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 1
1650*c0909341SAndroid Build Coastguard Worker
1651*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1652*c0909341SAndroid Build Coastguard Worker                       vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1653*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1654*c0909341SAndroid Build Coastguard Worker.endif
1655*c0909341SAndroid Build Coastguard Worker
1656*c0909341SAndroid Build Coastguard Worker816:
1657*c0909341SAndroid Build Coastguard Worker    ble       t5,    a3,  816816f
1658*c0909341SAndroid Build Coastguard Worker.irp i, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1659*c0909341SAndroid Build Coastguard Worker    vxor.v    \i,  \i,  \i
1660*c0909341SAndroid Build Coastguard Worker.endr
1661*c0909341SAndroid Build Coastguard Worker
1662*c0909341SAndroid Build Coastguard Worker816816:
1663*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1664*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1665*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224
1666*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1667*c0909341SAndroid Build Coastguard Worker.endr
1668*c0909341SAndroid Build Coastguard Worker
1669*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
1670*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
1671*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1672*c0909341SAndroid Build Coastguard Worker    rect2_lsx     \i,       vr23,     \i
1673*c0909341SAndroid Build Coastguard Worker.endr
1674*c0909341SAndroid Build Coastguard Worker
1675*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity_
1676*c0909341SAndroid Build Coastguard Worker
1677*c0909341SAndroid Build Coastguard Worker.else
1678*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1679*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1680*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1681*c0909341SAndroid Build Coastguard Worker
1682*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1683*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       1
1684*c0909341SAndroid Build Coastguard Worker.endr
1685*c0909341SAndroid Build Coastguard Worker.endif
1686*c0909341SAndroid Build Coastguard Worker
1687*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1688*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1689*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1690*c0909341SAndroid Build Coastguard Worker
1691*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1692*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
1693*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1694*c0909341SAndroid Build Coastguard Worker
1695*c0909341SAndroid Build Coastguard Worker    vor.v   vr0, vr0, vr0
1696*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1697*c0909341SAndroid Build Coastguard Worker                vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, 4
1698*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1699*c0909341SAndroid Build Coastguard Worker                vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 4
1700*c0909341SAndroid Build Coastguard Worker
1701*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8_x4 vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1702*c0909341SAndroid Build Coastguard Worker                      vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1703*c0909341SAndroid Build Coastguard Workerendfuncl
1704*c0909341SAndroid Build Coastguard Worker.endm
1705*c0909341SAndroid Build Coastguard Worker
1706*c0909341SAndroid Build Coastguard Workerdef_base_8x16 identity_
1707*c0909341SAndroid Build Coastguard Workerdef_base_8x16
1708*c0909341SAndroid Build Coastguard Worker
1709*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W16 in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11
1710*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr4,      \in0,     0
1711*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr0,      \in0
1712*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr5,      \in1,     0
1713*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr1,      \in1
1714*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr6,      \in2,     0
1715*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr2,      \in2
1716*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr7,      \in3,     0
1717*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr3,      \in3
1718*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,      vr4,      \in4
1719*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,      vr0,      \in5
1720*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,      vr5,      \in6
1721*c0909341SAndroid Build Coastguard Worker    vadd.h        vr1,      vr1,      \in7
1722*c0909341SAndroid Build Coastguard Worker    vadd.h        vr6,      vr6,      \in8
1723*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,      vr2,      \in9
1724*c0909341SAndroid Build Coastguard Worker    vadd.h        vr7,      vr7,      \in10
1725*c0909341SAndroid Build Coastguard Worker    vadd.h        vr3,      vr3,      \in11
1726*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr0,      vr4,      0
1727*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr1,      vr5,      0
1728*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr2,      vr6,      0
1729*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr3,      vr7,      0
1730*c0909341SAndroid Build Coastguard Worker    vst           vr0,      a0,       0
1731*c0909341SAndroid Build Coastguard Worker    vstx          vr1,      a0,       a1
1732*c0909341SAndroid Build Coastguard Worker    vst           vr2,      t2,       0
1733*c0909341SAndroid Build Coastguard Worker    vstx          vr3,      t2,       a1
1734*c0909341SAndroid Build Coastguard Worker.endm
1735*c0909341SAndroid Build Coastguard Worker
1736*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W16 in0, in1, in2, in3, in4, in5, in6, in7
1737*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a0,       0
1738*c0909341SAndroid Build Coastguard Worker    vldx          vr1,      a0,       a1
1739*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t2,       0
1740*c0909341SAndroid Build Coastguard Worker    vldx          vr3,      t2,       a1
1741*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16 vr0, vr1, vr2, vr3, \in0, \in1, \in2, \in3, \
1742*c0909341SAndroid Build Coastguard Worker                \in4, \in5, \in6, \in7
1743*c0909341SAndroid Build Coastguard Worker.endm
1744*c0909341SAndroid Build Coastguard Worker
1745*c0909341SAndroid Build Coastguard Worker.macro def_fn_16x8 txfm1
1746*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm1\()add_16x8_lsx
1747*c0909341SAndroid Build Coastguard Worker    PUSH_REG
1748*c0909341SAndroid Build Coastguard Worker
1749*c0909341SAndroid Build Coastguard Worker    vld_x16 a2, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1750*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1751*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1752*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, \
1753*c0909341SAndroid Build Coastguard Worker    176, 192, 208, 224, 240
1754*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1755*c0909341SAndroid Build Coastguard Worker.endr
1756*c0909341SAndroid Build Coastguard Worker
1757*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
1758*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
1759*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1760*c0909341SAndroid Build Coastguard Worker    vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1761*c0909341SAndroid Build Coastguard Worker    rect2_lsx     \i,       vr23,     \i
1762*c0909341SAndroid Build Coastguard Worker.endr
1763*c0909341SAndroid Build Coastguard Worker
1764*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1765*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1766*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1767*c0909341SAndroid Build Coastguard Worker
1768*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity_
1769*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1770*c0909341SAndroid Build Coastguard Worker    vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1771*c0909341SAndroid Build Coastguard Worker    vsrari.h       \i,       \i,       1
1772*c0909341SAndroid Build Coastguard Worker.endr
1773*c0909341SAndroid Build Coastguard Worker.endif
1774*c0909341SAndroid Build Coastguard Worker
1775*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1776*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1777*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1778*c0909341SAndroid Build Coastguard Worker
1779*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1780*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
1781*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1782*c0909341SAndroid Build Coastguard Worker
1783*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1784*c0909341SAndroid Build Coastguard Worker                vr24, vr25, vr26, vr27, vr28, vr29, vr30, vr31, 4
1785*c0909341SAndroid Build Coastguard Worker
1786*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1787*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1788*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1789*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1790*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
1791*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1792*c0909341SAndroid Build Coastguard Worker
1793*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1794*c0909341SAndroid Build Coastguard Worker                vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 4
1795*c0909341SAndroid Build Coastguard Worker
1796*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1797*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr24, vr8, vr25, vr9, vr26, vr10, vr27, vr11
1798*c0909341SAndroid Build Coastguard Worker
1799*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
1800*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1801*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr28, vr12, vr29, vr13, vr30, vr14, vr31, vr15
1802*c0909341SAndroid Build Coastguard Worker
1803*c0909341SAndroid Build Coastguard Worker    POP_REG
1804*c0909341SAndroid Build Coastguard Workerendfuncl
1805*c0909341SAndroid Build Coastguard Worker.endm
1806*c0909341SAndroid Build Coastguard Worker
1807*c0909341SAndroid Build Coastguard Workerdef_fn_16x8 identity_
1808*c0909341SAndroid Build Coastguard Workerdef_fn_16x8
1809*c0909341SAndroid Build Coastguard Worker
1810*c0909341SAndroid Build Coastguard Worker.macro fun16x8 txfm1, txfm2
1811*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x8_8bpc_lsx
1812*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
1813*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_16x8
1814*c0909341SAndroid Build Coastguard Worker
1815*c0909341SAndroid Build Coastguard Worker    idct_dc 16, 8, 1
1816*c0909341SAndroid Build Coastguard Worker
1817*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \
1818*c0909341SAndroid Build Coastguard Worker                vr20, vr20, vr20, vr20, vr20
1819*c0909341SAndroid Build Coastguard Worker
1820*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     2
1821*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
1822*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20,
1823*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_16x8_END
1824*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x8:
1825*c0909341SAndroid Build Coastguard Worker.endif
1826*c0909341SAndroid Build Coastguard Worker
1827*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_\txfm1\()_8h_x16_lsx
1828*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1829*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_identity_8h_x16_lsx1
1830*c0909341SAndroid Build Coastguard Worker.endif
1831*c0909341SAndroid Build Coastguard Worker
1832*c0909341SAndroid Build Coastguard Worker    la.local     t8,    inv_\txfm2\()_8h_x8_lsx
1833*c0909341SAndroid Build Coastguard Worker
1834*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1835*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_identity_add_16x8_lsx
1836*c0909341SAndroid Build Coastguard Worker.else
1837*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_add_16x8_lsx
1838*c0909341SAndroid Build Coastguard Worker.endif
1839*c0909341SAndroid Build Coastguard Worker
1840*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x8_END:
1841*c0909341SAndroid Build Coastguard Workerendfunc
1842*c0909341SAndroid Build Coastguard Worker.endm
1843*c0909341SAndroid Build Coastguard Worker
1844*c0909341SAndroid Build Coastguard Workerfun16x8 dct, dct
1845*c0909341SAndroid Build Coastguard Workerfun16x8 identity, identity
1846*c0909341SAndroid Build Coastguard Workerfun16x8 dct, adst
1847*c0909341SAndroid Build Coastguard Workerfun16x8 dct, flipadst
1848*c0909341SAndroid Build Coastguard Workerfun16x8 dct, identity
1849*c0909341SAndroid Build Coastguard Workerfun16x8 adst, dct
1850*c0909341SAndroid Build Coastguard Workerfun16x8 adst, adst
1851*c0909341SAndroid Build Coastguard Workerfun16x8 adst, flipadst
1852*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, dct
1853*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, adst
1854*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, flipadst
1855*c0909341SAndroid Build Coastguard Workerfun16x8 identity, dct
1856*c0909341SAndroid Build Coastguard Workerfun16x8 adst, identity
1857*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, identity
1858*c0909341SAndroid Build Coastguard Workerfun16x8 identity, adst
1859*c0909341SAndroid Build Coastguard Workerfun16x8 identity, flipadst
1860*c0909341SAndroid Build Coastguard Worker
1861*c0909341SAndroid Build Coastguard Worker.macro fun8x16 txfm1, txfm2, eob_half
1862*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x16_8bpc_lsx
1863*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
1864*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_8x16
1865*c0909341SAndroid Build Coastguard Worker
1866*c0909341SAndroid Build Coastguard Worker    idct_dc 8, 16, 1
1867*c0909341SAndroid Build Coastguard Worker
1868*c0909341SAndroid Build Coastguard Worker    DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20
1869*c0909341SAndroid Build Coastguard Worker.rept 3
1870*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
1871*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
1872*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr20, vr20, vr20, vr20
1873*c0909341SAndroid Build Coastguard Worker.endr
1874*c0909341SAndroid Build Coastguard Worker
1875*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_8x16_END
1876*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x16:
1877*c0909341SAndroid Build Coastguard Worker.endif
1878*c0909341SAndroid Build Coastguard Worker    li.w         t5,    \eob_half
1879*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity
1880*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_\txfm1\()_8h_x8_lsx
1881*c0909341SAndroid Build Coastguard Worker.endif
1882*c0909341SAndroid Build Coastguard Worker
1883*c0909341SAndroid Build Coastguard Worker    la.local     t8,    inv_\txfm2\()_8h_x16_lsx
1884*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1885*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_identity_add_8x16_lsx
1886*c0909341SAndroid Build Coastguard Worker.else
1887*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_add_8x16_lsx
1888*c0909341SAndroid Build Coastguard Worker.endif
1889*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8x16_END:
1890*c0909341SAndroid Build Coastguard Workerendfunc
1891*c0909341SAndroid Build Coastguard Worker.endm
1892*c0909341SAndroid Build Coastguard Worker
1893*c0909341SAndroid Build Coastguard Workerfun8x16 dct, dct, 43
1894*c0909341SAndroid Build Coastguard Workerfun8x16 identity, identity, 43
1895*c0909341SAndroid Build Coastguard Workerfun8x16 dct, adst, 43
1896*c0909341SAndroid Build Coastguard Workerfun8x16 dct, flipadst, 43
1897*c0909341SAndroid Build Coastguard Workerfun8x16 dct, identity, 8
1898*c0909341SAndroid Build Coastguard Workerfun8x16 adst, dct, 43
1899*c0909341SAndroid Build Coastguard Workerfun8x16 adst, adst, 43
1900*c0909341SAndroid Build Coastguard Workerfun8x16 adst, flipadst, 43
1901*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, dct, 43
1902*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, adst, 43
1903*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, flipadst, 43
1904*c0909341SAndroid Build Coastguard Workerfun8x16 identity, dct, 64
1905*c0909341SAndroid Build Coastguard Workerfun8x16 adst, identity, 8
1906*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, identity, 8
1907*c0909341SAndroid Build Coastguard Workerfun8x16 identity, adst, 64
1908*c0909341SAndroid Build Coastguard Workerfun8x16 identity, flipadst, 64
1909*c0909341SAndroid Build Coastguard Worker
1910*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_16x16_lsx
1911*c0909341SAndroid Build Coastguard Worker    malloc_space 512
1912*c0909341SAndroid Build Coastguard Worker
1913*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
1914*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
1915*c0909341SAndroid Build Coastguard Worker.rept 2
1916*c0909341SAndroid Build Coastguard Worker    vld_x16 a2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1917*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1918*c0909341SAndroid Build Coastguard Worker
1919*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1920*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, \
1921*c0909341SAndroid Build Coastguard Worker    384, 416, 448, 480
1922*c0909341SAndroid Build Coastguard Worker    vst           vr23,     a2,       \i
1923*c0909341SAndroid Build Coastguard Worker.endr
1924*c0909341SAndroid Build Coastguard Worker
1925*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1926*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
1927*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1928*c0909341SAndroid Build Coastguard Worker
1929*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1930*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1931*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1932*c0909341SAndroid Build Coastguard Worker
1933*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1934*c0909341SAndroid Build Coastguard Worker                       vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
1935*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1936*c0909341SAndroid Build Coastguard Worker
1937*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1938*c0909341SAndroid Build Coastguard Worker    vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1939*c0909341SAndroid Build Coastguard Worker    vsrari.h       \i,       \i,       2
1940*c0909341SAndroid Build Coastguard Worker.endr
1941*c0909341SAndroid Build Coastguard Worker    vst_x8 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
1942*c0909341SAndroid Build Coastguard Worker    vst_x8 t1, 16, 32, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1943*c0909341SAndroid Build Coastguard Worker    addi.d         t1,       t1,       256
1944*c0909341SAndroid Build Coastguard Worker    addi.d         a2,       a2,       16
1945*c0909341SAndroid Build Coastguard Worker    blt            a3,       t5,       1616f
1946*c0909341SAndroid Build Coastguard Worker.endr
1947*c0909341SAndroid Build Coastguard Worker
1948*c0909341SAndroid Build Coastguard Worker1616:
1949*c0909341SAndroid Build Coastguard Worker    ble           t5,       a3,       16161616f
1950*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       320
1951*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
1952*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, \
1953*c0909341SAndroid Build Coastguard Worker    240
1954*c0909341SAndroid Build Coastguard Worker    vst           vr23,     t1,       \i
1955*c0909341SAndroid Build Coastguard Worker.endr
1956*c0909341SAndroid Build Coastguard Worker
1957*c0909341SAndroid Build Coastguard Worker16161616:
1958*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
1959*c0909341SAndroid Build Coastguard Worker.rept 2
1960*c0909341SAndroid Build Coastguard Worker    vld_x16 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1961*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1962*c0909341SAndroid Build Coastguard Worker
1963*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
1964*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
1965*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
1966*c0909341SAndroid Build Coastguard Worker
1967*c0909341SAndroid Build Coastguard Worker    vst_x16 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
1968*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
1969*c0909341SAndroid Build Coastguard Worker
1970*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       16
1971*c0909341SAndroid Build Coastguard Worker.endr
1972*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1973*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
1974*c0909341SAndroid Build Coastguard Worker.rept 4
1975*c0909341SAndroid Build Coastguard Worker    vld_x8 t1, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1976*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, \
1977*c0909341SAndroid Build Coastguard Worker                vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4
1978*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
1979*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
1980*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
1981*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       128
1982*c0909341SAndroid Build Coastguard Worker.endr
1983*c0909341SAndroid Build Coastguard Worker    free_space 512
1984*c0909341SAndroid Build Coastguard Workerendfuncl
1985*c0909341SAndroid Build Coastguard Worker
1986*c0909341SAndroid Build Coastguard Worker.macro fun16x16 txfm1, txfm2, eob_half
1987*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x16_8bpc_lsx
1988*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
1989*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_16x16
1990*c0909341SAndroid Build Coastguard Worker
1991*c0909341SAndroid Build Coastguard Worker    idct_dc 16, 16, 2
1992*c0909341SAndroid Build Coastguard Worker
1993*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \
1994*c0909341SAndroid Build Coastguard Worker                    vr20, vr20, vr20, vr20, vr20
1995*c0909341SAndroid Build Coastguard Worker.rept 3
1996*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     2
1997*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
1998*c0909341SAndroid Build Coastguard Worker
1999*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2000*c0909341SAndroid Build Coastguard Worker.endr
2001*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_16x16_END
2002*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x16:
2003*c0909341SAndroid Build Coastguard Worker.endif
2004*c0909341SAndroid Build Coastguard Worker    li.w         t5,    \eob_half
2005*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_\txfm1\()_8h_x16_lsx
2006*c0909341SAndroid Build Coastguard Worker    la.local     t8,    inv_\txfm2\()_8h_x16_lsx
2007*c0909341SAndroid Build Coastguard Worker
2008*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_add_16x16_lsx
2009*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x16_END:
2010*c0909341SAndroid Build Coastguard Workerendfunc
2011*c0909341SAndroid Build Coastguard Worker.endm
2012*c0909341SAndroid Build Coastguard Worker
2013*c0909341SAndroid Build Coastguard Workerfun16x16 dct, dct, 36
2014*c0909341SAndroid Build Coastguard Workerfun16x16 adst, adst, 36
2015*c0909341SAndroid Build Coastguard Workerfun16x16 adst, dct, 36
2016*c0909341SAndroid Build Coastguard Workerfun16x16 dct, adst, 36
2017*c0909341SAndroid Build Coastguard Workerfun16x16 flipadst, dct, 36
2018*c0909341SAndroid Build Coastguard Workerfun16x16 dct, flipadst, 36
2019*c0909341SAndroid Build Coastguard Workerfun16x16 adst, flipadst, 36
2020*c0909341SAndroid Build Coastguard Workerfun16x16 flipadst, adst, 36
2021*c0909341SAndroid Build Coastguard Worker
2022*c0909341SAndroid Build Coastguard Worker.macro dct_8x32_core_lsx in1, in2, vld_st0, vld_st1, vld_stride, \
2023*c0909341SAndroid Build Coastguard Worker                         vst_st0, vst_st1, vst_st2, vst_st3, vst_stride, \
2024*c0909341SAndroid Build Coastguard Worker                         transpose8x8, shift
2025*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
2026*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       64           // 201
2027*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       68           // 4091
2028*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr0, vr30, vr21, vr20, vr8, vr9
2029*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr0, vr30, vr20, vr21, vr11, vr10
2030*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr8,      12           // t31a
2031*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr11,     12           // t16a
2032*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       72           // 3035
2033*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       76           // 2751
2034*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr19, vr7, vr21, vr20, vr8, vr0
2035*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr19, vr7, vr20, vr21, vr11, vr30
2036*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr8,      12           // t30a
2037*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr11,     12           // t17a
2038*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       80           // 1751
2039*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       84           // 3703
2040*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr4, vr26, vr21, vr20, vr8, vr7
2041*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr4, vr26, vr20, vr21, vr11, vr19
2042*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr8,      12           // t29a
2043*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr11,     12           // t18a
2044*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       88           // 3857
2045*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       92           // 1380
2046*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr27, vr3, vr21, vr20, vr8, vr4
2047*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr27, vr3, vr20, vr21, vr11, vr26
2048*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr8,      12           // t28a
2049*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr26,     vr11,     12           // t19a
2050*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       96           // 995
2051*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       100          // 3973
2052*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr2, vr28, vr21, vr20, vr8, vr3
2053*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr2, vr28, vr20, vr21, vr11, vr27
2054*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr3,      vr8,      12           // t27a
2055*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr27,     vr11,     12           // t20a
2056*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       104          // 3513
2057*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       108          // 2106
2058*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr25, vr5, vr21, vr20, vr8, vr2
2059*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr25, vr5, vr20, vr21, vr11, vr28
2060*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr8,      12           // t26a
2061*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr28,     vr11,     12           // t21a
2062*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       112          // 2440 -> 1220
2063*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       116          // 3290 -> 1645
2064*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr24, vr21, vr20, vr8, vr5
2065*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr24, vr20, vr21, vr11, vr25
2066*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr8,      12           // t25a
2067*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr11,     12           // t22a
2068*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       120          // 4052
2069*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       124          // 601
2070*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr29, vr1, vr21, vr20, vr8, vr6
2071*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr29, vr1, vr20, vr21, vr11, vr24
2072*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr8,      12           // t24a
2073*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr11,     12           // t23a
2074*c0909341SAndroid Build Coastguard Worker
2075*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr10,     vr30         // t16
2076*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr10,     vr30         // t17
2077*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr26,     vr19         // t18
2078*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr31,     vr26,     vr19         // t19
2079*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr27,     vr28         // t20
2080*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr27,     vr28         // t21
2081*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr24,     vr25         // t22
2082*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr26,     vr24,     vr25         // t23
2083*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr6,      vr5          // t24
2084*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr6,      vr5          // t25
2085*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr3,      vr2          // t26
2086*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr25,     vr3,      vr2          // t27
2087*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr4,      vr7          // t28
2088*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr4,      vr7          // t29
2089*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr9,      vr0          // t30
2090*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr9,      vr0          // t31
2091*c0909341SAndroid Build Coastguard Worker
2092*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       16           // 799
2093*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       20           // 4017
2094*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr2, vr29, vr21, vr20, vr4, vr7
2095*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr2, vr29, vr20, vr21, vr11, vr0
2096*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr4,      12           // t30a
2097*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr11,     12           // t17a
2098*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr8, vr21, vr20, vr4, vr9
2099*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
2100*c0909341SAndroid Build Coastguard Worker    vneg.w        vr9,      vr9
2101*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr8, vr20, vr21, vr11, vr2
2102*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr4,      12           // t18a
2103*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr11,     12           // t29a
2104*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       24           // 3406 -> 1703
2105*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       28           // 2276 -> 1138
2106*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr30, vr21, vr20, vr4, vr29
2107*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr30, vr20, vr21, vr11, vr6
2108*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr29,     vr4,      12           // t26a
2109*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr11,     12           // t21a
2110*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr28, vr19, vr21, vr20, vr4, vr8
2111*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
2112*c0909341SAndroid Build Coastguard Worker    vneg.w        vr8,      vr8
2113*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr28, vr19, vr20, vr21, vr11, vr24
2114*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr4,      12           // t22a
2115*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr11,     12           // t25a
2116*c0909341SAndroid Build Coastguard Worker
2117*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr1,      vr31         // t16a
2118*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr1,      vr31         // t19a
2119*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr19,     vr0,      vr9          // t17
2120*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr0,      vr9          // t18
2121*c0909341SAndroid Build Coastguard Worker    vssub.h       vr1,      vr26,     vr10         // t20a
2122*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr31,     vr26,     vr10         // t23a
2123*c0909341SAndroid Build Coastguard Worker    vssub.h       vr0,      vr8,      vr6          // t21
2124*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr8,      vr6          // t22
2125*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr27,     vr25         // t24a
2126*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr27,     vr25         // t27a
2127*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr24,     vr29         // t25
2128*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr24,     vr29         // t26
2129*c0909341SAndroid Build Coastguard Worker    vssub.h       vr25,     vr3,      vr5          // t28a
2130*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr3,      vr5          // t31a
2131*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr7,      vr2          // t29
2132*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr29,     vr7,      vr2          // t30
2133*c0909341SAndroid Build Coastguard Worker
2134*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 1567
2135*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // 3784
2136*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr28, vr21, vr20, vr3, vr5
2137*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr28, vr20, vr21, vr11, vr2
2138*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr3,      12           // t29a
2139*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr11,     12           // 18a
2140*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr25, vr30, vr21, vr20, vr3, vr7
2141*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr25, vr30, vr20, vr21, vr11, vr24
2142*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr3,      12           // t28
2143*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr11,     12           // t19
2144*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr26, vr1, vr21, vr20, vr3, vr28
2145*c0909341SAndroid Build Coastguard Worker    vneg.w        vr3,      vr3
2146*c0909341SAndroid Build Coastguard Worker    vneg.w        vr28,     vr28
2147*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr26, vr1, vr20, vr21, vr11, vr25
2148*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr28,     vr3,      12           // t20
2149*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr11,     12           // t27
2150*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr8, vr0, vr21, vr20, vr3, vr30
2151*c0909341SAndroid Build Coastguard Worker    vneg.w        vr3,      vr3
2152*c0909341SAndroid Build Coastguard Worker    vneg.w        vr30,     vr30
2153*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr8, vr0, vr20, vr21, vr11, vr1
2154*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr3,      12           // t21a
2155*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr11,     12           // t26a
2156*c0909341SAndroid Build Coastguard Worker
2157*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr4,      vr31         // t16
2158*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr4,      vr31         // t23
2159*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr19,     vr9          // t17a
2160*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr19,     vr9          // t22a
2161*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr2,      vr30         // t18
2162*c0909341SAndroid Build Coastguard Worker    vssub.h       vr31,     vr2,      vr30         // t21
2163*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr24,     vr28         // t19a
2164*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr24,     vr28         // t20a
2165*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr27,     vr10         // t24
2166*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr30,     vr27,     vr10         // t31
2167*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr29,     vr6          // t25a
2168*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr28,     vr29,     vr6          // t30a
2169*c0909341SAndroid Build Coastguard Worker    vssub.h       vr10,     vr5,      vr1          // t26
2170*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr5,      vr1          // t29
2171*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr7,      vr25         // t27a
2172*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr29,     vr7,      vr25         // t28a
2173*c0909341SAndroid Build Coastguard Worker
2174*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
2175*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr19, vr20, vr20, vr1, vr5
2176*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr19, vr20, vr20, vr11, vr7
2177*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr1,      12           // t20
2178*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr11,     12           // t27
2179*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr10, vr31, vr20, vr20, vr1, vr25
2180*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr10, vr31, vr20, vr20, vr11, vr6
2181*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr1,      12           // t21a
2182*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr11,     12           // t26a
2183*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr8, vr20, vr20, vr1, vr19
2184*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr8, vr20, vr20, vr11, vr10
2185*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr1,      12           // t22
2186*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr11,     12           // t25
2187*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr2, vr26, vr20, vr20, vr1, vr31
2188*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr2, vr26, vr20, vr20, vr11, vr8
2189*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr31,     vr1,      12           // t23a
2190*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr11,     12           // t24a
2191*c0909341SAndroid Build Coastguard Worker
2192*c0909341SAndroid Build Coastguard Worker    // t31 t30a t29 t28a t27 t26a t25 t24a t23a t22 t21a t20 t19a t18 t17a t16
2193*c0909341SAndroid Build Coastguard Worker    // vr30 vr28 vr27 vr29 vr7 vr6 vr10 vr8 vr31 vr19 vr25 vr5 vr9 vr4 vr0 vr3
2194*c0909341SAndroid Build Coastguard Worker    vld_x8 \in2, \vld_st0, \vld_stride, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18
2195*c0909341SAndroid Build Coastguard Worker
2196*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr11,     vr30         // c[0]
2197*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr11,     vr30         // c[31]
2198*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr12,     vr28         // c[1]
2199*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr12,     vr28         // c[30]
2200*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr13,     vr27         // c[2]
2201*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr13,     vr27         // c[29]
2202*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr12,     vr14,     vr29         // c[3]
2203*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr14,     vr29         // c[28]
2204*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr15,     vr7          // c[4]
2205*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr15,     vr7          // c[27]
2206*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr16,     vr6          // c[5]
2207*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr16,     vr6          // c[26]
2208*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr17,     vr10         // c[6]
2209*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr17,     vr10         // c[25]
2210*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr18,     vr8          // c[7]
2211*c0909341SAndroid Build Coastguard Worker    vssub.h       vr16,     vr18,     vr8          // c[24]
2212*c0909341SAndroid Build Coastguard Worker
2213*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8
2214*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \
2215*c0909341SAndroid Build Coastguard Worker                       vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \
2216*c0909341SAndroid Build Coastguard Worker                       vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23
2217*c0909341SAndroid Build Coastguard Worker.endif
2218*c0909341SAndroid Build Coastguard Worker
2219*c0909341SAndroid Build Coastguard Worker.ifnb \shift
2220*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
2221*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       \shift
2222*c0909341SAndroid Build Coastguard Worker.endr
2223*c0909341SAndroid Build Coastguard Worker.endif
2224*c0909341SAndroid Build Coastguard Worker
2225*c0909341SAndroid Build Coastguard Worker    vst_x8 \in1, \vst_st0, \vst_stride, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
2226*c0909341SAndroid Build Coastguard Worker
2227*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8
2228*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \
2229*c0909341SAndroid Build Coastguard Worker                       vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \
2230*c0909341SAndroid Build Coastguard Worker                       vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23
2231*c0909341SAndroid Build Coastguard Worker.endif
2232*c0909341SAndroid Build Coastguard Worker
2233*c0909341SAndroid Build Coastguard Worker.ifnb \shift
2234*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
2235*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       \shift
2236*c0909341SAndroid Build Coastguard Worker.endr
2237*c0909341SAndroid Build Coastguard Worker.endif
2238*c0909341SAndroid Build Coastguard Worker
2239*c0909341SAndroid Build Coastguard Worker    vst_x8 \in1, \vst_st1, \vst_stride, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
2240*c0909341SAndroid Build Coastguard Worker
2241*c0909341SAndroid Build Coastguard Worker    vld_x8 \in2, \vld_st1, \vld_stride, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18
2242*c0909341SAndroid Build Coastguard Worker
2243*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr11,     vr31         // c[8]
2244*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr11,     vr31         // c[23]
2245*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr12,     vr19         // c[9]
2246*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr12,     vr19         // c[22]
2247*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr13,     vr25         // c[10]
2248*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr13,     vr25         // c[21]
2249*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr12,     vr14,     vr5          // c[11]
2250*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr14,     vr5          // c[20]
2251*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr15,     vr9          // c[12]
2252*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr15,     vr9          // c[19]
2253*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr16,     vr4          // c[13]
2254*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr16,     vr4          // c[18]
2255*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr17,     vr0          // c[14]
2256*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr17,     vr0          // c[17]
2257*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr18,     vr3          // c[15]
2258*c0909341SAndroid Build Coastguard Worker    vssub.h       vr16,     vr18,     vr3          // c[16]
2259*c0909341SAndroid Build Coastguard Worker
2260*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8
2261*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \
2262*c0909341SAndroid Build Coastguard Worker                       vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \
2263*c0909341SAndroid Build Coastguard Worker                       vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23
2264*c0909341SAndroid Build Coastguard Worker.endif
2265*c0909341SAndroid Build Coastguard Worker
2266*c0909341SAndroid Build Coastguard Worker.ifnb \shift
2267*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
2268*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       \shift
2269*c0909341SAndroid Build Coastguard Worker.endr
2270*c0909341SAndroid Build Coastguard Worker.endif
2271*c0909341SAndroid Build Coastguard Worker
2272*c0909341SAndroid Build Coastguard Worker    vst_x8 \in1, \vst_st2, \vst_stride, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
2273*c0909341SAndroid Build Coastguard Worker
2274*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8
2275*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \
2276*c0909341SAndroid Build Coastguard Worker                       vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \
2277*c0909341SAndroid Build Coastguard Worker                       vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23
2278*c0909341SAndroid Build Coastguard Worker.endif
2279*c0909341SAndroid Build Coastguard Worker
2280*c0909341SAndroid Build Coastguard Worker.ifnb \shift
2281*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
2282*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       \shift
2283*c0909341SAndroid Build Coastguard Worker.endr
2284*c0909341SAndroid Build Coastguard Worker.endif
2285*c0909341SAndroid Build Coastguard Worker
2286*c0909341SAndroid Build Coastguard Worker    vst_x8 \in1, \vst_st3, \vst_stride, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
2287*c0909341SAndroid Build Coastguard Worker.endm
2288*c0909341SAndroid Build Coastguard Worker
2289*c0909341SAndroid Build Coastguard Workerconst eob_32x32
2290*c0909341SAndroid Build Coastguard Worker        .short 36, 136, 300, 1024
2291*c0909341SAndroid Build Coastguard Workerendconst
2292*c0909341SAndroid Build Coastguard Worker
2293*c0909341SAndroid Build Coastguard Workerconst eob_8x32
2294*c0909341SAndroid Build Coastguard Worker        .short 43, 107, 171, 256
2295*c0909341SAndroid Build Coastguard Workerendconst
2296*c0909341SAndroid Build Coastguard Worker
2297*c0909341SAndroid Build Coastguard Workerconst eob_16x32
2298*c0909341SAndroid Build Coastguard Worker        .short 36, 151, 279, 512
2299*c0909341SAndroid Build Coastguard Workerendconst
2300*c0909341SAndroid Build Coastguard Worker
2301*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W32 in0, in1, in2, in3, in4, in5, in6, in7
2302*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr4,      vr10,     0
2303*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr5,      vr11,     0
2304*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr6,      vr12,     0
2305*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr7,      vr13,     0
2306*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr10,     vr10
2307*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr11,     vr11
2308*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr12,     vr12
2309*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr13,     vr13
2310*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,      vr4,      \in0
2311*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,     vr10,     \in1
2312*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,      vr5,      \in2
2313*c0909341SAndroid Build Coastguard Worker    vadd.h        vr11,     vr11,     \in3
2314*c0909341SAndroid Build Coastguard Worker    vadd.h        vr6,      vr6,      \in4
2315*c0909341SAndroid Build Coastguard Worker    vadd.h        vr12,     vr12,     \in5
2316*c0909341SAndroid Build Coastguard Worker    vadd.h        vr7,      vr7,      \in6
2317*c0909341SAndroid Build Coastguard Worker    vadd.h        vr13,     vr13,     \in7
2318*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr10,     vr4,      0
2319*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr11,     vr5,      0
2320*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr12,     vr6,      0
2321*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr13,     vr7,      0
2322*c0909341SAndroid Build Coastguard Worker    vst           vr10,     a0,       0
2323*c0909341SAndroid Build Coastguard Worker    vst           vr11,     a0,       16
2324*c0909341SAndroid Build Coastguard Worker    vst           vr12,     t2,       0
2325*c0909341SAndroid Build Coastguard Worker    vst           vr13,     t2,       16
2326*c0909341SAndroid Build Coastguard Worker.endm
2327*c0909341SAndroid Build Coastguard Worker
2328*c0909341SAndroid Build Coastguard Worker.macro idct_dc_w32 w, h, shift
2329*c0909341SAndroid Build Coastguard Worker    ld.h          t2,       a2,       0      // dc
2330*c0909341SAndroid Build Coastguard Worker    vldi          vr0,      0x8b5            // 181
2331*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr1,      t2
2332*c0909341SAndroid Build Coastguard Worker    vldi          vr20,     0x880            // 128
2333*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr0,      vr1    // dc * 181
2334*c0909341SAndroid Build Coastguard Worker    st.h          zero,     a2,       0
2335*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2336*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8      // (dc * 181 + 128) >> 8
2337*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2338*c0909341SAndroid Build Coastguard Worker
2339*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w)
2340*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr2,      vr0
2341*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8
2342*c0909341SAndroid Build Coastguard Worker.endif
2343*c0909341SAndroid Build Coastguard Worker
2344*c0909341SAndroid Build Coastguard Worker.if \shift>0
2345*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      \shift      // (dc + rnd) >> shift
2346*c0909341SAndroid Build Coastguard Worker.endif
2347*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2348*c0909341SAndroid Build Coastguard Worker    vmadd.w       vr20,     vr2,      vr0
2349*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2350*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr20,     vr20,     12
2351*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2352*c0909341SAndroid Build Coastguard Worker.endm
2353*c0909341SAndroid Build Coastguard Worker
2354*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x8_8bpc_lsx
2355*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_32x8
2356*c0909341SAndroid Build Coastguard Worker
2357*c0909341SAndroid Build Coastguard Worker    idct_dc_w32 32, 8, 2
2358*c0909341SAndroid Build Coastguard Worker
2359*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2360*c0909341SAndroid Build Coastguard Worker
2361*c0909341SAndroid Build Coastguard Worker.rept 3
2362*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2363*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2364*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2365*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2366*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2367*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2368*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2369*c0909341SAndroid Build Coastguard Worker.endr
2370*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_32X8_END
2371*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x8:
2372*c0909341SAndroid Build Coastguard Worker    malloc_space 512+256
2373*c0909341SAndroid Build Coastguard Worker
2374*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
2375*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
2376*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
2377*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       512
2378*c0909341SAndroid Build Coastguard Worker
2379*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2380*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2381*c0909341SAndroid Build Coastguard Worker
2382*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2383*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 0, 32, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2384*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2385*c0909341SAndroid Build Coastguard Worker
2386*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
2387*c0909341SAndroid Build Coastguard Worker
2388*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2389*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2390*c0909341SAndroid Build Coastguard Worker
2391*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2392*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2393*c0909341SAndroid Build Coastguard Worker
2394*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2395*c0909341SAndroid Build Coastguard Worker
2396*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 16, 32, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2397*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2398*c0909341SAndroid Build Coastguard Worker
2399*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 2
2400*c0909341SAndroid Build Coastguard Worker
2401*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
2402*c0909341SAndroid Build Coastguard Worker.rept 4
2403*c0909341SAndroid Build Coastguard Worker    vld_x8 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
2404*c0909341SAndroid Build Coastguard Worker
2405*c0909341SAndroid Build Coastguard Worker    inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h
2406*c0909341SAndroid Build Coastguard Worker
2407*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
2408*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       4
2409*c0909341SAndroid Build Coastguard Worker.endr
2410*c0909341SAndroid Build Coastguard Worker
2411*c0909341SAndroid Build Coastguard Worker    vst_x8 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
2412*c0909341SAndroid Build Coastguard Worker
2413*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
2414*c0909341SAndroid Build Coastguard Worker.endr
2415*c0909341SAndroid Build Coastguard Worker
2416*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       sp,       64
2417*c0909341SAndroid Build Coastguard Worker.rept 4
2418*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2419*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2420*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2421*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2422*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2423*c0909341SAndroid Build Coastguard Worker    vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2424*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2425*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2426*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       128
2427*c0909341SAndroid Build Coastguard Worker.endr
2428*c0909341SAndroid Build Coastguard Worker    free_space 512+256
2429*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X8_END:
2430*c0909341SAndroid Build Coastguard Workerendfunc
2431*c0909341SAndroid Build Coastguard Worker
2432*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x16_8bpc_lsx
2433*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_32x16
2434*c0909341SAndroid Build Coastguard Worker
2435*c0909341SAndroid Build Coastguard Worker    idct_dc_w32 32, 16, 1
2436*c0909341SAndroid Build Coastguard Worker
2437*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2438*c0909341SAndroid Build Coastguard Worker
2439*c0909341SAndroid Build Coastguard Worker.rept 7
2440*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2441*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2442*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2443*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2444*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2445*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2446*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2447*c0909341SAndroid Build Coastguard Worker.endr
2448*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_32X16_END
2449*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x16:
2450*c0909341SAndroid Build Coastguard Worker    malloc_space 1024+256                            // 32*32*2+512
2451*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
2452*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
2453*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
2454*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       1024
2455*c0909341SAndroid Build Coastguard Worker.rept 2
2456*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2457*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2458*c0909341SAndroid Build Coastguard Worker
2459*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2460*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 0, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2461*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2462*c0909341SAndroid Build Coastguard Worker
2463*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
2464*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
2465*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2466*c0909341SAndroid Build Coastguard Worker     vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2467*c0909341SAndroid Build Coastguard Worker    rect2_lsx   \i, vr23, \i
2468*c0909341SAndroid Build Coastguard Worker.endr
2469*c0909341SAndroid Build Coastguard Worker
2470*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
2471*c0909341SAndroid Build Coastguard Worker
2472*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2473*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2474*c0909341SAndroid Build Coastguard Worker
2475*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 32, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2476*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2477*c0909341SAndroid Build Coastguard Worker
2478*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
2479*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,     t0,       0        // 2896
2480*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2481*c0909341SAndroid Build Coastguard Worker    vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2482*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
2483*c0909341SAndroid Build Coastguard Worker.endr
2484*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2485*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 32, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2486*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2487*c0909341SAndroid Build Coastguard Worker
2488*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 1
2489*c0909341SAndroid Build Coastguard Worker
2490*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
2491*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       512
2492*c0909341SAndroid Build Coastguard Worker.endr
2493*c0909341SAndroid Build Coastguard Worker
2494*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
2495*c0909341SAndroid Build Coastguard Worker.rept 4
2496*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2497*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2498*c0909341SAndroid Build Coastguard Worker
2499*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
2500*c0909341SAndroid Build Coastguard Worker
2501*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2502*c0909341SAndroid Build Coastguard Worker    vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2503*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       4
2504*c0909341SAndroid Build Coastguard Worker.endr
2505*c0909341SAndroid Build Coastguard Worker
2506*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2507*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2508*c0909341SAndroid Build Coastguard Worker
2509*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
2510*c0909341SAndroid Build Coastguard Worker.endr
2511*c0909341SAndroid Build Coastguard Worker
2512*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       sp,       64
2513*c0909341SAndroid Build Coastguard Worker.rept 8
2514*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2515*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2516*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2517*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2518*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2519*c0909341SAndroid Build Coastguard Worker    vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2520*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2521*c0909341SAndroid Build Coastguard Worker
2522*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2523*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       128
2524*c0909341SAndroid Build Coastguard Worker.endr
2525*c0909341SAndroid Build Coastguard Worker    free_space 1024+256
2526*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X16_END:
2527*c0909341SAndroid Build Coastguard Workerendfunc
2528*c0909341SAndroid Build Coastguard Worker
2529*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x32_8bpc_lsx
2530*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_32x32
2531*c0909341SAndroid Build Coastguard Worker
2532*c0909341SAndroid Build Coastguard Worker    idct_dc_w32 32, 32, 2
2533*c0909341SAndroid Build Coastguard Worker
2534*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2535*c0909341SAndroid Build Coastguard Worker.rept 15
2536*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2537*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2538*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2539*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2540*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2541*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2542*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
2543*c0909341SAndroid Build Coastguard Worker.endr
2544*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_32X32_END
2545*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x32:
2546*c0909341SAndroid Build Coastguard Worker    malloc_space 2560                              // 32*32*2+512
2547*c0909341SAndroid Build Coastguard Worker
2548*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
2549*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
2550*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       1024
2551*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       1024
2552*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       64
2553*c0909341SAndroid Build Coastguard Worker
2554*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
2555*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_32x32:
2556*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
2557*c0909341SAndroid Build Coastguard Worker    addi.d        t8,       t8,       2
2558*c0909341SAndroid Build Coastguard Worker
2559*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2560*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2561*c0909341SAndroid Build Coastguard Worker
2562*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2563*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 0, 128, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2564*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2565*c0909341SAndroid Build Coastguard Worker
2566*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
2567*c0909341SAndroid Build Coastguard Worker
2568*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2569*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2570*c0909341SAndroid Build Coastguard Worker
2571*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 64, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2572*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2573*c0909341SAndroid Build Coastguard Worker
2574*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2575*c0909341SAndroid Build Coastguard Worker
2576*c0909341SAndroid Build Coastguard Worker    vst_x16 t2, 64, 128, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2577*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2578*c0909341SAndroid Build Coastguard Worker
2579*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 2
2580*c0909341SAndroid Build Coastguard Worker
2581*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
2582*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       512
2583*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_32x32
2584*c0909341SAndroid Build Coastguard Worker
2585*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
2586*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
2587*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       4
2588*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_32x32_END   // a3>=t7
2589*c0909341SAndroid Build Coastguard Worker    vst_x16 sp, 64+1536, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2590*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2591*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       256+64
2592*c0909341SAndroid Build Coastguard Worker    vst_x16 t1, 1536, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2593*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2594*c0909341SAndroid Build Coastguard Worker
2595*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       2
2596*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_32x32_END
2597*c0909341SAndroid Build Coastguard Worker    vst_x16 sp, 64+1024, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2598*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2599*c0909341SAndroid Build Coastguard Worker    vst_x16 t1, 1024, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2600*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2601*c0909341SAndroid Build Coastguard Worker
2602*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
2603*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_32x32_END
2604*c0909341SAndroid Build Coastguard Worker    vst_x16 sp, 64+512, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2605*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2606*c0909341SAndroid Build Coastguard Worker
2607*c0909341SAndroid Build Coastguard Worker    vst_x16 t1, 512, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
2608*c0909341SAndroid Build Coastguard Worker        vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
2609*c0909341SAndroid Build Coastguard Worker
2610*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_32x32_END:
2611*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
2612*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       sp,       64
2613*c0909341SAndroid Build Coastguard Worker.rept 4
2614*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2615*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2616*c0909341SAndroid Build Coastguard Worker
2617*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
2618*c0909341SAndroid Build Coastguard Worker
2619*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2620*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
2621*c0909341SAndroid Build Coastguard Worker
2622*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 64, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
2623*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2624*c0909341SAndroid Build Coastguard Worker
2625*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 1536, 512, 1024, 64, , 4
2626*c0909341SAndroid Build Coastguard Worker
2627*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
2628*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       16
2629*c0909341SAndroid Build Coastguard Worker.endr
2630*c0909341SAndroid Build Coastguard Worker
2631*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       sp,       64
2632*c0909341SAndroid Build Coastguard Worker.rept 16
2633*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a0,       a1
2634*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
2635*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
2636*c0909341SAndroid Build Coastguard Worker    vld           vr12,     t2,       0
2637*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t2,       16
2638*c0909341SAndroid Build Coastguard Worker    vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2639*c0909341SAndroid Build Coastguard Worker    DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
2640*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2641*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       128
2642*c0909341SAndroid Build Coastguard Worker.endr
2643*c0909341SAndroid Build Coastguard Worker
2644*c0909341SAndroid Build Coastguard Worker    free_space 2560                                // 32*32*2+512
2645*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X32_END:
2646*c0909341SAndroid Build Coastguard Workerendfunc
2647*c0909341SAndroid Build Coastguard Worker
2648*c0909341SAndroid Build Coastguard Worker/*
2649*c0909341SAndroid Build Coastguard Worker * temp: vr8, vr9, vr10, vr12, vr20, vr21, vr22, vr23
2650*c0909341SAndroid Build Coastguard Worker */
2651*c0909341SAndroid Build Coastguard Worker.macro dct_8x8_tx64_core_lsx in0, in1, in2, in3, in4, in5, in6, in7, out0, \
2652*c0909341SAndroid Build Coastguard Worker                             out1, out2, out3, out4, out5, out6, out7, rect2
2653*c0909341SAndroid Build Coastguard Worker
2654*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
2655*c0909341SAndroid Build Coastguard Worker
2656*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
2657*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      t0,       0        // 2896
2658*c0909341SAndroid Build Coastguard Worker.irp i, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7
2659*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
2660*c0909341SAndroid Build Coastguard Worker.endr
2661*c0909341SAndroid Build Coastguard Worker.endif
2662*c0909341SAndroid Build Coastguard Worker
2663*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
2664*c0909341SAndroid Build Coastguard Worker
2665*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 1567
2666*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // 3784
2667*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in2,     0
2668*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in2
2669*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
2670*c0909341SAndroid Build Coastguard Worker    vmul.w        vr10,     vr23,     vr20
2671*c0909341SAndroid Build Coastguard Worker    vmul.w        \in2,     vr22,     vr21
2672*c0909341SAndroid Build Coastguard Worker    vmul.w        vr9,      vr23,     vr21
2673*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr8,      12           // t2
2674*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      \in2,     12           // t3
2675*c0909341SAndroid Build Coastguard Worker
2676*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
2677*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in0,     0
2678*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in0
2679*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
2680*c0909341SAndroid Build Coastguard Worker    vmul.w        \in2,     vr23,     vr20
2681*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in2,     vr8,      12
2682*c0909341SAndroid Build Coastguard Worker
2683*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr8,      \in2,     vr9          // c[0]
2684*c0909341SAndroid Build Coastguard Worker    vssub.h       vr9,      \in2,     vr9          // c[3]
2685*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in0,     \in2,     vr10         // c[1]
2686*c0909341SAndroid Build Coastguard Worker    vssub.h       vr10,     \in2,     vr10         // c[2]
2687*c0909341SAndroid Build Coastguard Worker
2688*c0909341SAndroid Build Coastguard Worker    // inv_dct8_1d_internal_c tx64
2689*c0909341SAndroid Build Coastguard Worker    // in1 in3
2690*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       16           // 799
2691*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       20           // 4017
2692*c0909341SAndroid Build Coastguard Worker
2693*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in1,     0
2694*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in1
2695*c0909341SAndroid Build Coastguard Worker    vmul.w        \in2,     vr22,     vr21
2696*c0909341SAndroid Build Coastguard Worker    vmul.w        \in4,     vr23,     vr21
2697*c0909341SAndroid Build Coastguard Worker    vmul.w        \in1,     vr22,     vr20
2698*c0909341SAndroid Build Coastguard Worker    vmul.w        \in6,     vr23,     vr20
2699*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in4,     \in2,     12           // t7a
2700*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in6,     \in1,     12           // t4a
2701*c0909341SAndroid Build Coastguard Worker
2702*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       24           // 3406
2703*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       28           // 2276
2704*c0909341SAndroid Build Coastguard Worker
2705*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     \in3,     0
2706*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     \in3
2707*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
2708*c0909341SAndroid Build Coastguard Worker    vmul.w        \in2,     vr22,     vr20
2709*c0909341SAndroid Build Coastguard Worker    vmul.w        \in1,     vr23,     vr20
2710*c0909341SAndroid Build Coastguard Worker    vmul.w        \in3,     vr22,     vr21
2711*c0909341SAndroid Build Coastguard Worker    vmul.w        \in7,     vr23,     vr21
2712*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in1,     \in2,     12           // t6a
2713*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in7,     \in3,     12           // t5a
2714*c0909341SAndroid Build Coastguard Worker
2715*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in3,     \in6,     \in7         // t4
2716*c0909341SAndroid Build Coastguard Worker    vssub.h       \in6,     \in6,     \in7         // t5a
2717*c0909341SAndroid Build Coastguard Worker    vsadd.h       \in5,     \in4,     \in1         // t7
2718*c0909341SAndroid Build Coastguard Worker    vssub.h       \in4,     \in4,     \in1         // t6a
2719*c0909341SAndroid Build Coastguard Worker
2720*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
2721*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w  \in4, \in6, vr20, vr20, vr21, \in1
2722*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w  \in4, \in6, vr20, vr20, \in2, \in7
2723*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in1,     vr21,     12           // t6
2724*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \in7,     \in2,     12           // t5
2725*c0909341SAndroid Build Coastguard Worker
2726*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out0,    vr8,      \in5         // c[0]
2727*c0909341SAndroid Build Coastguard Worker    vssub.h       \out7,    vr8,      \in5         // c[7]
2728*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out1,    \in0,     \in1         // c[1]
2729*c0909341SAndroid Build Coastguard Worker    vssub.h       \out6,    \in0,     \in1         // c[6]
2730*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out2,    vr10,     \in7         // c[2]
2731*c0909341SAndroid Build Coastguard Worker    vssub.h       \out5,    vr10,     \in7         // c[5]
2732*c0909341SAndroid Build Coastguard Worker    vsadd.h       \out3,    vr9,      \in3         // c[3]
2733*c0909341SAndroid Build Coastguard Worker    vssub.h       \out4,    vr9,      \in3         // c[4]
2734*c0909341SAndroid Build Coastguard Worker.endm
2735*c0909341SAndroid Build Coastguard Worker
2736*c0909341SAndroid Build Coastguard Worker/*
2737*c0909341SAndroid Build Coastguard Worker * input:  in0,  in1,  in2,  in3,  in4,  in5,  in6,  in7       (fixed)
2738*c0909341SAndroid Build Coastguard Worker *         vr0,  vr1,  vr2,  vr3,  vr4,  vr5,  vr6,  vr7
2739*c0909341SAndroid Build Coastguard Worker *         in8,  in9,  in10, in11, in12, in13, in14, in15
2740*c0909341SAndroid Build Coastguard Worker *         vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
2741*c0909341SAndroid Build Coastguard Worker * output: out0, out1, out2, out3, out4, out5, out6, out7      (fixed)
2742*c0909341SAndroid Build Coastguard Worker *         vr22, vr18, vr17, vr28, vr20, vr14, vr15, vr16
2743*c0909341SAndroid Build Coastguard Worker *         out8, out9, out10, out11, out12, out13, out14, out15
2744*c0909341SAndroid Build Coastguard Worker *         vr27, vr30, vr23,  vr21,  vr29,  vr26,  vr25,  vr24
2745*c0909341SAndroid Build Coastguard Worker */
2746*c0909341SAndroid Build Coastguard Worker.macro dct_8x16_tx64_core_lsx rect2
2747*c0909341SAndroid Build Coastguard Worker    dct_8x8_tx64_core_lsx vr0, vr2, vr4, vr6, vr19, vr25, vr27, vr29, vr11, \
2748*c0909341SAndroid Build Coastguard Worker                          vr12, vr13, vr14, vr15, vr16, vr17, vr18, \rect2
2749*c0909341SAndroid Build Coastguard Worker
2750*c0909341SAndroid Build Coastguard Worker    // in1 in3 in5 in7 in9  in11 in13 in15
2751*c0909341SAndroid Build Coastguard Worker    // vr1 vr3 vr5 vr7 vr24 vr26 vr28 vr30
2752*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
2753*c0909341SAndroid Build Coastguard Worker
2754*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
2755*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      t0,       0        // 2896
2756*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr3, vr5, vr7, vr24, vr26, vr28, vr30
2757*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
2758*c0909341SAndroid Build Coastguard Worker.endr
2759*c0909341SAndroid Build Coastguard Worker.endif
2760*c0909341SAndroid Build Coastguard Worker
2761*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       32           // 401
2762*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       36           // 4076
2763*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr1,      0
2764*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr1
2765*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr22,     vr21
2766*c0909341SAndroid Build Coastguard Worker    vmul.w        vr10,     vr23,     vr21
2767*c0909341SAndroid Build Coastguard Worker    vmul.w        vr1,      vr22,     vr20
2768*c0909341SAndroid Build Coastguard Worker    vmul.w        vr29,     vr23,     vr20
2769*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr0,      12           // t15a
2770*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr29,     vr1,      12           // t8a
2771*c0909341SAndroid Build Coastguard Worker
2772*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       40           // 3166 -> 1583
2773*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       44           // 2598 -> 1299
2774*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr7,      0
2775*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr7
2776*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
2777*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr22,     vr20
2778*c0909341SAndroid Build Coastguard Worker    vmul.w        vr30,     vr23,     vr20
2779*c0909341SAndroid Build Coastguard Worker    vmul.w        vr7,      vr22,     vr21
2780*c0909341SAndroid Build Coastguard Worker    vmul.w        vr31,     vr23,     vr21
2781*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr0,      12           // t14a
2782*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr31,     vr7,      12           // t9a
2783*c0909341SAndroid Build Coastguard Worker
2784*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       48           // 1931
2785*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       52           // 3612
2786*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr5,      0
2787*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr5
2788*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr22,     vr21
2789*c0909341SAndroid Build Coastguard Worker    vmul.w        vr24,     vr23,     vr21
2790*c0909341SAndroid Build Coastguard Worker    vmul.w        vr5,      vr22,     vr20
2791*c0909341SAndroid Build Coastguard Worker    vmul.w        vr25,     vr23,     vr20
2792*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr0,      12           // t13a
2793*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr5,      12           // t10a
2794*c0909341SAndroid Build Coastguard Worker
2795*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       56           // 3920
2796*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       60           // 1189
2797*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr3,      0
2798*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr3
2799*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
2800*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr22,     vr20
2801*c0909341SAndroid Build Coastguard Worker    vmul.w        vr26,     vr23,     vr20
2802*c0909341SAndroid Build Coastguard Worker    vmul.w        vr3,      vr22,     vr21
2803*c0909341SAndroid Build Coastguard Worker    vmul.w        vr27,     vr23,     vr21
2804*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr26,     vr0,      12           // t12a
2805*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr27,     vr3,      12           // t11a
2806*c0909341SAndroid Build Coastguard Worker
2807*c0909341SAndroid Build Coastguard Worker    // vr22 vr23 vr30 vr31 vr24 vr25 vr26 vr27
2808*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr28,     vr29,      vr31        // t8
2809*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr29,      vr31        // t9
2810*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr27,      vr25        // t10
2811*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr27,      vr25        // t11
2812*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr31,     vr26,      vr24        // t12
2813*c0909341SAndroid Build Coastguard Worker    vssub.h       vr25,     vr26,      vr24        // t13
2814*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr10,      vr30        // t14
2815*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr10,      vr30        // t15
2816*c0909341SAndroid Build Coastguard Worker
2817*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 1567
2818*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // 3784
2819*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr27, vr19, vr21, vr20, vr0, vr26
2820*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr27, vr19, vr20, vr21, vr1, vr30
2821*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr26,     vr0,       12          // t14a
2822*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr1,       12          // t9a
2823*c0909341SAndroid Build Coastguard Worker
2824*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr25, vr29, vr21, vr20, vr0, vr19
2825*c0909341SAndroid Build Coastguard Worker    vneg.w        vr0,      vr0
2826*c0909341SAndroid Build Coastguard Worker    vneg.w        vr19,     vr19
2827*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr25, vr29, vr20, vr21, vr1, vr27
2828*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr0,       12          // t10a
2829*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr27,     vr1,       12          // t13a
2830*c0909341SAndroid Build Coastguard Worker
2831*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr25,     vr28,     vr9          // t8a
2832*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr28,     vr9          // t11a
2833*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr24,     vr31         // t12a
2834*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr24,     vr31         // t15a
2835*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr30,     vr19         // t9
2836*c0909341SAndroid Build Coastguard Worker    vssub.h       vr31,     vr30,     vr19         // t10
2837*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr26,     vr27         // t13
2838*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr26,     vr27         // t14
2839*c0909341SAndroid Build Coastguard Worker
2840*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
2841*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr30, vr31, vr20, vr20, vr0, vr26
2842*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr30, vr31, vr20, vr20, vr1, vr27
2843*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr26,     vr0,      12           // t13a
2844*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr27,     vr1,      12           // t10a
2845*c0909341SAndroid Build Coastguard Worker
2846*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr28, vr29, vr20, vr20, vr0, vr31
2847*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr28, vr29, vr20, vr20, vr1, vr30
2848*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr31,     vr0,      12           // t12
2849*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr1,      12           // t11
2850*c0909341SAndroid Build Coastguard Worker
2851*c0909341SAndroid Build Coastguard Worker    // vr11 vr12 ... vr18
2852*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr28,     vr14,     vr31         // c[3]
2853*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr14,     vr31         // c[12]
2854*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr20,     vr15,     vr30         // c[4]
2855*c0909341SAndroid Build Coastguard Worker    vssub.h       vr21,     vr15,     vr30         // c[11]
2856*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr16,     vr27         // c[5]
2857*c0909341SAndroid Build Coastguard Worker    vssub.h       vr23,     vr16,     vr27         // c[10]
2858*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr15,     vr17,     vr9          // c[6]
2859*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr17,     vr9          // c[9]
2860*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr16,     vr18,     vr25         // c[7]
2861*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr18,     vr25         // c[8]
2862*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr17,     vr13,     vr26         // c[2]
2863*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr13,     vr26         // c[13]
2864*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr18,     vr12,     vr24         // c[1]
2865*c0909341SAndroid Build Coastguard Worker    vssub.h       vr25,     vr12,     vr24         // c[14]
2866*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr22,     vr11,     vr10         // c[0]
2867*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr11,     vr10         // c[15]
2868*c0909341SAndroid Build Coastguard Worker.endm // dct_8x16_tx64_core_lsx
2869*c0909341SAndroid Build Coastguard Worker
2870*c0909341SAndroid Build Coastguard Worker.macro vmul_vssrarni_hw in0, in1, in2, tmp0, tmp1, out0, out1
2871*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,      \in0,     0
2872*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,      \in0
2873*c0909341SAndroid Build Coastguard Worker    vmul.w        \tmp0,     vr22,     \in1
2874*c0909341SAndroid Build Coastguard Worker    vmul.w        \out0,     vr23,     \in1
2875*c0909341SAndroid Build Coastguard Worker    vmul.w        \tmp1,     vr22,     \in2
2876*c0909341SAndroid Build Coastguard Worker    vmul.w        \out1,     vr23,     \in2
2877*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out0,     \tmp0,    12
2878*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  \out1,     \tmp1,    12
2879*c0909341SAndroid Build Coastguard Worker.endm
2880*c0909341SAndroid Build Coastguard Worker
2881*c0909341SAndroid Build Coastguard Workerconst idct64_coeffs, align=4
2882*c0909341SAndroid Build Coastguard Worker    .word         101, 4095, 2967, -2824
2883*c0909341SAndroid Build Coastguard Worker    .word         1660, 3745, 3822, -1474
2884*c0909341SAndroid Build Coastguard Worker    .word         4076, 401, 4017, 799
2885*c0909341SAndroid Build Coastguard Worker    .word         4036, -700, 2359, 3349
2886*c0909341SAndroid Build Coastguard Worker    .word         3461, -2191, 897, 3996
2887*c0909341SAndroid Build Coastguard Worker    .word         -3166, -2598, -799, -4017
2888*c0909341SAndroid Build Coastguard Worker    .word         501, 4065, 3229, -2520
2889*c0909341SAndroid Build Coastguard Worker    .word         2019, 3564, 3948, -1092
2890*c0909341SAndroid Build Coastguard Worker    .word         3612, 1931, 2276, 3406
2891*c0909341SAndroid Build Coastguard Worker    .word         4085, -301, 2675, 3102
2892*c0909341SAndroid Build Coastguard Worker    .word         3659, -1842, 1285, 3889
2893*c0909341SAndroid Build Coastguard Worker    .word         -3920, -1189, -3406, -2276
2894*c0909341SAndroid Build Coastguard Workerendconst
2895*c0909341SAndroid Build Coastguard Worker
2896*c0909341SAndroid Build Coastguard Worker.macro dct64_step1_lsx
2897*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 101
2898*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       4            // 4095
2899*c0909341SAndroid Build Coastguard Worker    vmul_vssrarni_hw vr0, vr20, vr21, vr16, vr0, vr8, vr9    // vr8 t32a vr9 t63a
2900*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 2967
2901*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // -2824
2902*c0909341SAndroid Build Coastguard Worker    vmul_vssrarni_hw vr1, vr20, vr21, vr16, vr1, vr10, vr11  // vr10 t62a vr11 t33a
2903*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       16           // 1660
2904*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       20           // 3745
2905*c0909341SAndroid Build Coastguard Worker    vmul_vssrarni_hw vr2, vr20, vr21, vr16, vr2, vr12, vr13  // vr12 t34a vr13 t61a
2906*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       24           // 3822
2907*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       28           // -1474
2908*c0909341SAndroid Build Coastguard Worker    vmul_vssrarni_hw vr3, vr20, vr21, vr16, vr3, vr14, vr15  // vr14 t60a vr15 t35a
2909*c0909341SAndroid Build Coastguard Worker
2910*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr8,      vr11         // t32
2911*c0909341SAndroid Build Coastguard Worker    vssub.h       vr1,      vr8,      vr11         // t33
2912*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr15,     vr12         // t34
2913*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr15,     vr12         // t35
2914*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr14,     vr13         // t60
2915*c0909341SAndroid Build Coastguard Worker    vssub.h       vr5,      vr14,     vr13         // t61
2916*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr9,      vr10         // t62
2917*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr9,      vr10         // t63
2918*c0909341SAndroid Build Coastguard Worker
2919*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       32           // 4076
2920*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       36           // 401
2921*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr1, vr20, vr21, vr9, vr10
2922*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr1, vr21, vr20, vr13, vr11
2923*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr9,      12           // t62a
2924*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr11,     vr13,     12           // t33a
2925*c0909341SAndroid Build Coastguard Worker
2926*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr5, vr2, vr20, vr21, vr9, vr1
2927*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr5, vr2, vr21, vr20, vr13, vr6
2928*c0909341SAndroid Build Coastguard Worker    vneg.w        vr9,      vr9
2929*c0909341SAndroid Build Coastguard Worker    vneg.w        vr1,      vr1
2930*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr13,     12           // t61a
2931*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr9,      12           // t34a
2932*c0909341SAndroid Build Coastguard Worker
2933*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr0,      vr3          // t32a
2934*c0909341SAndroid Build Coastguard Worker    vssub.h       vr5,      vr0,      vr3          // t35a
2935*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr11,     vr1          // t33
2936*c0909341SAndroid Build Coastguard Worker    vssub.h       vr13,     vr11,     vr1          // t34
2937*c0909341SAndroid Build Coastguard Worker    vssub.h       vr0,      vr7,      vr4          // t60a
2938*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr7,      vr4          // t63a
2939*c0909341SAndroid Build Coastguard Worker    vssub.h       vr1,      vr10,     vr6          // t61
2940*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr10,     vr6          // t62
2941*c0909341SAndroid Build Coastguard Worker
2942*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       40           // 4017
2943*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       44           // 799
2944*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr1, vr13, vr20, vr21, vr8, vr4
2945*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr1, vr13, vr21, vr20, vr12, vr7
2946*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr8,      12           // t61a
2947*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr12,     12           // t34a
2948*c0909341SAndroid Build Coastguard Worker
2949*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr0, vr5, vr20, vr21, vr8, vr6
2950*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr0, vr5, vr21, vr20, vr12, vr10
2951*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr8,      12           // t60
2952*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr12,     12           // t35
2953*c0909341SAndroid Build Coastguard Worker
2954*c0909341SAndroid Build Coastguard Worker    vst_x8 t6, 0, 16, vr2, vr9, vr7, vr10, vr6, vr4, vr11, vr3
2955*c0909341SAndroid Build Coastguard Worker.endm // dct64_step1
2956*c0909341SAndroid Build Coastguard Worker
2957*c0909341SAndroid Build Coastguard Worker    // in1/31/17/15 -> t32a/33/34a/35/60/61a/62/63a
2958*c0909341SAndroid Build Coastguard Worker    // in7/25/23/ 9 -> t56a/57/58a/59/36/37a/38/39a
2959*c0909341SAndroid Build Coastguard Worker    // in5/27/21/11 -> t40a/41/42a/43/52/53a/54/55a
2960*c0909341SAndroid Build Coastguard Worker    // in3/29/19/13 -> t48a/49/50a/51/44/45a/46/47a
2961*c0909341SAndroid Build Coastguard Worker.macro dct64_step2_lsx
2962*c0909341SAndroid Build Coastguard Worker    vld           vr0,      t5,       0            // t32a
2963*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t4,       0            // t63a
2964*c0909341SAndroid Build Coastguard Worker    vld           vr3,      t5,       16*8         // t56a
2965*c0909341SAndroid Build Coastguard Worker    vld           vr1,      t4,       16*8         // t39a
2966*c0909341SAndroid Build Coastguard Worker    vld           vr4,      t5,       16*16        // t40a
2967*c0909341SAndroid Build Coastguard Worker    vld           vr6,      t4,       16*16        // t55a
2968*c0909341SAndroid Build Coastguard Worker    vld           vr7,      t5,       16*24        // t48a
2969*c0909341SAndroid Build Coastguard Worker    vld           vr5,      t4,       16*24        // t47a
2970*c0909341SAndroid Build Coastguard Worker
2971*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr8,      vr0,      vr1          // t32
2972*c0909341SAndroid Build Coastguard Worker    vssub.h       vr9,      vr0,      vr1          // t39
2973*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr2,      vr3          // t63
2974*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr2,      vr3          // t56
2975*c0909341SAndroid Build Coastguard Worker    vssub.h       vr12,     vr5,      vr4          // t40
2976*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr5,      vr4          // t47
2977*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr7,      vr6          // t48
2978*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr7,      vr6          // t55
2979*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 1567
2980*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // 3784
2981*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w  vr11, vr9, vr21, vr20, vr0, vr2
2982*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w  vr11, vr9, vr20, vr21, vr1, vr3
2983*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr0,      12           // t56a
2984*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr3,      vr1,      12           // t39a
2985*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w  vr15, vr12, vr21, vr20, vr0, vr4
2986*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w  vr15, vr12, vr20, vr21, vr1, vr5
2987*c0909341SAndroid Build Coastguard Worker    vneg.w        vr0,      vr0
2988*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
2989*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr1,      12           // t55a
2990*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr0,      12           // t40a
2991*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr8,      vr13         // t32a
2992*c0909341SAndroid Build Coastguard Worker    vssub.h       vr11,     vr8,      vr13         // t47a
2993*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr3,      vr4          // t39
2994*c0909341SAndroid Build Coastguard Worker    vssub.h       vr7,      vr3,      vr4          // t40
2995*c0909341SAndroid Build Coastguard Worker    vssub.h       vr12,     vr10,     vr14         // t48a
2996*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr15,     vr10,     vr14         // t63a
2997*c0909341SAndroid Build Coastguard Worker    vssub.h       vr0,      vr2,      vr5          // t55
2998*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr2,      vr5          // t56
2999*c0909341SAndroid Build Coastguard Worker
3000*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
3001*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr0, vr7, vr20, vr20, vr8, vr13
3002*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr0, vr7, vr20, vr20, vr3, vr4
3003*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr13,     vr8,      12           // t40a
3004*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr3,      12           // t55a
3005*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr12, vr11, vr20, vr20, vr8, vr10
3006*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr12, vr11, vr20, vr20, vr3, vr14
3007*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr8,      12           // t47
3008*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr14,     vr3,      12           // t48
3009*c0909341SAndroid Build Coastguard Worker
3010*c0909341SAndroid Build Coastguard Worker    // t32a t39 t40a t47  t48  t55a t56 t63a
3011*c0909341SAndroid Build Coastguard Worker    // vr9  vr6 vr13 vr10 vr14 vr4  vr1 vr15
3012*c0909341SAndroid Build Coastguard Worker    vst           vr9,      t5,       0            // t32a
3013*c0909341SAndroid Build Coastguard Worker    vst           vr6,      t4,       0            // t39
3014*c0909341SAndroid Build Coastguard Worker    vst           vr13,     t5,       16*8         // t40a
3015*c0909341SAndroid Build Coastguard Worker    vst           vr10,     t4,       16*8         // t47
3016*c0909341SAndroid Build Coastguard Worker    vst           vr14,     t5,       16*16        // t48
3017*c0909341SAndroid Build Coastguard Worker    vst           vr4,      t4,       16*16        // t55a
3018*c0909341SAndroid Build Coastguard Worker    vst           vr1,      t5,       16*24        // t56
3019*c0909341SAndroid Build Coastguard Worker    vst           vr15,     t4,       16*24        // t63a
3020*c0909341SAndroid Build Coastguard Worker.endm // dct64_step2_lsx
3021*c0909341SAndroid Build Coastguard Worker
3022*c0909341SAndroid Build Coastguard Worker.macro dct64_step3_lsx
3023*c0909341SAndroid Build Coastguard Worker    //                t0   t1   t2   t3   t4    t5    t6    t7
3024*c0909341SAndroid Build Coastguard Worker    vld_x8 t3, 0, 16, vr2, vr3, vr7, vr8, vr11, vr12, vr16, vr17
3025*c0909341SAndroid Build Coastguard Worker    vld           vr9,      t5,       16*24    // t56
3026*c0909341SAndroid Build Coastguard Worker    vld           vr6,      t5,       16*24+16 // t57a
3027*c0909341SAndroid Build Coastguard Worker    vld           vr13,     t5,       16*24+32 // t58
3028*c0909341SAndroid Build Coastguard Worker    vld           vr10,     t5,       16*24+48 // t59a
3029*c0909341SAndroid Build Coastguard Worker    vld           vr14,     t4,       16*24-48 // t60
3030*c0909341SAndroid Build Coastguard Worker    vld           vr4,      t4,       16*24-32 // t61a
3031*c0909341SAndroid Build Coastguard Worker    vld           vr1,      t4,       16*24-16 // t62
3032*c0909341SAndroid Build Coastguard Worker    vld           vr15,     t4,       16*24    // t63a
3033*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr20,     vr2,      vr15     // c[0]
3034*c0909341SAndroid Build Coastguard Worker    vssub.h       vr21,     vr2,      vr15     // c[63]
3035*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr22,     vr3,      vr1      // c[1]
3036*c0909341SAndroid Build Coastguard Worker    vssub.h       vr23,     vr3,      vr1      // c[62]
3037*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr7,      vr4      // c[2]
3038*c0909341SAndroid Build Coastguard Worker    vssub.h       vr25,     vr7,      vr4      // c[61]
3039*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr26,     vr8,      vr14     // c[3]
3040*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr8,      vr14     // c[60]
3041*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr28,     vr11,     vr10     // c[4]
3042*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr11,     vr10     // c[59]
3043*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr30,     vr12,     vr13     // c[5]
3044*c0909341SAndroid Build Coastguard Worker    vssub.h       vr31,     vr12,     vr13     // c[58]
3045*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr2,      vr16,     vr6      // c[6]
3046*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr16,     vr6      // c[57]
3047*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr17,     vr9      // c[7]
3048*c0909341SAndroid Build Coastguard Worker    vssub.h       vr3,      vr17,     vr9      // c[56]
3049*c0909341SAndroid Build Coastguard Worker.endm // dct64_step3_lsx
3050*c0909341SAndroid Build Coastguard Worker
3051*c0909341SAndroid Build Coastguard Worker.macro dct64_step4_lsx transpose8x8, shift, start0, stride0, start1, stride1
3052*c0909341SAndroid Build Coastguard Worker    dct64_step3_lsx
3053*c0909341SAndroid Build Coastguard Worker
3054*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8
3055*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \
3056*c0909341SAndroid Build Coastguard Worker                       vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \
3057*c0909341SAndroid Build Coastguard Worker                       vr4, vr7, vr8, vr14, vr10, vr11, vr12, vr13
3058*c0909341SAndroid Build Coastguard Worker
3059*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21, \
3060*c0909341SAndroid Build Coastguard Worker                       vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21, \
3061*c0909341SAndroid Build Coastguard Worker                       vr4, vr7, vr8, vr14, vr10, vr11, vr12, vr13
3062*c0909341SAndroid Build Coastguard Worker.endif
3063*c0909341SAndroid Build Coastguard Worker
3064*c0909341SAndroid Build Coastguard Worker.ifnb \shift
3065*c0909341SAndroid Build Coastguard Worker.irp i, vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \
3066*c0909341SAndroid Build Coastguard Worker     vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3067*c0909341SAndroid Build Coastguard Worker     vsrari.h     \i,       \i,       \shift
3068*c0909341SAndroid Build Coastguard Worker.endr
3069*c0909341SAndroid Build Coastguard Worker.endif
3070*c0909341SAndroid Build Coastguard Worker
3071*c0909341SAndroid Build Coastguard Worker    vst_x8 t7, \start0, \stride0, vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1
3072*c0909341SAndroid Build Coastguard Worker
3073*c0909341SAndroid Build Coastguard Worker    vst_x8 t7, \start1, \stride1, vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3074*c0909341SAndroid Build Coastguard Worker.endm // dct64_step4_lsx
3075*c0909341SAndroid Build Coastguard Worker
3076*c0909341SAndroid Build Coastguard Worker.macro dct64_step5_lsx in0, in1, in2, in3, in4, in5, in6, in7
3077*c0909341SAndroid Build Coastguard Worker    fld.d         f4,       t0,       0
3078*c0909341SAndroid Build Coastguard Worker    fldx.d        f5,       t0,       a1
3079*c0909341SAndroid Build Coastguard Worker    fld.d         f6,       t6,       0
3080*c0909341SAndroid Build Coastguard Worker    fldx.d        f7,       t6,       a1
3081*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,       a1,       t0,    2
3082*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t6,    2
3083*c0909341SAndroid Build Coastguard Worker    fld.d         f8,       t0,       0
3084*c0909341SAndroid Build Coastguard Worker    fldx.d        f9,       t0,       a1
3085*c0909341SAndroid Build Coastguard Worker    fld.d         f10,      t6,       0
3086*c0909341SAndroid Build Coastguard Worker    fldx.d        f11,      t6,       a1
3087*c0909341SAndroid Build Coastguard Worker.irp i, vr4, vr5, vr6, vr7, vr8, vr9, vr10, vr11
3088*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   \i,      \i,       0
3089*c0909341SAndroid Build Coastguard Worker.endr
3090*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr20,     \in0,     4
3091*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr22,     \in1,     4
3092*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr24,     \in2,     4
3093*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr26,     \in3,     4
3094*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr28,     \in4,     4
3095*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr30,     \in5,     4
3096*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr2,      \in6,     4
3097*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr1,      \in7,     4
3098*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,      vr4,      vr20
3099*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,      vr5,      vr22
3100*c0909341SAndroid Build Coastguard Worker    vadd.h        vr6,      vr6,      vr24
3101*c0909341SAndroid Build Coastguard Worker    vadd.h        vr7,      vr7,      vr26
3102*c0909341SAndroid Build Coastguard Worker    vadd.h        vr8,      vr8,      vr28
3103*c0909341SAndroid Build Coastguard Worker    vadd.h        vr9,      vr9,      vr30
3104*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,     vr10,     vr2
3105*c0909341SAndroid Build Coastguard Worker    vadd.h        vr11,     vr11,     vr1
3106*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr5,      vr4,      0
3107*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr7,      vr6,      0
3108*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr9,      vr8,      0
3109*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr11,     vr10,     0
3110*c0909341SAndroid Build Coastguard Worker
3111*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr5,      t1,       0,     0
3112*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr5,      t2,       0,     1
3113*c0909341SAndroid Build Coastguard Worker    alsl.d        t1,       a1,       t1,    1
3114*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,    1
3115*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr7,      t1,       0,     0
3116*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr7,      t2,       0,     1
3117*c0909341SAndroid Build Coastguard Worker    alsl.d        t1,       a1,       t1,    1
3118*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,    1
3119*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr9,      t1,       0,     0
3120*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr9,      t2,       0,     1
3121*c0909341SAndroid Build Coastguard Worker    alsl.d        t1,       a1,       t1,    1
3122*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,    1
3123*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr11,     t1,       0,     0
3124*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr11,     t2,       0,     1
3125*c0909341SAndroid Build Coastguard Worker.endm // dct64_step5_lsx
3126*c0909341SAndroid Build Coastguard Worker
3127*c0909341SAndroid Build Coastguard Worker.macro dct_8x32_tx64_new_lsx vld_loc0, stride0, vld_loc1, stride1, rect2
3128*c0909341SAndroid Build Coastguard Worker    vld_x8 t2, \vld_loc0, \stride0, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3129*c0909341SAndroid Build Coastguard Worker
3130*c0909341SAndroid Build Coastguard Worker    dct_8x16_tx64_core_lsx \rect2
3131*c0909341SAndroid Build Coastguard Worker
3132*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr22, vr18, vr17, vr28, vr20, vr14, vr15, vr16, \
3133*c0909341SAndroid Build Coastguard Worker            vr27, vr30, vr23, vr21, vr29, vr26, vr25, vr24
3134*c0909341SAndroid Build Coastguard Worker
3135*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
3136*c0909341SAndroid Build Coastguard Worker    vst_x8 t2, \vld_loc0, \stride0, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3137*c0909341SAndroid Build Coastguard Worker
3138*c0909341SAndroid Build Coastguard Worker    vld_x8 t2, \vld_loc1, \stride1, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3139*c0909341SAndroid Build Coastguard Worker
3140*c0909341SAndroid Build Coastguard Worker    vst_x8 t2, \vld_loc1, \stride1, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3141*c0909341SAndroid Build Coastguard Worker
3142*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
3143*c0909341SAndroid Build Coastguard Worker
3144*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
3145*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      t0,       0        // 2896
3146*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3147*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
3148*c0909341SAndroid Build Coastguard Worker.endr
3149*c0909341SAndroid Build Coastguard Worker.endif
3150*c0909341SAndroid Build Coastguard Worker
3151*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       64           // 201
3152*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       68           // 4091
3153*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr0,      0
3154*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr0
3155*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr21
3156*c0909341SAndroid Build Coastguard Worker    vmul.w        vr9,      vr23,     vr21
3157*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr22,     vr20
3158*c0909341SAndroid Build Coastguard Worker    vmul.w        vr10,     vr23,     vr20
3159*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr8,      12           // t31a
3160*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr0,      12           // t16a
3161*c0909341SAndroid Build Coastguard Worker
3162*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       72           // 3035
3163*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       76           // 2751
3164*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr7,      0
3165*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr7
3166*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
3167*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
3168*c0909341SAndroid Build Coastguard Worker    vmul.w        vr0,      vr23,     vr20
3169*c0909341SAndroid Build Coastguard Worker    vmul.w        vr7,      vr22,     vr21
3170*c0909341SAndroid Build Coastguard Worker    vmul.w        vr30,     vr23,     vr21
3171*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr8,      12           // t30a
3172*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr7,      12           // t17a
3173*c0909341SAndroid Build Coastguard Worker
3174*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       80           // 1751
3175*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       84           // 3703
3176*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr4,      0
3177*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr4
3178*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr21
3179*c0909341SAndroid Build Coastguard Worker    vmul.w        vr7,      vr23,     vr21
3180*c0909341SAndroid Build Coastguard Worker    vmul.w        vr4,      vr22,     vr20
3181*c0909341SAndroid Build Coastguard Worker    vmul.w        vr19,     vr23,     vr20
3182*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr8,      12           // t29a
3183*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr4,      12           // t18a
3184*c0909341SAndroid Build Coastguard Worker
3185*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       88           // 3857
3186*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       92           // 1380
3187*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr3,      0
3188*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr3
3189*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
3190*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
3191*c0909341SAndroid Build Coastguard Worker    vmul.w        vr4,      vr23,     vr20
3192*c0909341SAndroid Build Coastguard Worker    vmul.w        vr3,      vr22,     vr21
3193*c0909341SAndroid Build Coastguard Worker    vmul.w        vr26,     vr23,     vr21
3194*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr4,      vr8,      12           // t28a
3195*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr26,     vr3,      12           // t19a
3196*c0909341SAndroid Build Coastguard Worker
3197*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       96           // 995
3198*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       100          // 3973
3199*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr2,      0
3200*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr2
3201*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr21
3202*c0909341SAndroid Build Coastguard Worker    vmul.w        vr3,      vr23,     vr21
3203*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr22,     vr20
3204*c0909341SAndroid Build Coastguard Worker    vmul.w        vr27,     vr23,     vr20
3205*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr3,      vr8,      12           // t27a
3206*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr27,     vr2,      12           // t20a
3207*c0909341SAndroid Build Coastguard Worker
3208*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       104          // 3513
3209*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       108          // 2106
3210*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr5,      0
3211*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr5
3212*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
3213*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
3214*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr23,     vr20
3215*c0909341SAndroid Build Coastguard Worker    vmul.w        vr5,      vr22,     vr21
3216*c0909341SAndroid Build Coastguard Worker    vmul.w        vr28,     vr23,     vr21
3217*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr8,      12           // t26a
3218*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr28,     vr5,      12           // t21a
3219*c0909341SAndroid Build Coastguard Worker
3220*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       112          // 2440 -> 1220
3221*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       116          // 3290 -> 1645
3222*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr6,      0
3223*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr6
3224*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr21
3225*c0909341SAndroid Build Coastguard Worker    vmul.w        vr5,      vr23,     vr21
3226*c0909341SAndroid Build Coastguard Worker    vmul.w        vr6,      vr22,     vr20
3227*c0909341SAndroid Build Coastguard Worker    vmul.w        vr25,     vr23,     vr20
3228*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr8,      12           // t25a
3229*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr6,      12           // t22a
3230*c0909341SAndroid Build Coastguard Worker
3231*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       120          // 4052
3232*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       124          // 601
3233*c0909341SAndroid Build Coastguard Worker    vsllwil.w.h   vr22,     vr1,      0
3234*c0909341SAndroid Build Coastguard Worker    vexth.w.h     vr23,     vr1
3235*c0909341SAndroid Build Coastguard Worker    vneg.w        vr21,     vr21
3236*c0909341SAndroid Build Coastguard Worker    vmul.w        vr8,      vr22,     vr20
3237*c0909341SAndroid Build Coastguard Worker    vmul.w        vr6,      vr23,     vr20
3238*c0909341SAndroid Build Coastguard Worker    vmul.w        vr1,      vr22,     vr21
3239*c0909341SAndroid Build Coastguard Worker    vmul.w        vr24,     vr23,     vr21
3240*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr8,      12           // t24a
3241*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr1,      12           // t23a
3242*c0909341SAndroid Build Coastguard Worker
3243*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr10,     vr30         // t16
3244*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr10,     vr30         // t17
3245*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr26,     vr19         // t18
3246*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr31,     vr26,     vr19         // t19
3247*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr27,     vr28         // t20
3248*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr27,     vr28         // t21
3249*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr24,     vr25         // t22
3250*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr26,     vr24,     vr25         // t23
3251*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr6,      vr5          // t24
3252*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr6,      vr5          // t25
3253*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr3,      vr2          // t26
3254*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr25,     vr3,      vr2          // t27
3255*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr5,      vr4,      vr7          // t28
3256*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr4,      vr7          // t29
3257*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr9,      vr0          // t30
3258*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr9,      vr0          // t31
3259*c0909341SAndroid Build Coastguard Worker
3260*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       16           // 799
3261*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       20           // 4017
3262*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr2, vr29, vr21, vr20, vr4, vr7
3263*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr2, vr29, vr20, vr21, vr11, vr0
3264*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr4,      12           // t30a
3265*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr0,      vr11,     12           // t17a
3266*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr8, vr21, vr20, vr4, vr9
3267*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
3268*c0909341SAndroid Build Coastguard Worker    vneg.w        vr9,      vr9
3269*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr8, vr20, vr21, vr11, vr2
3270*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr9,      vr4,      12           // t18a
3271*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr11,     12           // t29a
3272*c0909341SAndroid Build Coastguard Worker
3273*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       24           // 3406 -> 1703
3274*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       28           // 2276 -> 1138
3275*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr30, vr21, vr20, vr4, vr29
3276*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr30, vr20, vr21, vr11, vr6
3277*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr29,     vr4,      12           // t26a
3278*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr11,     12           // t21a
3279*c0909341SAndroid Build Coastguard Worker
3280*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr28, vr19, vr21, vr20, vr4, vr8
3281*c0909341SAndroid Build Coastguard Worker    vneg.w        vr4,      vr4
3282*c0909341SAndroid Build Coastguard Worker    vneg.w        vr8,      vr8
3283*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr28, vr19, vr20, vr21, vr11, vr24
3284*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr4,      12           // t22a
3285*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr11,     12           // t25a
3286*c0909341SAndroid Build Coastguard Worker
3287*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr1,      vr31         // t16a
3288*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr1,      vr31         // t19a
3289*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr19,     vr0,      vr9          // t17
3290*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr0,      vr9          // t18
3291*c0909341SAndroid Build Coastguard Worker    vssub.h       vr1,      vr26,     vr10         // t20a
3292*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr31,     vr26,     vr10         // t23a
3293*c0909341SAndroid Build Coastguard Worker    vssub.h       vr0,      vr8,      vr6          // t21
3294*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr8,      vr6          // t22
3295*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr10,     vr27,     vr25         // t24a
3296*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr27,     vr25         // t27a
3297*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr24,     vr29         // t25
3298*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr24,     vr29         // t26
3299*c0909341SAndroid Build Coastguard Worker    vssub.h       vr25,     vr3,      vr5          // t28a
3300*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr3,      vr5          // t31a
3301*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr7,      vr2          // t29
3302*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr29,     vr7,      vr2          // t30
3303*c0909341SAndroid Build Coastguard Worker
3304*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       8            // 1567
3305*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr21,     t0,       12           // 3784
3306*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr28, vr21, vr20, vr3, vr5
3307*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr28, vr20, vr21, vr11, vr2
3308*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr3,      12           // t29a
3309*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr2,      vr11,     12           // 18a
3310*c0909341SAndroid Build Coastguard Worker
3311*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr25, vr30, vr21, vr20, vr3, vr7
3312*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr25, vr30, vr20, vr21, vr11, vr24
3313*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr3,      12           // t28
3314*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr24,     vr11,     12           // t19
3315*c0909341SAndroid Build Coastguard Worker
3316*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr26, vr1, vr21, vr20, vr3, vr28
3317*c0909341SAndroid Build Coastguard Worker    vneg.w        vr3,      vr3
3318*c0909341SAndroid Build Coastguard Worker    vneg.w        vr28,     vr28
3319*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr26, vr1, vr20, vr21, vr11, vr25
3320*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr28,     vr3,      12           // t20
3321*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr11,     12           // t27
3322*c0909341SAndroid Build Coastguard Worker
3323*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr8, vr0, vr21, vr20, vr3, vr30
3324*c0909341SAndroid Build Coastguard Worker    vneg.w        vr3,      vr3
3325*c0909341SAndroid Build Coastguard Worker    vneg.w        vr30,     vr30
3326*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr8, vr0, vr20, vr21, vr11, vr1
3327*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr30,     vr3,      12           // t21a
3328*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr1,      vr11,     12           // t26a
3329*c0909341SAndroid Build Coastguard Worker
3330*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr3,      vr4,      vr31         // t16
3331*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr4,      vr31         // t23
3332*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr0,      vr19,     vr9          // t17a
3333*c0909341SAndroid Build Coastguard Worker    vssub.h       vr8,      vr19,     vr9          // t22a
3334*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr4,      vr2,      vr30         // t18
3335*c0909341SAndroid Build Coastguard Worker    vssub.h       vr31,     vr2,      vr30         // t21
3336*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr9,      vr24,     vr28         // t19a
3337*c0909341SAndroid Build Coastguard Worker    vssub.h       vr19,     vr24,     vr28         // t20a
3338*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr27,     vr10         // t24
3339*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr30,     vr27,     vr10         // t31
3340*c0909341SAndroid Build Coastguard Worker    vssub.h       vr24,     vr29,     vr6          // t25a
3341*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr28,     vr29,     vr6          // t30a
3342*c0909341SAndroid Build Coastguard Worker    vssub.h       vr10,     vr5,      vr1          // t26
3343*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr27,     vr5,      vr1          // t29
3344*c0909341SAndroid Build Coastguard Worker    vssub.h       vr6,      vr7,      vr25         // t27a
3345*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr29,     vr7,      vr25         // t28a
3346*c0909341SAndroid Build Coastguard Worker
3347*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr20,     t0,       0            // 2896
3348*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr6, vr19, vr20, vr20, vr1, vr5
3349*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr6, vr19, vr20, vr20, vr11, vr7
3350*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr5,      vr1,      12           // t20
3351*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr7,      vr11,     12           // t27
3352*c0909341SAndroid Build Coastguard Worker
3353*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr10, vr31, vr20, vr20, vr1, vr25
3354*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr10, vr31, vr20, vr20, vr11, vr6
3355*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr25,     vr1,      12           // t21a
3356*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr6,      vr11,     12           // t26a
3357*c0909341SAndroid Build Coastguard Worker
3358*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr24, vr8, vr20, vr20, vr1, vr19
3359*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr24, vr8, vr20, vr20, vr11, vr10
3360*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr19,     vr1,      12           // t22
3361*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr10,     vr11,     12           // t25
3362*c0909341SAndroid Build Coastguard Worker
3363*c0909341SAndroid Build Coastguard Worker    vmul_vmsub_w vr2, vr26, vr20, vr20, vr1, vr31
3364*c0909341SAndroid Build Coastguard Worker    vmul_vmadd_w vr2, vr26, vr20, vr20, vr11, vr8
3365*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr31,     vr1,      12           // t23a
3366*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr8,      vr11,     12           // t24a
3367*c0909341SAndroid Build Coastguard Worker
3368*c0909341SAndroid Build Coastguard Worker    // t31 t30a t29 t28a t27 t26a t25 t24a t23a t22 t21a t20 t19a t18 t17a t16
3369*c0909341SAndroid Build Coastguard Worker    // vr30 vr28 vr27 vr29 vr7 vr6 vr10 vr8 vr31 vr19 vr25 vr5 vr9 vr4 vr0 vr3
3370*c0909341SAndroid Build Coastguard Worker    vld_x8 t3, 0, 16, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18
3371*c0909341SAndroid Build Coastguard Worker
3372*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr11,     vr30         // c[0]
3373*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr11,     vr30         // c[31]
3374*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr12,     vr28         // c[1]
3375*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr12,     vr28         // c[30]
3376*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr13,     vr27         // c[2]
3377*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr13,     vr27         // c[29]
3378*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr12,     vr14,     vr29         // c[3]
3379*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr14,     vr29         // c[28]
3380*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr15,     vr7          // c[4]
3381*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr15,     vr7          // c[27]
3382*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr16,     vr6          // c[5]
3383*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr16,     vr6          // c[26]
3384*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr17,     vr10         // c[6]
3385*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr17,     vr10         // c[25]
3386*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr18,     vr8          // c[7]
3387*c0909341SAndroid Build Coastguard Worker    vssub.h       vr16,     vr18,     vr8          // c[24]
3388*c0909341SAndroid Build Coastguard Worker
3389*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 0, 16, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
3390*c0909341SAndroid Build Coastguard Worker
3391*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 384, 16, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
3392*c0909341SAndroid Build Coastguard Worker
3393*c0909341SAndroid Build Coastguard Worker    vld_x8 t3, 128, 16, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18
3394*c0909341SAndroid Build Coastguard Worker
3395*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr1,      vr11,     vr31         // c[8]
3396*c0909341SAndroid Build Coastguard Worker    vssub.h       vr2,      vr11,     vr31         // c[23]
3397*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr24,     vr12,     vr19         // c[9]
3398*c0909341SAndroid Build Coastguard Worker    vssub.h       vr26,     vr12,     vr19         // c[22]
3399*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr11,     vr13,     vr25         // c[10]
3400*c0909341SAndroid Build Coastguard Worker    vssub.h       vr30,     vr13,     vr25         // c[21]
3401*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr12,     vr14,     vr5          // c[11]
3402*c0909341SAndroid Build Coastguard Worker    vssub.h       vr28,     vr14,     vr5          // c[20]
3403*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr13,     vr15,     vr9          // c[12]
3404*c0909341SAndroid Build Coastguard Worker    vssub.h       vr27,     vr15,     vr9          // c[19]
3405*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr14,     vr16,     vr4          // c[13]
3406*c0909341SAndroid Build Coastguard Worker    vssub.h       vr29,     vr16,     vr4          // c[18]
3407*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr7,      vr17,     vr0          // c[14]
3408*c0909341SAndroid Build Coastguard Worker    vssub.h       vr15,     vr17,     vr0          // c[17]
3409*c0909341SAndroid Build Coastguard Worker    vsadd.h       vr6,      vr18,     vr3          // c[15]
3410*c0909341SAndroid Build Coastguard Worker    vssub.h       vr16,     vr18,     vr3          // c[16]
3411*c0909341SAndroid Build Coastguard Worker
3412*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 128, 16, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6
3413*c0909341SAndroid Build Coastguard Worker
3414*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 256, 16, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2
3415*c0909341SAndroid Build Coastguard Worker.endm // dct_8x32_tx64_new_lsx
3416*c0909341SAndroid Build Coastguard Worker
3417*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W64 in0, in1, in2, in3, in4, in5, in6, in7
3418*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr4,      vr10,     0
3419*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr5,      vr11,     0
3420*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr6,      vr12,     0
3421*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu vr7,      vr13,     0
3422*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr10,     vr10
3423*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr11,     vr11
3424*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr12,     vr12
3425*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu   vr13,     vr13
3426*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,      vr4,      \in0
3427*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,     vr10,     \in1
3428*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,      vr5,      \in2
3429*c0909341SAndroid Build Coastguard Worker    vadd.h        vr11,     vr11,     \in3
3430*c0909341SAndroid Build Coastguard Worker    vadd.h        vr6,      vr6,      \in4
3431*c0909341SAndroid Build Coastguard Worker    vadd.h        vr12,     vr12,     \in5
3432*c0909341SAndroid Build Coastguard Worker    vadd.h        vr7,      vr7,      \in6
3433*c0909341SAndroid Build Coastguard Worker    vadd.h        vr13,     vr13,     \in7
3434*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr10,     vr4,      0
3435*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr11,     vr5,      0
3436*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr12,     vr6,      0
3437*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr13,     vr7,      0
3438*c0909341SAndroid Build Coastguard Worker    vst           vr10,     a0,       0
3439*c0909341SAndroid Build Coastguard Worker    vst           vr11,     a0,       16
3440*c0909341SAndroid Build Coastguard Worker    vst           vr12,     a0,       32
3441*c0909341SAndroid Build Coastguard Worker    vst           vr13,     a0,       48
3442*c0909341SAndroid Build Coastguard Worker.endm
3443*c0909341SAndroid Build Coastguard Worker
3444*c0909341SAndroid Build Coastguard Worker.macro idct_dc_w64 w, h, shift
3445*c0909341SAndroid Build Coastguard Worker    ld.h          t2,       a2,       0
3446*c0909341SAndroid Build Coastguard Worker    vldi          vr0,      0x8b5
3447*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr1,      t2
3448*c0909341SAndroid Build Coastguard Worker    vldi          vr20,     0x880
3449*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr0,      vr1
3450*c0909341SAndroid Build Coastguard Worker    st.h          zero,     a2,       0
3451*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8
3452*c0909341SAndroid Build Coastguard Worker    vld           vr13,     a0,       48
3453*c0909341SAndroid Build Coastguard Worker
3454*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w)
3455*c0909341SAndroid Build Coastguard Worker    vmul.w        vr2,      vr2,      vr0
3456*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      8
3457*c0909341SAndroid Build Coastguard Worker.endif
3458*c0909341SAndroid Build Coastguard Worker
3459*c0909341SAndroid Build Coastguard Worker.if \shift>0
3460*c0909341SAndroid Build Coastguard Worker    vsrari.w      vr2,      vr2,      \shift
3461*c0909341SAndroid Build Coastguard Worker.endif
3462*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
3463*c0909341SAndroid Build Coastguard Worker    vmadd.w       vr20,     vr2,      vr0
3464*c0909341SAndroid Build Coastguard Worker    vld           vr12,     a0,       32
3465*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w  vr20,     vr20,     12
3466*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
3467*c0909341SAndroid Build Coastguard Worker.endm
3468*c0909341SAndroid Build Coastguard Worker
3469*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_64x64_8bpc_lsx
3470*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_64x64
3471*c0909341SAndroid Build Coastguard Worker
3472*c0909341SAndroid Build Coastguard Worker    idct_dc_w64 64, 64, 2
3473*c0909341SAndroid Build Coastguard Worker
3474*c0909341SAndroid Build Coastguard Worker    DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
3475*c0909341SAndroid Build Coastguard Worker
3476*c0909341SAndroid Build Coastguard Worker    li.w          t3,       63
3477*c0909341SAndroid Build Coastguard Worker.loop63:
3478*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a0,       a1
3479*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
3480*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
3481*c0909341SAndroid Build Coastguard Worker    vld           vr12,     a0,       32
3482*c0909341SAndroid Build Coastguard Worker    vld           vr13,     a0,       48
3483*c0909341SAndroid Build Coastguard Worker    DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
3484*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       -1
3485*c0909341SAndroid Build Coastguard Worker    blt           zero,     t3,       .loop63
3486*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_64X64_END
3487*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_64x64:
3488*c0909341SAndroid Build Coastguard Worker
3489*c0909341SAndroid Build Coastguard Worker    malloc_space  64*32*2+512+512
3490*c0909341SAndroid Build Coastguard Worker
3491*c0909341SAndroid Build Coastguard Worker.macro dct64x64_core1_lsx shift, rect2
3492*c0909341SAndroid Build Coastguard Worker    //addi.d        t2,       a2,       \in0
3493*c0909341SAndroid Build Coastguard Worker    //addi.d        t7,       t7,       \in1
3494*c0909341SAndroid Build Coastguard Worker    li.w          t4,       64*32*2+64
3495*c0909341SAndroid Build Coastguard Worker    add.d         t3,       sp,       t4
3496*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t3,       512
3497*c0909341SAndroid Build Coastguard Worker    add.d         t5,       t6,       zero
3498*c0909341SAndroid Build Coastguard Worker
3499*c0909341SAndroid Build Coastguard Worker    dct_8x32_tx64_new_lsx 0, 256, 128, 256, \rect2
3500*c0909341SAndroid Build Coastguard Worker
3501*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct64_coeffs
3502*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
3503*c0909341SAndroid Build Coastguard Worker
3504*c0909341SAndroid Build Coastguard Worker    //addi.d        a4,       a2,       \in2         // 32 ...
3505*c0909341SAndroid Build Coastguard Worker    // in1/31/17/15 -> t32a/33/34a/35/60/61a/62/63a
3506*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a4,       128*0        // in1
3507*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a4,       128*15       // in31
3508*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a4,       128*8        // in17
3509*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a4,       128*7        // in15
3510*c0909341SAndroid Build Coastguard Worker    la.local      a6,       idct_coeffs
3511*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
3512*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      a6,       0        // 2896
3513*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3
3514*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
3515*c0909341SAndroid Build Coastguard Worker.endr
3516*c0909341SAndroid Build Coastguard Worker.endif
3517*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*0
3518*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*15
3519*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*8
3520*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*7
3521*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3522*c0909341SAndroid Build Coastguard Worker
3523*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       48
3524*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t6,       128
3525*c0909341SAndroid Build Coastguard Worker    // in7/25/23/ 9 -> t56a/57/58a/59/36/37a/38/39a
3526*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a4,       128*3        // in7
3527*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a4,       128*12       // in25
3528*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a4,       128*11       // in23
3529*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a4,       128*4        // in9
3530*c0909341SAndroid Build Coastguard Worker    la.local      a6,       idct_coeffs
3531*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
3532*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      a6,       0        // 2896
3533*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3
3534*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
3535*c0909341SAndroid Build Coastguard Worker.endr
3536*c0909341SAndroid Build Coastguard Worker.endif
3537*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*3
3538*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*12
3539*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*11
3540*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*4
3541*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3542*c0909341SAndroid Build Coastguard Worker
3543*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       48
3544*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t6,       128
3545*c0909341SAndroid Build Coastguard Worker    // in5/27/21/11 -> t40a/41/42a/43/52/53a/54/55a
3546*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a4,       128*2        // in5
3547*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a4,       128*13       // in27
3548*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a4,       128*10       // in21
3549*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a4,       128*5        // in11
3550*c0909341SAndroid Build Coastguard Worker    la.local      a6,       idct_coeffs
3551*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
3552*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      a6,      0        // 2896
3553*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3
3554*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
3555*c0909341SAndroid Build Coastguard Worker.endr
3556*c0909341SAndroid Build Coastguard Worker.endif
3557*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*2
3558*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*13
3559*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*10
3560*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*5
3561*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3562*c0909341SAndroid Build Coastguard Worker
3563*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       48
3564*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t6,       128
3565*c0909341SAndroid Build Coastguard Worker    // in3/29/19/13 -> t48a/49/50a/51/44/45a/46/47a
3566*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a4,       128*1        // in3
3567*c0909341SAndroid Build Coastguard Worker    vld           vr1,      a4,       128*14       // in29
3568*c0909341SAndroid Build Coastguard Worker    vld           vr2,      a4,       128*9        // in19
3569*c0909341SAndroid Build Coastguard Worker    vld           vr3,      a4,       128*6        // in13
3570*c0909341SAndroid Build Coastguard Worker    la.local      a6,       idct_coeffs
3571*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx
3572*c0909341SAndroid Build Coastguard Worker    vldrepl.w     vr23,      a6,       0        // 2896
3573*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3
3574*c0909341SAndroid Build Coastguard Worker    rect2_lsx \i, vr23, \i
3575*c0909341SAndroid Build Coastguard Worker.endr
3576*c0909341SAndroid Build Coastguard Worker.endif
3577*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*1
3578*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*14
3579*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*9
3580*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a4,       128*6
3581*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3582*c0909341SAndroid Build Coastguard Worker
3583*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
3584*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t5,       16*7
3585*c0909341SAndroid Build Coastguard Worker    // t32a/t39/t40a/t47/t48/t55a/t56/t63a
3586*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3587*c0909341SAndroid Build Coastguard Worker
3588*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3589*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3590*c0909341SAndroid Build Coastguard Worker    // t33/t38a/t41/t46a/t49a/t54/t57a/t62
3591*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3592*c0909341SAndroid Build Coastguard Worker
3593*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3594*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3595*c0909341SAndroid Build Coastguard Worker    // t34a/t37/t42a/t45/t50/t53a/t58/t61a
3596*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3597*c0909341SAndroid Build Coastguard Worker
3598*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3599*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3600*c0909341SAndroid Build Coastguard Worker    // t35/t36a/t43/t44a/t51a/t52/t59a/t60
3601*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3602*c0909341SAndroid Build Coastguard Worker
3603*c0909341SAndroid Build Coastguard Worker    li.w          t4,       64*32*2+64+512
3604*c0909341SAndroid Build Coastguard Worker    add.d         t5,       t4,       sp
3605*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t5,       16*7
3606*c0909341SAndroid Build Coastguard Worker    dct64_step4_lsx transpose8x8, \shift, 0, 128, 112, 128
3607*c0909341SAndroid Build Coastguard Worker
3608*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3609*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3610*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3611*c0909341SAndroid Build Coastguard Worker    dct64_step4_lsx transpose8x8, \shift, 16, 128, 96, 128
3612*c0909341SAndroid Build Coastguard Worker
3613*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3614*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3615*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3616*c0909341SAndroid Build Coastguard Worker    dct64_step4_lsx transpose8x8, \shift, 32, 128, 80, 128
3617*c0909341SAndroid Build Coastguard Worker
3618*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3619*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3620*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3621*c0909341SAndroid Build Coastguard Worker    dct64_step4_lsx transpose8x8, \shift, 48, 128, 64, 128
3622*c0909341SAndroid Build Coastguard Worker.endm
3623*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
3624*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
3625*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       sp,       64
3626*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       0
3627*c0909341SAndroid Build Coastguard Worker    addi.d        a4,       a2,       64
3628*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x64:
3629*c0909341SAndroid Build Coastguard Worker    ld.h          a5,       t8,       0
3630*c0909341SAndroid Build Coastguard Worker    addi.d        t8,       t8,       2
3631*c0909341SAndroid Build Coastguard Worker    dct64x64_core1_lsx 2, no_rect2
3632*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
3633*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       128*8
3634*c0909341SAndroid Build Coastguard Worker    addi.d        a4,       a4,       16
3635*c0909341SAndroid Build Coastguard Worker    bge           a3,       a5,       .DCT_DCT_EOB_64x64
3636*c0909341SAndroid Build Coastguard Worker
3637*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
3638*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
3639*c0909341SAndroid Build Coastguard Worker
3640*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       4
3641*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x64_END
3642*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*3+64
3643*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3644*c0909341SAndroid Build Coastguard Worker.rept 4
3645*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3646*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3647*c0909341SAndroid Build Coastguard Worker    addi.d t0, t0, 256
3648*c0909341SAndroid Build Coastguard Worker.endr
3649*c0909341SAndroid Build Coastguard Worker
3650*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       2
3651*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x64_END
3652*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*2+64
3653*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3654*c0909341SAndroid Build Coastguard Worker.rept 4
3655*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3656*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3657*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       256
3658*c0909341SAndroid Build Coastguard Worker.endr
3659*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
3660*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x64_END
3661*c0909341SAndroid Build Coastguard Worker
3662*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*1+64
3663*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3664*c0909341SAndroid Build Coastguard Worker.rept 4
3665*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3666*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3667*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       256
3668*c0909341SAndroid Build Coastguard Worker.endr
3669*c0909341SAndroid Build Coastguard Worker
3670*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x64_END:
3671*c0909341SAndroid Build Coastguard Worker
3672*c0909341SAndroid Build Coastguard Worker.macro dct64x64_core2_lsx in0, in1, rect2
3673*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64+\in0
3674*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       sp,       64+\in0
3675*c0909341SAndroid Build Coastguard Worker    li.w          t4,       64*32*2+64
3676*c0909341SAndroid Build Coastguard Worker    add.d         t3,       sp,       t4
3677*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t3,       512
3678*c0909341SAndroid Build Coastguard Worker    add.d         t5,       t6,       zero
3679*c0909341SAndroid Build Coastguard Worker
3680*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       1024
3681*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       1024
3682*c0909341SAndroid Build Coastguard Worker    dct_8x32_tx64_new_lsx -2048, 512, 256-2048, 512, \rect2
3683*c0909341SAndroid Build Coastguard Worker
3684*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct64_coeffs
3685*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64+64*2+\in0
3686*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t2,       256*7
3687*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       256
3688*c0909341SAndroid Build Coastguard Worker
3689*c0909341SAndroid Build Coastguard Worker    vld           vr0,      t2,       256*0        // in1
3690*c0909341SAndroid Build Coastguard Worker    vld           vr1,      t4,       256*7        // in31
3691*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t4,       256*0        // in17
3692*c0909341SAndroid Build Coastguard Worker    vld           vr3,      t2,       256*7        // in15
3693*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3694*c0909341SAndroid Build Coastguard Worker
3695*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       48
3696*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t6,       128
3697*c0909341SAndroid Build Coastguard Worker    vld           vr0,      t2,       256*3        // in7
3698*c0909341SAndroid Build Coastguard Worker    vld           vr1,      t4,       256*4        // in25
3699*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t4,       256*3        // in23
3700*c0909341SAndroid Build Coastguard Worker    vld           vr3,      t2,       256*4        // in9
3701*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3702*c0909341SAndroid Build Coastguard Worker
3703*c0909341SAndroid Build Coastguard Worker    addi.d        t0,        t0,       48
3704*c0909341SAndroid Build Coastguard Worker    addi.d        t6,        t6,       128
3705*c0909341SAndroid Build Coastguard Worker    vld           vr0,       t2,       256*2       // in5
3706*c0909341SAndroid Build Coastguard Worker    vld           vr1,       t4,       256*5       // in27
3707*c0909341SAndroid Build Coastguard Worker    vld           vr2,       t4,       256*2       // in21
3708*c0909341SAndroid Build Coastguard Worker    vld           vr3,       t2,       256*5       // in11
3709*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3710*c0909341SAndroid Build Coastguard Worker
3711*c0909341SAndroid Build Coastguard Worker    addi.d        t0,        t0,       48
3712*c0909341SAndroid Build Coastguard Worker    addi.d        t6,        t6,       128
3713*c0909341SAndroid Build Coastguard Worker    vld           vr0,       t2,       256*1       // in3
3714*c0909341SAndroid Build Coastguard Worker    vld           vr1,       t4,       256*6       // in29
3715*c0909341SAndroid Build Coastguard Worker    vld           vr2,       t4,       256*1       // in19
3716*c0909341SAndroid Build Coastguard Worker    vld           vr3,       t2,       256*6       // in13
3717*c0909341SAndroid Build Coastguard Worker    dct64_step1_lsx
3718*c0909341SAndroid Build Coastguard Worker
3719*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs
3720*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t5,       16*7
3721*c0909341SAndroid Build Coastguard Worker    // t32a/t39/t40a/t47/t48/t55a/t56/t63a
3722*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3723*c0909341SAndroid Build Coastguard Worker
3724*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3725*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3726*c0909341SAndroid Build Coastguard Worker    // t33/t38a/t41/t46a/t49a/t54/t57a/t62
3727*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3728*c0909341SAndroid Build Coastguard Worker
3729*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3730*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3731*c0909341SAndroid Build Coastguard Worker    // t34a/t37/t42a/t45/t50/t53a/t58/t61a
3732*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3733*c0909341SAndroid Build Coastguard Worker
3734*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3735*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16
3736*c0909341SAndroid Build Coastguard Worker    // t35/t36a/t43/t44a/t51a/t52/t59a/t60
3737*c0909341SAndroid Build Coastguard Worker    dct64_step2_lsx
3738*c0909341SAndroid Build Coastguard Worker
3739*c0909341SAndroid Build Coastguard Worker    li.w          t4,       64*32*2+64+512
3740*c0909341SAndroid Build Coastguard Worker    add.d         t5,       t4,       sp
3741*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t5,       16*7
3742*c0909341SAndroid Build Coastguard Worker    addi.d        a0,       a0,       \in1
3743*c0909341SAndroid Build Coastguard Worker    // 0 - 7, 56 -63
3744*c0909341SAndroid Build Coastguard Worker    dct64_step3_lsx
3745*c0909341SAndroid Build Coastguard Worker    li.w          t8,       0
3746*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3747*c0909341SAndroid Build Coastguard Worker    add.d         t0,       a0,       t0
3748*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,      1
3749*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3750*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3751*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1
3752*c0909341SAndroid Build Coastguard Worker    li.w          t8,       56
3753*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3754*c0909341SAndroid Build Coastguard Worker    add.d         t0,       a0,       t0
3755*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,      1
3756*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3757*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3758*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3759*c0909341SAndroid Build Coastguard Worker
3760*c0909341SAndroid Build Coastguard Worker    // 8 - 15, 48 - 55
3761*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3762*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3763*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3764*c0909341SAndroid Build Coastguard Worker    dct64_step3_lsx
3765*c0909341SAndroid Build Coastguard Worker    li.w          t8,       8
3766*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3767*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3768*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3769*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3770*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3771*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1
3772*c0909341SAndroid Build Coastguard Worker    li.w          t8,       48
3773*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3774*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3775*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3776*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3777*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3778*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3779*c0909341SAndroid Build Coastguard Worker
3780*c0909341SAndroid Build Coastguard Worker    // 16 - 23, 40 - 47
3781*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3782*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3783*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3784*c0909341SAndroid Build Coastguard Worker    dct64_step3_lsx
3785*c0909341SAndroid Build Coastguard Worker    li.w          t8,       16
3786*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3787*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3788*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3789*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3790*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3791*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1
3792*c0909341SAndroid Build Coastguard Worker    li.w          t8,       40
3793*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3794*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3795*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3796*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3797*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3798*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3799*c0909341SAndroid Build Coastguard Worker
3800*c0909341SAndroid Build Coastguard Worker    // 24 - 31, 32 - 39
3801*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
3802*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       -16*8
3803*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       -16*8
3804*c0909341SAndroid Build Coastguard Worker    dct64_step3_lsx
3805*c0909341SAndroid Build Coastguard Worker    li.w          t8,       24
3806*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3807*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3808*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3809*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3810*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3811*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1
3812*c0909341SAndroid Build Coastguard Worker    li.w          t8,       32
3813*c0909341SAndroid Build Coastguard Worker    mul.w         t0,       t8,       a1
3814*c0909341SAndroid Build Coastguard Worker    add.d         t0,       t0,       a0
3815*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a1,       t0,     1
3816*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t0,       0
3817*c0909341SAndroid Build Coastguard Worker    add.d         t2,       t0,       a1
3818*c0909341SAndroid Build Coastguard Worker    dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21
3819*c0909341SAndroid Build Coastguard Worker.endm
3820*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*0, 0, no_rect2
3821*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*1, 8, no_rect2
3822*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*2, 8, no_rect2
3823*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*3, 8, no_rect2
3824*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*4, 8, no_rect2
3825*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*5, 8, no_rect2
3826*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*6, 8, no_rect2
3827*c0909341SAndroid Build Coastguard Worker    dct64x64_core2_lsx 16*7, 8, no_rect2
3828*c0909341SAndroid Build Coastguard Worker
3829*c0909341SAndroid Build Coastguard Worker    free_space 64*32*2+512+512
3830*c0909341SAndroid Build Coastguard Worker.DCT_DCT_64X64_END:
3831*c0909341SAndroid Build Coastguard Workerendfunc
3832*c0909341SAndroid Build Coastguard Worker
3833*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_64x32_8bpc_lsx
3834*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_64x32
3835*c0909341SAndroid Build Coastguard Worker
3836*c0909341SAndroid Build Coastguard Worker    idct_dc_w64 64, 32, 1
3837*c0909341SAndroid Build Coastguard Worker
3838*c0909341SAndroid Build Coastguard Worker    DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
3839*c0909341SAndroid Build Coastguard Worker
3840*c0909341SAndroid Build Coastguard Worker    li.w          t3,       31
3841*c0909341SAndroid Build Coastguard Worker.loop31:
3842*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a0,       a1
3843*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
3844*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
3845*c0909341SAndroid Build Coastguard Worker    vld           vr12,     a0,       32
3846*c0909341SAndroid Build Coastguard Worker    vld           vr13,     a0,       48
3847*c0909341SAndroid Build Coastguard Worker    DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
3848*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       -1
3849*c0909341SAndroid Build Coastguard Worker    blt           zero,     t3,       .loop31
3850*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_64X32_END
3851*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_64x32:
3852*c0909341SAndroid Build Coastguard Worker    malloc_space  64*32*2+512+512
3853*c0909341SAndroid Build Coastguard Worker
3854*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
3855*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
3856*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       sp,       64
3857*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       0
3858*c0909341SAndroid Build Coastguard Worker    addi.d        a4,       a2,       64
3859*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x32:
3860*c0909341SAndroid Build Coastguard Worker    ld.h          a5,       t8,       0
3861*c0909341SAndroid Build Coastguard Worker    addi.d        t8,       t8,       2
3862*c0909341SAndroid Build Coastguard Worker    dct64x64_core1_lsx 1, rect2_lsx
3863*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
3864*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       128*8
3865*c0909341SAndroid Build Coastguard Worker    addi.d        a4,       a4,       16
3866*c0909341SAndroid Build Coastguard Worker    bge           a3,       a5,       .DCT_DCT_EOB_64x32
3867*c0909341SAndroid Build Coastguard Worker
3868*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_32x32
3869*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
3870*c0909341SAndroid Build Coastguard Worker
3871*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       4
3872*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x32_END
3873*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*3+64
3874*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3875*c0909341SAndroid Build Coastguard Worker.rept 4
3876*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3877*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3878*c0909341SAndroid Build Coastguard Worker    addi.d t0, t0, 256
3879*c0909341SAndroid Build Coastguard Worker.endr
3880*c0909341SAndroid Build Coastguard Worker
3881*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       2
3882*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x32_END
3883*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*2+64
3884*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3885*c0909341SAndroid Build Coastguard Worker.rept 4
3886*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3887*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3888*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       256
3889*c0909341SAndroid Build Coastguard Worker.endr
3890*c0909341SAndroid Build Coastguard Worker
3891*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
3892*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_64x32_END
3893*c0909341SAndroid Build Coastguard Worker    li.d          t1,       1024*1+64
3894*c0909341SAndroid Build Coastguard Worker    add.d         t0,       sp,       t1
3895*c0909341SAndroid Build Coastguard Worker.rept 4
3896*c0909341SAndroid Build Coastguard Worker    vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \
3897*c0909341SAndroid Build Coastguard Worker            vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
3898*c0909341SAndroid Build Coastguard Worker    addi.d        t0,       t0,       256
3899*c0909341SAndroid Build Coastguard Worker.endr
3900*c0909341SAndroid Build Coastguard Worker
3901*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x32_END:
3902*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
3903*c0909341SAndroid Build Coastguard Worker    li.w          t4,       64*32*2+64
3904*c0909341SAndroid Build Coastguard Worker    add.d         t3,       sp,       t4
3905*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       sp,       64
3906*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       1024
3907*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       1024
3908*c0909341SAndroid Build Coastguard Worker.rept 8
3909*c0909341SAndroid Build Coastguard Worker    vld_x8 t2, 0, 256, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3910*c0909341SAndroid Build Coastguard Worker
3911*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t2,       1024
3912*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       1024
3913*c0909341SAndroid Build Coastguard Worker
3914*c0909341SAndroid Build Coastguard Worker    vld_x8 t4, 0, 256, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
3915*c0909341SAndroid Build Coastguard Worker
3916*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx no_rect2
3917*c0909341SAndroid Build Coastguard Worker
3918*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
3919*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
3920*c0909341SAndroid Build Coastguard Worker
3921*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t2,       128
3922*c0909341SAndroid Build Coastguard Worker    vld_x8 t4, 0, 256, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3923*c0909341SAndroid Build Coastguard Worker
3924*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       1024
3925*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       1024
3926*c0909341SAndroid Build Coastguard Worker
3927*c0909341SAndroid Build Coastguard Worker    vld_x8 t4, 0, 256, vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
3928*c0909341SAndroid Build Coastguard Worker
3929*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t5, t3, 0, 128, 16, -2048, 1024, -1024, 0, 128, , 4
3930*c0909341SAndroid Build Coastguard Worker
3931*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       16
3932*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       16
3933*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       16
3934*c0909341SAndroid Build Coastguard Worker.endr
3935*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
3936*c0909341SAndroid Build Coastguard Worker    li.w          t3,       32
3937*c0909341SAndroid Build Coastguard Worker.loop32:
3938*c0909341SAndroid Build Coastguard Worker    vld           vr10,     a0,       0
3939*c0909341SAndroid Build Coastguard Worker    vld           vr11,     a0,       16
3940*c0909341SAndroid Build Coastguard Worker    vld           vr12,     a0,       32
3941*c0909341SAndroid Build Coastguard Worker    vld           vr13,     a0,       48
3942*c0909341SAndroid Build Coastguard Worker    vld_x8 t2, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
3943*c0909341SAndroid Build Coastguard Worker    DST_ADD_W64 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
3944*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a0,       a1
3945*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       128
3946*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       -1
3947*c0909341SAndroid Build Coastguard Worker    blt           zero,     t3,       .loop32
3948*c0909341SAndroid Build Coastguard Worker
3949*c0909341SAndroid Build Coastguard Worker    free_space  64*32*2+512+512
3950*c0909341SAndroid Build Coastguard Worker.DCT_DCT_64X32_END:
3951*c0909341SAndroid Build Coastguard Workerendfunc
3952*c0909341SAndroid Build Coastguard Worker
3953*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8_H32 in0
3954*c0909341SAndroid Build Coastguard Worker    vld           vr4,      t3,       0
3955*c0909341SAndroid Build Coastguard Worker    vld           vr5,      t3,       16
3956*c0909341SAndroid Build Coastguard Worker    vld           vr6,      t3,       32
3957*c0909341SAndroid Build Coastguard Worker    vld           vr7,      t3,       48
3958*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr4, vr5, vr6, vr7
3959*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       64
3960*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
3961*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,     2
3962*c0909341SAndroid Build Coastguard Worker    vld           vr4,      t3,       0
3963*c0909341SAndroid Build Coastguard Worker    vld           vr5,      t3,       16
3964*c0909341SAndroid Build Coastguard Worker    vld           vr6,      t3,       32
3965*c0909341SAndroid Build Coastguard Worker    vld           vr7,      t3,       48
3966*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr4, vr5, vr6, vr7
3967*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       \in0
3968*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
3969*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,     2
3970*c0909341SAndroid Build Coastguard Worker.endm
3971*c0909341SAndroid Build Coastguard Worker
3972*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_8x32_8bpc_lsx
3973*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_8x32
3974*c0909341SAndroid Build Coastguard Worker
3975*c0909341SAndroid Build Coastguard Worker    idct_dc 8, 32, 2
3976*c0909341SAndroid Build Coastguard Worker
3977*c0909341SAndroid Build Coastguard Worker    DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20
3978*c0909341SAndroid Build Coastguard Worker.rept 7
3979*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
3980*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
3981*c0909341SAndroid Build Coastguard Worker
3982*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr20, vr20, vr20, vr20
3983*c0909341SAndroid Build Coastguard Worker.endr
3984*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_8X32_END
3985*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x32:
3986*c0909341SAndroid Build Coastguard Worker    malloc_space 512
3987*c0909341SAndroid Build Coastguard Worker
3988*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_8x32
3989*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
3990*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       a2,       0
3991*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_8x32:
3992*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
3993*c0909341SAndroid Build Coastguard Worker    addi.d        t8,       t8,       2
3994*c0909341SAndroid Build Coastguard Worker
3995*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
3996*c0909341SAndroid Build Coastguard Worker
3997*c0909341SAndroid Build Coastguard Worker    inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h
3998*c0909341SAndroid Build Coastguard Worker
3999*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
4000*c0909341SAndroid Build Coastguard Worker    vsrari.h      \i,       \i,       2
4001*c0909341SAndroid Build Coastguard Worker.endr
4002*c0909341SAndroid Build Coastguard Worker
4003*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
4004*c0909341SAndroid Build Coastguard Worker    vst_x8 a2, 0, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4005*c0909341SAndroid Build Coastguard Worker
4006*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4007*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4008*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
4009*c0909341SAndroid Build Coastguard Worker
4010*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
4011*c0909341SAndroid Build Coastguard Worker
4012*c0909341SAndroid Build Coastguard Worker    addi.d        a2,       a2,       16
4013*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
4014*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_8x32
4015*c0909341SAndroid Build Coastguard Worker
4016*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_8x32
4017*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
4018*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       4
4019*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_8x32_END
4020*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+384, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4021*c0909341SAndroid Build Coastguard Worker
4022*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       2
4023*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_8x32_END
4024*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+256, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4025*c0909341SAndroid Build Coastguard Worker
4026*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
4027*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_8x32_END
4028*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+128, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4029*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_8x32_END:
4030*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       sp,       64
4031*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
4032*c0909341SAndroid Build Coastguard Worker
4033*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4034*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4035*c0909341SAndroid Build Coastguard Worker
4036*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
4037*c0909341SAndroid Build Coastguard Worker
4038*c0909341SAndroid Build Coastguard Worker    vst_x16 t3, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4039*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4040*c0909341SAndroid Build Coastguard Worker
4041*c0909341SAndroid Build Coastguard Worker    vld_x16 t2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4042*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
4043*c0909341SAndroid Build Coastguard Worker
4044*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t2, t3, 0, 256, 32, 0, 128, 256, 384, 16, , 4
4045*c0909341SAndroid Build Coastguard Worker
4046*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
4047*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
4048*c0909341SAndroid Build Coastguard Worker
4049*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8_H32 320
4050*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8_H32 448
4051*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8_H32 192
4052*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8_H32 0
4053*c0909341SAndroid Build Coastguard Worker
4054*c0909341SAndroid Build Coastguard Worker    free_space 512
4055*c0909341SAndroid Build Coastguard Worker.DCT_DCT_8X32_END:
4056*c0909341SAndroid Build Coastguard Workerendfunc
4057*c0909341SAndroid Build Coastguard Worker
4058*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_identity_identity_8x32_8bpc_lsx
4059*c0909341SAndroid Build Coastguard Worker    la.local      t7,       eob_8x32
4060*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
4061*c0909341SAndroid Build Coastguard Worker
4062*c0909341SAndroid Build Coastguard Worker.IDENTITY_IDENTITY_EOB_8x32:
4063*c0909341SAndroid Build Coastguard Worker    ld.h          t6,       t7,       0
4064*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       2
4065*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
4066*c0909341SAndroid Build Coastguard Worker
4067*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
4068*c0909341SAndroid Build Coastguard Worker    vst_x8 a2, 0, 64, vr23, vr23, vr23, vr23, vr23, vr23, vr23, vr23
4069*c0909341SAndroid Build Coastguard Worker
4070*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
4071*c0909341SAndroid Build Coastguard Worker    vsrari.h       \i,       \i,       1
4072*c0909341SAndroid Build Coastguard Worker.endr
4073*c0909341SAndroid Build Coastguard Worker
4074*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4075*c0909341SAndroid Build Coastguard Worker                   vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, \
4076*c0909341SAndroid Build Coastguard Worker                   vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4077*c0909341SAndroid Build Coastguard Worker
4078*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
4079*c0909341SAndroid Build Coastguard Worker    vsrari.h       \i,       \i,       2
4080*c0909341SAndroid Build Coastguard Worker.endr
4081*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr16, vr17, vr18, vr19
4082*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
4083*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
4084*c0909341SAndroid Build Coastguard Worker
4085*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W8 vr20, vr21, vr22, vr23
4086*c0909341SAndroid Build Coastguard Worker    add.d         a0,       a1,       a0
4087*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
4088*c0909341SAndroid Build Coastguard Worker
4089*c0909341SAndroid Build Coastguard Worker    addi.d        a2,       a2,       16
4090*c0909341SAndroid Build Coastguard Worker    bge           a3,       t6,       .IDENTITY_IDENTITY_EOB_8x32
4091*c0909341SAndroid Build Coastguard Workerendfunc
4092*c0909341SAndroid Build Coastguard Worker
4093*c0909341SAndroid Build Coastguard Worker.macro def_fn_16x4_base txfm
4094*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm\()add_16x4_lsx
4095*c0909341SAndroid Build Coastguard Worker    vld_x8 a2, 0, 16, vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14
4096*c0909341SAndroid Build Coastguard Worker
4097*c0909341SAndroid Build Coastguard Worker.ifc \txfm, identity_
4098*c0909341SAndroid Build Coastguard Worker    li.w          t0,       1697
4099*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr20,     t0
4100*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14
4101*c0909341SAndroid Build Coastguard Worker    inv_identity16_lsx \i, vr20, \i, \i, .8h
4102*c0909341SAndroid Build Coastguard Worker.endr
4103*c0909341SAndroid Build Coastguard Worker
4104*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr1,      vr0,      vr0
4105*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr3,      vr2,      vr2
4106*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr5,      vr4,      vr4
4107*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr7,      vr6,      vr6
4108*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr9,      vr8,      vr8
4109*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr11,     vr10,     vr10
4110*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr13,     vr12,     vr12
4111*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr15,     vr14,     vr14
4112*c0909341SAndroid Build Coastguard Worker.else
4113*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr1,      vr0,      vr0
4114*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr3,      vr2,      vr2
4115*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr5,      vr4,      vr4
4116*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr7,      vr6,      vr6
4117*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr9,      vr8,      vr8
4118*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr11,     vr10,     vr10
4119*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr13,     vr12,     vr12
4120*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr15,     vr14,     vr14
4121*c0909341SAndroid Build Coastguard Worker
4122*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
4123*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t7,       0
4124*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
4125*c0909341SAndroid Build Coastguard Worker.endif
4126*c0909341SAndroid Build Coastguard Worker
4127*c0909341SAndroid Build Coastguard Worker    vxor.v        vr23,     vr23,     vr23
4128*c0909341SAndroid Build Coastguard Worker    vst_x8 a2, 0, 16, vr23, vr23, vr23, vr23, vr23, vr23, vr23, vr23
4129*c0909341SAndroid Build Coastguard Worker
4130*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x4_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr0, vr1, \
4131*c0909341SAndroid Build Coastguard Worker                       vr2, vr3, vr16, vr17, vr18, vr19, vr20, vr21
4132*c0909341SAndroid Build Coastguard Worker
4133*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x4_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, vr4, \
4134*c0909341SAndroid Build Coastguard Worker                       vr5, vr6, vr7, vr16, vr17, vr18, vr19, vr20, vr21
4135*c0909341SAndroid Build Coastguard Worker
4136*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr0,      vr0,      1
4137*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr1,      vr1,      1
4138*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr2,      vr2,      1
4139*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr3,      vr3,      1
4140*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
4141*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
4142*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
4143*c0909341SAndroid Build Coastguard Worker
4144*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr8,      vr0,      4
4145*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr9,      vr1,      4
4146*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr10,     vr2,      4
4147*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr11,     vr3,      4
4148*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr0,      vr4,      1
4149*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr1,      vr5,      1
4150*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr2,      vr6,      1
4151*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr3,      vr7,      1
4152*c0909341SAndroid Build Coastguard Worker
4153*c0909341SAndroid Build Coastguard Worker    move          t6,       ra
4154*c0909341SAndroid Build Coastguard Worker    jirl          ra,       t8,       0
4155*c0909341SAndroid Build Coastguard Worker    move          ra,       t6
4156*c0909341SAndroid Build Coastguard Worker
4157*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr16,     vr0,      4
4158*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr17,     vr1,      4
4159*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr18,     vr2,      4
4160*c0909341SAndroid Build Coastguard Worker    vsrari.h      vr19,     vr3,      4
4161*c0909341SAndroid Build Coastguard Worker
4162*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4163*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr8, vr16, vr9, vr17, vr10, vr18, vr11, vr19
4164*c0909341SAndroid Build Coastguard Workerendfuncl
4165*c0909341SAndroid Build Coastguard Worker.endm
4166*c0909341SAndroid Build Coastguard Worker
4167*c0909341SAndroid Build Coastguard Workerdef_fn_16x4_base identity_
4168*c0909341SAndroid Build Coastguard Workerdef_fn_16x4_base
4169*c0909341SAndroid Build Coastguard Worker
4170*c0909341SAndroid Build Coastguard Worker.macro fn_16x4 txfm1, txfm2
4171*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x4_8bpc_lsx
4172*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
4173*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_16x4
4174*c0909341SAndroid Build Coastguard Worker
4175*c0909341SAndroid Build Coastguard Worker    idct_dc 16, 4, 1
4176*c0909341SAndroid Build Coastguard Worker
4177*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \
4178*c0909341SAndroid Build Coastguard Worker                vr20, vr20, vr20, vr20, vr20
4179*c0909341SAndroid Build Coastguard Worker    b             .\txfm1\()_\txfm2\()_16x4_END
4180*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x4:
4181*c0909341SAndroid Build Coastguard Worker.endif
4182*c0909341SAndroid Build Coastguard Worker
4183*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity
4184*c0909341SAndroid Build Coastguard Worker    la.local     t7,    inv_\txfm1\()_4h_x16_lsx
4185*c0909341SAndroid Build Coastguard Worker.endif
4186*c0909341SAndroid Build Coastguard Worker    la.local     t8,    inv_\txfm2\()_8h_x4_lsx
4187*c0909341SAndroid Build Coastguard Worker
4188*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
4189*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_identity_add_16x4_lsx
4190*c0909341SAndroid Build Coastguard Worker.else
4191*c0909341SAndroid Build Coastguard Worker    b            inv_txfm_add_16x4_lsx
4192*c0909341SAndroid Build Coastguard Worker.endif
4193*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x4_END:
4194*c0909341SAndroid Build Coastguard Workerendfunc
4195*c0909341SAndroid Build Coastguard Worker.endm
4196*c0909341SAndroid Build Coastguard Worker
4197*c0909341SAndroid Build Coastguard Workerfn_16x4 dct, dct
4198*c0909341SAndroid Build Coastguard Workerfn_16x4 identity, identity
4199*c0909341SAndroid Build Coastguard Workerfn_16x4 adst, dct
4200*c0909341SAndroid Build Coastguard Worker
4201*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W16_H32 in0
4202*c0909341SAndroid Build Coastguard Worker    vld           vr14,     t3,       0
4203*c0909341SAndroid Build Coastguard Worker    vld           vr15,     t3,       16
4204*c0909341SAndroid Build Coastguard Worker    vld           vr16,     t3,       32
4205*c0909341SAndroid Build Coastguard Worker    vld           vr17,     t3,       48
4206*c0909341SAndroid Build Coastguard Worker    vld           vr18,     t5,       0
4207*c0909341SAndroid Build Coastguard Worker    vld           vr19,     t5,       16
4208*c0909341SAndroid Build Coastguard Worker    vld           vr20,     t5,       32
4209*c0909341SAndroid Build Coastguard Worker    vld           vr21,     t5,       48
4210*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, \
4211*c0909341SAndroid Build Coastguard Worker                vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, 4
4212*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21
4213*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
4214*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,    2
4215*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       64
4216*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       64
4217*c0909341SAndroid Build Coastguard Worker    vld           vr14,     t3,       0
4218*c0909341SAndroid Build Coastguard Worker    vld           vr15,     t3,       16
4219*c0909341SAndroid Build Coastguard Worker    vld           vr16,     t3,       32
4220*c0909341SAndroid Build Coastguard Worker    vld           vr17,     t3,       48
4221*c0909341SAndroid Build Coastguard Worker    vld           vr18,     t5,       0
4222*c0909341SAndroid Build Coastguard Worker    vld           vr19,     t5,       16
4223*c0909341SAndroid Build Coastguard Worker    vld           vr20,     t5,       32
4224*c0909341SAndroid Build Coastguard Worker    vld           vr21,     t5,       48
4225*c0909341SAndroid Build Coastguard Worker    vsrari_h_x8 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, \
4226*c0909341SAndroid Build Coastguard Worker                vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, 4
4227*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21
4228*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
4229*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       t2,    2
4230*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       \in0
4231*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       sp,       \in0+512
4232*c0909341SAndroid Build Coastguard Worker.endm
4233*c0909341SAndroid Build Coastguard Worker
4234*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_16x32_8bpc_lsx
4235*c0909341SAndroid Build Coastguard Worker    bnez          a3,       .NO_HAS_DCONLY_16x32
4236*c0909341SAndroid Build Coastguard Worker
4237*c0909341SAndroid Build Coastguard Worker    idct_dc 16, 32, 1
4238*c0909341SAndroid Build Coastguard Worker
4239*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \
4240*c0909341SAndroid Build Coastguard Worker                    vr20, vr20, vr20, vr20, vr20
4241*c0909341SAndroid Build Coastguard Worker.rept 7
4242*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     2
4243*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,     1
4244*c0909341SAndroid Build Coastguard Worker
4245*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20
4246*c0909341SAndroid Build Coastguard Worker.endr
4247*c0909341SAndroid Build Coastguard Worker    b             .DCT_DCT_16x32_END
4248*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x32:
4249*c0909341SAndroid Build Coastguard Worker    malloc_space 512+512
4250*c0909341SAndroid Build Coastguard Worker
4251*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
4252*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_16x32
4253*c0909341SAndroid Build Coastguard Worker
4254*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_16x32:
4255*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
4256*c0909341SAndroid Build Coastguard Worker    addi.d        t8,       t8,       2
4257*c0909341SAndroid Build Coastguard Worker    vld_x16 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4258*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4259*c0909341SAndroid Build Coastguard Worker
4260*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
4261*c0909341SAndroid Build Coastguard Worker.irp i, 0, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960
4262*c0909341SAndroid Build Coastguard Worker    vst           vr31,     a2,       \i
4263*c0909341SAndroid Build Coastguard Worker.endr
4264*c0909341SAndroid Build Coastguard Worker
4265*c0909341SAndroid Build Coastguard Worker    li.w          t0,       2896
4266*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w  vr23,     t0
4267*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4268*c0909341SAndroid Build Coastguard Worker     vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4269*c0909341SAndroid Build Coastguard Worker    rect2_lsx   \i, vr23, \i
4270*c0909341SAndroid Build Coastguard Worker.endr
4271*c0909341SAndroid Build Coastguard Worker
4272*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
4273*c0909341SAndroid Build Coastguard Worker
4274*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4275*c0909341SAndroid Build Coastguard Worker                       vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4276*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
4277*c0909341SAndroid Build Coastguard Worker
4278*c0909341SAndroid Build Coastguard Worker    LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
4279*c0909341SAndroid Build Coastguard Worker                       vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \
4280*c0909341SAndroid Build Coastguard Worker                       vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23
4281*c0909341SAndroid Build Coastguard Worker
4282*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4283*c0909341SAndroid Build Coastguard Worker    vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4284*c0909341SAndroid Build Coastguard Worker    vsrari.h       \i,       \i,       1
4285*c0909341SAndroid Build Coastguard Worker.endr
4286*c0909341SAndroid Build Coastguard Worker
4287*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7,
4288*c0909341SAndroid Build Coastguard Worker    vst_x8 t3, 512, 16, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4289*c0909341SAndroid Build Coastguard Worker
4290*c0909341SAndroid Build Coastguard Worker    addi.d        a2,       a2,       16
4291*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       128
4292*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_16x32
4293*c0909341SAndroid Build Coastguard Worker
4294*c0909341SAndroid Build Coastguard Worker    la.local      t8,       eob_16x32
4295*c0909341SAndroid Build Coastguard Worker    vxor.v        vr31,     vr31,     vr31
4296*c0909341SAndroid Build Coastguard Worker
4297*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       4
4298*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_16x32_END
4299*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+384, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4300*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+896, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4301*c0909341SAndroid Build Coastguard Worker
4302*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       2
4303*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_16x32_END
4304*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+256, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4305*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+768, 16,  vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4306*c0909341SAndroid Build Coastguard Worker
4307*c0909341SAndroid Build Coastguard Worker    ld.h          t7,       t8,       0
4308*c0909341SAndroid Build Coastguard Worker    bge           a3,       t7,       .DCT_DCT_EOB_16x32_END
4309*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+128, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4310*c0909341SAndroid Build Coastguard Worker    vst_x8 sp, 64+512+128, 16  vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31
4311*c0909341SAndroid Build Coastguard Worker
4312*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_16x32_END:
4313*c0909341SAndroid Build Coastguard Worker    addi.d      t7,   sp,    64
4314*c0909341SAndroid Build Coastguard Worker.rept 2
4315*c0909341SAndroid Build Coastguard Worker    vld_x16 t7, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4316*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4317*c0909341SAndroid Build Coastguard Worker
4318*c0909341SAndroid Build Coastguard Worker    inv_dct16_lsx .8h
4319*c0909341SAndroid Build Coastguard Worker
4320*c0909341SAndroid Build Coastguard Worker    vst_x16 t7, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4321*c0909341SAndroid Build Coastguard Worker            vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15
4322*c0909341SAndroid Build Coastguard Worker
4323*c0909341SAndroid Build Coastguard Worker    vld_x16 t7, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \
4324*c0909341SAndroid Build Coastguard Worker            vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30
4325*c0909341SAndroid Build Coastguard Worker
4326*c0909341SAndroid Build Coastguard Worker    dct_8x32_core_lsx t7, t7, 0, 256, 32, 0, 128, 256, 384, 16, ,
4327*c0909341SAndroid Build Coastguard Worker
4328*c0909341SAndroid Build Coastguard Worker    addi.d        t7,       t7,       512
4329*c0909341SAndroid Build Coastguard Worker.endr
4330*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4331*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       sp,       64
4332*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       sp,       512+64
4333*c0909341SAndroid Build Coastguard Worker
4334*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16_H32 320
4335*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16_H32 448
4336*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16_H32 192
4337*c0909341SAndroid Build Coastguard Worker    VLD_DST_ADD_W16_H32 0
4338*c0909341SAndroid Build Coastguard Worker
4339*c0909341SAndroid Build Coastguard Worker    free_space 512+512
4340*c0909341SAndroid Build Coastguard Worker.DCT_DCT_16x32_END:
4341*c0909341SAndroid Build Coastguard Workerendfunc
4342*c0909341SAndroid Build Coastguard Worker
4343*c0909341SAndroid Build Coastguard Worker.macro xvmulev_xvmaddod_lasx in0, in1, in2, in3, out0, out1
4344*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   \out0,    \in0,     \in2
4345*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   \out1,    \in0,     \in2
4346*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  \out0,    \in1,     \in3
4347*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  \out1,    \in1,     \in3
4348*c0909341SAndroid Build Coastguard Worker.endm
4349*c0909341SAndroid Build Coastguard Worker
4350*c0909341SAndroid Build Coastguard Worker.macro xvsrari_h_x16 in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, \
4351*c0909341SAndroid Build Coastguard Worker                     in11, in12, in13, in14, in15, out0, out1, out2, out3, \
4352*c0909341SAndroid Build Coastguard Worker                     out4, out5, out6, out7, out8, out9, out10, out11, out12, \
4353*c0909341SAndroid Build Coastguard Worker                     out13, out14, out15, shift
4354*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out0,       \in0,     \shift
4355*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out1,       \in1,     \shift
4356*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out2,       \in2,     \shift
4357*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out3,       \in3,     \shift
4358*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out4,       \in4,     \shift
4359*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out5,       \in5,     \shift
4360*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out6,       \in6,     \shift
4361*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out7,       \in7,     \shift
4362*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out8,       \in8,     \shift
4363*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out9,       \in9,     \shift
4364*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out10,      \in10,    \shift
4365*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out11,      \in11,    \shift
4366*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out12,      \in12,    \shift
4367*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out13,      \in13,    \shift
4368*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out14,      \in14,    \shift
4369*c0909341SAndroid Build Coastguard Worker    xvsrari.h  \out15,      \in15,    \shift
4370*c0909341SAndroid Build Coastguard Worker.endm
4371*c0909341SAndroid Build Coastguard Worker
4372*c0909341SAndroid Build Coastguard Worker.macro xvpermi_q_x2 in0, in1, in2, in3, out0, out1, out2, out3, tmp0, tmp1
4373*c0909341SAndroid Build Coastguard Worker    xvor.v      \tmp0,      \in0,     \in0
4374*c0909341SAndroid Build Coastguard Worker    xvor.v      \tmp1,      \in1,     \in1
4375*c0909341SAndroid Build Coastguard Worker    xvpermi.q   \out0,      \in2,     0x02
4376*c0909341SAndroid Build Coastguard Worker    xvpermi.q   \out1,      \in3,     0x02
4377*c0909341SAndroid Build Coastguard Worker    xvpermi.q   \out2,      \tmp0,    0x31
4378*c0909341SAndroid Build Coastguard Worker    xvpermi.q   \out3,      \tmp1,    0x31
4379*c0909341SAndroid Build Coastguard Worker.endm
4380*c0909341SAndroid Build Coastguard Worker
4381*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W16_LASX in0, in1, in2, in3, in4, in5, in6, in7
4382*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu xr0,      \in0
4383*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu xr1,      \in1
4384*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu xr2,      \in2
4385*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu xr3,      \in3
4386*c0909341SAndroid Build Coastguard Worker    xvadd.h       xr0,      xr0,      \in4
4387*c0909341SAndroid Build Coastguard Worker    xvadd.h       xr1,      xr1,      \in5
4388*c0909341SAndroid Build Coastguard Worker    xvadd.h       xr2,      xr2,      \in6
4389*c0909341SAndroid Build Coastguard Worker    xvadd.h       xr3,      xr3,      \in7
4390*c0909341SAndroid Build Coastguard Worker    xvssrani.bu.h xr1,      xr0,      0
4391*c0909341SAndroid Build Coastguard Worker    xvssrani.bu.h xr3,      xr2,      0
4392*c0909341SAndroid Build Coastguard Worker    xvpermi.d     xr0,      xr1,      0b11011000
4393*c0909341SAndroid Build Coastguard Worker    xvpermi.d     xr2,      xr3,      0b11011000
4394*c0909341SAndroid Build Coastguard Worker    xvpermi.d     xr1,      xr0,      0b00001110
4395*c0909341SAndroid Build Coastguard Worker    xvpermi.d     xr3,      xr2,      0b00001110
4396*c0909341SAndroid Build Coastguard Worker    vst           vr0,      a0,       0
4397*c0909341SAndroid Build Coastguard Worker    vstx          vr1,      a0,       a1
4398*c0909341SAndroid Build Coastguard Worker    vst           vr2,      t2,       0
4399*c0909341SAndroid Build Coastguard Worker    vstx          vr3,      t2,       a1
4400*c0909341SAndroid Build Coastguard Worker.endm
4401*c0909341SAndroid Build Coastguard Worker
4402*c0909341SAndroid Build Coastguard Worker.macro XVLD_DST_ADD_W16 in0, in1, in2, in3
4403*c0909341SAndroid Build Coastguard Worker    vld           vr0,      a0,       0
4404*c0909341SAndroid Build Coastguard Worker    vldx          vr1,      a0,       a1
4405*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t2,       0
4406*c0909341SAndroid Build Coastguard Worker    vldx          vr3,      t2,       a1
4407*c0909341SAndroid Build Coastguard Worker    DST_ADD_W16_LASX xr0, xr1, xr2, xr3, \in0, \in1, \in2, \in3
4408*c0909341SAndroid Build Coastguard Worker.endm
4409*c0909341SAndroid Build Coastguard Worker
4410*c0909341SAndroid Build Coastguard Worker.macro inv_adst16_lasx
4411*c0909341SAndroid Build Coastguard Worker    la.local      t0,       iadst16_coeffs_h
4412*c0909341SAndroid Build Coastguard Worker
4413*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,       0        // 4091
4414*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,       2        // 201
4415*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr15, xr0, xr20, xr21, xr16, xr18
4416*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4417*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr15, xr0, xr21, xr20, xr17, xr19
4418*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr15,     xr18,     xr16
4419*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr0,      xr19,     xr17
4420*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr18,     xr18,     xr16
4421*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr19,     xr19,     xr17
4422*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr18,     xr15,     12       // t0
4423*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr19,     xr0,      12       // t1
4424*c0909341SAndroid Build Coastguard Worker
4425*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,       4        // 3973
4426*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,       6        // 995
4427*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr2, xr20, xr21, xr16, xr0
4428*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4429*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr2, xr21, xr20, xr17, xr15
4430*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr13,     xr0,      xr16
4431*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr2,      xr15,     xr17
4432*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr0,      xr0,      xr16
4433*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr15,     xr15,     xr17
4434*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr0,      xr13,     12       // t2
4435*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr15,     xr2,      12       // t3
4436*c0909341SAndroid Build Coastguard Worker
4437*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        8       // 3703
4438*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        10      // 1751
4439*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr11, xr4, xr20, xr21, xr16, xr2
4440*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4441*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr11, xr4, xr21, xr20, xr17, xr13
4442*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr11,     xr2,       xr16
4443*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr4,      xr13,      xr17
4444*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr2,      xr2,       xr16
4445*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr13,     xr13,      xr17
4446*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr2,      xr11,      12       // t4
4447*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr13,     xr4,       12       // t5
4448*c0909341SAndroid Build Coastguard Worker
4449*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        12       // 3290 -> 1645
4450*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        14       // 2440 -> 1220
4451*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr9, xr6, xr20, xr21, xr16, xr4
4452*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4453*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr9, xr6, xr21, xr20, xr17, xr11
4454*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr9,      xr4,       xr16
4455*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr6,      xr11,      xr17
4456*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr4,      xr4,       xr16
4457*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr11,     xr11,      xr17
4458*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr4,      xr9,       12       // t6
4459*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr11,     xr6,       12       // t7
4460*c0909341SAndroid Build Coastguard Worker
4461*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        16       // 2751
4462*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        18       // 3035
4463*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr7, xr8, xr20, xr21, xr16, xr6
4464*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4465*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr7, xr8, xr21, xr20, xr17, xr9
4466*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr7,      xr6,       xr16
4467*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr8,      xr9,       xr17
4468*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr6,      xr6,       xr16
4469*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr9,      xr9,       xr17
4470*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr6,      xr7,       12       // t8
4471*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr9,      xr8,       12       // t9
4472*c0909341SAndroid Build Coastguard Worker
4473*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        20       // 2106
4474*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        22       // 3513
4475*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr5, xr10, xr20, xr21, xr16, xr7
4476*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4477*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr5, xr10, xr21, xr20, xr17, xr8
4478*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr5,      xr7,       xr16
4479*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr10,     xr8,       xr17
4480*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr7,      xr7,       xr16
4481*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr8,      xr8,       xr17
4482*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr7,      xr5,       12       // t10
4483*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr8,      xr10,      12       // t11
4484*c0909341SAndroid Build Coastguard Worker
4485*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        24       // 1380
4486*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        26       // 3857
4487*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr3, xr12, xr20, xr21, xr16, xr5
4488*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4489*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr3, xr12, xr21, xr20, xr17, xr10
4490*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr3,      xr5,       xr16
4491*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr12,     xr10,      xr17
4492*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr5,      xr5,       xr16
4493*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr10,     xr10,      xr17
4494*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr5,      xr3,       12       // t12
4495*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr10,     xr12,      12       // t13
4496*c0909341SAndroid Build Coastguard Worker
4497*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        28       // 601
4498*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        30       // 4052
4499*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr1, xr14, xr20, xr21, xr16, xr3
4500*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4501*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr1, xr14, xr21, xr20, xr17, xr12
4502*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr1,      xr3,       xr16
4503*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr14,     xr12,      xr17
4504*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr3,      xr3,       xr16
4505*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr12,     xr12,      xr17
4506*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr3,      xr1,       12       // t14
4507*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr12,     xr14,      12       // t15
4508*c0909341SAndroid Build Coastguard Worker
4509*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr1,      xr18,      xr6      // t0a
4510*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr14,     xr18,      xr6      // t8a
4511*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr16,     xr19,      xr9      // t1a
4512*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr17,     xr19,      xr9      // t9a
4513*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr6,      xr0,       xr7      // t2a
4514*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr18,     xr0,       xr7      // t10a
4515*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr9,      xr15,      xr8      // t3a
4516*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr19,     xr15,      xr8      // t11a
4517*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr0,      xr2,       xr5      // t4a
4518*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr7,      xr2,       xr5      // t12a
4519*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr8,      xr13,      xr10     // t5a
4520*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr15,     xr13,      xr10     // t13a
4521*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr2,      xr4,       xr3      // t6a
4522*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr5,      xr4,       xr3      // t14a
4523*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr10,     xr11,      xr12     // t7a
4524*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr13,     xr11,      xr12     // t15a
4525*c0909341SAndroid Build Coastguard Worker
4526*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
4527*c0909341SAndroid Build Coastguard Worker
4528*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        8        // 799
4529*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        10       // 4017
4530*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr14, xr17, xr21, xr20, xr3, xr11
4531*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4532*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr14, xr17, xr20, xr21, xr4, xr12
4533*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr14,     xr11,      xr3
4534*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr17,     xr12,      xr4
4535*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr11,     xr11,      xr3
4536*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr12,     xr12,      xr4
4537*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr11,     xr14,      12       // t8
4538*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr12,     xr17,      12       // t9
4539*c0909341SAndroid Build Coastguard Worker
4540*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4541*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr15, xr7, xr20, xr21, xr3, xr14
4542*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4543*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr15, xr7, xr21, xr20, xr4, xr17
4544*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr15,     xr14,      xr3
4545*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr7,      xr17,      xr4
4546*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr14,     xr14,      xr3
4547*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr17,     xr17,      xr4
4548*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr14,     xr15,      12       // t13
4549*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr17,     xr7,       12       // t12
4550*c0909341SAndroid Build Coastguard Worker
4551*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        12       // 3406
4552*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        14       // 2276
4553*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr18, xr19, xr21, xr20, xr3, xr7
4554*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4555*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr18, xr19, xr20, xr21, xr4, xr15
4556*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr18,     xr7,       xr3
4557*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr19,     xr15,      xr4
4558*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr7,      xr7,       xr3
4559*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr15,     xr15,      xr4
4560*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr7,      xr18,      12       // t10
4561*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr15,     xr19,      12       // t11
4562*c0909341SAndroid Build Coastguard Worker
4563*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4564*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr5, xr20, xr21, xr3, xr18
4565*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4566*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr5, xr21, xr20, xr4, xr19
4567*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr13,     xr18,      xr3
4568*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr5,      xr19,      xr4
4569*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr18,     xr18,      xr3
4570*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr19,     xr19,      xr4
4571*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr18,     xr13,      12       // t15
4572*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr19,     xr5,       12       // t14
4573*c0909341SAndroid Build Coastguard Worker
4574*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr5,      xr1,       xr0      // t0
4575*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr13,     xr1,       xr0      // t4
4576*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr3,      xr16,      xr8      // t1
4577*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr4,      xr16,      xr8      // t5
4578*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr0,      xr6,       xr2      // t2
4579*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr1,      xr6,       xr2      // t6
4580*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr8,      xr9,       xr10     // t3
4581*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr16,     xr9,       xr10     // t7
4582*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr2,      xr11,      xr17     // t8a
4583*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr6,      xr11,      xr17     // t12a
4584*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr9,      xr12,      xr14     // t9a
4585*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr10,     xr12,      xr14     // t13a
4586*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr11,     xr7,       xr19     // t10a
4587*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr17,     xr7,       xr19     // t14a
4588*c0909341SAndroid Build Coastguard Worker    xvsadd.h      xr12,     xr15,      xr18     // t11a
4589*c0909341SAndroid Build Coastguard Worker    xvssub.h      xr14,     xr15,      xr18     // t15a
4590*c0909341SAndroid Build Coastguard Worker
4591*c0909341SAndroid Build Coastguard Worker    la.local      t0,       idct_coeffs_h
4592*c0909341SAndroid Build Coastguard Worker
4593*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr20,     t0,        4        // 1567
4594*c0909341SAndroid Build Coastguard Worker    xvldrepl.h    xr21,     t0,        6        // 3784
4595*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr4, xr21, xr20, xr7, xr18
4596*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4597*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr13, xr4, xr20, xr21, xr15, xr19
4598*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr13,     xr18,      xr7
4599*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr4,      xr19,      xr15
4600*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr18,     xr18,      xr7
4601*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr19,     xr19,      xr15
4602*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr18,     xr13,      12       // t4a
4603*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr19,     xr4,       12       // t5a
4604*c0909341SAndroid Build Coastguard Worker
4605*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4606*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr16, xr1, xr20, xr21, xr7, xr4
4607*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4608*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr16, xr1, xr21, xr20, xr15, xr13
4609*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr16,     xr4,       xr7
4610*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr1,      xr13,      xr15
4611*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr4,      xr4,       xr7
4612*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr13,     xr13,      xr15
4613*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr4,      xr16,      12       // t7a
4614*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr13,     xr1,       12       // t6a
4615*c0909341SAndroid Build Coastguard Worker
4616*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4617*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr6, xr10, xr21, xr20, xr7, xr1
4618*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4619*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr6, xr10, xr20, xr21, xr15, xr16
4620*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr6,      xr1,       xr7
4621*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr10,     xr16,      xr15
4622*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr1,      xr1,       xr7
4623*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr16,     xr16,      xr15
4624*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr1,      xr6,       12       // t12
4625*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr16,     xr10,      12       // t13
4626*c0909341SAndroid Build Coastguard Worker
4627*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr21,     xr21
4628*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr14, xr17, xr20, xr21, xr7, xr6
4629*c0909341SAndroid Build Coastguard Worker    xvneg.h       xr20,     xr20
4630*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr14, xr17, xr21, xr20, xr15, xr10
4631*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr14,     xr6,       xr7
4632*c0909341SAndroid Build Coastguard Worker    xvilvl.w      xr17,     xr10,      xr15
4633*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr6,      xr6,       xr7
4634*c0909341SAndroid Build Coastguard Worker    xvilvh.w      xr10,     xr10,      xr15
4635*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr6,      xr14,      12       // t15
4636*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr10,     xr17,      12       // t14
4637*c0909341SAndroid Build Coastguard Worker
4638*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr14,     xr5,       xr0      // out[0]
4639*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr17,     xr5,       xr0      // t2a
4640*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr7,      xr3,       xr8      // t3a
4641*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr15,     xr3,       xr8      // out[15]
4642*c0909341SAndroid Build Coastguard Worker    xvsllwil.w.h   xr22,     xr15,      0
4643*c0909341SAndroid Build Coastguard Worker    xvexth.w.h     xr15,     xr15
4644*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr22,     xr22
4645*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr15,     xr15
4646*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr15,     xr22,      0        // out[15]
4647*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr7,      xr3,       xr8      // t3a
4648*c0909341SAndroid Build Coastguard Worker
4649*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr3,      xr19,      xr4      // out[12]
4650*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr8,      xr19,      xr4      // t7
4651*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr0,      xr18,      xr13     // t6
4652*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr5,      xr18,      xr13     // out[3]
4653*c0909341SAndroid Build Coastguard Worker    xvsllwil.w.h   xr22,     xr5,       0
4654*c0909341SAndroid Build Coastguard Worker    xvexth.w.h     xr5,      xr5
4655*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr22,     xr22
4656*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr5,      xr5
4657*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr5,      xr22,      0        // out[3]
4658*c0909341SAndroid Build Coastguard Worker
4659*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr13,     xr9,       xr12     // out[14]
4660*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr19,     xr9,       xr12     // t11
4661*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr4,      xr2,       xr11     // t10
4662*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr18,     xr2,       xr11     // out[1]
4663*c0909341SAndroid Build Coastguard Worker    xvsllwil.w.h   xr22,     xr18,      0
4664*c0909341SAndroid Build Coastguard Worker    xvexth.w.h     xr18,     xr18
4665*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr22,     xr22
4666*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr18,     xr18
4667*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr18,     xr22,      0        // out[1]
4668*c0909341SAndroid Build Coastguard Worker
4669*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr2,      xr1,       xr10     // out[2]
4670*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr11,     xr1,       xr10     // t14a
4671*c0909341SAndroid Build Coastguard Worker    xvssub.h       xr12,     xr16,      xr6      // t15a
4672*c0909341SAndroid Build Coastguard Worker    xvsadd.h       xr9,      xr16,      xr6      // out[13]
4673*c0909341SAndroid Build Coastguard Worker    xvsllwil.w.h   xr22,     xr9,       0
4674*c0909341SAndroid Build Coastguard Worker    xvexth.w.h     xr9,      xr9
4675*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr22,     xr22
4676*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr9,      xr9
4677*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr9,      xr22,      0        // out[13]
4678*c0909341SAndroid Build Coastguard Worker
4679*c0909341SAndroid Build Coastguard Worker    xvldrepl.h     xr20,     t0,        0        // 2896
4680*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr17, xr7, xr20, xr20, xr6, xr10
4681*c0909341SAndroid Build Coastguard Worker    xvneg.h        xr21,     xr20
4682*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr17, xr7, xr20, xr21, xr16, xr1
4683*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr17,     xr10,      xr6
4684*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr7,      xr1,       xr16
4685*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr10,     xr10,      xr6
4686*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr1,      xr1,       xr16
4687*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr1,      xr7,       12       // out[8]
4688*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr17,     xr17,      12
4689*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr10,     xr10,      12
4690*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr17,     xr17
4691*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr10,     xr10
4692*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr10,     xr17,      0        // out[7]
4693*c0909341SAndroid Build Coastguard Worker
4694*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr0, xr8, xr20, xr21, xr16, xr17
4695*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr0, xr8, xr20, xr20, xr6, xr7
4696*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr0,      xr17,      xr16
4697*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr8,      xr7,       xr6
4698*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr17,     xr17,      xr16
4699*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr7,      xr7,       xr6
4700*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr7,      xr8,       12       // out[4]
4701*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr0,      xr0,       12
4702*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr17,     xr17,      12
4703*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr0,      xr0
4704*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr17,     xr17
4705*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w xr17,      xr0,       0        // out[11]
4706*c0909341SAndroid Build Coastguard Worker
4707*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr4, xr19, xr20, xr21, xr16, xr0
4708*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr4, xr19, xr20, xr20, xr6, xr8
4709*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr4,      xr0,       xr16
4710*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr19,     xr8,       xr6
4711*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr0,      xr0,       xr16
4712*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr8,      xr8,       xr6
4713*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr8,      xr19,      12       // out[6]
4714*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr4,      xr4,       12
4715*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr0,      xr0,       12
4716*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr4,      xr4
4717*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr0,      xr0
4718*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr0,      xr4,       0        // out[9]
4719*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr11, xr12, xr20, xr20, xr6, xr4
4720*c0909341SAndroid Build Coastguard Worker    xvmulev_xvmaddod_lasx xr11, xr12, xr20, xr21, xr16, xr19
4721*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr11,     xr4,       xr6
4722*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr12,     xr19,      xr16
4723*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr4,      xr4,       xr6
4724*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr19,     xr19,      xr16
4725*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr19,     xr12,      12       // out[10]
4726*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr11,     xr11,      12
4727*c0909341SAndroid Build Coastguard Worker    xvsrari.w      xr4,      xr4,       12
4728*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr11,     xr11
4729*c0909341SAndroid Build Coastguard Worker    xvneg.w        xr4,      xr4
4730*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w  xr4,      xr11,      0        // out[5]
4731*c0909341SAndroid Build Coastguard Worker.endm
4732*c0909341SAndroid Build Coastguard Worker
4733*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_adst_adst_16x16_8bpc_lasx
4734*c0909341SAndroid Build Coastguard Worker    PUSH_REG
4735*c0909341SAndroid Build Coastguard Worker    xvld_x16 a2, 0, 32, xr0, xr1, xr2, xr3, xr4, xr5, xr6, xr7, \
4736*c0909341SAndroid Build Coastguard Worker             xr8, xr9, xr10, xr11, xr12, xr13, xr14, xr15
4737*c0909341SAndroid Build Coastguard Worker
4738*c0909341SAndroid Build Coastguard Worker    inv_adst16_lasx
4739*c0909341SAndroid Build Coastguard Worker
4740*c0909341SAndroid Build Coastguard Worker    LASX_TRANSPOSE8x8_H xr14, xr18, xr2, xr5, xr7, xr4, xr8, xr10, \
4741*c0909341SAndroid Build Coastguard Worker                        xr14, xr18, xr2, xr5, xr7, xr28, xr6, xr10, \
4742*c0909341SAndroid Build Coastguard Worker                        xr20, xr21, xr22, xr23, xr24, xr25, xr26, xr27
4743*c0909341SAndroid Build Coastguard Worker
4744*c0909341SAndroid Build Coastguard Worker    LASX_TRANSPOSE8x8_H xr1,  xr0,  xr19, xr17, xr3, xr9, xr13, xr15, \
4745*c0909341SAndroid Build Coastguard Worker                        xr29, xr30, xr11, xr17, xr31, xr19, xr16, xr15, \
4746*c0909341SAndroid Build Coastguard Worker                        xr20, xr21, xr22, xr23, xr24, xr25, xr26, xr27
4747*c0909341SAndroid Build Coastguard Worker
4748*c0909341SAndroid Build Coastguard Worker    xvsrari_h_x16 xr14, xr18, xr2, xr5, xr7, xr28, xr6, xr10, \
4749*c0909341SAndroid Build Coastguard Worker                  xr29, xr30, xr11, xr17, xr31, xr19, xr16, xr15, \
4750*c0909341SAndroid Build Coastguard Worker                  xr0, xr1, xr2, xr3, xr4, xr5, xr6, xr7, \
4751*c0909341SAndroid Build Coastguard Worker                  xr8, xr9, xr10, xr11, xr12, xr13, xr14, xr15, 2
4752*c0909341SAndroid Build Coastguard Worker
4753*c0909341SAndroid Build Coastguard Worker    xvpermi_q_x2 xr0, xr1, xr8, xr9, xr0, xr1, xr8, xr9, xr20, xr21
4754*c0909341SAndroid Build Coastguard Worker    xvpermi_q_x2 xr2, xr3, xr10, xr11, xr2, xr3, xr10, xr11, xr20, xr21
4755*c0909341SAndroid Build Coastguard Worker    xvpermi_q_x2 xr4, xr5, xr12, xr13, xr4, xr5, xr12, xr13, xr20, xr21
4756*c0909341SAndroid Build Coastguard Worker    xvpermi_q_x2 xr6, xr7, xr14, xr15, xr6, xr7, xr14, xr15, xr20, xr21
4757*c0909341SAndroid Build Coastguard Worker
4758*c0909341SAndroid Build Coastguard Worker    inv_adst16_lasx
4759*c0909341SAndroid Build Coastguard Worker
4760*c0909341SAndroid Build Coastguard Worker    xvsrari_h_x16 xr14, xr18, xr2,  xr5,  xr7,  xr4, xr8,  xr10, \
4761*c0909341SAndroid Build Coastguard Worker                  xr1,  xr0,  xr19, xr17, xr3,  xr9, xr13, xr15, \
4762*c0909341SAndroid Build Coastguard Worker                  xr14, xr18, xr11, xr5,  xr7,  xr4, xr8,  xr10, \
4763*c0909341SAndroid Build Coastguard Worker                  xr12, xr16, xr19, xr17, xr20, xr9, xr13, xr15, 4
4764*c0909341SAndroid Build Coastguard Worker
4765*c0909341SAndroid Build Coastguard Worker    xvxor.v       xr23,     xr23,     xr23
4766*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480
4767*c0909341SAndroid Build Coastguard Worker    xvst          xr23,     a2,       \i
4768*c0909341SAndroid Build Coastguard Worker.endr
4769*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4770*c0909341SAndroid Build Coastguard Worker    XVLD_DST_ADD_W16 xr14, xr18, xr11, xr5
4771*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
4772*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4773*c0909341SAndroid Build Coastguard Worker    XVLD_DST_ADD_W16 xr7, xr4, xr8, xr10
4774*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
4775*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4776*c0909341SAndroid Build Coastguard Worker    XVLD_DST_ADD_W16 xr12, xr16, xr19, xr17
4777*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,    2
4778*c0909341SAndroid Build Coastguard Worker    alsl.d        t2,       a1,       a0,    1
4779*c0909341SAndroid Build Coastguard Worker    XVLD_DST_ADD_W16 xr20, xr9, xr13, xr15
4780*c0909341SAndroid Build Coastguard Worker    POP_REG
4781*c0909341SAndroid Build Coastguard Workerendfunc
4782