xref: /aosp_15_r20/external/libdav1d/src/riscv/64/ipred.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 © 2024, Bogdan Gligorijevic
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 dc_gen_8bpc_rvv, export=1, ext="v,zbb"
31*c0909341SAndroid Build Coastguard Worker    .variant_cc dav1d_dc_gen_8bpc_rvv
32*c0909341SAndroid Build Coastguard Worker    add t1, a1, a2
33*c0909341SAndroid Build Coastguard Worker    srli t5, t1, 1
34*c0909341SAndroid Build Coastguard Worker    mv t1, a1
35*c0909341SAndroid Build Coastguard Worker    addi t2, a0, 1
36*c0909341SAndroid Build Coastguard Worker    vsetvli zero, t1, e16, m4, ta, ma
37*c0909341SAndroid Build Coastguard Worker    vmv.v.x v0, zero
38*c0909341SAndroid Build Coastguard Worker1:
39*c0909341SAndroid Build Coastguard Worker    vsetvli t3, t1, e8, m2, tu, ma
40*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (t2)
41*c0909341SAndroid Build Coastguard Worker    vwaddu.wv v0, v0, v4
42*c0909341SAndroid Build Coastguard Worker
43*c0909341SAndroid Build Coastguard Worker    sub t1, t1, t3
44*c0909341SAndroid Build Coastguard Worker    add t2, t2, t3
45*c0909341SAndroid Build Coastguard Worker    bnez t1, 1b
46*c0909341SAndroid Build Coastguard Worker
47*c0909341SAndroid Build Coastguard Worker    mv t1, a2
48*c0909341SAndroid Build Coastguard Worker    mv t2, a0
49*c0909341SAndroid Build Coastguard Worker    vsetvli zero, t1, e16, m4, ta, ma
50*c0909341SAndroid Build Coastguard Worker    vmv.v.x v8, zero
51*c0909341SAndroid Build Coastguard Worker2:
52*c0909341SAndroid Build Coastguard Worker    vsetvli t3, t1, e8, m2, tu, ma
53*c0909341SAndroid Build Coastguard Worker    sub t2, t2, t3
54*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (t2)
55*c0909341SAndroid Build Coastguard Worker    vwaddu.wv v8, v8, v4
56*c0909341SAndroid Build Coastguard Worker    sub t1, t1, t3
57*c0909341SAndroid Build Coastguard Worker
58*c0909341SAndroid Build Coastguard Worker    bnez t1, 2b
59*c0909341SAndroid Build Coastguard Worker
60*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e32, m8, ta, ma
61*c0909341SAndroid Build Coastguard Worker    vmv.s.x v16, t5
62*c0909341SAndroid Build Coastguard Worker    vmv.s.x v12, zero
63*c0909341SAndroid Build Coastguard Worker    vsetvli zero, a1, e16, m4, ta, ma
64*c0909341SAndroid Build Coastguard Worker    vwredsum.vs v24, v0, v16
65*c0909341SAndroid Build Coastguard Worker    vsetvli zero, a2, e16, m4, ta, ma
66*c0909341SAndroid Build Coastguard Worker    vwredsum.vs v16, v8, v12
67*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e32, m8, ta, ma
68*c0909341SAndroid Build Coastguard Worker    vmv.x.s t5, v24
69*c0909341SAndroid Build Coastguard Worker    vmv.x.s t1, v16
70*c0909341SAndroid Build Coastguard Worker    add t5, t5, t1
71*c0909341SAndroid Build Coastguard Worker
72*c0909341SAndroid Build Coastguard Worker    add t1, a1, a2
73*c0909341SAndroid Build Coastguard Worker    ctz t1, t1
74*c0909341SAndroid Build Coastguard Worker
75*c0909341SAndroid Build Coastguard Worker    srl a0, t5, t1
76*c0909341SAndroid Build Coastguard Worker
77*c0909341SAndroid Build Coastguard Worker
78*c0909341SAndroid Build Coastguard Worker    beq a1, a2, 5f
79*c0909341SAndroid Build Coastguard Worker    slli t1, a1, 1
80*c0909341SAndroid Build Coastguard Worker    sltu t2, t1, a2
81*c0909341SAndroid Build Coastguard Worker    slli t3, a2, 1
82*c0909341SAndroid Build Coastguard Worker    sltu t1, t3, a1
83*c0909341SAndroid Build Coastguard Worker    or t1, t1, t2
84*c0909341SAndroid Build Coastguard Worker    bnez t1, 3f
85*c0909341SAndroid Build Coastguard Worker
86*c0909341SAndroid Build Coastguard Worker    li t1, 0x5556
87*c0909341SAndroid Build Coastguard Worker    j 4f
88*c0909341SAndroid Build Coastguard Worker3:
89*c0909341SAndroid Build Coastguard Worker    li t1, 0x3334
90*c0909341SAndroid Build Coastguard Worker4:
91*c0909341SAndroid Build Coastguard Worker    mul a0, a0, t1
92*c0909341SAndroid Build Coastguard Worker    srli a0, a0, 16
93*c0909341SAndroid Build Coastguard Worker5:
94*c0909341SAndroid Build Coastguard Worker    jr t0
95*c0909341SAndroid Build Coastguard Workerendfunc
96*c0909341SAndroid Build Coastguard Worker
97*c0909341SAndroid Build Coastguard Workerfunction dc_gen_top_8bpc_rvv, export=1, ext="v,zbb"
98*c0909341SAndroid Build Coastguard Worker    .variant_cc dav1d_dc_gen_top_8bpc_rvv
99*c0909341SAndroid Build Coastguard Worker    mv t1, a1
100*c0909341SAndroid Build Coastguard Worker    srli t5, a1, 1
101*c0909341SAndroid Build Coastguard Worker    addi a0, a0, 1
102*c0909341SAndroid Build Coastguard Worker    vsetvli zero, t1, e16, m4, ta, ma
103*c0909341SAndroid Build Coastguard Worker    vmv.v.x v0, zero
104*c0909341SAndroid Build Coastguard Worker1:
105*c0909341SAndroid Build Coastguard Worker    vsetvli t3, t1, e8, m2, tu, ma
106*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (a0)
107*c0909341SAndroid Build Coastguard Worker    vwaddu.wv v0, v0, v4
108*c0909341SAndroid Build Coastguard Worker    sub t1, t1, t3
109*c0909341SAndroid Build Coastguard Worker
110*c0909341SAndroid Build Coastguard Worker    add a0, a0, t3
111*c0909341SAndroid Build Coastguard Worker    bnez t1, 1b
112*c0909341SAndroid Build Coastguard Worker    j dc_gen_sum_up_8bpc_rvv
113*c0909341SAndroid Build Coastguard Workerendfunc
114*c0909341SAndroid Build Coastguard Worker
115*c0909341SAndroid Build Coastguard Workerfunction dc_gen_left_8bpc_rvv, export=1, ext="v,zbb"
116*c0909341SAndroid Build Coastguard Worker    .variant_cc dav1d_dc_gen_left_8bpc_rvv
117*c0909341SAndroid Build Coastguard Worker    mv t1, a1
118*c0909341SAndroid Build Coastguard Worker    srli t5, a1, 1
119*c0909341SAndroid Build Coastguard Worker    vsetvli t2, t1, e16, m4, ta, ma
120*c0909341SAndroid Build Coastguard Worker    vmv.v.x v0, zero
121*c0909341SAndroid Build Coastguard Worker
122*c0909341SAndroid Build Coastguard Worker1:
123*c0909341SAndroid Build Coastguard Worker    vsetvli t3, t1, e8, m2, tu, ma
124*c0909341SAndroid Build Coastguard Worker    sub a0, a0, t3
125*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (a0)
126*c0909341SAndroid Build Coastguard Worker    vwaddu.wv v0, v0, v4
127*c0909341SAndroid Build Coastguard Worker    sub t1, t1, t3
128*c0909341SAndroid Build Coastguard Worker    bnez t1, 1b
129*c0909341SAndroid Build Coastguard Worker
130*c0909341SAndroid Build Coastguard Worker    j dc_gen_sum_up_8bpc_rvv
131*c0909341SAndroid Build Coastguard Workerendfunc
132*c0909341SAndroid Build Coastguard Worker
133*c0909341SAndroid Build Coastguard Workerfunction dc_gen_sum_up_8bpc_rvv, export=1, ext="v,zbb"
134*c0909341SAndroid Build Coastguard Worker    .variant_cc dav1d_dc_gen_sum_up_8bpc_rvv
135*c0909341SAndroid Build Coastguard Worker    vsetvli zero, a1, e32, m8, ta, ma
136*c0909341SAndroid Build Coastguard Worker    vmv.s.x v4, t5
137*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m4, ta, ma
138*c0909341SAndroid Build Coastguard Worker    vwredsum.vs v8, v0, v4
139*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e32, m8, ta, ma
140*c0909341SAndroid Build Coastguard Worker    vmv.x.s t5, v8
141*c0909341SAndroid Build Coastguard Worker
142*c0909341SAndroid Build Coastguard Worker    ctz t1, a1
143*c0909341SAndroid Build Coastguard Worker
144*c0909341SAndroid Build Coastguard Worker    srl a0, t5, t1
145*c0909341SAndroid Build Coastguard Worker    jr t0
146*c0909341SAndroid Build Coastguard Workerendfunc
147*c0909341SAndroid Build Coastguard Worker
148*c0909341SAndroid Build Coastguard Workerfunction cfl_pred_8bpc_rvv, export=1, ext="v,zba"
149*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
150*c0909341SAndroid Build Coastguard Worker1:
151*c0909341SAndroid Build Coastguard Worker    li t2, 0
152*c0909341SAndroid Build Coastguard Worker    mv t3, a2
153*c0909341SAndroid Build Coastguard Worker2:
154*c0909341SAndroid Build Coastguard Worker    vsetvli t0, t3, e16, m2, ta, ma
155*c0909341SAndroid Build Coastguard Worker    add t4, a0, t2
156*c0909341SAndroid Build Coastguard Worker    vle16.v v0, (a5)
157*c0909341SAndroid Build Coastguard Worker    sh1add a5, t0, a5
158*c0909341SAndroid Build Coastguard Worker
159*c0909341SAndroid Build Coastguard Worker    vwmul.vx v4, v0, a6
160*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e32, m4, ta, mu
161*c0909341SAndroid Build Coastguard Worker    vneg.v v8, v4
162*c0909341SAndroid Build Coastguard Worker    vmslt.vx v0, v4, x0
163*c0909341SAndroid Build Coastguard Worker    vmax.vv v12, v8, v4
164*c0909341SAndroid Build Coastguard Worker    vssra.vi v16, v12, 6
165*c0909341SAndroid Build Coastguard Worker    vneg.v v16, v16, v0.t
166*c0909341SAndroid Build Coastguard Worker    vadd.vx v20, v16, a4
167*c0909341SAndroid Build Coastguard Worker    vmax.vx v0, v20, zero
168*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
169*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v4, v0, 0
170*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
171*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v0, v4, 0
172*c0909341SAndroid Build Coastguard Worker    vse8.v v0, (t4)
173*c0909341SAndroid Build Coastguard Worker    add t2, t0, t2
174*c0909341SAndroid Build Coastguard Worker    sub t3, t3, t0
175*c0909341SAndroid Build Coastguard Worker    bnez t3, 2b
176*c0909341SAndroid Build Coastguard Worker    addi a3, a3, -1
177*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
178*c0909341SAndroid Build Coastguard Worker
179*c0909341SAndroid Build Coastguard Worker    bnez a3, 1b
180*c0909341SAndroid Build Coastguard Worker    ret
181*c0909341SAndroid Build Coastguard Workerendfunc
182*c0909341SAndroid Build Coastguard Worker
183*c0909341SAndroid Build Coastguard Workerfunction ipred_cfl_8bpc_rvv, export=1, ext=v
184*c0909341SAndroid Build Coastguard Worker    mv t6, a0 # dst
185*c0909341SAndroid Build Coastguard Worker    mv a0, a2 # topleft
186*c0909341SAndroid Build Coastguard Worker    mv t4, a1 # stride
187*c0909341SAndroid Build Coastguard Worker    mv a1, a3 # width
188*c0909341SAndroid Build Coastguard Worker    mv a2, a4 # height
189*c0909341SAndroid Build Coastguard Worker    jal t0, dc_gen_8bpc_rvv
190*c0909341SAndroid Build Coastguard Worker    mv a2, a3 # width
191*c0909341SAndroid Build Coastguard Worker    mv a3, a4 # height
192*c0909341SAndroid Build Coastguard Worker    mv a4, a0 # dc_get_top
193*c0909341SAndroid Build Coastguard Worker    mv a0, t6 # dst
194*c0909341SAndroid Build Coastguard Worker    mv a1, t4 # stride
195*c0909341SAndroid Build Coastguard Worker    j cfl_pred_8bpc_rvv
196*c0909341SAndroid Build Coastguard Workerendfunc
197*c0909341SAndroid Build Coastguard Worker
198*c0909341SAndroid Build Coastguard Workerfunction ipred_cfl_128_8bpc_rvv, export=1, ext="v,zba"
199*c0909341SAndroid Build Coastguard Worker    # dc = 128, then just rearrange registers
200*c0909341SAndroid Build Coastguard Worker    mv a2, a3
201*c0909341SAndroid Build Coastguard Worker    mv a3, a4
202*c0909341SAndroid Build Coastguard Worker    li a4, 128
203*c0909341SAndroid Build Coastguard Worker
204*c0909341SAndroid Build Coastguard Worker    j cfl_pred_8bpc_rvv
205*c0909341SAndroid Build Coastguard Workerendfunc
206*c0909341SAndroid Build Coastguard Worker
207*c0909341SAndroid Build Coastguard Workerfunction ipred_cfl_top_8bpc_rvv, export=1, ext=v
208*c0909341SAndroid Build Coastguard Worker    mv t6, a0 # dst
209*c0909341SAndroid Build Coastguard Worker    mv a0, a2 # topleft
210*c0909341SAndroid Build Coastguard Worker    mv t4, a1 # stride
211*c0909341SAndroid Build Coastguard Worker    mv a1, a3 # width
212*c0909341SAndroid Build Coastguard Worker    jal t0, dc_gen_top_8bpc_rvv
213*c0909341SAndroid Build Coastguard Worker    mv a3, a4 # height
214*c0909341SAndroid Build Coastguard Worker    mv a4, a0 # dc_get_top
215*c0909341SAndroid Build Coastguard Worker    mv a0, t6 # dst
216*c0909341SAndroid Build Coastguard Worker    mv a2, a1 # width
217*c0909341SAndroid Build Coastguard Worker    mv a1, t4 # stride
218*c0909341SAndroid Build Coastguard Worker    j cfl_pred_8bpc_rvv
219*c0909341SAndroid Build Coastguard Workerendfunc
220*c0909341SAndroid Build Coastguard Worker
221*c0909341SAndroid Build Coastguard Workerfunction ipred_cfl_left_8bpc_rvv, export=1, ext="v,zba"
222*c0909341SAndroid Build Coastguard Worker    mv t6, a0 # dst
223*c0909341SAndroid Build Coastguard Worker    mv a0, a2 # topleft
224*c0909341SAndroid Build Coastguard Worker    mv t4, a1 # stride
225*c0909341SAndroid Build Coastguard Worker    mv a1, a4 # height
226*c0909341SAndroid Build Coastguard Worker    mv a2, a3 # width
227*c0909341SAndroid Build Coastguard Worker    jal t0, dc_gen_left_8bpc_rvv
228*c0909341SAndroid Build Coastguard Worker    mv a3, a4 # height
229*c0909341SAndroid Build Coastguard Worker    mv a4, a0 # dc_get_left
230*c0909341SAndroid Build Coastguard Worker    mv a1, t4 # stride
231*c0909341SAndroid Build Coastguard Worker    mv a0, t6 # dst
232*c0909341SAndroid Build Coastguard Worker    j cfl_pred_8bpc_rvv
233*c0909341SAndroid Build Coastguard Workerendfunc
234*c0909341SAndroid Build Coastguard Worker
235*c0909341SAndroid Build Coastguard Workerfunction ipred_paeth_8bpc_rvv, export=1, ext="v,zba"
236*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
237*c0909341SAndroid Build Coastguard Worker    li t0, 0
238*c0909341SAndroid Build Coastguard Worker    mv t3, a2
239*c0909341SAndroid Build Coastguard Worker    lbu t1, (a2)
240*c0909341SAndroid Build Coastguard Worker    addi a6, a2, -1
241*c0909341SAndroid Build Coastguard Worker    addi a2, a2, 1
242*c0909341SAndroid Build Coastguard Worker1:
243*c0909341SAndroid Build Coastguard Worker    lbu t2, (a6)
244*c0909341SAndroid Build Coastguard Worker    mv t3, a3
245*c0909341SAndroid Build Coastguard Worker2:
246*c0909341SAndroid Build Coastguard Worker    sub t5, a3, t3
247*c0909341SAndroid Build Coastguard Worker    add t5, a2, t5
248*c0909341SAndroid Build Coastguard Worker    vsetvli t6, t3, e8, m1, ta, ma
249*c0909341SAndroid Build Coastguard Worker    vle8.v v2, (t5)
250*c0909341SAndroid Build Coastguard Worker    vwaddu.vx v4, v2, t2
251*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
252*c0909341SAndroid Build Coastguard Worker    vwsub.vx v8, v4, t1
253*c0909341SAndroid Build Coastguard Worker
254*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e32, m4, ta, mu
255*c0909341SAndroid Build Coastguard Worker    vzext.vf4 v24, v2
256*c0909341SAndroid Build Coastguard Worker    vsub.vx v12, v8, t1
257*c0909341SAndroid Build Coastguard Worker    vmslt.vx v0, v12, zero
258*c0909341SAndroid Build Coastguard Worker    vneg.v v12, v12, v0.t
259*c0909341SAndroid Build Coastguard Worker    vsub.vx v16, v8, t2
260*c0909341SAndroid Build Coastguard Worker    vmslt.vx v0, v16, zero
261*c0909341SAndroid Build Coastguard Worker    vneg.v v16, v16, v0.t
262*c0909341SAndroid Build Coastguard Worker    vsub.vv v20, v8, v24
263*c0909341SAndroid Build Coastguard Worker    vmslt.vx v0, v20, zero
264*c0909341SAndroid Build Coastguard Worker    vneg.v v20, v20, v0.t
265*c0909341SAndroid Build Coastguard Worker
266*c0909341SAndroid Build Coastguard Worker    sub t5, a3, t3
267*c0909341SAndroid Build Coastguard Worker    vmsleu.vv v4, v16, v20
268*c0909341SAndroid Build Coastguard Worker    vmsleu.vv v5, v16, v12
269*c0909341SAndroid Build Coastguard Worker    vmsgtu.vv v0, v20, v12
270*c0909341SAndroid Build Coastguard Worker    vmand.mm v6, v4, v5
271*c0909341SAndroid Build Coastguard Worker
272*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
273*c0909341SAndroid Build Coastguard Worker    vmerge.vxm v8, v2, t1, v0
274*c0909341SAndroid Build Coastguard Worker    vmmv.m v0, v6
275*c0909341SAndroid Build Coastguard Worker    add t5, a0, t5
276*c0909341SAndroid Build Coastguard Worker    sub t3, t3, t6
277*c0909341SAndroid Build Coastguard Worker    vmerge.vxm v4, v8, t2, v0
278*c0909341SAndroid Build Coastguard Worker
279*c0909341SAndroid Build Coastguard Worker    vse8.v v4, (t5)
280*c0909341SAndroid Build Coastguard Worker
281*c0909341SAndroid Build Coastguard Worker    bnez t3, 2b
282*c0909341SAndroid Build Coastguard Worker
283*c0909341SAndroid Build Coastguard Worker    addi a4, a4, -1
284*c0909341SAndroid Build Coastguard Worker    addi a6, a6, -1
285*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
286*c0909341SAndroid Build Coastguard Worker    bnez a4, 1b
287*c0909341SAndroid Build Coastguard Worker    ret
288*c0909341SAndroid Build Coastguard Workerendfunc
289*c0909341SAndroid Build Coastguard Worker
290*c0909341SAndroid Build Coastguard Workerfunction ipred_smooth_8bpc_rvv, export=1, ext="v,zba"
291*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
292*c0909341SAndroid Build Coastguard Worker    la t0, dav1d_sm_weights
293*c0909341SAndroid Build Coastguard Worker    add t1, t0, a3
294*c0909341SAndroid Build Coastguard Worker    add t2, a2, a3
295*c0909341SAndroid Build Coastguard Worker    add t0, t0, a4
296*c0909341SAndroid Build Coastguard Worker    lbu t2, (t2)
297*c0909341SAndroid Build Coastguard Worker    sub t3, a2, a4
298*c0909341SAndroid Build Coastguard Worker    addi a6, a2, -1
299*c0909341SAndroid Build Coastguard Worker    addi a2, a2, 1
300*c0909341SAndroid Build Coastguard Worker    lbu t3, (t3)
301*c0909341SAndroid Build Coastguard Worker1:
302*c0909341SAndroid Build Coastguard Worker    mv t6, a3
303*c0909341SAndroid Build Coastguard Worker
304*c0909341SAndroid Build Coastguard Worker    lbu a7, (a6)
305*c0909341SAndroid Build Coastguard Worker    lbu t4, (t0)
306*c0909341SAndroid Build Coastguard Worker2:
307*c0909341SAndroid Build Coastguard Worker    li a5, 256
308*c0909341SAndroid Build Coastguard Worker    vsetvli t5, t6, e8, m1, ta, ma
309*c0909341SAndroid Build Coastguard Worker    vle8.v v2, (t1)
310*c0909341SAndroid Build Coastguard Worker    add t1, t1, t5
311*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (a2)
312*c0909341SAndroid Build Coastguard Worker    add a2, a2, t5
313*c0909341SAndroid Build Coastguard Worker    sub a5, a5, t4
314*c0909341SAndroid Build Coastguard Worker
315*c0909341SAndroid Build Coastguard Worker    vwmulu.vx v8, v4, t4
316*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
317*c0909341SAndroid Build Coastguard Worker    mul a5, a5, t3
318*c0909341SAndroid Build Coastguard Worker
319*c0909341SAndroid Build Coastguard Worker    vadd.vx v4, v8, a5
320*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
321*c0909341SAndroid Build Coastguard Worker    vwmulu.vx v8, v2, a7
322*c0909341SAndroid Build Coastguard Worker
323*c0909341SAndroid Build Coastguard Worker    vneg.v v12, v2
324*c0909341SAndroid Build Coastguard Worker    vwmaccu.vx v8, t2, v12
325*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
326*c0909341SAndroid Build Coastguard Worker    vwaddu.vv v12, v4, v8
327*c0909341SAndroid Build Coastguard Worker
328*c0909341SAndroid Build Coastguard Worker    sub a5, a3, t6
329*c0909341SAndroid Build Coastguard Worker    sub t6, t6, t5
330*c0909341SAndroid Build Coastguard Worker    add a5, a5, a0
331*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v2, v12, 9
332*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
333*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v0, v2, 0
334*c0909341SAndroid Build Coastguard Worker    vse8.v v0, (a5)
335*c0909341SAndroid Build Coastguard Worker
336*c0909341SAndroid Build Coastguard Worker    bnez t6, 2b
337*c0909341SAndroid Build Coastguard Worker
338*c0909341SAndroid Build Coastguard Worker    sub t1, t1, a3
339*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
340*c0909341SAndroid Build Coastguard Worker    sub a2, a2, a3
341*c0909341SAndroid Build Coastguard Worker    addi a4, a4, -1
342*c0909341SAndroid Build Coastguard Worker    addi t0, t0, 1
343*c0909341SAndroid Build Coastguard Worker    addi a6, a6, -1
344*c0909341SAndroid Build Coastguard Worker    bnez a4, 1b
345*c0909341SAndroid Build Coastguard Worker
346*c0909341SAndroid Build Coastguard Worker    ret
347*c0909341SAndroid Build Coastguard Workerendfunc
348*c0909341SAndroid Build Coastguard Worker
349*c0909341SAndroid Build Coastguard Workerfunction ipred_smooth_v_8bpc_rvv, export=1, ext="v,zba"
350*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
351*c0909341SAndroid Build Coastguard Worker    la t0, dav1d_sm_weights
352*c0909341SAndroid Build Coastguard Worker    add t2, a2, a3
353*c0909341SAndroid Build Coastguard Worker    add t0, t0, a4
354*c0909341SAndroid Build Coastguard Worker    sub t3, a2, a4
355*c0909341SAndroid Build Coastguard Worker    addi a2, a2, 1
356*c0909341SAndroid Build Coastguard Worker    lbu t3, (t3)
357*c0909341SAndroid Build Coastguard Worker1:
358*c0909341SAndroid Build Coastguard Worker    mv t6, a3
359*c0909341SAndroid Build Coastguard Worker
360*c0909341SAndroid Build Coastguard Worker    lbu t4, (t0)
361*c0909341SAndroid Build Coastguard Worker2:
362*c0909341SAndroid Build Coastguard Worker    li a5, 256
363*c0909341SAndroid Build Coastguard Worker    vsetvli t5, t6, e8, m1, ta, ma
364*c0909341SAndroid Build Coastguard Worker    vle8.v v4, (a2)
365*c0909341SAndroid Build Coastguard Worker    add a2, a2, t5
366*c0909341SAndroid Build Coastguard Worker    sub a5, a5, t4
367*c0909341SAndroid Build Coastguard Worker
368*c0909341SAndroid Build Coastguard Worker    vwmulu.vx v8, v4, t4
369*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
370*c0909341SAndroid Build Coastguard Worker    mul a5, a5, t3
371*c0909341SAndroid Build Coastguard Worker    vwaddu.vx v4, v8, a5
372*c0909341SAndroid Build Coastguard Worker
373*c0909341SAndroid Build Coastguard Worker    sub a5, a3, t6
374*c0909341SAndroid Build Coastguard Worker    sub t6, t6, t5
375*c0909341SAndroid Build Coastguard Worker    add a5, a5, a0
376*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e16, m2, ta, ma
377*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v2, v4, 8
378*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
379*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v0, v2, 0
380*c0909341SAndroid Build Coastguard Worker    vse8.v v0, (a5)
381*c0909341SAndroid Build Coastguard Worker
382*c0909341SAndroid Build Coastguard Worker    bnez t6, 2b
383*c0909341SAndroid Build Coastguard Worker
384*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
385*c0909341SAndroid Build Coastguard Worker    sub a2, a2, a3
386*c0909341SAndroid Build Coastguard Worker    addi a4, a4, -1
387*c0909341SAndroid Build Coastguard Worker    addi t0, t0, 1
388*c0909341SAndroid Build Coastguard Worker    bnez a4, 1b
389*c0909341SAndroid Build Coastguard Worker
390*c0909341SAndroid Build Coastguard Worker    ret
391*c0909341SAndroid Build Coastguard Workerendfunc
392*c0909341SAndroid Build Coastguard Worker
393*c0909341SAndroid Build Coastguard Workerfunction ipred_smooth_h_8bpc_rvv, export=1, ext="v,zba"
394*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
395*c0909341SAndroid Build Coastguard Worker    la t0, dav1d_sm_weights
396*c0909341SAndroid Build Coastguard Worker    add t1, t0, a3
397*c0909341SAndroid Build Coastguard Worker    add t2, a2, a3
398*c0909341SAndroid Build Coastguard Worker    lbu t2, (t2)
399*c0909341SAndroid Build Coastguard Worker    addi a6, a2, -1
400*c0909341SAndroid Build Coastguard Worker1:
401*c0909341SAndroid Build Coastguard Worker    mv t6, a3
402*c0909341SAndroid Build Coastguard Worker
403*c0909341SAndroid Build Coastguard Worker    lbu a7, (a6)
404*c0909341SAndroid Build Coastguard Worker2:
405*c0909341SAndroid Build Coastguard Worker    vsetvli t5, t6, e8, m1, ta, ma
406*c0909341SAndroid Build Coastguard Worker    vle8.v v2, (t1)
407*c0909341SAndroid Build Coastguard Worker    add t1, t1, t5
408*c0909341SAndroid Build Coastguard Worker
409*c0909341SAndroid Build Coastguard Worker    vwmulu.vx v8, v2, a7
410*c0909341SAndroid Build Coastguard Worker
411*c0909341SAndroid Build Coastguard Worker    vneg.v v12, v2
412*c0909341SAndroid Build Coastguard Worker    vwmaccu.vx v8, t2, v12
413*c0909341SAndroid Build Coastguard Worker
414*c0909341SAndroid Build Coastguard Worker    sub a5, a3, t6
415*c0909341SAndroid Build Coastguard Worker    sub t6, t6, t5
416*c0909341SAndroid Build Coastguard Worker    add a5, a5, a0
417*c0909341SAndroid Build Coastguard Worker    vsetvli zero, zero, e8, m1, ta, ma
418*c0909341SAndroid Build Coastguard Worker    vnclipu.wi v0, v8, 8
419*c0909341SAndroid Build Coastguard Worker    vse8.v v0, (a5)
420*c0909341SAndroid Build Coastguard Worker
421*c0909341SAndroid Build Coastguard Worker    bnez t6, 2b
422*c0909341SAndroid Build Coastguard Worker
423*c0909341SAndroid Build Coastguard Worker    sub t1, t1, a3
424*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
425*c0909341SAndroid Build Coastguard Worker    addi a4, a4, -1
426*c0909341SAndroid Build Coastguard Worker    addi a6, a6, -1
427*c0909341SAndroid Build Coastguard Worker    bnez a4, 1b
428*c0909341SAndroid Build Coastguard Worker
429*c0909341SAndroid Build Coastguard Worker    ret
430*c0909341SAndroid Build Coastguard Workerendfunc
431*c0909341SAndroid Build Coastguard Worker
432*c0909341SAndroid Build Coastguard Workerfunction pal_pred_8bpc_rvv, export=1, ext="v,zba"
433*c0909341SAndroid Build Coastguard Worker    csrw vxrm, zero
434*c0909341SAndroid Build Coastguard Worker    vsetivli t5, 8, e8, m1, ta, ma
435*c0909341SAndroid Build Coastguard Worker    vle8.v v30, (a2)
436*c0909341SAndroid Build Coastguard Worker    li t0, 2
437*c0909341SAndroid Build Coastguard Worker    srli t1, a4, 1
438*c0909341SAndroid Build Coastguard Worker1:
439*c0909341SAndroid Build Coastguard Worker    mv t4, a4
440*c0909341SAndroid Build Coastguard Worker2:
441*c0909341SAndroid Build Coastguard Worker    vsetvli t5, t1, e8, m1, ta, ma
442*c0909341SAndroid Build Coastguard Worker    vle8.v v0, (a3)
443*c0909341SAndroid Build Coastguard Worker    add a3, a3, t5
444*c0909341SAndroid Build Coastguard Worker    vsrl.vi v2, v0, 4
445*c0909341SAndroid Build Coastguard Worker    sub t6, a4, t4
446*c0909341SAndroid Build Coastguard Worker    vand.vi v1, v0, 7
447*c0909341SAndroid Build Coastguard Worker    add t6, a0, t6
448*c0909341SAndroid Build Coastguard Worker    vrgather.vv v3, v30, v1
449*c0909341SAndroid Build Coastguard Worker    addi t2, t6, 1
450*c0909341SAndroid Build Coastguard Worker    vrgather.vv v4, v30, v2
451*c0909341SAndroid Build Coastguard Worker    slli t5, t5, 1
452*c0909341SAndroid Build Coastguard Worker    vsse8.v v3, (t6), t0
453*c0909341SAndroid Build Coastguard Worker    sub t4, t4, t5
454*c0909341SAndroid Build Coastguard Worker    vsse8.v v4, (t2), t0
455*c0909341SAndroid Build Coastguard Worker
456*c0909341SAndroid Build Coastguard Worker    bnez t4, 2b
457*c0909341SAndroid Build Coastguard Worker    addi a5, a5, -1
458*c0909341SAndroid Build Coastguard Worker    add a0, a0, a1
459*c0909341SAndroid Build Coastguard Worker    bnez a5, 1b
460*c0909341SAndroid Build Coastguard Worker    ret
461*c0909341SAndroid Build Coastguard Workerendfunc
462