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