xref: /aosp_15_r20/external/libdav1d/src/riscv/64/itx.S (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker/******************************************************************************
2*c0909341SAndroid Build Coastguard Worker * Copyright © 2018, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, Nathan Egge
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/riscv/asm.S"
29*c0909341SAndroid Build Coastguard Worker
30*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_4x4_rvv, export=1, ext=v
31*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
32*c0909341SAndroid Build Coastguard Worker
33*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
34*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
35*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
36*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
37*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
38*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
39*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
40*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
41*c0909341SAndroid Build Coastguard Worker
42*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
43*c0909341SAndroid Build Coastguard Worker
44*c0909341SAndroid Build Coastguard Worker  vmv.v.x v4, zero
45*c0909341SAndroid Build Coastguard Worker
46*c0909341SAndroid Build Coastguard Worker  vsseg4e16.v v0, (a2)
47*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
48*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (a2)
49*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
50*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
51*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
52*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
53*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
54*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
55*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
56*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
57*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
58*c0909341SAndroid Build Coastguard Worker
59*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
60*c0909341SAndroid Build Coastguard Worker
61*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
62*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 4
63*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 4
64*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 4
65*c0909341SAndroid Build Coastguard Worker
66*c0909341SAndroid Build Coastguard Workeritx_4x4_end:
67*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
68*c0909341SAndroid Build Coastguard Worker  vle8.v v4, (a0)
69*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
70*c0909341SAndroid Build Coastguard Worker  vle8.v v5, (t0)
71*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
72*c0909341SAndroid Build Coastguard Worker  vle8.v v6, (t0)
73*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
74*c0909341SAndroid Build Coastguard Worker  vle8.v v7, (t0)
75*c0909341SAndroid Build Coastguard Worker
76*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v4
77*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v5
78*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v6
79*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v7
80*c0909341SAndroid Build Coastguard Worker
81*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, mf2, ta, ma
82*c0909341SAndroid Build Coastguard Worker  vmax.vx v0, v0, zero
83*c0909341SAndroid Build Coastguard Worker  vmax.vx v1, v1, zero
84*c0909341SAndroid Build Coastguard Worker  vmax.vx v2, v2, zero
85*c0909341SAndroid Build Coastguard Worker  vmax.vx v3, v3, zero
86*c0909341SAndroid Build Coastguard Worker
87*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
88*c0909341SAndroid Build Coastguard Worker
89*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v4, v0, 0
90*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v5, v1, 0
91*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v6, v2, 0
92*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v7, v3, 0
93*c0909341SAndroid Build Coastguard Worker
94*c0909341SAndroid Build Coastguard Worker  vse8.v v4, (a0)
95*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
96*c0909341SAndroid Build Coastguard Worker  vse8.v v5, (a0)
97*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
98*c0909341SAndroid Build Coastguard Worker  vse8.v v6, (a0)
99*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
100*c0909341SAndroid Build Coastguard Worker  vse8.v v7, (a0)
101*c0909341SAndroid Build Coastguard Worker
102*c0909341SAndroid Build Coastguard Worker  ret
103*c0909341SAndroid Build Coastguard Workerendfunc
104*c0909341SAndroid Build Coastguard Worker
105*c0909341SAndroid Build Coastguard Workerfunction inv_identity_e16_x4_rvv, export=1, ext=v
106*c0909341SAndroid Build Coastguard Worker  li t1, (5793-4096)*8
107*c0909341SAndroid Build Coastguard Worker  vsmul.vx v4, v0, t1
108*c0909341SAndroid Build Coastguard Worker  vsmul.vx v5, v1, t1
109*c0909341SAndroid Build Coastguard Worker  vsmul.vx v6, v2, t1
110*c0909341SAndroid Build Coastguard Worker  vsmul.vx v7, v3, t1
111*c0909341SAndroid Build Coastguard Worker
112*c0909341SAndroid Build Coastguard Worker  vsadd.vv v0, v0, v4
113*c0909341SAndroid Build Coastguard Worker  vsadd.vv v1, v1, v5
114*c0909341SAndroid Build Coastguard Worker  vsadd.vv v2, v2, v6
115*c0909341SAndroid Build Coastguard Worker  vsadd.vv v3, v3, v7
116*c0909341SAndroid Build Coastguard Worker
117*c0909341SAndroid Build Coastguard Worker  jr t0
118*c0909341SAndroid Build Coastguard Workerendfunc
119*c0909341SAndroid Build Coastguard Worker
120*c0909341SAndroid Build Coastguard Worker.macro iwht_4
121*c0909341SAndroid Build Coastguard Worker  vadd.vv v0, v0, v1
122*c0909341SAndroid Build Coastguard Worker  vsub.vv v5, v2, v3
123*c0909341SAndroid Build Coastguard Worker  vsub.vv v4, v0, v5
124*c0909341SAndroid Build Coastguard Worker  vsra.vi v4, v4, 1
125*c0909341SAndroid Build Coastguard Worker  vsub.vv v2, v4, v1
126*c0909341SAndroid Build Coastguard Worker  vsub.vv v1, v4, v3
127*c0909341SAndroid Build Coastguard Worker  vadd.vv v3, v5, v2
128*c0909341SAndroid Build Coastguard Worker  vsub.vv v0, v0, v1
129*c0909341SAndroid Build Coastguard Worker.endm
130*c0909341SAndroid Build Coastguard Worker
131*c0909341SAndroid Build Coastguard Worker.macro idct_4 o0, o1, o2, o3
132*c0909341SAndroid Build Coastguard Worker  li t1, 2896
133*c0909341SAndroid Build Coastguard Worker  li t2, 1567
134*c0909341SAndroid Build Coastguard Worker  li t3, 3784
135*c0909341SAndroid Build Coastguard Worker
136*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, \o0, t1
137*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, \o0, t1
138*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t1, \o2
139*c0909341SAndroid Build Coastguard Worker  neg t1, t1
140*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t1, \o2
141*c0909341SAndroid Build Coastguard Worker
142*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, \o1, t3
143*c0909341SAndroid Build Coastguard Worker  neg t3, t3
144*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, \o1, t2
145*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t2, \o3
146*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t3, \o3
147*c0909341SAndroid Build Coastguard Worker
148*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
149*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
150*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
151*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
152*c0909341SAndroid Build Coastguard Worker
153*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o0, v16, v20
154*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o1, v18, v22
155*c0909341SAndroid Build Coastguard Worker  vssub.vv \o2, v18, v22
156*c0909341SAndroid Build Coastguard Worker  vssub.vv \o3, v16, v20
157*c0909341SAndroid Build Coastguard Worker.endm
158*c0909341SAndroid Build Coastguard Worker
159*c0909341SAndroid Build Coastguard Worker.macro iadst_4 o0, o1, o2, o3, lm2, lm
160*c0909341SAndroid Build Coastguard Worker  li t1, 1321
161*c0909341SAndroid Build Coastguard Worker  li t2, 3803
162*c0909341SAndroid Build Coastguard Worker  li t3, 2482
163*c0909341SAndroid Build Coastguard Worker
164*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v0, t1
165*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v0, t3
166*c0909341SAndroid Build Coastguard Worker  neg t1, t1
167*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v2
168*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t1, v2
169*c0909341SAndroid Build Coastguard Worker  neg t2, t2
170*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t3, v3
171*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t2, v3
172*c0909341SAndroid Build Coastguard Worker
173*c0909341SAndroid Build Coastguard Worker  vwsub.vv v20,  v0, v2
174*c0909341SAndroid Build Coastguard Worker  vwadd.wv v20, v20, v3
175*c0909341SAndroid Build Coastguard Worker
176*c0909341SAndroid Build Coastguard Worker  li t1, 3344
177*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v1, t1
178*c0909341SAndroid Build Coastguard Worker
179*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e32, \lm2, ta, ma
180*c0909341SAndroid Build Coastguard Worker
181*c0909341SAndroid Build Coastguard Worker  vmul.vx v20, v20, t1
182*c0909341SAndroid Build Coastguard Worker
183*c0909341SAndroid Build Coastguard Worker  vadd.vv v24, v16, v18
184*c0909341SAndroid Build Coastguard Worker  vadd.vv v16, v16, v22
185*c0909341SAndroid Build Coastguard Worker  vadd.vv v18, v18, v22
186*c0909341SAndroid Build Coastguard Worker  vsub.vv v22, v24, v22
187*c0909341SAndroid Build Coastguard Worker
188*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, \lm, ta, ma
189*c0909341SAndroid Build Coastguard Worker
190*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o0, v16, 12
191*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o1, v18, 12
192*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o2, v20, 12
193*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o3, v22, 12
194*c0909341SAndroid Build Coastguard Worker.endm
195*c0909341SAndroid Build Coastguard Worker
196*c0909341SAndroid Build Coastguard Workerfunction inv_dct_e16_x4_rvv, export=1, ext=v
197*c0909341SAndroid Build Coastguard Worker  idct_4 v0, v1, v2, v3
198*c0909341SAndroid Build Coastguard Worker  jr t0
199*c0909341SAndroid Build Coastguard Workerendfunc
200*c0909341SAndroid Build Coastguard Worker
201*c0909341SAndroid Build Coastguard Workerfunction inv_adst_e16_x4_rvv, export=1, ext=v
202*c0909341SAndroid Build Coastguard Worker  iadst_4 v0, v1, v2, v3, m1, mf2
203*c0909341SAndroid Build Coastguard Worker  jr t0
204*c0909341SAndroid Build Coastguard Workerendfunc
205*c0909341SAndroid Build Coastguard Worker
206*c0909341SAndroid Build Coastguard Workerfunction inv_flipadst_e16_x4_rvv, export=1, ext=v
207*c0909341SAndroid Build Coastguard Worker  iadst_4 v3, v2, v1, v0, m1, mf2
208*c0909341SAndroid Build Coastguard Worker  jr t0
209*c0909341SAndroid Build Coastguard Workerendfunc
210*c0909341SAndroid Build Coastguard Worker
211*c0909341SAndroid Build Coastguard Workerfunction inv_adst_e16_x4w_rvv, export=1, ext=v
212*c0909341SAndroid Build Coastguard Worker  iadst_4 v0, v1, v2, v3, m2, m1
213*c0909341SAndroid Build Coastguard Worker  jr t0
214*c0909341SAndroid Build Coastguard Workerendfunc
215*c0909341SAndroid Build Coastguard Worker
216*c0909341SAndroid Build Coastguard Workerfunction inv_flipadst_e16_x4w_rvv, export=1, ext=v
217*c0909341SAndroid Build Coastguard Worker  iadst_4 v3, v2, v1, v0, m2, m1
218*c0909341SAndroid Build Coastguard Worker  jr t0
219*c0909341SAndroid Build Coastguard Workerendfunc
220*c0909341SAndroid Build Coastguard Worker
221*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_wht_wht_4x4_8bpc_rvv, export=1, ext=v
222*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
223*c0909341SAndroid Build Coastguard Worker
224*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
225*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
226*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
227*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
228*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
229*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
230*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
231*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
232*c0909341SAndroid Build Coastguard Worker
233*c0909341SAndroid Build Coastguard Worker  vsra.vi v0, v0, 2
234*c0909341SAndroid Build Coastguard Worker  vsra.vi v1, v1, 2
235*c0909341SAndroid Build Coastguard Worker  vsra.vi v2, v2, 2
236*c0909341SAndroid Build Coastguard Worker  vsra.vi v3, v3, 2
237*c0909341SAndroid Build Coastguard Worker
238*c0909341SAndroid Build Coastguard Worker  iwht_4
239*c0909341SAndroid Build Coastguard Worker
240*c0909341SAndroid Build Coastguard Worker  vmv.v.x v4, zero
241*c0909341SAndroid Build Coastguard Worker
242*c0909341SAndroid Build Coastguard Worker  vsseg4e16.v v0, (a2)
243*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
244*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (a2)
245*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
246*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
247*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
248*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
249*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
250*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
251*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
252*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
253*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
254*c0909341SAndroid Build Coastguard Worker
255*c0909341SAndroid Build Coastguard Worker  iwht_4
256*c0909341SAndroid Build Coastguard Worker
257*c0909341SAndroid Build Coastguard Worker  j itx_4x4_end
258*c0909341SAndroid Build Coastguard Workerendfunc
259*c0909341SAndroid Build Coastguard Worker
260*c0909341SAndroid Build Coastguard Worker.macro def_fn_4x4 txfm1, txfm2
261*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x4_8bpc_rvv, export=1, ext=v
262*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
263*c0909341SAndroid Build Coastguard Worker  beqz a3, 1f
264*c0909341SAndroid Build Coastguard Worker.endif
265*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x4_rvv
266*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x4_rvv
267*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_4x4_rvv
268*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
269*c0909341SAndroid Build Coastguard Worker1:
270*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
271*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
272*c0909341SAndroid Build Coastguard Worker  ld t2, (a2)
273*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
274*c0909341SAndroid Build Coastguard Worker  vmv.v.x v0, t2
275*c0909341SAndroid Build Coastguard Worker  vsmul.vx v0, v0, t1
276*c0909341SAndroid Build Coastguard Worker  sd x0, (a2)
277*c0909341SAndroid Build Coastguard Worker  vsmul.vx v0, v0, t1
278*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
279*c0909341SAndroid Build Coastguard Worker  vmv.v.v v1, v0
280*c0909341SAndroid Build Coastguard Worker  vmv.v.v v2, v0
281*c0909341SAndroid Build Coastguard Worker  vmv.v.v v3, v0
282*c0909341SAndroid Build Coastguard Worker  j itx_4x4_end
283*c0909341SAndroid Build Coastguard Worker.endif
284*c0909341SAndroid Build Coastguard Workerendfunc
285*c0909341SAndroid Build Coastguard Worker.endm
286*c0909341SAndroid Build Coastguard Worker
287*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 dct, dct
288*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 identity, identity
289*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 dct, adst
290*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 dct, flipadst
291*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 dct, identity
292*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 adst, dct
293*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 adst, adst
294*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 adst, flipadst
295*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 flipadst, dct
296*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 flipadst, adst
297*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 flipadst, flipadst
298*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 identity, dct
299*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 adst, identity
300*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 flipadst, identity
301*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 identity, adst
302*c0909341SAndroid Build Coastguard Workerdef_fn_4x4 identity, flipadst
303*c0909341SAndroid Build Coastguard Worker
304*c0909341SAndroid Build Coastguard Worker.macro def_fn_8x8_base variant
305*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_\variant\()add_8x8_rvv, export=1, ext=v
306*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
307*c0909341SAndroid Build Coastguard Worker
308*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
309*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
310*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
311*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
312*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
313*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
314*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
315*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
316*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
317*c0909341SAndroid Build Coastguard Worker  vle16.v v4, (t0)
318*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
319*c0909341SAndroid Build Coastguard Worker  vle16.v v5, (t0)
320*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
321*c0909341SAndroid Build Coastguard Worker  vle16.v v6, (t0)
322*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
323*c0909341SAndroid Build Coastguard Worker  vle16.v v7, (t0)
324*c0909341SAndroid Build Coastguard Worker
325*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
326*c0909341SAndroid Build Coastguard Worker  // The identity vsadd.vv and downshift vssra.vi 1 cancel out
327*c0909341SAndroid Build Coastguard Worker
328*c0909341SAndroid Build Coastguard Worker  j L(itx_8x8_epilog)
329*c0909341SAndroid Build Coastguard Worker.else
330*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
331*c0909341SAndroid Build Coastguard Worker
332*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 1
333*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 1
334*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 1
335*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 1
336*c0909341SAndroid Build Coastguard Worker  vssra.vi v4, v4, 1
337*c0909341SAndroid Build Coastguard Worker  vssra.vi v5, v5, 1
338*c0909341SAndroid Build Coastguard Worker  vssra.vi v6, v6, 1
339*c0909341SAndroid Build Coastguard Worker  vssra.vi v7, v7, 1
340*c0909341SAndroid Build Coastguard Worker
341*c0909341SAndroid Build Coastguard WorkerL(itx_8x8_epilog):
342*c0909341SAndroid Build Coastguard Worker  vsseg8e16.v v0, (a2)
343*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
344*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
345*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
346*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
347*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
348*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
349*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
350*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
351*c0909341SAndroid Build Coastguard Worker  vle16.v v4, (t0)
352*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
353*c0909341SAndroid Build Coastguard Worker  vle16.v v5, (t0)
354*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
355*c0909341SAndroid Build Coastguard Worker  vle16.v v6, (t0)
356*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
357*c0909341SAndroid Build Coastguard Worker  vle16.v v7, (t0)
358*c0909341SAndroid Build Coastguard Worker
359*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
360*c0909341SAndroid Build Coastguard Worker
361*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
362*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 4
363*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 4
364*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 4
365*c0909341SAndroid Build Coastguard Worker  vssra.vi v4, v4, 4
366*c0909341SAndroid Build Coastguard Worker  vssra.vi v5, v5, 4
367*c0909341SAndroid Build Coastguard Worker  vssra.vi v6, v6, 4
368*c0909341SAndroid Build Coastguard Worker  vssra.vi v7, v7, 4
369*c0909341SAndroid Build Coastguard Worker
370*c0909341SAndroid Build Coastguard Worker  li t1, 64
371*c0909341SAndroid Build Coastguard Worker  vsetvli zero, t1, e16, m8, ta, ma
372*c0909341SAndroid Build Coastguard Worker  vmv.v.x v8, zero
373*c0909341SAndroid Build Coastguard Worker  vse16.v v8, (a2)
374*c0909341SAndroid Build Coastguard Worker
375*c0909341SAndroid Build Coastguard Workeritx_8x8_end:
376*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e8, mf2, ta, ma
377*c0909341SAndroid Build Coastguard Worker  vle8.v v8, (a0)
378*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
379*c0909341SAndroid Build Coastguard Worker  vle8.v v9, (t0)
380*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
381*c0909341SAndroid Build Coastguard Worker  vle8.v v10, (t0)
382*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
383*c0909341SAndroid Build Coastguard Worker  vle8.v v11, (t0)
384*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
385*c0909341SAndroid Build Coastguard Worker  vle8.v v12, (t0)
386*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
387*c0909341SAndroid Build Coastguard Worker  vle8.v v13, (t0)
388*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
389*c0909341SAndroid Build Coastguard Worker  vle8.v v14, (t0)
390*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
391*c0909341SAndroid Build Coastguard Worker  vle8.v v15, (t0)
392*c0909341SAndroid Build Coastguard Worker
393*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v8
394*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v9
395*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v10
396*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v11
397*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v4, v4, v12
398*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v5, v5, v13
399*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v6, v6, v14
400*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v7, v7, v15
401*c0909341SAndroid Build Coastguard Worker
402*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m1, ta, ma
403*c0909341SAndroid Build Coastguard Worker  vmax.vx v0, v0, zero
404*c0909341SAndroid Build Coastguard Worker  vmax.vx v1, v1, zero
405*c0909341SAndroid Build Coastguard Worker  vmax.vx v2, v2, zero
406*c0909341SAndroid Build Coastguard Worker  vmax.vx v3, v3, zero
407*c0909341SAndroid Build Coastguard Worker  vmax.vx v4, v4, zero
408*c0909341SAndroid Build Coastguard Worker  vmax.vx v5, v5, zero
409*c0909341SAndroid Build Coastguard Worker  vmax.vx v6, v6, zero
410*c0909341SAndroid Build Coastguard Worker  vmax.vx v7, v7, zero
411*c0909341SAndroid Build Coastguard Worker
412*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
413*c0909341SAndroid Build Coastguard Worker
414*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v8, v0, 0
415*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v9, v1, 0
416*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v10, v2, 0
417*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v11, v3, 0
418*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v12, v4, 0
419*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v13, v5, 0
420*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v14, v6, 0
421*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v15, v7, 0
422*c0909341SAndroid Build Coastguard Worker
423*c0909341SAndroid Build Coastguard Worker  vse8.v v8, (a0)
424*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
425*c0909341SAndroid Build Coastguard Worker  vse8.v v9, (a0)
426*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
427*c0909341SAndroid Build Coastguard Worker  vse8.v v10, (a0)
428*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
429*c0909341SAndroid Build Coastguard Worker  vse8.v v11, (a0)
430*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
431*c0909341SAndroid Build Coastguard Worker  vse8.v v12, (a0)
432*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
433*c0909341SAndroid Build Coastguard Worker  vse8.v v13, (a0)
434*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
435*c0909341SAndroid Build Coastguard Worker  vse8.v v14, (a0)
436*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
437*c0909341SAndroid Build Coastguard Worker  vse8.v v15, (a0)
438*c0909341SAndroid Build Coastguard Worker
439*c0909341SAndroid Build Coastguard Worker  ret
440*c0909341SAndroid Build Coastguard Worker.endif
441*c0909341SAndroid Build Coastguard Workerendfunc
442*c0909341SAndroid Build Coastguard Worker.endm
443*c0909341SAndroid Build Coastguard Worker
444*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base identity_
445*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base
446*c0909341SAndroid Build Coastguard Worker
447*c0909341SAndroid Build Coastguard Workerfunction inv_identity_e16_x8_rvv, export=1, ext=v
448*c0909341SAndroid Build Coastguard Worker  vsadd.vv v0, v0, v0
449*c0909341SAndroid Build Coastguard Worker  vsadd.vv v1, v1, v1
450*c0909341SAndroid Build Coastguard Worker  vsadd.vv v2, v2, v2
451*c0909341SAndroid Build Coastguard Worker  vsadd.vv v3, v3, v3
452*c0909341SAndroid Build Coastguard Worker  vsadd.vv v4, v4, v4
453*c0909341SAndroid Build Coastguard Worker  vsadd.vv v5, v5, v5
454*c0909341SAndroid Build Coastguard Worker  vsadd.vv v6, v6, v6
455*c0909341SAndroid Build Coastguard Worker  vsadd.vv v7, v7, v7
456*c0909341SAndroid Build Coastguard Worker
457*c0909341SAndroid Build Coastguard Worker  jr t0
458*c0909341SAndroid Build Coastguard Workerendfunc
459*c0909341SAndroid Build Coastguard Worker
460*c0909341SAndroid Build Coastguard Worker.macro idct_8 o0, o1, o2, o3, o4, o5, o6, o7
461*c0909341SAndroid Build Coastguard Worker  idct_4 \o0, \o2, \o4, \o6
462*c0909341SAndroid Build Coastguard Worker
463*c0909341SAndroid Build Coastguard Worker  li t1, 799
464*c0909341SAndroid Build Coastguard Worker  li t2, 4017
465*c0909341SAndroid Build Coastguard Worker  li t3, 3406
466*c0909341SAndroid Build Coastguard Worker  li t4, 2276
467*c0909341SAndroid Build Coastguard Worker
468*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, \o1, t2
469*c0909341SAndroid Build Coastguard Worker  neg t2, t2
470*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, \o1, t1
471*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t1, \o7
472*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, \o7
473*c0909341SAndroid Build Coastguard Worker
474*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, \o5, t4
475*c0909341SAndroid Build Coastguard Worker  neg t4, t4
476*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, \o5, t3
477*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t3, \o3
478*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t4, \o3
479*c0909341SAndroid Build Coastguard Worker
480*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
481*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
482*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
483*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
484*c0909341SAndroid Build Coastguard Worker
485*c0909341SAndroid Build Coastguard Worker  vssub.vv \o7, v22, v20
486*c0909341SAndroid Build Coastguard Worker  vsadd.vv v22, v22, v20
487*c0909341SAndroid Build Coastguard Worker  vssub.vv \o1, v16, v18
488*c0909341SAndroid Build Coastguard Worker  vsadd.vv v16, v16, v18
489*c0909341SAndroid Build Coastguard Worker
490*c0909341SAndroid Build Coastguard Worker  li t2, 2896
491*c0909341SAndroid Build Coastguard Worker
492*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, \o7, t2
493*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, \o7, t2
494*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t2, \o1
495*c0909341SAndroid Build Coastguard Worker  neg t2, t2
496*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t2, \o1
497*c0909341SAndroid Build Coastguard Worker
498*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
499*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
500*c0909341SAndroid Build Coastguard Worker
501*c0909341SAndroid Build Coastguard Worker  vssub.vv \o7, \o0, v22
502*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o0, \o0, v22
503*c0909341SAndroid Build Coastguard Worker  vssub.vv v17, \o2, v20
504*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o1, \o2, v20
505*c0909341SAndroid Build Coastguard Worker  vssub.vv \o5, \o4, v18
506*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o2, \o4, v18
507*c0909341SAndroid Build Coastguard Worker  vssub.vv \o4, \o6, v16
508*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o3, \o6, v16
509*c0909341SAndroid Build Coastguard Worker  vmv.v.v \o6, v17
510*c0909341SAndroid Build Coastguard Worker.endm
511*c0909341SAndroid Build Coastguard Worker
512*c0909341SAndroid Build Coastguard Worker.macro iadst_8 o0, o1, o2, o3, o4, o5, o6, o7
513*c0909341SAndroid Build Coastguard Worker  li t1, 4076
514*c0909341SAndroid Build Coastguard Worker  li t2, 401
515*c0909341SAndroid Build Coastguard Worker  li t3, 3612
516*c0909341SAndroid Build Coastguard Worker  li t4, 1931
517*c0909341SAndroid Build Coastguard Worker  li t5, 2598
518*c0909341SAndroid Build Coastguard Worker  li t6, 3166
519*c0909341SAndroid Build Coastguard Worker
520*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v7, t1
521*c0909341SAndroid Build Coastguard Worker  neg t1, t1
522*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v7, t2
523*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v0
524*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t1, v0
525*c0909341SAndroid Build Coastguard Worker
526*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v5, t3
527*c0909341SAndroid Build Coastguard Worker  neg t3, t3
528*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v5, t4
529*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t4, v2
530*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t3, v2
531*c0909341SAndroid Build Coastguard Worker
532*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v3, t5
533*c0909341SAndroid Build Coastguard Worker  neg t5, t5
534*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v3, t6
535*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t6, v4
536*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t5, v4
537*c0909341SAndroid Build Coastguard Worker
538*c0909341SAndroid Build Coastguard Worker  li t2, 1189
539*c0909341SAndroid Build Coastguard Worker  li t3, 3920
540*c0909341SAndroid Build Coastguard Worker  li t4, 1567
541*c0909341SAndroid Build Coastguard Worker  li t5, 3784
542*c0909341SAndroid Build Coastguard Worker  li t6, 2896
543*c0909341SAndroid Build Coastguard Worker
544*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v1, t2
545*c0909341SAndroid Build Coastguard Worker  neg t2, t2
546*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v1, t3
547*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v6
548*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t2, v6
549*c0909341SAndroid Build Coastguard Worker
550*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
551*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
552*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
553*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
554*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
555*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
556*c0909341SAndroid Build Coastguard Worker  vnclip.wi v28, v28, 12
557*c0909341SAndroid Build Coastguard Worker  vnclip.wi v30, v30, 12
558*c0909341SAndroid Build Coastguard Worker
559*c0909341SAndroid Build Coastguard Worker  vssub.vv  v4, v16, v24
560*c0909341SAndroid Build Coastguard Worker  vsadd.vv v16, v16, v24
561*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v1, v18, v26
562*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v2, v20, v28
563*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v3, v22, v30
564*c0909341SAndroid Build Coastguard Worker  vssub.vv  v5, v18, v26
565*c0909341SAndroid Build Coastguard Worker  vssub.vv  v6, v20, v28
566*c0909341SAndroid Build Coastguard Worker  vssub.vv v30, v22, v30
567*c0909341SAndroid Build Coastguard Worker
568*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o0, v16, v2
569*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o7,  v1, v3
570*c0909341SAndroid Build Coastguard Worker  vssub.vv  v2, v16, v2
571*c0909341SAndroid Build Coastguard Worker  vssub.vv  v3,  v1, v3
572*c0909341SAndroid Build Coastguard Worker
573*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16,  v4, t5
574*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18,  v4, t4
575*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v30, t5
576*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v30, t4
577*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t4, v5
578*c0909341SAndroid Build Coastguard Worker  neg t4, t4
579*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t5, v6
580*c0909341SAndroid Build Coastguard Worker  neg t5, t5
581*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t4, v6
582*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t5, v5
583*c0909341SAndroid Build Coastguard Worker
584*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
585*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
586*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
587*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
588*c0909341SAndroid Build Coastguard Worker
589*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o1, v16, v20
590*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o6, v18, v22
591*c0909341SAndroid Build Coastguard Worker  vssub.vv v16, v16, v20
592*c0909341SAndroid Build Coastguard Worker  vssub.vv v17, v18, v22
593*c0909341SAndroid Build Coastguard Worker
594*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v2, t6
595*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v2, t6
596*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v16, t6
597*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v16, t6
598*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t6, v3
599*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t6, v17
600*c0909341SAndroid Build Coastguard Worker  neg t6, t6
601*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t6, v3
602*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t6, v17
603*c0909341SAndroid Build Coastguard Worker
604*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o3, v18, 12
605*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o4, v20, 12
606*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o2, v22, 12
607*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o5, v24, 12
608*c0909341SAndroid Build Coastguard Worker
609*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
610*c0909341SAndroid Build Coastguard Worker  vssub.vv \o1, v16, \o1
611*c0909341SAndroid Build Coastguard Worker  vssub.vv \o3, v16, \o3
612*c0909341SAndroid Build Coastguard Worker  vssub.vv \o5, v16, \o5
613*c0909341SAndroid Build Coastguard Worker  vssub.vv \o7, v16, \o7
614*c0909341SAndroid Build Coastguard Worker.endm
615*c0909341SAndroid Build Coastguard Worker
616*c0909341SAndroid Build Coastguard Workerfunction inv_dct_e16_x8_rvv, export=1, ext=v
617*c0909341SAndroid Build Coastguard Worker  idct_8 v0, v1, v2, v3, v4, v5, v6, v7
618*c0909341SAndroid Build Coastguard Worker  jr t0
619*c0909341SAndroid Build Coastguard Workerendfunc
620*c0909341SAndroid Build Coastguard Worker
621*c0909341SAndroid Build Coastguard Workerfunction inv_adst_e16_x8_rvv, export=1, ext=v
622*c0909341SAndroid Build Coastguard Worker  iadst_8 v0, v1, v2, v3, v4, v5, v6, v7
623*c0909341SAndroid Build Coastguard Worker  jr t0
624*c0909341SAndroid Build Coastguard Workerendfunc
625*c0909341SAndroid Build Coastguard Worker
626*c0909341SAndroid Build Coastguard Workerfunction inv_flipadst_e16_x8_rvv, export=1, ext=v
627*c0909341SAndroid Build Coastguard Worker  iadst_8 v7, v6, v5, v4, v3, v2, v1, v0
628*c0909341SAndroid Build Coastguard Worker  jr t0
629*c0909341SAndroid Build Coastguard Workerendfunc
630*c0909341SAndroid Build Coastguard Worker
631*c0909341SAndroid Build Coastguard Worker.macro def_fn_8x8 txfm1, txfm2
632*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x8_8bpc_rvv, export=1, ext=v
633*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
634*c0909341SAndroid Build Coastguard Worker  beqz a3, 1f
635*c0909341SAndroid Build Coastguard Worker.endif
636*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x8_rvv
637*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
638*c0909341SAndroid Build Coastguard Worker  j inv_txfm_identity_add_8x8_rvv
639*c0909341SAndroid Build Coastguard Worker.else
640*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x8_rvv
641*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_8x8_rvv
642*c0909341SAndroid Build Coastguard Worker.endif
643*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
644*c0909341SAndroid Build Coastguard Worker1:
645*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
646*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
647*c0909341SAndroid Build Coastguard Worker  ld t2, (a2)
648*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
649*c0909341SAndroid Build Coastguard Worker  vmv.v.x v0, t2
650*c0909341SAndroid Build Coastguard Worker  vsmul.vx v0, v0, t1
651*c0909341SAndroid Build Coastguard Worker  sd x0, (a2)
652*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 1
653*c0909341SAndroid Build Coastguard Worker  vsmul.vx v0, v0, t1
654*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
655*c0909341SAndroid Build Coastguard Worker  vmv.v.v v1, v0
656*c0909341SAndroid Build Coastguard Worker  vmv.v.v v2, v0
657*c0909341SAndroid Build Coastguard Worker  vmv.v.v v3, v0
658*c0909341SAndroid Build Coastguard Worker  vmv.v.v v4, v0
659*c0909341SAndroid Build Coastguard Worker  vmv.v.v v5, v0
660*c0909341SAndroid Build Coastguard Worker  vmv.v.v v6, v0
661*c0909341SAndroid Build Coastguard Worker  vmv.v.v v7, v0
662*c0909341SAndroid Build Coastguard Worker  j itx_8x8_end
663*c0909341SAndroid Build Coastguard Worker.endif
664*c0909341SAndroid Build Coastguard Workerendfunc
665*c0909341SAndroid Build Coastguard Worker.endm
666*c0909341SAndroid Build Coastguard Worker
667*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 dct, dct
668*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 identity, identity
669*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 dct, adst
670*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 dct, flipadst
671*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 dct, identity
672*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 adst, dct
673*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 adst, adst
674*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 adst, flipadst
675*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 flipadst, dct
676*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 flipadst, adst
677*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 flipadst, flipadst
678*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 identity, dct
679*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 adst, identity
680*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 flipadst, identity
681*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 identity, adst
682*c0909341SAndroid Build Coastguard Workerdef_fn_8x8 identity, flipadst
683*c0909341SAndroid Build Coastguard Worker
684*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_4x8_rvv, export=1, ext=v
685*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
686*c0909341SAndroid Build Coastguard Worker
687*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
688*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
689*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
690*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
691*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
692*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
693*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
694*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
695*c0909341SAndroid Build Coastguard Worker
696*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
697*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3
698*c0909341SAndroid Build Coastguard Worker  vsmul.vx v\i, v\i, t1
699*c0909341SAndroid Build Coastguard Worker.endr
700*c0909341SAndroid Build Coastguard Worker
701*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
702*c0909341SAndroid Build Coastguard Worker
703*c0909341SAndroid Build Coastguard Worker  vsseg4e16.v v0, (a2)
704*c0909341SAndroid Build Coastguard Worker
705*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
706*c0909341SAndroid Build Coastguard Worker  vmv.v.x v8, zero
707*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
708*c0909341SAndroid Build Coastguard Worker  vse16.v v8, (a2)
709*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7
710*c0909341SAndroid Build Coastguard Worker  addi a2, a2, 8
711*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (a2)
712*c0909341SAndroid Build Coastguard Worker  vse16.v v8, (a2)
713*c0909341SAndroid Build Coastguard Worker.endr
714*c0909341SAndroid Build Coastguard Worker
715*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
716*c0909341SAndroid Build Coastguard Worker
717*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
718*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 4
719*c0909341SAndroid Build Coastguard Worker.endr
720*c0909341SAndroid Build Coastguard Worker
721*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
722*c0909341SAndroid Build Coastguard Worker  vle8.v v8, (a0)
723*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
724*c0909341SAndroid Build Coastguard Worker  vle8.v v9, (t0)
725*c0909341SAndroid Build Coastguard Worker.irp i, 10, 11, 12, 13, 14, 15
726*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
727*c0909341SAndroid Build Coastguard Worker  vle8.v v\i, (t0)
728*c0909341SAndroid Build Coastguard Worker.endr
729*c0909341SAndroid Build Coastguard Worker
730*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0,  v8
731*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1,  v9
732*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v10
733*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v11
734*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v4, v4, v12
735*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v5, v5, v13
736*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v6, v6, v14
737*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v7, v7, v15
738*c0909341SAndroid Build Coastguard Worker
739*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, mf2, ta, ma
740*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
741*c0909341SAndroid Build Coastguard Worker  vmax.vx v\i, v\i, zero
742*c0909341SAndroid Build Coastguard Worker.endr
743*c0909341SAndroid Build Coastguard Worker
744*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
745*c0909341SAndroid Build Coastguard Worker
746*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v8, v0, 0
747*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v9, v1, 0
748*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v10, v2, 0
749*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v11, v3, 0
750*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v12, v4, 0
751*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v13, v5, 0
752*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v14, v6, 0
753*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v15, v7, 0
754*c0909341SAndroid Build Coastguard Worker
755*c0909341SAndroid Build Coastguard Worker  vse8.v v8, (a0)
756*c0909341SAndroid Build Coastguard Worker.irp i, 9, 10, 11, 12, 13, 14, 15
757*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
758*c0909341SAndroid Build Coastguard Worker  vse8.v v\i, (a0)
759*c0909341SAndroid Build Coastguard Worker.endr
760*c0909341SAndroid Build Coastguard Worker
761*c0909341SAndroid Build Coastguard Worker  ret
762*c0909341SAndroid Build Coastguard Workerendfunc
763*c0909341SAndroid Build Coastguard Worker
764*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_8x4_rvv, export=1, ext=v
765*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
766*c0909341SAndroid Build Coastguard Worker
767*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
768*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
769*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
770*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
771*c0909341SAndroid Build Coastguard Worker.irp i, 2, 3, 4, 5, 6, 7
772*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
773*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
774*c0909341SAndroid Build Coastguard Worker.endr
775*c0909341SAndroid Build Coastguard Worker
776*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
777*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
778*c0909341SAndroid Build Coastguard Worker  vsmul.vx v\i, v\i, t1
779*c0909341SAndroid Build Coastguard Worker.endr
780*c0909341SAndroid Build Coastguard Worker
781*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
782*c0909341SAndroid Build Coastguard Worker
783*c0909341SAndroid Build Coastguard Worker  vsseg8e16.v v0, (a2)
784*c0909341SAndroid Build Coastguard Worker
785*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
786*c0909341SAndroid Build Coastguard Worker  vmv.v.x v4, zero
787*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
788*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (a2)
789*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3
790*c0909341SAndroid Build Coastguard Worker  addi a2, a2, 16
791*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (a2)
792*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (a2)
793*c0909341SAndroid Build Coastguard Worker.endr
794*c0909341SAndroid Build Coastguard Worker
795*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
796*c0909341SAndroid Build Coastguard Worker
797*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
798*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 4
799*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 4
800*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 4
801*c0909341SAndroid Build Coastguard Worker
802*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
803*c0909341SAndroid Build Coastguard Worker  vle8.v v4, (a0)
804*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
805*c0909341SAndroid Build Coastguard Worker  vle8.v v5, (t0)
806*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
807*c0909341SAndroid Build Coastguard Worker  vle8.v v6, (t0)
808*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
809*c0909341SAndroid Build Coastguard Worker  vle8.v v7, (t0)
810*c0909341SAndroid Build Coastguard Worker
811*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v4
812*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v5
813*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v6
814*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v7
815*c0909341SAndroid Build Coastguard Worker
816*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m1, ta, ma
817*c0909341SAndroid Build Coastguard Worker  vmax.vx v0, v0, zero
818*c0909341SAndroid Build Coastguard Worker  vmax.vx v1, v1, zero
819*c0909341SAndroid Build Coastguard Worker  vmax.vx v2, v2, zero
820*c0909341SAndroid Build Coastguard Worker  vmax.vx v3, v3, zero
821*c0909341SAndroid Build Coastguard Worker
822*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
823*c0909341SAndroid Build Coastguard Worker
824*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v4, v0, 0
825*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v5, v1, 0
826*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v6, v2, 0
827*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v7, v3, 0
828*c0909341SAndroid Build Coastguard Worker
829*c0909341SAndroid Build Coastguard Worker  vse8.v v4, (a0)
830*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
831*c0909341SAndroid Build Coastguard Worker  vse8.v v5, (a0)
832*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
833*c0909341SAndroid Build Coastguard Worker  vse8.v v6, (a0)
834*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
835*c0909341SAndroid Build Coastguard Worker  vse8.v v7, (a0)
836*c0909341SAndroid Build Coastguard Worker
837*c0909341SAndroid Build Coastguard Worker  ret
838*c0909341SAndroid Build Coastguard Workerendfunc
839*c0909341SAndroid Build Coastguard Worker
840*c0909341SAndroid Build Coastguard Worker/* Define symbols added in .if statement */
841*c0909341SAndroid Build Coastguard Worker.equ dct, 1
842*c0909341SAndroid Build Coastguard Worker.equ identity, 2
843*c0909341SAndroid Build Coastguard Worker.equ adst, 3
844*c0909341SAndroid Build Coastguard Worker.equ flipadst, 4
845*c0909341SAndroid Build Coastguard Worker
846*c0909341SAndroid Build Coastguard Worker.macro def_fn_48 w, h, txfm1, txfm2
847*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_\w\()x\h\()_8bpc_rvv, export=1
848*c0909341SAndroid Build Coastguard Worker.if \w == 4 && (\txfm1 == adst || \txfm1 == flipadst)
849*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x\w\()w_rvv
850*c0909341SAndroid Build Coastguard Worker.else
851*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x\w\()_rvv
852*c0909341SAndroid Build Coastguard Worker.endif
853*c0909341SAndroid Build Coastguard Worker.if \h == 4 && (\txfm2 == adst || \txfm2 == flipadst)
854*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x\h\()w_rvv
855*c0909341SAndroid Build Coastguard Worker.else
856*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x\h\()_rvv
857*c0909341SAndroid Build Coastguard Worker.endif
858*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_\w\()x\h\()_rvv
859*c0909341SAndroid Build Coastguard Workerendfunc
860*c0909341SAndroid Build Coastguard Worker.endm
861*c0909341SAndroid Build Coastguard Worker
862*c0909341SAndroid Build Coastguard Worker.macro def_fns_48 w, h
863*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, dct, dct
864*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, identity, identity
865*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, dct, adst
866*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, dct, flipadst
867*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, dct, identity
868*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, adst, dct
869*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, adst, adst
870*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, adst, flipadst
871*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, flipadst, dct
872*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, flipadst, adst
873*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, flipadst, flipadst
874*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, identity, dct
875*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, adst, identity
876*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, flipadst, identity
877*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, identity, adst
878*c0909341SAndroid Build Coastguard Workerdef_fn_48 \w, \h, identity, flipadst
879*c0909341SAndroid Build Coastguard Worker.endm
880*c0909341SAndroid Build Coastguard Worker
881*c0909341SAndroid Build Coastguard Workerdef_fns_48 4, 8
882*c0909341SAndroid Build Coastguard Workerdef_fns_48 8, 4
883*c0909341SAndroid Build Coastguard Worker
884*c0909341SAndroid Build Coastguard Workerfunction inv_identity_e16_x16_rvv, export=1, ext=v
885*c0909341SAndroid Build Coastguard Worker  li t1, 2*(5793-4096)*8
886*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
887*c0909341SAndroid Build Coastguard Worker  vsmul.vx v16, v\i, t1
888*c0909341SAndroid Build Coastguard Worker  vsadd.vv v\i, v\i, v\i
889*c0909341SAndroid Build Coastguard Worker  vsadd.vv v\i, v\i, v16
890*c0909341SAndroid Build Coastguard Worker.endr
891*c0909341SAndroid Build Coastguard Worker  jr t0
892*c0909341SAndroid Build Coastguard Workerendfunc
893*c0909341SAndroid Build Coastguard Worker
894*c0909341SAndroid Build Coastguard Workerfunction inv_dct_e16_x16_rvv, export=1, ext=v
895*c0909341SAndroid Build Coastguard Worker  idct_8 v0, v2, v4, v6, v8, v10, v12, v14
896*c0909341SAndroid Build Coastguard Worker
897*c0909341SAndroid Build Coastguard Worker  li t1, 401
898*c0909341SAndroid Build Coastguard Worker  li t2, 4076
899*c0909341SAndroid Build Coastguard Worker  li t3, 3166
900*c0909341SAndroid Build Coastguard Worker  li t4, 2598
901*c0909341SAndroid Build Coastguard Worker
902*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v1, t2
903*c0909341SAndroid Build Coastguard Worker  neg t2, t2
904*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v1, t1
905*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t1, v15
906*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v15
907*c0909341SAndroid Build Coastguard Worker
908*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v9, t4
909*c0909341SAndroid Build Coastguard Worker  neg t4, t4
910*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v9, t3
911*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v7
912*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t4, v7
913*c0909341SAndroid Build Coastguard Worker
914*c0909341SAndroid Build Coastguard Worker  li t1, 1931
915*c0909341SAndroid Build Coastguard Worker  li t2, 3612
916*c0909341SAndroid Build Coastguard Worker  li t3, 3920
917*c0909341SAndroid Build Coastguard Worker  li t4, 1189
918*c0909341SAndroid Build Coastguard Worker
919*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v5, t2
920*c0909341SAndroid Build Coastguard Worker  neg t2, t2
921*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v5, t1
922*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t1, v11
923*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t2, v11
924*c0909341SAndroid Build Coastguard Worker
925*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v13, t4
926*c0909341SAndroid Build Coastguard Worker  neg t4, t4
927*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v13, t3
928*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t3, v3
929*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t4, v3
930*c0909341SAndroid Build Coastguard Worker
931*c0909341SAndroid Build Coastguard Worker  li t2, 2896
932*c0909341SAndroid Build Coastguard Worker  li t3, 1567
933*c0909341SAndroid Build Coastguard Worker  li t4, 3784
934*c0909341SAndroid Build Coastguard Worker
935*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
936*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
937*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
938*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
939*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
940*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
941*c0909341SAndroid Build Coastguard Worker  vnclip.wi v28, v28, 12
942*c0909341SAndroid Build Coastguard Worker  vnclip.wi v30, v30, 12
943*c0909341SAndroid Build Coastguard Worker
944*c0909341SAndroid Build Coastguard Worker  vssub.vv  v3, v16, v18
945*c0909341SAndroid Build Coastguard Worker  vsadd.vv v16, v16, v18
946*c0909341SAndroid Build Coastguard Worker  vssub.vv  v5, v22, v20
947*c0909341SAndroid Build Coastguard Worker  vsadd.vv v22, v22, v20
948*c0909341SAndroid Build Coastguard Worker  vssub.vv v11, v24, v26
949*c0909341SAndroid Build Coastguard Worker  vsadd.vv v24, v24, v26
950*c0909341SAndroid Build Coastguard Worker  vssub.vv v13, v30, v28
951*c0909341SAndroid Build Coastguard Worker  vsadd.vv v30, v30, v28
952*c0909341SAndroid Build Coastguard Worker
953*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v13, t4
954*c0909341SAndroid Build Coastguard Worker  neg t4, t4
955*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v13, t3
956*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v11, t3
957*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v3
958*c0909341SAndroid Build Coastguard Worker  neg t3, t3
959*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v11, t4
960*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t4, v3
961*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t3, v5
962*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t4, v5
963*c0909341SAndroid Build Coastguard Worker
964*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
965*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
966*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
967*c0909341SAndroid Build Coastguard Worker  vnclip.wi v28, v28, 12
968*c0909341SAndroid Build Coastguard Worker
969*c0909341SAndroid Build Coastguard Worker  vssub.vv  v5, v18, v20
970*c0909341SAndroid Build Coastguard Worker  vsadd.vv v18, v18, v20
971*c0909341SAndroid Build Coastguard Worker  vssub.vv v11, v28, v26
972*c0909341SAndroid Build Coastguard Worker  vsadd.vv v28, v28, v26
973*c0909341SAndroid Build Coastguard Worker
974*c0909341SAndroid Build Coastguard Worker  vssub.vv  v7, v16, v22
975*c0909341SAndroid Build Coastguard Worker  vsadd.vv v16, v16, v22
976*c0909341SAndroid Build Coastguard Worker  vssub.vv  v9, v30, v24
977*c0909341SAndroid Build Coastguard Worker  vsadd.vv v30, v30, v24
978*c0909341SAndroid Build Coastguard Worker
979*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v11, t2
980*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22,  v9, t2
981*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24,  v9, t2
982*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v11, t2
983*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t2, v7
984*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t2, v5
985*c0909341SAndroid Build Coastguard Worker  neg t2, t2
986*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t2, v5
987*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t2, v7
988*c0909341SAndroid Build Coastguard Worker
989*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
990*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
991*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
992*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
993*c0909341SAndroid Build Coastguard Worker
994*c0909341SAndroid Build Coastguard Worker  vssub.vv v15,  v0, v30
995*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v0,  v0, v30
996*c0909341SAndroid Build Coastguard Worker  vssub.vv v17,  v2, v28
997*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v1,  v2, v28
998*c0909341SAndroid Build Coastguard Worker  vssub.vv v13,  v4, v26
999*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v2,  v4, v26
1000*c0909341SAndroid Build Coastguard Worker  vssub.vv v19,  v6, v24
1001*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v3,  v6, v24
1002*c0909341SAndroid Build Coastguard Worker  vssub.vv v11,  v8, v22
1003*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v4,  v8, v22
1004*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v5, v10, v20
1005*c0909341SAndroid Build Coastguard Worker  vssub.vv v10, v10, v20
1006*c0909341SAndroid Build Coastguard Worker  vssub.vv  v9, v12, v18
1007*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v6, v12, v18
1008*c0909341SAndroid Build Coastguard Worker  vssub.vv  v8, v14, v16
1009*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v7, v14, v16
1010*c0909341SAndroid Build Coastguard Worker  vmv.v.v v14, v17
1011*c0909341SAndroid Build Coastguard Worker  vmv.v.v v12, v19
1012*c0909341SAndroid Build Coastguard Worker
1013*c0909341SAndroid Build Coastguard Worker  jr t0
1014*c0909341SAndroid Build Coastguard Workerendfunc
1015*c0909341SAndroid Build Coastguard Worker
1016*c0909341SAndroid Build Coastguard Worker.macro iadst_16 o0, o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15
1017*c0909341SAndroid Build Coastguard Worker  li t1, 4091
1018*c0909341SAndroid Build Coastguard Worker  li t2, 201
1019*c0909341SAndroid Build Coastguard Worker  li t3, 3973
1020*c0909341SAndroid Build Coastguard Worker  li t4, 995
1021*c0909341SAndroid Build Coastguard Worker
1022*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v15, t1
1023*c0909341SAndroid Build Coastguard Worker  neg t1, t1
1024*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v15, t2
1025*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v0
1026*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t1, v0
1027*c0909341SAndroid Build Coastguard Worker
1028*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v13, t3
1029*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1030*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v13, t4
1031*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t4, v2
1032*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t3, v2
1033*c0909341SAndroid Build Coastguard Worker
1034*c0909341SAndroid Build Coastguard Worker  li t1, 3703
1035*c0909341SAndroid Build Coastguard Worker  li t2, 1751
1036*c0909341SAndroid Build Coastguard Worker  li t3, 3290
1037*c0909341SAndroid Build Coastguard Worker  li t4, 2440
1038*c0909341SAndroid Build Coastguard Worker
1039*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v11, t1
1040*c0909341SAndroid Build Coastguard Worker  neg t1, t1
1041*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v11, t2
1042*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t2, v4
1043*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t1, v4
1044*c0909341SAndroid Build Coastguard Worker
1045*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v9, t3
1046*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1047*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v9, t4
1048*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t4, v6
1049*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t3, v6
1050*c0909341SAndroid Build Coastguard Worker
1051*c0909341SAndroid Build Coastguard Worker  vnclip.wi  v0, v16, 12
1052*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
1053*c0909341SAndroid Build Coastguard Worker  vnclip.wi  v2, v20, 12
1054*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
1055*c0909341SAndroid Build Coastguard Worker  vnclip.wi  v4, v24, 12
1056*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
1057*c0909341SAndroid Build Coastguard Worker  vnclip.wi  v6, v28, 12
1058*c0909341SAndroid Build Coastguard Worker  vnclip.wi v30, v30, 12
1059*c0909341SAndroid Build Coastguard Worker
1060*c0909341SAndroid Build Coastguard Worker  li t1, 2751
1061*c0909341SAndroid Build Coastguard Worker  li t2, 3035
1062*c0909341SAndroid Build Coastguard Worker  li t3, 2106
1063*c0909341SAndroid Build Coastguard Worker  li t4, 3513
1064*c0909341SAndroid Build Coastguard Worker
1065*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v7, t1
1066*c0909341SAndroid Build Coastguard Worker  neg t1, t1
1067*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v7, t2
1068*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v8
1069*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t1, v8
1070*c0909341SAndroid Build Coastguard Worker
1071*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v5, t3
1072*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1073*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v5, t4
1074*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t4, v10
1075*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v10
1076*c0909341SAndroid Build Coastguard Worker
1077*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
1078*c0909341SAndroid Build Coastguard Worker  vnclip.wi  v9, v20, 12
1079*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
1080*c0909341SAndroid Build Coastguard Worker  vnclip.wi v11, v28, 12
1081*c0909341SAndroid Build Coastguard Worker
1082*c0909341SAndroid Build Coastguard Worker  vssub.vv  v8,  v0, v16
1083*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v0,  v0, v16
1084*c0909341SAndroid Build Coastguard Worker  vssub.vv v10,  v2, v24
1085*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v2,  v2, v24
1086*c0909341SAndroid Build Coastguard Worker
1087*c0909341SAndroid Build Coastguard Worker  li t1, 1380
1088*c0909341SAndroid Build Coastguard Worker  li t2, 3857
1089*c0909341SAndroid Build Coastguard Worker  li t3, 601
1090*c0909341SAndroid Build Coastguard Worker  li t4, 4052
1091*c0909341SAndroid Build Coastguard Worker
1092*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v3, t1
1093*c0909341SAndroid Build Coastguard Worker  neg t1, t1
1094*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v3, t2
1095*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v12
1096*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t1, v12
1097*c0909341SAndroid Build Coastguard Worker
1098*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v1, t3
1099*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1100*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v1, t4
1101*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t4, v14
1102*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v14
1103*c0909341SAndroid Build Coastguard Worker
1104*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
1105*c0909341SAndroid Build Coastguard Worker  vnclip.wi v13, v20, 12
1106*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
1107*c0909341SAndroid Build Coastguard Worker  vnclip.wi v15, v28, 12
1108*c0909341SAndroid Build Coastguard Worker
1109*c0909341SAndroid Build Coastguard Worker  vssub.vv v12,  v4, v16
1110*c0909341SAndroid Build Coastguard Worker  vsadd.vv v16,  v4, v16
1111*c0909341SAndroid Build Coastguard Worker  vssub.vv v14,  v6, v24
1112*c0909341SAndroid Build Coastguard Worker  vsadd.vv v20,  v6, v24
1113*c0909341SAndroid Build Coastguard Worker
1114*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v1, v18,  v9
1115*c0909341SAndroid Build Coastguard Worker  vssub.vv  v9, v18,  v9
1116*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v3, v22, v11
1117*c0909341SAndroid Build Coastguard Worker  vssub.vv v11, v22, v11
1118*c0909341SAndroid Build Coastguard Worker  vsadd.vv v18, v26, v13
1119*c0909341SAndroid Build Coastguard Worker  vssub.vv v13, v26, v13
1120*c0909341SAndroid Build Coastguard Worker  vsadd.vv v22, v30, v15
1121*c0909341SAndroid Build Coastguard Worker  vssub.vv v15, v30, v15
1122*c0909341SAndroid Build Coastguard Worker
1123*c0909341SAndroid Build Coastguard Worker  vssub.vv v4, v0, v16
1124*c0909341SAndroid Build Coastguard Worker  vsadd.vv v0, v0, v16
1125*c0909341SAndroid Build Coastguard Worker  vssub.vv v5, v1, v18
1126*c0909341SAndroid Build Coastguard Worker  vsadd.vv v1, v1, v18
1127*c0909341SAndroid Build Coastguard Worker  vssub.vv v6, v2, v20
1128*c0909341SAndroid Build Coastguard Worker  vsadd.vv v2, v2, v20
1129*c0909341SAndroid Build Coastguard Worker  vssub.vv v7, v3, v22
1130*c0909341SAndroid Build Coastguard Worker  vsadd.vv v3, v3, v22
1131*c0909341SAndroid Build Coastguard Worker
1132*c0909341SAndroid Build Coastguard Worker  li t1, 799
1133*c0909341SAndroid Build Coastguard Worker  li t2, 4017
1134*c0909341SAndroid Build Coastguard Worker  li t3, 3406
1135*c0909341SAndroid Build Coastguard Worker  li t4, 2276
1136*c0909341SAndroid Build Coastguard Worker
1137*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16,  v8, t2
1138*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18,  v8, t1
1139*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v10, t4
1140*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v10, t3
1141*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v13, t2
1142*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v13, t1
1143*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v15, t4
1144*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v15, t3
1145*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t1,  v9
1146*c0909341SAndroid Build Coastguard Worker  neg t1, t1
1147*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t3, v11
1148*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1149*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t2, v12
1150*c0909341SAndroid Build Coastguard Worker  neg t2, t2
1151*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t4, v14
1152*c0909341SAndroid Build Coastguard Worker  neg t4, t4
1153*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t2,  v9
1154*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t4, v11
1155*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t1, v12
1156*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v14
1157*c0909341SAndroid Build Coastguard Worker
1158*c0909341SAndroid Build Coastguard Worker  li t2, 2896
1159*c0909341SAndroid Build Coastguard Worker  li t3, 1567
1160*c0909341SAndroid Build Coastguard Worker  li t4, 3784
1161*c0909341SAndroid Build Coastguard Worker
1162*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
1163*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
1164*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
1165*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
1166*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
1167*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
1168*c0909341SAndroid Build Coastguard Worker  vnclip.wi v28, v28, 12
1169*c0909341SAndroid Build Coastguard Worker  vnclip.wi v30, v30, 12
1170*c0909341SAndroid Build Coastguard Worker
1171*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v8, v16, v24
1172*c0909341SAndroid Build Coastguard Worker  vsadd.vv  v9, v18, v26
1173*c0909341SAndroid Build Coastguard Worker  vsadd.vv v10, v20, v28
1174*c0909341SAndroid Build Coastguard Worker  vsadd.vv v11, v22, v30
1175*c0909341SAndroid Build Coastguard Worker  vssub.vv v12, v16, v24
1176*c0909341SAndroid Build Coastguard Worker  vssub.vv v13, v18, v26
1177*c0909341SAndroid Build Coastguard Worker  vssub.vv v14, v20, v28
1178*c0909341SAndroid Build Coastguard Worker  vssub.vv v15, v22, v30
1179*c0909341SAndroid Build Coastguard Worker
1180*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16,  v4, t4
1181*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18,  v4, t3
1182*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20,  v7, t4
1183*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22,  v7, t3
1184*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v12, t4
1185*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v12, t3
1186*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v15, t4
1187*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v15, t3
1188*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t3,  v5
1189*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t4,  v6
1190*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t3, v13
1191*c0909341SAndroid Build Coastguard Worker  neg t3, t3
1192*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t4, v14
1193*c0909341SAndroid Build Coastguard Worker  neg t4, t4
1194*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t3,  v6
1195*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t3, v14
1196*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t4,  v5
1197*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t4, v13
1198*c0909341SAndroid Build Coastguard Worker
1199*c0909341SAndroid Build Coastguard Worker  vnclip.wi v16, v16, 12
1200*c0909341SAndroid Build Coastguard Worker  vnclip.wi v18, v18, 12
1201*c0909341SAndroid Build Coastguard Worker  vnclip.wi v20, v20, 12
1202*c0909341SAndroid Build Coastguard Worker  vnclip.wi v22, v22, 12
1203*c0909341SAndroid Build Coastguard Worker  vnclip.wi v24, v24, 12
1204*c0909341SAndroid Build Coastguard Worker  vnclip.wi v26, v26, 12
1205*c0909341SAndroid Build Coastguard Worker  vnclip.wi v28, v28, 12
1206*c0909341SAndroid Build Coastguard Worker  vnclip.wi v30, v30, 12
1207*c0909341SAndroid Build Coastguard Worker
1208*c0909341SAndroid Build Coastguard Worker.ifc \o0, v0
1209*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o14, v9, v11
1210*c0909341SAndroid Build Coastguard Worker  vssub.vv  v11, v9, v11
1211*c0909341SAndroid Build Coastguard Worker  vssub.vv   v9, v1,  v3
1212*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o15, v1,  v3
1213*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o1, v8, v10
1214*c0909341SAndroid Build Coastguard Worker  vssub.vv  v10, v8, v10
1215*c0909341SAndroid Build Coastguard Worker  vssub.vv   v8, v0,  v2
1216*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o0, v0,  v2
1217*c0909341SAndroid Build Coastguard Worker.else
1218*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o1, v8, v10
1219*c0909341SAndroid Build Coastguard Worker  vssub.vv  v10, v8, v10
1220*c0909341SAndroid Build Coastguard Worker  vssub.vv   v8, v0,  v2
1221*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o0, v0,  v2
1222*c0909341SAndroid Build Coastguard Worker  vsadd.vv   v2, v9, v11
1223*c0909341SAndroid Build Coastguard Worker  vssub.vv  v11, v9, v11
1224*c0909341SAndroid Build Coastguard Worker  vssub.vv   v9, v1,  v3
1225*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o15, v1,  v3
1226*c0909341SAndroid Build Coastguard Worker  vmv.v.v  \o14, v2
1227*c0909341SAndroid Build Coastguard Worker.endif
1228*c0909341SAndroid Build Coastguard Worker
1229*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o3, v16, v20
1230*c0909341SAndroid Build Coastguard Worker  vssub.vv   v6, v16, v20
1231*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o12, v18, v22
1232*c0909341SAndroid Build Coastguard Worker  vssub.vv   v7, v18, v22
1233*c0909341SAndroid Build Coastguard Worker  vsadd.vv  \o2, v24, v28
1234*c0909341SAndroid Build Coastguard Worker  vssub.vv  v24, v24, v28
1235*c0909341SAndroid Build Coastguard Worker  vsadd.vv \o13, v26, v30
1236*c0909341SAndroid Build Coastguard Worker  vssub.vv  v26, v26, v30
1237*c0909341SAndroid Build Coastguard Worker
1238*c0909341SAndroid Build Coastguard Worker  neg t3, t2
1239*c0909341SAndroid Build Coastguard Worker
1240*c0909341SAndroid Build Coastguard Worker  vwmul.vx v28, v24, t2
1241*c0909341SAndroid Build Coastguard Worker  vwmul.vx v30, v24, t2
1242*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v28, t2, v26
1243*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v30, t3, v26
1244*c0909341SAndroid Build Coastguard Worker
1245*c0909341SAndroid Build Coastguard Worker  vwmul.vx v24, v10, t2
1246*c0909341SAndroid Build Coastguard Worker  vwmul.vx v26, v10, t2
1247*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v24, t2, v11
1248*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v26, t3, v11
1249*c0909341SAndroid Build Coastguard Worker
1250*c0909341SAndroid Build Coastguard Worker  vwmul.vx v20, v6, t2
1251*c0909341SAndroid Build Coastguard Worker  vwmul.vx v22, v6, t2
1252*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v20, t2, v7
1253*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v22, t3, v7
1254*c0909341SAndroid Build Coastguard Worker
1255*c0909341SAndroid Build Coastguard Worker  vwmul.vx v16, v8, t2
1256*c0909341SAndroid Build Coastguard Worker  vwmul.vx v18, v8, t2
1257*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v16, t2, v9
1258*c0909341SAndroid Build Coastguard Worker  vwmacc.vx v18, t3, v9
1259*c0909341SAndroid Build Coastguard Worker
1260*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o7, v16, 12
1261*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o8, v18, 12
1262*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o4, v20, 12
1263*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o11, v22, 12
1264*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o6, v24, 12
1265*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o9, v26, 12
1266*c0909341SAndroid Build Coastguard Worker  vnclip.wi  \o5, v28, 12
1267*c0909341SAndroid Build Coastguard Worker  vnclip.wi \o10, v30, 12
1268*c0909341SAndroid Build Coastguard Worker
1269*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
1270*c0909341SAndroid Build Coastguard Worker  vssub.vv  \o1, v16,  \o1
1271*c0909341SAndroid Build Coastguard Worker  vssub.vv  \o3, v16,  \o3
1272*c0909341SAndroid Build Coastguard Worker  vssub.vv  \o5, v16,  \o5
1273*c0909341SAndroid Build Coastguard Worker  vssub.vv  \o7, v16,  \o7
1274*c0909341SAndroid Build Coastguard Worker  vssub.vv  \o9, v16,  \o9
1275*c0909341SAndroid Build Coastguard Worker  vssub.vv \o11, v16, \o11
1276*c0909341SAndroid Build Coastguard Worker  vssub.vv \o13, v16, \o13
1277*c0909341SAndroid Build Coastguard Worker  vssub.vv \o15, v16, \o15
1278*c0909341SAndroid Build Coastguard Worker.endm
1279*c0909341SAndroid Build Coastguard Worker
1280*c0909341SAndroid Build Coastguard Workerfunction inv_adst_e16_x16_rvv, export=1, ext=v
1281*c0909341SAndroid Build Coastguard Worker  iadst_16 v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15
1282*c0909341SAndroid Build Coastguard Worker  jr t0
1283*c0909341SAndroid Build Coastguard Workerendfunc
1284*c0909341SAndroid Build Coastguard Worker
1285*c0909341SAndroid Build Coastguard Workerfunction inv_flipadst_e16_x16_rvv, export=1, ext=v
1286*c0909341SAndroid Build Coastguard Worker  iadst_16 v15, v14, v13, v12, v11, v10, v9, v8, v7, v6, v5, v4, v3, v2, v1, v0
1287*c0909341SAndroid Build Coastguard Worker  jr t0
1288*c0909341SAndroid Build Coastguard Workerendfunc
1289*c0909341SAndroid Build Coastguard Worker
1290*c0909341SAndroid Build Coastguard Worker.macro def_horz_16 variant
1291*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_horz\variant\()_16x8_rvv, export=1, ext=v
1292*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
1293*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t4)
1294*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t4)
1295*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1296*c0909341SAndroid Build Coastguard Worker  add t4, t4, t6
1297*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t4)
1298*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t4)
1299*c0909341SAndroid Build Coastguard Worker.endr
1300*c0909341SAndroid Build Coastguard Worker.ifc \variant, _identity
1301*c0909341SAndroid Build Coastguard Worker  li t1, 2*(5793-4096)*8
1302*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1303*c0909341SAndroid Build Coastguard Worker  vsmul.vx v16, v\i, t1
1304*c0909341SAndroid Build Coastguard Worker  vsra.vi v16, v16, 1
1305*c0909341SAndroid Build Coastguard Worker  vaadd.vv v\i, v\i, v16
1306*c0909341SAndroid Build Coastguard Worker.endr
1307*c0909341SAndroid Build Coastguard Worker  j L(horz_16x8_epilog)
1308*c0909341SAndroid Build Coastguard Worker.else
1309*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1310*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1311*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 2
1312*c0909341SAndroid Build Coastguard Worker.endr
1313*c0909341SAndroid Build Coastguard WorkerL(horz_16x8_epilog):
1314*c0909341SAndroid Build Coastguard Worker  vsse16.v v0, (t5), t6
1315*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1316*c0909341SAndroid Build Coastguard Worker  addi t5, t5, 2
1317*c0909341SAndroid Build Coastguard Worker  vsse16.v v\i, (t5), t6
1318*c0909341SAndroid Build Coastguard Worker.endr
1319*c0909341SAndroid Build Coastguard Worker  jr a7
1320*c0909341SAndroid Build Coastguard Worker.endif
1321*c0909341SAndroid Build Coastguard Workerendfunc
1322*c0909341SAndroid Build Coastguard Worker.endm
1323*c0909341SAndroid Build Coastguard Worker
1324*c0909341SAndroid Build Coastguard Workerdef_horz_16 _identity
1325*c0909341SAndroid Build Coastguard Workerdef_horz_16
1326*c0909341SAndroid Build Coastguard Worker
1327*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_vert_8x16_rvv, export=1, ext=v
1328*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1329*c0909341SAndroid Build Coastguard Worker
1330*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t4)
1331*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1332*c0909341SAndroid Build Coastguard Worker  add t4, t4, t6
1333*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t4)
1334*c0909341SAndroid Build Coastguard Worker.endr
1335*c0909341SAndroid Build Coastguard Worker
1336*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
1337*c0909341SAndroid Build Coastguard Worker
1338*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1339*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 4
1340*c0909341SAndroid Build Coastguard Worker.endr
1341*c0909341SAndroid Build Coastguard Worker
1342*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e8, mf2, ta, ma
1343*c0909341SAndroid Build Coastguard Worker
1344*c0909341SAndroid Build Coastguard Worker  vle8.v v16, (t5)
1345*c0909341SAndroid Build Coastguard Worker  add t0, t5, a1
1346*c0909341SAndroid Build Coastguard Worker  vle8.v v17, (t0)
1347*c0909341SAndroid Build Coastguard Worker.irp i, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
1348*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1349*c0909341SAndroid Build Coastguard Worker  vle8.v v\i, (t0)
1350*c0909341SAndroid Build Coastguard Worker.endr
1351*c0909341SAndroid Build Coastguard Worker
1352*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v16
1353*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v17
1354*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v18
1355*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v19
1356*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v4, v4, v20
1357*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v5, v5, v21
1358*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v6, v6, v22
1359*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v7, v7, v23
1360*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v8, v8, v24
1361*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v9, v9, v25
1362*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v10, v10, v26
1363*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v11, v11, v27
1364*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v12, v12, v28
1365*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v13, v13, v29
1366*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v14, v14, v30
1367*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v15, v15, v31
1368*c0909341SAndroid Build Coastguard Worker
1369*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m1, ta, ma
1370*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1371*c0909341SAndroid Build Coastguard Worker  vmax.vx v\i, v\i, zero
1372*c0909341SAndroid Build Coastguard Worker.endr
1373*c0909341SAndroid Build Coastguard Worker
1374*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
1375*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v16, v0, 0
1376*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v17, v1, 0
1377*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v18, v2, 0
1378*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v19, v3, 0
1379*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v20, v4, 0
1380*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v21, v5, 0
1381*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v22, v6, 0
1382*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v23, v7, 0
1383*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v24, v8, 0
1384*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v25, v9, 0
1385*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v26, v10, 0
1386*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v27, v11, 0
1387*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v28, v12, 0
1388*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v29, v13, 0
1389*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v30, v14, 0
1390*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v31, v15, 0
1391*c0909341SAndroid Build Coastguard Worker
1392*c0909341SAndroid Build Coastguard Worker  vse8.v v16, (t5)
1393*c0909341SAndroid Build Coastguard Worker.irp i, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
1394*c0909341SAndroid Build Coastguard Worker  add t5, t5, a1
1395*c0909341SAndroid Build Coastguard Worker  vse8.v v\i, (t5)
1396*c0909341SAndroid Build Coastguard Worker.endr
1397*c0909341SAndroid Build Coastguard Worker
1398*c0909341SAndroid Build Coastguard Worker  jr a7
1399*c0909341SAndroid Build Coastguard Workerendfunc
1400*c0909341SAndroid Build Coastguard Worker
1401*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_16x16_rvv, export=1, ext=v
1402*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1403*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1404*c0909341SAndroid Build Coastguard Worker  addi sp, sp, -16*32
1405*c0909341SAndroid Build Coastguard Worker.irp i, 8, 0
1406*c0909341SAndroid Build Coastguard Worker  addi t4, a2, \i*2
1407*c0909341SAndroid Build Coastguard Worker  addi t5, sp, \i*16*2
1408*c0909341SAndroid Build Coastguard Worker.if \i == 8
1409*c0909341SAndroid Build Coastguard Worker  blt a3, a7, 1f
1410*c0909341SAndroid Build Coastguard Worker.endif
1411*c0909341SAndroid Build Coastguard Worker  li t6, 16*2
1412*c0909341SAndroid Build Coastguard Worker  jalr a7, a6
1413*c0909341SAndroid Build Coastguard Worker.if \i == 8
1414*c0909341SAndroid Build Coastguard Worker  j 2f
1415*c0909341SAndroid Build Coastguard Worker1:
1416*c0909341SAndroid Build Coastguard Worker  li t1, 64
1417*c0909341SAndroid Build Coastguard Worker  vsetvli zero, t1, e16, m8, ta, ma
1418*c0909341SAndroid Build Coastguard Worker  vmv.v.x v0, zero
1419*c0909341SAndroid Build Coastguard Worker  vse16.v v0, (t5)
1420*c0909341SAndroid Build Coastguard Worker  addi t5, t5, 128
1421*c0909341SAndroid Build Coastguard Worker  vse16.v v0, (t5)
1422*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1423*c0909341SAndroid Build Coastguard Worker2:
1424*c0909341SAndroid Build Coastguard Worker.endif
1425*c0909341SAndroid Build Coastguard Worker.endr
1426*c0909341SAndroid Build Coastguard Worker.irp i, 0, 8
1427*c0909341SAndroid Build Coastguard Worker  addi t4, sp, \i*2
1428*c0909341SAndroid Build Coastguard Worker  addi t5, a0, \i
1429*c0909341SAndroid Build Coastguard Worker  li t6, 16*2
1430*c0909341SAndroid Build Coastguard Worker  jal a7, inv_txfm_add_vert_8x16_rvv
1431*c0909341SAndroid Build Coastguard Worker.endr
1432*c0909341SAndroid Build Coastguard Worker  addi sp, sp, 16*32
1433*c0909341SAndroid Build Coastguard Worker  ret
1434*c0909341SAndroid Build Coastguard Workerendfunc
1435*c0909341SAndroid Build Coastguard Worker
1436*c0909341SAndroid Build Coastguard Worker.macro def_fn_16x16 txfm1, txfm2, eob_half
1437*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x16_8bpc_rvv, export=1, ext=v
1438*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
1439*c0909341SAndroid Build Coastguard Worker beqz a3, 1f
1440*c0909341SAndroid Build Coastguard Worker.endif
1441*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1442*c0909341SAndroid Build Coastguard Worker  la a6, inv_txfm_horz_identity_16x8_rvv
1443*c0909341SAndroid Build Coastguard Worker.else
1444*c0909341SAndroid Build Coastguard Worker  la a6, inv_txfm_horz_16x8_rvv
1445*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x16_rvv
1446*c0909341SAndroid Build Coastguard Worker.endif
1447*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x16_rvv
1448*c0909341SAndroid Build Coastguard Worker  li a7, \eob_half
1449*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_16x16_rvv
1450*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct
1451*c0909341SAndroid Build Coastguard Worker1:
1452*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1453*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 16, e16, m2, ta, ma
1454*c0909341SAndroid Build Coastguard Worker  lh t2, (a2)
1455*c0909341SAndroid Build Coastguard Worker  li t3, 2896*8
1456*c0909341SAndroid Build Coastguard Worker  li t4, 1<<14
1457*c0909341SAndroid Build Coastguard Worker  li t5, 0xFFFF
1458*c0909341SAndroid Build Coastguard Worker  li t6, -0x10000
1459*c0909341SAndroid Build Coastguard Worker
1460*c0909341SAndroid Build Coastguard Worker  sh x0, (a2)
1461*c0909341SAndroid Build Coastguard Worker
1462*c0909341SAndroid Build Coastguard Worker  mul t2, t2, t3
1463*c0909341SAndroid Build Coastguard Worker  add t2, t2, t4
1464*c0909341SAndroid Build Coastguard Worker  srai t2, t2, 15
1465*c0909341SAndroid Build Coastguard Worker  ble t2, t5, 3f
1466*c0909341SAndroid Build Coastguard Worker  mv t2, t5
1467*c0909341SAndroid Build Coastguard Worker3:
1468*c0909341SAndroid Build Coastguard Worker  ble t6, t2, 4f
1469*c0909341SAndroid Build Coastguard Worker  mv t2, t6
1470*c0909341SAndroid Build Coastguard Worker4:
1471*c0909341SAndroid Build Coastguard Worker  addi t2, t2, 2
1472*c0909341SAndroid Build Coastguard Worker  srai t2, t2, 2
1473*c0909341SAndroid Build Coastguard Worker  mul t2, t2, t3
1474*c0909341SAndroid Build Coastguard Worker  add t2, t2, t4
1475*c0909341SAndroid Build Coastguard Worker  srai t2, t2, 15
1476*c0909341SAndroid Build Coastguard Worker  ble t2, t5, 5f
1477*c0909341SAndroid Build Coastguard Worker  mv t2, t5
1478*c0909341SAndroid Build Coastguard Worker5:
1479*c0909341SAndroid Build Coastguard Worker  ble t6, t2, 6f
1480*c0909341SAndroid Build Coastguard Worker  mv t2, t6
1481*c0909341SAndroid Build Coastguard Worker6:
1482*c0909341SAndroid Build Coastguard Worker  addi t2, t2, 8
1483*c0909341SAndroid Build Coastguard Worker  srai t2, t2, 4
1484*c0909341SAndroid Build Coastguard Worker  vmv.v.x v24, t2
1485*c0909341SAndroid Build Coastguard Worker
1486*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, m1, ta, ma
1487*c0909341SAndroid Build Coastguard Worker  add t2, a1, a1
1488*c0909341SAndroid Build Coastguard Worker  li t3, 16
1489*c0909341SAndroid Build Coastguard Worker2:
1490*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
1491*c0909341SAndroid Build Coastguard Worker  vle8.v v16, (a0)
1492*c0909341SAndroid Build Coastguard Worker  vle8.v v17, (t0)
1493*c0909341SAndroid Build Coastguard Worker
1494*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v24, v16
1495*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v24, v17
1496*c0909341SAndroid Build Coastguard Worker
1497*c0909341SAndroid Build Coastguard Worker  addi t3, t3, -2 # loop counter
1498*c0909341SAndroid Build Coastguard Worker
1499*c0909341SAndroid Build Coastguard Worker
1500*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m2, ta, ma
1501*c0909341SAndroid Build Coastguard Worker.irp i, 0, 2
1502*c0909341SAndroid Build Coastguard Worker  vmax.vx v\i, v\i, zero
1503*c0909341SAndroid Build Coastguard Worker.endr
1504*c0909341SAndroid Build Coastguard Worker
1505*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, m1, ta, ma
1506*c0909341SAndroid Build Coastguard Worker
1507*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v16, v0, 0
1508*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v17, v2, 0
1509*c0909341SAndroid Build Coastguard Worker
1510*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
1511*c0909341SAndroid Build Coastguard Worker  vse8.v v16, (a0)
1512*c0909341SAndroid Build Coastguard Worker  add a0, a0, t2
1513*c0909341SAndroid Build Coastguard Worker  vse8.v v17, (t0)
1514*c0909341SAndroid Build Coastguard Worker
1515*c0909341SAndroid Build Coastguard Worker  bnez t3, 2b
1516*c0909341SAndroid Build Coastguard Worker
1517*c0909341SAndroid Build Coastguard Worker  ret
1518*c0909341SAndroid Build Coastguard Worker.endif
1519*c0909341SAndroid Build Coastguard Workerendfunc
1520*c0909341SAndroid Build Coastguard Worker.endm
1521*c0909341SAndroid Build Coastguard Worker
1522*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 dct, dct, 36
1523*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 identity, identity, 36
1524*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 dct, adst, 36
1525*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 dct, flipadst, 36
1526*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 dct, identity, 8
1527*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 adst, dct, 36
1528*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 adst, adst, 36
1529*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 adst, flipadst, 36
1530*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 flipadst, dct, 36
1531*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 flipadst, adst, 36
1532*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 flipadst, flipadst, 36
1533*c0909341SAndroid Build Coastguard Workerdef_fn_16x16 identity, dct, 8
1534*c0909341SAndroid Build Coastguard Worker
1535*c0909341SAndroid Build Coastguard Worker.macro def_fn_416_base variant
1536*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_\variant\()add_4x16_rvv, export=1, ext=v
1537*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1538*c0909341SAndroid Build Coastguard Worker
1539*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1540*c0909341SAndroid Build Coastguard Worker
1541*c0909341SAndroid Build Coastguard Worker  blt a3, a6, 1f
1542*c0909341SAndroid Build Coastguard Worker
1543*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
1544*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t0)
1545*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1546*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1547*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1548*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
1549*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1550*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
1551*c0909341SAndroid Build Coastguard Worker
1552*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1553*c0909341SAndroid Build Coastguard Worker  li t1, (5793-4096)*8
1554*c0909341SAndroid Build Coastguard Worker  vsmul.vx v8, v0, t1
1555*c0909341SAndroid Build Coastguard Worker  vaadd.vv v4, v0, v8
1556*c0909341SAndroid Build Coastguard Worker  vsmul.vx v8, v1, t1
1557*c0909341SAndroid Build Coastguard Worker  vaadd.vv v5, v1, v8
1558*c0909341SAndroid Build Coastguard Worker  vsmul.vx v8, v2, t1
1559*c0909341SAndroid Build Coastguard Worker  vaadd.vv v6, v2, v8
1560*c0909341SAndroid Build Coastguard Worker  vsmul.vx v8, v3, t1
1561*c0909341SAndroid Build Coastguard Worker  vaadd.vv v7, v3, v8
1562*c0909341SAndroid Build Coastguard Worker.else
1563*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1564*c0909341SAndroid Build Coastguard Worker
1565*c0909341SAndroid Build Coastguard Worker  vssra.vi v4, v0, 1
1566*c0909341SAndroid Build Coastguard Worker  vssra.vi v5, v1, 1
1567*c0909341SAndroid Build Coastguard Worker  vssra.vi v6, v2, 1
1568*c0909341SAndroid Build Coastguard Worker  vssra.vi v7, v3, 1
1569*c0909341SAndroid Build Coastguard Worker.endif
1570*c0909341SAndroid Build Coastguard Worker
1571*c0909341SAndroid Build Coastguard Worker  j 2f
1572*c0909341SAndroid Build Coastguard Worker
1573*c0909341SAndroid Build Coastguard Worker1:
1574*c0909341SAndroid Build Coastguard Worker.irp i, 4, 5, 6, 7
1575*c0909341SAndroid Build Coastguard Worker  vmv.v.x v\i, zero
1576*c0909341SAndroid Build Coastguard Worker.endr
1577*c0909341SAndroid Build Coastguard Worker
1578*c0909341SAndroid Build Coastguard Worker2:
1579*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
1580*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 32
1581*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1582*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1583*c0909341SAndroid Build Coastguard Worker  vle16.v v2, (t0)
1584*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1585*c0909341SAndroid Build Coastguard Worker  vle16.v v3, (t0)
1586*c0909341SAndroid Build Coastguard Worker
1587*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1588*c0909341SAndroid Build Coastguard Worker  li t1, (5793-4096)*8
1589*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3
1590*c0909341SAndroid Build Coastguard Worker  vsmul.vx v8, v\i, t1
1591*c0909341SAndroid Build Coastguard Worker  vaadd.vv v\i, v\i, v8
1592*c0909341SAndroid Build Coastguard Worker.endr
1593*c0909341SAndroid Build Coastguard Worker
1594*c0909341SAndroid Build Coastguard Worker  j L(itx_4x16_epilog)
1595*c0909341SAndroid Build Coastguard Worker.else
1596*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1597*c0909341SAndroid Build Coastguard Worker
1598*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 1
1599*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 1
1600*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 1
1601*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 1
1602*c0909341SAndroid Build Coastguard Worker
1603*c0909341SAndroid Build Coastguard WorkerL(itx_4x16_epilog):
1604*c0909341SAndroid Build Coastguard Worker  vsseg4e16.v v0, (a2)
1605*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 64
1606*c0909341SAndroid Build Coastguard Worker  vsseg4e16.v v4, (t0)
1607*c0909341SAndroid Build Coastguard Worker
1608*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
1609*c0909341SAndroid Build Coastguard Worker
1610*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
1611*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
1612*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (a2)
1613*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
1614*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1615*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1616*c0909341SAndroid Build Coastguard Worker.irp i, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1617*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
1618*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1619*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1620*c0909341SAndroid Build Coastguard Worker.endr
1621*c0909341SAndroid Build Coastguard Worker
1622*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
1623*c0909341SAndroid Build Coastguard Worker
1624*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1625*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 4
1626*c0909341SAndroid Build Coastguard Worker.endr
1627*c0909341SAndroid Build Coastguard Worker
1628*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
1629*c0909341SAndroid Build Coastguard Worker
1630*c0909341SAndroid Build Coastguard Worker  vle8.v v16, (a0)
1631*c0909341SAndroid Build Coastguard Worker  add t0, a0, a1
1632*c0909341SAndroid Build Coastguard Worker  vle8.v v17, (t0)
1633*c0909341SAndroid Build Coastguard Worker.irp i, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
1634*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1635*c0909341SAndroid Build Coastguard Worker  vle8.v v\i, (t0)
1636*c0909341SAndroid Build Coastguard Worker.endr
1637*c0909341SAndroid Build Coastguard Worker
1638*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v0,  v0, v16
1639*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v1,  v1, v17
1640*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v2,  v2, v18
1641*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v3,  v3, v19
1642*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v4,  v4, v20
1643*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v5,  v5, v21
1644*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v6,  v6, v22
1645*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v7,  v7, v23
1646*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v8,  v8, v24
1647*c0909341SAndroid Build Coastguard Worker  vwaddu.wv  v9,  v9, v25
1648*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v10, v10, v26
1649*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v11, v11, v27
1650*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v12, v12, v28
1651*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v13, v13, v29
1652*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v14, v14, v30
1653*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v15, v15, v31
1654*c0909341SAndroid Build Coastguard Worker
1655*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, mf2, ta, ma
1656*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1657*c0909341SAndroid Build Coastguard Worker  vmax.vx v\i, v\i, zero
1658*c0909341SAndroid Build Coastguard Worker.endr
1659*c0909341SAndroid Build Coastguard Worker
1660*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf4, ta, ma
1661*c0909341SAndroid Build Coastguard Worker
1662*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v16,  v0, 0
1663*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v17,  v1, 0
1664*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v18,  v2, 0
1665*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v19,  v3, 0
1666*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v20,  v4, 0
1667*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v21,  v5, 0
1668*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v22,  v6, 0
1669*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v23,  v7, 0
1670*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v24,  v8, 0
1671*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v25,  v9, 0
1672*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v26, v10, 0
1673*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v27, v11, 0
1674*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v28, v12, 0
1675*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v29, v13, 0
1676*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v30, v14, 0
1677*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v31, v15, 0
1678*c0909341SAndroid Build Coastguard Worker
1679*c0909341SAndroid Build Coastguard Worker  vse8.v v16, (a0)
1680*c0909341SAndroid Build Coastguard Worker.irp i, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
1681*c0909341SAndroid Build Coastguard Worker  add a0, a0, a1
1682*c0909341SAndroid Build Coastguard Worker  vse8.v v\i, (a0)
1683*c0909341SAndroid Build Coastguard Worker.endr
1684*c0909341SAndroid Build Coastguard Worker
1685*c0909341SAndroid Build Coastguard Worker  ret
1686*c0909341SAndroid Build Coastguard Worker.endif
1687*c0909341SAndroid Build Coastguard Workerendfunc
1688*c0909341SAndroid Build Coastguard Worker
1689*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_\variant\()add_16x4_rvv, export=1, ext=v
1690*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1691*c0909341SAndroid Build Coastguard Worker
1692*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 4, e16, mf2, ta, ma
1693*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
1694*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 8
1695*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1696*c0909341SAndroid Build Coastguard Worker.irp i, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1697*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 8
1698*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1699*c0909341SAndroid Build Coastguard Worker.endr
1700*c0909341SAndroid Build Coastguard Worker
1701*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1702*c0909341SAndroid Build Coastguard Worker  li t1, 2*(5793-4096)*8
1703*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1704*c0909341SAndroid Build Coastguard Worker  vsmul.vx v16, v\i, t1
1705*c0909341SAndroid Build Coastguard Worker  vssra.vi v16, v16, 1
1706*c0909341SAndroid Build Coastguard Worker  vsadd.vv v\i, v\i, v16
1707*c0909341SAndroid Build Coastguard Worker.endr
1708*c0909341SAndroid Build Coastguard Worker
1709*c0909341SAndroid Build Coastguard Worker  j L(itx_16x4_epilog)
1710*c0909341SAndroid Build Coastguard Worker.else
1711*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1712*c0909341SAndroid Build Coastguard Worker
1713*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1714*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 1
1715*c0909341SAndroid Build Coastguard Worker.endr
1716*c0909341SAndroid Build Coastguard Worker
1717*c0909341SAndroid Build Coastguard WorkerL(itx_16x4_epilog):
1718*c0909341SAndroid Build Coastguard Worker  li t0, 32
1719*c0909341SAndroid Build Coastguard Worker  vssseg8e16.v v0, (a2), t0
1720*c0909341SAndroid Build Coastguard Worker  addi t1, a2, 16
1721*c0909341SAndroid Build Coastguard Worker  vssseg8e16.v v8, (t1), t0
1722*c0909341SAndroid Build Coastguard Worker
1723*c0909341SAndroid Build Coastguard Worker.irp j, 0, 8
1724*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1725*c0909341SAndroid Build Coastguard Worker
1726*c0909341SAndroid Build Coastguard Worker  vmv.v.x v4, zero
1727*c0909341SAndroid Build Coastguard Worker  addi t0, a2, \j*2
1728*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t0)
1729*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
1730*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3
1731*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1732*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1733*c0909341SAndroid Build Coastguard Worker  vse16.v v4, (t0)
1734*c0909341SAndroid Build Coastguard Worker.endr
1735*c0909341SAndroid Build Coastguard Worker
1736*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
1737*c0909341SAndroid Build Coastguard Worker
1738*c0909341SAndroid Build Coastguard Worker  vssra.vi v0, v0, 4
1739*c0909341SAndroid Build Coastguard Worker  vssra.vi v1, v1, 4
1740*c0909341SAndroid Build Coastguard Worker  vssra.vi v2, v2, 4
1741*c0909341SAndroid Build Coastguard Worker  vssra.vi v3, v3, 4
1742*c0909341SAndroid Build Coastguard Worker
1743*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
1744*c0909341SAndroid Build Coastguard Worker  addi t0, a0, \j
1745*c0909341SAndroid Build Coastguard Worker  vle8.v v4, (t0)
1746*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1747*c0909341SAndroid Build Coastguard Worker  vle8.v v5, (t0)
1748*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1749*c0909341SAndroid Build Coastguard Worker  vle8.v v6, (t0)
1750*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1751*c0909341SAndroid Build Coastguard Worker  vle8.v v7, (t0)
1752*c0909341SAndroid Build Coastguard Worker
1753*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v4
1754*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v5
1755*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v6
1756*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v7
1757*c0909341SAndroid Build Coastguard Worker
1758*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m1, ta, ma
1759*c0909341SAndroid Build Coastguard Worker  vmax.vx v0, v0, zero
1760*c0909341SAndroid Build Coastguard Worker  vmax.vx v1, v1, zero
1761*c0909341SAndroid Build Coastguard Worker  vmax.vx v2, v2, zero
1762*c0909341SAndroid Build Coastguard Worker  vmax.vx v3, v3, zero
1763*c0909341SAndroid Build Coastguard Worker
1764*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
1765*c0909341SAndroid Build Coastguard Worker
1766*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v4, v0, 0
1767*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v5, v1, 0
1768*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v6, v2, 0
1769*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v7, v3, 0
1770*c0909341SAndroid Build Coastguard Worker
1771*c0909341SAndroid Build Coastguard Worker  addi t0, a0, \j
1772*c0909341SAndroid Build Coastguard Worker  vse8.v v4, (t0)
1773*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1774*c0909341SAndroid Build Coastguard Worker  vse8.v v5, (t0)
1775*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1776*c0909341SAndroid Build Coastguard Worker  vse8.v v6, (t0)
1777*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1778*c0909341SAndroid Build Coastguard Worker  vse8.v v7, (t0)
1779*c0909341SAndroid Build Coastguard Worker.endr
1780*c0909341SAndroid Build Coastguard Worker
1781*c0909341SAndroid Build Coastguard Worker  ret
1782*c0909341SAndroid Build Coastguard Worker.endif
1783*c0909341SAndroid Build Coastguard Workerendfunc
1784*c0909341SAndroid Build Coastguard Worker.endm
1785*c0909341SAndroid Build Coastguard Worker
1786*c0909341SAndroid Build Coastguard Workerdef_fn_416_base identity_
1787*c0909341SAndroid Build Coastguard Workerdef_fn_416_base
1788*c0909341SAndroid Build Coastguard Worker
1789*c0909341SAndroid Build Coastguard Worker.macro def_fn_416 w, h, txfm1, txfm2, eob_half
1790*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_\w\()x\h\()_8bpc_rvv, export=1
1791*c0909341SAndroid Build Coastguard Worker.if \w == 4 && (\txfm1 == adst || \txfm1 == flipadst)
1792*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x\w\()w_rvv
1793*c0909341SAndroid Build Coastguard Worker.elseif \txfm1 != identity
1794*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x\w\()_rvv
1795*c0909341SAndroid Build Coastguard Worker.endif
1796*c0909341SAndroid Build Coastguard Worker.if \h == 4 && (\txfm2 == adst || \txfm2 == flipadst)
1797*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x\h\()w_rvv
1798*c0909341SAndroid Build Coastguard Worker.else
1799*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x\h\()_rvv
1800*c0909341SAndroid Build Coastguard Worker.endif
1801*c0909341SAndroid Build Coastguard Worker.if \w == 4
1802*c0909341SAndroid Build Coastguard Worker  li a6, \eob_half
1803*c0909341SAndroid Build Coastguard Worker.endif
1804*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
1805*c0909341SAndroid Build Coastguard Worker  j inv_txfm_identity_add_\w\()x\h\()_rvv
1806*c0909341SAndroid Build Coastguard Worker.else
1807*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_\w\()x\h\()_rvv
1808*c0909341SAndroid Build Coastguard Worker.endif
1809*c0909341SAndroid Build Coastguard Workerendfunc
1810*c0909341SAndroid Build Coastguard Worker.endm
1811*c0909341SAndroid Build Coastguard Worker
1812*c0909341SAndroid Build Coastguard Worker.macro def_fns_416 w, h
1813*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, dct, dct, 29
1814*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, identity, identity, 29
1815*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, dct, adst, 29
1816*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, dct, flipadst, 29
1817*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, dct, identity, 8
1818*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, adst, dct, 29
1819*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, adst, adst, 29
1820*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, adst, flipadst, 29
1821*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, flipadst, dct, 29
1822*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, flipadst, adst, 29
1823*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, flipadst, flipadst, 29
1824*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, identity, dct, 32
1825*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, adst, identity, 8
1826*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, flipadst, identity, 8
1827*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, identity, adst, 32
1828*c0909341SAndroid Build Coastguard Workerdef_fn_416 \w, \h, identity, flipadst, 32
1829*c0909341SAndroid Build Coastguard Worker.endm
1830*c0909341SAndroid Build Coastguard Worker
1831*c0909341SAndroid Build Coastguard Workerdef_fns_416 4, 16
1832*c0909341SAndroid Build Coastguard Workerdef_fns_416 16, 4
1833*c0909341SAndroid Build Coastguard Worker
1834*c0909341SAndroid Build Coastguard Worker.macro def_fn_816_base variant
1835*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_\variant\()add_8x16_rvv, export=1, ext=v
1836*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1837*c0909341SAndroid Build Coastguard Worker
1838*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1839*c0909341SAndroid Build Coastguard Worker
1840*c0909341SAndroid Build Coastguard Worker  blt a3, a6, 1f
1841*c0909341SAndroid Build Coastguard Worker
1842*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
1843*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
1844*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t0)
1845*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1846*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7
1847*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1848*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1849*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1850*c0909341SAndroid Build Coastguard Worker.endr
1851*c0909341SAndroid Build Coastguard Worker
1852*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
1853*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1854*c0909341SAndroid Build Coastguard Worker  vsmul.vx  v8, v0, t1
1855*c0909341SAndroid Build Coastguard Worker  vsmul.vx  v9, v1, t1
1856*c0909341SAndroid Build Coastguard Worker  vsmul.vx v10, v2, t1
1857*c0909341SAndroid Build Coastguard Worker  vsmul.vx v11, v3, t1
1858*c0909341SAndroid Build Coastguard Worker  vsmul.vx v12, v4, t1
1859*c0909341SAndroid Build Coastguard Worker  vsmul.vx v13, v5, t1
1860*c0909341SAndroid Build Coastguard Worker  vsmul.vx v14, v6, t1
1861*c0909341SAndroid Build Coastguard Worker  vsmul.vx v15, v7, t1
1862*c0909341SAndroid Build Coastguard Worker.else
1863*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
1864*c0909341SAndroid Build Coastguard Worker  vsmul.vx v\i, v\i, t1
1865*c0909341SAndroid Build Coastguard Worker.endr
1866*c0909341SAndroid Build Coastguard Worker
1867*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1868*c0909341SAndroid Build Coastguard Worker
1869*c0909341SAndroid Build Coastguard Worker  vssra.vi  v8, v0, 1
1870*c0909341SAndroid Build Coastguard Worker  vssra.vi  v9, v1, 1
1871*c0909341SAndroid Build Coastguard Worker  vssra.vi v10, v2, 1
1872*c0909341SAndroid Build Coastguard Worker  vssra.vi v11, v3, 1
1873*c0909341SAndroid Build Coastguard Worker  vssra.vi v12, v4, 1
1874*c0909341SAndroid Build Coastguard Worker  vssra.vi v13, v5, 1
1875*c0909341SAndroid Build Coastguard Worker  vssra.vi v14, v6, 1
1876*c0909341SAndroid Build Coastguard Worker  vssra.vi v15, v7, 1
1877*c0909341SAndroid Build Coastguard Worker.endif
1878*c0909341SAndroid Build Coastguard Worker
1879*c0909341SAndroid Build Coastguard Worker  j 2f
1880*c0909341SAndroid Build Coastguard Worker
1881*c0909341SAndroid Build Coastguard Worker1:
1882*c0909341SAndroid Build Coastguard Worker.irp i, 8, 9, 10, 11, 12, 13, 14, 15
1883*c0909341SAndroid Build Coastguard Worker  vmv.v.x v\i, zero
1884*c0909341SAndroid Build Coastguard Worker.endr
1885*c0909341SAndroid Build Coastguard Worker
1886*c0909341SAndroid Build Coastguard Worker2:
1887*c0909341SAndroid Build Coastguard Worker  vmv.v.x v16, zero
1888*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
1889*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (a2)
1890*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 32
1891*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1892*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1893*c0909341SAndroid Build Coastguard Worker.irp i, 2, 3, 4, 5, 6, 7
1894*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1895*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1896*c0909341SAndroid Build Coastguard Worker  vse16.v v16, (t0)
1897*c0909341SAndroid Build Coastguard Worker.endr
1898*c0909341SAndroid Build Coastguard Worker
1899*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
1900*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
1901*c0909341SAndroid Build Coastguard Worker  vsmul.vx v\i, v\i, t1
1902*c0909341SAndroid Build Coastguard Worker.endr
1903*c0909341SAndroid Build Coastguard Worker
1904*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1905*c0909341SAndroid Build Coastguard Worker  j L(itx_8x16_epilog)
1906*c0909341SAndroid Build Coastguard Worker.else
1907*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1908*c0909341SAndroid Build Coastguard Worker
1909*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
1910*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 1
1911*c0909341SAndroid Build Coastguard Worker.endr
1912*c0909341SAndroid Build Coastguard Worker
1913*c0909341SAndroid Build Coastguard WorkerL(itx_8x16_epilog):
1914*c0909341SAndroid Build Coastguard Worker  addi t4, sp, -8*32
1915*c0909341SAndroid Build Coastguard Worker  vsseg8e16.v v0, (t4)
1916*c0909341SAndroid Build Coastguard Worker  addi t0, t4, 8*16
1917*c0909341SAndroid Build Coastguard Worker  vsseg8e16.v v8, (t0)
1918*c0909341SAndroid Build Coastguard Worker
1919*c0909341SAndroid Build Coastguard Worker  mv t5, a0
1920*c0909341SAndroid Build Coastguard Worker  li t6, 16
1921*c0909341SAndroid Build Coastguard Worker  jal a7, inv_txfm_add_vert_8x16_rvv
1922*c0909341SAndroid Build Coastguard Worker
1923*c0909341SAndroid Build Coastguard Worker  ret
1924*c0909341SAndroid Build Coastguard Worker.endif
1925*c0909341SAndroid Build Coastguard Workerendfunc
1926*c0909341SAndroid Build Coastguard Worker
1927*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_\variant\()add_16x8_rvv, export=1, ext=v
1928*c0909341SAndroid Build Coastguard Worker  csrw vxrm, zero
1929*c0909341SAndroid Build Coastguard Worker
1930*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1931*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (a2)
1932*c0909341SAndroid Build Coastguard Worker  addi t0, a2, 16
1933*c0909341SAndroid Build Coastguard Worker  vle16.v v1, (t0)
1934*c0909341SAndroid Build Coastguard Worker.irp i, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1935*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 16
1936*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1937*c0909341SAndroid Build Coastguard Worker.endr
1938*c0909341SAndroid Build Coastguard Worker
1939*c0909341SAndroid Build Coastguard Worker  li t1, 2896*8
1940*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1941*c0909341SAndroid Build Coastguard Worker  vsmul.vx v\i, v\i, t1
1942*c0909341SAndroid Build Coastguard Worker.endr
1943*c0909341SAndroid Build Coastguard Worker
1944*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_
1945*c0909341SAndroid Build Coastguard Worker  li t1, 2*(5793-4096)*8
1946*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1947*c0909341SAndroid Build Coastguard Worker  vsmul.vx v16, v\i, t1
1948*c0909341SAndroid Build Coastguard Worker  vssra.vi v16, v16, 1
1949*c0909341SAndroid Build Coastguard Worker  vsadd.vv v\i, v\i, v16
1950*c0909341SAndroid Build Coastguard Worker.endr
1951*c0909341SAndroid Build Coastguard Worker
1952*c0909341SAndroid Build Coastguard Worker  j L(itx_16x8_epilog)
1953*c0909341SAndroid Build Coastguard Worker.else
1954*c0909341SAndroid Build Coastguard Worker  jalr t0, a4
1955*c0909341SAndroid Build Coastguard Worker
1956*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1957*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 1
1958*c0909341SAndroid Build Coastguard Worker.endr
1959*c0909341SAndroid Build Coastguard Worker
1960*c0909341SAndroid Build Coastguard WorkerL(itx_16x8_epilog):
1961*c0909341SAndroid Build Coastguard Worker  li t0, 32
1962*c0909341SAndroid Build Coastguard Worker  vssseg8e16.v v0, (a2), t0
1963*c0909341SAndroid Build Coastguard Worker  addi t1, a2, 16
1964*c0909341SAndroid Build Coastguard Worker  vssseg8e16.v v8, (t1), t0
1965*c0909341SAndroid Build Coastguard Worker
1966*c0909341SAndroid Build Coastguard Worker.irp j, 0, 8
1967*c0909341SAndroid Build Coastguard Worker  vsetivli zero, 8, e16, m1, ta, ma
1968*c0909341SAndroid Build Coastguard Worker
1969*c0909341SAndroid Build Coastguard Worker  vmv.v.x v8, zero
1970*c0909341SAndroid Build Coastguard Worker  addi t0, a2, \j*2
1971*c0909341SAndroid Build Coastguard Worker  vle16.v v0, (t0)
1972*c0909341SAndroid Build Coastguard Worker  vse16.v v8, (t0)
1973*c0909341SAndroid Build Coastguard Worker.irp i, 1, 2, 3, 4, 5, 6, 7
1974*c0909341SAndroid Build Coastguard Worker  addi t0, t0, 32
1975*c0909341SAndroid Build Coastguard Worker  vle16.v v\i, (t0)
1976*c0909341SAndroid Build Coastguard Worker  vse16.v v8, (t0)
1977*c0909341SAndroid Build Coastguard Worker.endr
1978*c0909341SAndroid Build Coastguard Worker
1979*c0909341SAndroid Build Coastguard Worker  jalr t0, a5
1980*c0909341SAndroid Build Coastguard Worker
1981*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
1982*c0909341SAndroid Build Coastguard Worker  vssra.vi v\i, v\i, 4
1983*c0909341SAndroid Build Coastguard Worker.endr
1984*c0909341SAndroid Build Coastguard Worker
1985*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
1986*c0909341SAndroid Build Coastguard Worker  addi t0, a0, \j
1987*c0909341SAndroid Build Coastguard Worker  vle8.v v8, (t0)
1988*c0909341SAndroid Build Coastguard Worker.irp i, 9, 10, 11, 12, 13, 14, 15
1989*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
1990*c0909341SAndroid Build Coastguard Worker  vle8.v v\i, (t0)
1991*c0909341SAndroid Build Coastguard Worker.endr
1992*c0909341SAndroid Build Coastguard Worker
1993*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v0, v0, v8
1994*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v1, v1, v9
1995*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v2, v2, v10
1996*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v3, v3, v11
1997*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v4, v4, v12
1998*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v5, v5, v13
1999*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v6, v6, v14
2000*c0909341SAndroid Build Coastguard Worker  vwaddu.wv v7, v7, v15
2001*c0909341SAndroid Build Coastguard Worker
2002*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e16, m1, ta, ma
2003*c0909341SAndroid Build Coastguard Worker.irp i, 0, 1, 2, 3, 4, 5, 6, 7
2004*c0909341SAndroid Build Coastguard Worker  vmax.vx v\i, v\i, zero
2005*c0909341SAndroid Build Coastguard Worker.endr
2006*c0909341SAndroid Build Coastguard Worker
2007*c0909341SAndroid Build Coastguard Worker  vsetvli zero, zero, e8, mf2, ta, ma
2008*c0909341SAndroid Build Coastguard Worker
2009*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v8, v0, 0
2010*c0909341SAndroid Build Coastguard Worker  vnclipu.wi  v9, v1, 0
2011*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v10, v2, 0
2012*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v11, v3, 0
2013*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v12, v4, 0
2014*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v13, v5, 0
2015*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v14, v6, 0
2016*c0909341SAndroid Build Coastguard Worker  vnclipu.wi v15, v7, 0
2017*c0909341SAndroid Build Coastguard Worker
2018*c0909341SAndroid Build Coastguard Worker  addi t0, a0, \j
2019*c0909341SAndroid Build Coastguard Worker  vse8.v v8, (t0)
2020*c0909341SAndroid Build Coastguard Worker.irp i, 9, 10, 11, 12, 13, 14, 15
2021*c0909341SAndroid Build Coastguard Worker  add t0, t0, a1
2022*c0909341SAndroid Build Coastguard Worker  vse8.v v\i, (t0)
2023*c0909341SAndroid Build Coastguard Worker.endr
2024*c0909341SAndroid Build Coastguard Worker.endr
2025*c0909341SAndroid Build Coastguard Worker
2026*c0909341SAndroid Build Coastguard Worker  ret
2027*c0909341SAndroid Build Coastguard Worker.endif
2028*c0909341SAndroid Build Coastguard Workerendfunc
2029*c0909341SAndroid Build Coastguard Worker.endm
2030*c0909341SAndroid Build Coastguard Worker
2031*c0909341SAndroid Build Coastguard Workerdef_fn_816_base identity_
2032*c0909341SAndroid Build Coastguard Workerdef_fn_816_base
2033*c0909341SAndroid Build Coastguard Worker
2034*c0909341SAndroid Build Coastguard Worker.macro def_fn_816 w, h, txfm1, txfm2, eob_half
2035*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_\w\()x\h\()_8bpc_rvv, export=1
2036*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity
2037*c0909341SAndroid Build Coastguard Worker  la a4, inv_\txfm1\()_e16_x\w\()_rvv
2038*c0909341SAndroid Build Coastguard Worker.endif
2039*c0909341SAndroid Build Coastguard Worker  la a5, inv_\txfm2\()_e16_x\h\()_rvv
2040*c0909341SAndroid Build Coastguard Worker.if \w == 8
2041*c0909341SAndroid Build Coastguard Worker  li a6, \eob_half
2042*c0909341SAndroid Build Coastguard Worker.endif
2043*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity
2044*c0909341SAndroid Build Coastguard Worker  j inv_txfm_identity_add_\w\()x\h\()_rvv
2045*c0909341SAndroid Build Coastguard Worker.else
2046*c0909341SAndroid Build Coastguard Worker  j inv_txfm_add_\w\()x\h\()_rvv
2047*c0909341SAndroid Build Coastguard Worker.endif
2048*c0909341SAndroid Build Coastguard Workerendfunc
2049*c0909341SAndroid Build Coastguard Worker.endm
2050*c0909341SAndroid Build Coastguard Worker
2051*c0909341SAndroid Build Coastguard Worker.macro def_fns_816 w, h
2052*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, dct, dct, 43
2053*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, identity, identity, 43
2054*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, dct, adst, 43
2055*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, dct, flipadst, 43
2056*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, dct, identity, 8
2057*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, adst, dct, 43
2058*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, adst, adst, 43
2059*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, adst, flipadst, 43
2060*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, flipadst, dct, 43
2061*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, flipadst, adst, 43
2062*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, flipadst, flipadst, 43
2063*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, identity, dct, 64
2064*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, adst, identity, 8
2065*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, flipadst, identity, 8
2066*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, identity, adst, 64
2067*c0909341SAndroid Build Coastguard Workerdef_fn_816 \w, \h, identity, flipadst, 64
2068*c0909341SAndroid Build Coastguard Worker.endm
2069*c0909341SAndroid Build Coastguard Worker
2070*c0909341SAndroid Build Coastguard Workerdef_fns_816 8, 16
2071*c0909341SAndroid Build Coastguard Workerdef_fns_816 16, 8
2072