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 Worker.macro constrain_vectors vec1, vec2, vec_sub, strength, shift, vec_tmp1, vec_tmp2 31*c0909341SAndroid Build Coastguard Worker vmslt.vx v0, \vec_tmp1, zero 32*c0909341SAndroid Build Coastguard Worker vneg.v \vec_tmp1, \vec_tmp1, v0.t 33*c0909341SAndroid Build Coastguard Worker vmmv.m v1, v0 34*c0909341SAndroid Build Coastguard Worker 35*c0909341SAndroid Build Coastguard Worker vmslt.vx v0, \vec_tmp2, zero 36*c0909341SAndroid Build Coastguard Worker vneg.v \vec_tmp2, \vec_tmp2, v0.t 37*c0909341SAndroid Build Coastguard Worker 38*c0909341SAndroid Build Coastguard Worker vsra.vx \vec1, \vec_tmp1, \shift 39*c0909341SAndroid Build Coastguard Worker vsra.vx \vec2, \vec_tmp2, \shift 40*c0909341SAndroid Build Coastguard Worker 41*c0909341SAndroid Build Coastguard Worker vrsub.vx \vec1, \vec1, \strength 42*c0909341SAndroid Build Coastguard Worker vrsub.vx \vec2, \vec2, \strength 43*c0909341SAndroid Build Coastguard Worker 44*c0909341SAndroid Build Coastguard Worker vmax.vx \vec1, \vec1, zero 45*c0909341SAndroid Build Coastguard Worker vmax.vx \vec2, \vec2, zero 46*c0909341SAndroid Build Coastguard Worker 47*c0909341SAndroid Build Coastguard Worker vmin.vv \vec_tmp1, \vec1, \vec_tmp1 48*c0909341SAndroid Build Coastguard Worker vmin.vv \vec_tmp2, \vec2, \vec_tmp2 49*c0909341SAndroid Build Coastguard Worker 50*c0909341SAndroid Build Coastguard Worker vneg.v \vec_tmp2, \vec_tmp2, v0.t 51*c0909341SAndroid Build Coastguard Worker 52*c0909341SAndroid Build Coastguard Worker vmmv.m v0, v1 53*c0909341SAndroid Build Coastguard Worker vneg.v \vec_tmp1, \vec_tmp1, v0.t 54*c0909341SAndroid Build Coastguard Worker.endm 55*c0909341SAndroid Build Coastguard Worker 56*c0909341SAndroid Build Coastguard Worker.macro padding_fn w, h 57*c0909341SAndroid Build Coastguard Worker li t5, -32768 # INT16_MIN 58*c0909341SAndroid Build Coastguard Worker 59*c0909341SAndroid Build Coastguard Worker andi t4, a7, 4 60*c0909341SAndroid Build Coastguard Worker li t2, -2 # y_start 61*c0909341SAndroid Build Coastguard Worker 62*c0909341SAndroid Build Coastguard Worker.if \w == 4 63*c0909341SAndroid Build Coastguard Worker vsetivli zero, \w + 4, e16, m1, ta, ma 64*c0909341SAndroid Build Coastguard Worker.else 65*c0909341SAndroid Build Coastguard Worker vsetivli zero, \w + 4, e16, m2, ta, ma 66*c0909341SAndroid Build Coastguard Worker.endif 67*c0909341SAndroid Build Coastguard Worker vmv.v.x v0, t5 68*c0909341SAndroid Build Coastguard Worker bnez t4, L(top_done_\w\()x\h) 69*c0909341SAndroid Build Coastguard Worker 70*c0909341SAndroid Build Coastguard Worker slli t5, a1, 1 71*c0909341SAndroid Build Coastguard Worker addi t5, t5, 2 72*c0909341SAndroid Build Coastguard Worker slli t5, t5, 1 73*c0909341SAndroid Build Coastguard Worker sub t5, a0, t5 74*c0909341SAndroid Build Coastguard Worker 75*c0909341SAndroid Build Coastguard Worker sh1add t4, a1, t5 76*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t5) 77*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t4) 78*c0909341SAndroid Build Coastguard Worker li t2, 0 79*c0909341SAndroid Build Coastguard Worker 80*c0909341SAndroid Build Coastguard WorkerL(top_done_\w\()x\h): 81*c0909341SAndroid Build Coastguard Worker andi t4, a7, 8 82*c0909341SAndroid Build Coastguard Worker li t3, 2 + \h # y_end 83*c0909341SAndroid Build Coastguard Worker bnez t4, L(bottom_done_\w\()x\h) 84*c0909341SAndroid Build Coastguard Worker 85*c0909341SAndroid Build Coastguard Worker li t5, \h 86*c0909341SAndroid Build Coastguard Worker mul t5, a1, t5 87*c0909341SAndroid Build Coastguard Worker addi t5, t5, -2 88*c0909341SAndroid Build Coastguard Worker sh1add t5, t5, a0 89*c0909341SAndroid Build Coastguard Worker 90*c0909341SAndroid Build Coastguard Worker sh1add t4, a1, t5 91*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t5) 92*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t4) 93*c0909341SAndroid Build Coastguard Worker addi t3, t3, -2 94*c0909341SAndroid Build Coastguard Worker 95*c0909341SAndroid Build Coastguard WorkerL(bottom_done_\w\()x\h): 96*c0909341SAndroid Build Coastguard Worker andi t4, a7, 1 97*c0909341SAndroid Build Coastguard Worker li t0, -2 # x_start 98*c0909341SAndroid Build Coastguard Worker 99*c0909341SAndroid Build Coastguard Worker.if \w == 4 100*c0909341SAndroid Build Coastguard Worker vsetivli zero, 2, e16, m1, ta, ma 101*c0909341SAndroid Build Coastguard Worker.else 102*c0909341SAndroid Build Coastguard Worker vsetivli zero, 2, e16, m2, ta, ma 103*c0909341SAndroid Build Coastguard Worker.endif 104*c0909341SAndroid Build Coastguard Worker 105*c0909341SAndroid Build Coastguard Worker bnez t4, L(left_done_\w\()x\h) 106*c0909341SAndroid Build Coastguard Worker 107*c0909341SAndroid Build Coastguard Worker mul t5, a1, t2 108*c0909341SAndroid Build Coastguard Worker addi t5, t5, -2 109*c0909341SAndroid Build Coastguard Worker sh1add t5, t5, a0 110*c0909341SAndroid Build Coastguard Worker 111*c0909341SAndroid Build Coastguard Worker sub t0, t3, t2 112*c0909341SAndroid Build Coastguard Worker 113*c0909341SAndroid Build Coastguard Worker3: 114*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t5) 115*c0909341SAndroid Build Coastguard Worker sh1add t5, a1, t5 116*c0909341SAndroid Build Coastguard Worker addi t0, t0, -1 117*c0909341SAndroid Build Coastguard Worker bnez t0, 3b 118*c0909341SAndroid Build Coastguard Worker 119*c0909341SAndroid Build Coastguard WorkerL(left_done_\w\()x\h): 120*c0909341SAndroid Build Coastguard Worker 121*c0909341SAndroid Build Coastguard Worker andi t4, a7, 2 122*c0909341SAndroid Build Coastguard Worker li t1, 2 + \w # x_end 123*c0909341SAndroid Build Coastguard Worker bnez t4, L(right_done_\w\()x\h) 124*c0909341SAndroid Build Coastguard Worker 125*c0909341SAndroid Build Coastguard Worker mul t5, t2, a1 126*c0909341SAndroid Build Coastguard Worker addi t5, t5, \w 127*c0909341SAndroid Build Coastguard Worker sh1add t5, t5, a0 128*c0909341SAndroid Build Coastguard Worker 129*c0909341SAndroid Build Coastguard Worker sub t1, t3, t2 130*c0909341SAndroid Build Coastguard Worker 131*c0909341SAndroid Build Coastguard Worker4: 132*c0909341SAndroid Build Coastguard Worker vse16.v v0, (t5) 133*c0909341SAndroid Build Coastguard Worker sh1add t5, a1, t5 134*c0909341SAndroid Build Coastguard Worker addi t1, t1, -1 135*c0909341SAndroid Build Coastguard Worker bnez t1, 4b 136*c0909341SAndroid Build Coastguard Worker 137*c0909341SAndroid Build Coastguard Worker li t1, \w 138*c0909341SAndroid Build Coastguard Worker 139*c0909341SAndroid Build Coastguard WorkerL(right_done_\w\()x\h): 140*c0909341SAndroid Build Coastguard Worker 141*c0909341SAndroid Build Coastguard Worker beqz t2, L(top_skip_\w\()x\h) 142*c0909341SAndroid Build Coastguard Worker 143*c0909341SAndroid Build Coastguard Worker mul t5, a1, t2 144*c0909341SAndroid Build Coastguard Worker add t5, t0, t5 145*c0909341SAndroid Build Coastguard Worker sh1add a0, t5, a0 # tmp += y_start * tmp_stride + x_start 146*c0909341SAndroid Build Coastguard Worker sh1add a5, t0, a5 # top += x_start 147*c0909341SAndroid Build Coastguard Worker 148*c0909341SAndroid Build Coastguard Worker sub t5, t1, t0 149*c0909341SAndroid Build Coastguard Worker slli t6, t0, 1 150*c0909341SAndroid Build Coastguard Worker.if \w == 4 151*c0909341SAndroid Build Coastguard Worker vsetvli zero, t5, e16, m1, ta, ma 152*c0909341SAndroid Build Coastguard Worker.else 153*c0909341SAndroid Build Coastguard Worker vsetvli zero, t5, e16, m2, ta, ma 154*c0909341SAndroid Build Coastguard Worker.endif 155*c0909341SAndroid Build Coastguard Worker 156*c0909341SAndroid Build Coastguard Worker5: 157*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a5) 158*c0909341SAndroid Build Coastguard Worker addi t2, t2, 1 159*c0909341SAndroid Build Coastguard Worker add a5, a3, a5 160*c0909341SAndroid Build Coastguard Worker vse16.v v2, (a0) 161*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 162*c0909341SAndroid Build Coastguard Worker bnez t2, 5b 163*c0909341SAndroid Build Coastguard Worker 164*c0909341SAndroid Build Coastguard Worker sub a0, a0, t6 # tmp -= x_start 165*c0909341SAndroid Build Coastguard Worker 166*c0909341SAndroid Build Coastguard WorkerL(top_skip_\w\()x\h): 167*c0909341SAndroid Build Coastguard Worker 168*c0909341SAndroid Build Coastguard Worker li a5, \h 169*c0909341SAndroid Build Coastguard Worker beqz t0, L(left_skip_\w\()x\h) 170*c0909341SAndroid Build Coastguard Worker 171*c0909341SAndroid Build Coastguard Worker sh1add a0, t0, a0 # tmp += x_start 172*c0909341SAndroid Build Coastguard Worker 173*c0909341SAndroid Build Coastguard Worker7: 174*c0909341SAndroid Build Coastguard Worker.if \w == 4 175*c0909341SAndroid Build Coastguard Worker vsetivli zero, 2, e16, m1, ta, ma 176*c0909341SAndroid Build Coastguard Worker.else 177*c0909341SAndroid Build Coastguard Worker vsetivli zero, 2, e16, m2, ta, ma 178*c0909341SAndroid Build Coastguard Worker.endif 179*c0909341SAndroid Build Coastguard Worker 180*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a4) 181*c0909341SAndroid Build Coastguard Worker addi a5, a5, -1 182*c0909341SAndroid Build Coastguard Worker addi a4, a4, 4 183*c0909341SAndroid Build Coastguard Worker vse16.v v2, (a0) 184*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 185*c0909341SAndroid Build Coastguard Worker bnez a5, 7b 186*c0909341SAndroid Build Coastguard Worker 187*c0909341SAndroid Build Coastguard Worker li a5, \h 188*c0909341SAndroid Build Coastguard Worker mul t5, a1, a5 189*c0909341SAndroid Build Coastguard Worker add t5, t5, t0 190*c0909341SAndroid Build Coastguard Worker slli t5, t5, 1 191*c0909341SAndroid Build Coastguard Worker sub a0, a0, t5 # tmp -= h * tmp_stride + x_start 192*c0909341SAndroid Build Coastguard Worker 193*c0909341SAndroid Build Coastguard WorkerL(left_skip_\w\()x\h): 194*c0909341SAndroid Build Coastguard Worker 195*c0909341SAndroid Build Coastguard Worker8: 196*c0909341SAndroid Build Coastguard Worker.if \w == 4 197*c0909341SAndroid Build Coastguard Worker vsetvli zero, t1, e16, m1, ta, ma 198*c0909341SAndroid Build Coastguard Worker.else 199*c0909341SAndroid Build Coastguard Worker vsetvli zero, t1, e16, m2, ta, ma 200*c0909341SAndroid Build Coastguard Worker.endif 201*c0909341SAndroid Build Coastguard Worker 202*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a2) 203*c0909341SAndroid Build Coastguard Worker add a2, a3, a2 204*c0909341SAndroid Build Coastguard Worker vse16.v v2, (a0) 205*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 206*c0909341SAndroid Build Coastguard Worker addi a5, a5, -1 207*c0909341SAndroid Build Coastguard Worker bnez a5, 8b 208*c0909341SAndroid Build Coastguard Worker 209*c0909341SAndroid Build Coastguard Worker 210*c0909341SAndroid Build Coastguard Worker li a5, \h 211*c0909341SAndroid Build Coastguard Worker sh1add a0, t0, a0 # tmp += x_start 212*c0909341SAndroid Build Coastguard Worker sh1add a6, t0, a6 # bottom += x_start 213*c0909341SAndroid Build Coastguard Worker beq a5, t3, L(bottom_skip_\w\()x\h) 214*c0909341SAndroid Build Coastguard Worker 215*c0909341SAndroid Build Coastguard Worker sub t5, t1, t0 216*c0909341SAndroid Build Coastguard Worker.if \w == 4 217*c0909341SAndroid Build Coastguard Worker vsetvli zero, t5, e16, m1, ta, ma 218*c0909341SAndroid Build Coastguard Worker.else 219*c0909341SAndroid Build Coastguard Worker vsetvli zero, t5, e16, m2, ta, ma 220*c0909341SAndroid Build Coastguard Worker.endif 221*c0909341SAndroid Build Coastguard Worker 222*c0909341SAndroid Build Coastguard Worker9: 223*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a6) 224*c0909341SAndroid Build Coastguard Worker add a6, a3, a6 225*c0909341SAndroid Build Coastguard Worker addi a5, a5, 1 226*c0909341SAndroid Build Coastguard Worker vse16.v v2, (a0) 227*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 228*c0909341SAndroid Build Coastguard Worker bne a5, t3, 9b 229*c0909341SAndroid Build Coastguard Worker 230*c0909341SAndroid Build Coastguard WorkerL(bottom_skip_\w\()x\h): 231*c0909341SAndroid Build Coastguard Worker li t6, \h 232*c0909341SAndroid Build Coastguard Worker mul t6, a3, t6 233*c0909341SAndroid Build Coastguard Worker sub a2, a2, t6 # src -= h * PXSTRIDE(src_stride) 234*c0909341SAndroid Build Coastguard Worker mul t5, a1, t3 235*c0909341SAndroid Build Coastguard Worker add t5, t5, t0 236*c0909341SAndroid Build Coastguard Worker slli t5, t5, 1 237*c0909341SAndroid Build Coastguard Worker sub a0, a0, t5 # tmp -= y_end * tmp_stride + x_start 238*c0909341SAndroid Build Coastguard Worker.endm 239*c0909341SAndroid Build Coastguard Worker 240*c0909341SAndroid Build Coastguard Worker.macro cdef_fn w, h 241*c0909341SAndroid Build Coastguard Workerfunction cdef_filter_block_\w\()x\h\()_16bpc_rvv, export=1, ext="v,zba,zbb" 242*c0909341SAndroid Build Coastguard Worker csrw vxrm, zero 243*c0909341SAndroid Build Coastguard Worker 244*c0909341SAndroid Build Coastguard Worker addi sp, sp, -32 - 144*2 245*c0909341SAndroid Build Coastguard Worker sd a5, 24(sp) # pri_strength 246*c0909341SAndroid Build Coastguard Worker sd a6, 16(sp) # sec_strength 247*c0909341SAndroid Build Coastguard Worker sd a7, 8(sp) # dir 248*c0909341SAndroid Build Coastguard Worker 249*c0909341SAndroid Build Coastguard Worker ld a7, 8 + 32 + 144*2(sp) # edges 250*c0909341SAndroid Build Coastguard Worker mv a6, a4 # bottom 251*c0909341SAndroid Build Coastguard Worker mv a5, a3 # top 252*c0909341SAndroid Build Coastguard Worker mv a4, a2 # left 253*c0909341SAndroid Build Coastguard Worker mv a3, a1 # dst_stride 254*c0909341SAndroid Build Coastguard Worker mv a2, a0 # dst 255*c0909341SAndroid Build Coastguard Worker li a1, 12 # tmp_stride 256*c0909341SAndroid Build Coastguard Worker addi a0, sp, 32 + 2*(2*12+2) 257*c0909341SAndroid Build Coastguard Worker 258*c0909341SAndroid Build Coastguard Worker padding_fn \w, \h 259*c0909341SAndroid Build Coastguard Worker 260*c0909341SAndroid Build Coastguard Worker ld a4, 32 + 2*144(sp) # damping 261*c0909341SAndroid Build Coastguard Worker ld a5, 24(sp) # pri_strength 262*c0909341SAndroid Build Coastguard Worker ld a6, 16(sp) # sec_strength 263*c0909341SAndroid Build Coastguard Worker ld a7, 8(sp) # dir 264*c0909341SAndroid Build Coastguard Worker 265*c0909341SAndroid Build Coastguard Worker beqz a5, cdef_filter_sec_only_\w\()x\h 266*c0909341SAndroid Build Coastguard Worker 267*c0909341SAndroid Build Coastguard Worker bnez a6, cdef_filter_pri_sec_\w\()x\h 268*c0909341SAndroid Build Coastguard Worker 269*c0909341SAndroid Build Coastguard Worker li t1, 64-8 270*c0909341SAndroid Build Coastguard Worker ld t4, 32 + 2*144 + 16(sp) # bitdepth_max 271*c0909341SAndroid Build Coastguard Worker clz t4, t4 272*c0909341SAndroid Build Coastguard Worker sub t4, t1, t4 273*c0909341SAndroid Build Coastguard Worker sra t4, a5, t4 274*c0909341SAndroid Build Coastguard Worker andi t0, t4, 1 275*c0909341SAndroid Build Coastguard Worker li t1, 4 276*c0909341SAndroid Build Coastguard Worker sub t4, t1, t0 277*c0909341SAndroid Build Coastguard Worker 278*c0909341SAndroid Build Coastguard Worker li t1, 63 279*c0909341SAndroid Build Coastguard Worker clz t2, a5 280*c0909341SAndroid Build Coastguard Worker sub t1, t1, t2 281*c0909341SAndroid Build Coastguard Worker sub t1, a4, t1 282*c0909341SAndroid Build Coastguard Worker 283*c0909341SAndroid Build Coastguard Worker li t0, \h 284*c0909341SAndroid Build Coastguard Worker 285*c0909341SAndroid Build Coastguard Worker la t2, dav1d_cdef_directions 286*c0909341SAndroid Build Coastguard Worker addi t3, a7, 2 287*c0909341SAndroid Build Coastguard Worker sh1add t2, t3, t2 288*c0909341SAndroid Build Coastguard Worker 289*c0909341SAndroid Build Coastguard Worker vsetivli zero, \w, e16, m1, ta, ma 290*c0909341SAndroid Build Coastguard Worker blt zero, t1, 1f 291*c0909341SAndroid Build Coastguard Worker mv t1, zero 292*c0909341SAndroid Build Coastguard Worker1: 293*c0909341SAndroid Build Coastguard Worker lb t3, 0(t2) 294*c0909341SAndroid Build Coastguard Worker 295*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a2) 296*c0909341SAndroid Build Coastguard Worker 297*c0909341SAndroid Build Coastguard Worker sh1add t6, t3, a0 298*c0909341SAndroid Build Coastguard Worker slli t3, t3, 1 299*c0909341SAndroid Build Coastguard Worker sub t3, a0, t3 300*c0909341SAndroid Build Coastguard Worker 301*c0909341SAndroid Build Coastguard Worker vle16.v v4, (t6) 302*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t3) 303*c0909341SAndroid Build Coastguard Worker 304*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 305*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 306*c0909341SAndroid Build Coastguard Worker 307*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 308*c0909341SAndroid Build Coastguard Worker 309*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a5, t1, v8, v16 310*c0909341SAndroid Build Coastguard Worker 311*c0909341SAndroid Build Coastguard Worker vmul.vx v28, v16, t4 312*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v8 313*c0909341SAndroid Build Coastguard Worker 314*c0909341SAndroid Build Coastguard Worker lb t3, 1(t2) 315*c0909341SAndroid Build Coastguard Worker 316*c0909341SAndroid Build Coastguard Worker andi t5, t4, 3 317*c0909341SAndroid Build Coastguard Worker ori t5, t5, 2 318*c0909341SAndroid Build Coastguard Worker 319*c0909341SAndroid Build Coastguard Worker sh1add t6, t3, a0 320*c0909341SAndroid Build Coastguard Worker slli t3, t3, 1 321*c0909341SAndroid Build Coastguard Worker sub t3, a0, t3 322*c0909341SAndroid Build Coastguard Worker 323*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 324*c0909341SAndroid Build Coastguard Worker 325*c0909341SAndroid Build Coastguard Worker vle16.v v4, (t6) 326*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t3) 327*c0909341SAndroid Build Coastguard Worker 328*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 329*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 330*c0909341SAndroid Build Coastguard Worker 331*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 332*c0909341SAndroid Build Coastguard Worker 333*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a5, t1, v8, v16 334*c0909341SAndroid Build Coastguard Worker 335*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t5, v16 336*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t5, v8 337*c0909341SAndroid Build Coastguard Worker 338*c0909341SAndroid Build Coastguard Worker vmslt.vx v0, v28, zero 339*c0909341SAndroid Build Coastguard Worker vadd.vi v28, v28, -1, v0.t 340*c0909341SAndroid Build Coastguard Worker 341*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 342*c0909341SAndroid Build Coastguard Worker 343*c0909341SAndroid Build Coastguard Worker vnclip.wi v24, v28, 4 344*c0909341SAndroid Build Coastguard Worker 345*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v2, v24 346*c0909341SAndroid Build Coastguard Worker 347*c0909341SAndroid Build Coastguard Worker vse16.v v28, (a2) 348*c0909341SAndroid Build Coastguard Worker 349*c0909341SAndroid Build Coastguard Worker add a2, a2, a3 350*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 351*c0909341SAndroid Build Coastguard Worker 352*c0909341SAndroid Build Coastguard Worker addi t0, t0, -1 353*c0909341SAndroid Build Coastguard Worker bnez t0, 1b 354*c0909341SAndroid Build Coastguard Worker 355*c0909341SAndroid Build Coastguard Worker addi sp, sp, 32 + 144*2 356*c0909341SAndroid Build Coastguard Worker ret 357*c0909341SAndroid Build Coastguard Worker 358*c0909341SAndroid Build Coastguard Workercdef_filter_sec_only_\w\()x\h: 359*c0909341SAndroid Build Coastguard Worker li t1, 63 360*c0909341SAndroid Build Coastguard Worker clz t2, a6 361*c0909341SAndroid Build Coastguard Worker sub t1, t1, t2 362*c0909341SAndroid Build Coastguard Worker sub t1, a4, t1 363*c0909341SAndroid Build Coastguard Worker 364*c0909341SAndroid Build Coastguard Worker li t0, \h 365*c0909341SAndroid Build Coastguard Worker 366*c0909341SAndroid Build Coastguard Worker la t2, dav1d_cdef_directions 367*c0909341SAndroid Build Coastguard Worker addi t3, a7, 4 368*c0909341SAndroid Build Coastguard Worker sh1add t3, t3, t2 369*c0909341SAndroid Build Coastguard Worker sh1add t2, a7, t2 370*c0909341SAndroid Build Coastguard Worker 371*c0909341SAndroid Build Coastguard Worker vsetivli zero, \w, e16, m1, ta, ma 372*c0909341SAndroid Build Coastguard Worker2: 373*c0909341SAndroid Build Coastguard Worker 374*c0909341SAndroid Build Coastguard Worker lb t4, 0(t3) 375*c0909341SAndroid Build Coastguard Worker lb t5, 0(t2) 376*c0909341SAndroid Build Coastguard Worker 377*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a2) 378*c0909341SAndroid Build Coastguard Worker 379*c0909341SAndroid Build Coastguard Worker sh1add t6, t4, a0 380*c0909341SAndroid Build Coastguard Worker slli t4, t4, 1 381*c0909341SAndroid Build Coastguard Worker sub t4, a0, t4 382*c0909341SAndroid Build Coastguard Worker 383*c0909341SAndroid Build Coastguard Worker vle16.v v4, (t6) 384*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t4) 385*c0909341SAndroid Build Coastguard Worker 386*c0909341SAndroid Build Coastguard Worker sh1add t4, t5, a0 387*c0909341SAndroid Build Coastguard Worker slli t5, t5, 1 388*c0909341SAndroid Build Coastguard Worker sub t5, a0, t5 389*c0909341SAndroid Build Coastguard Worker 390*c0909341SAndroid Build Coastguard Worker vle16.v v8, (t4) 391*c0909341SAndroid Build Coastguard Worker vle16.v v10, (t5) 392*c0909341SAndroid Build Coastguard Worker 393*c0909341SAndroid Build Coastguard Worker vwsub.vv v12, v4, v2 394*c0909341SAndroid Build Coastguard Worker vwsub.vv v14, v6, v2 395*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v8, v2 396*c0909341SAndroid Build Coastguard Worker vwsub.vv v18, v10, v2 397*c0909341SAndroid Build Coastguard Worker 398*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 399*c0909341SAndroid Build Coastguard Worker 400*c0909341SAndroid Build Coastguard Worker li t4, 2 401*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t1, v12, v14 402*c0909341SAndroid Build Coastguard Worker constrain_vectors v8, v10, v2, a6, t1, v16, v18 403*c0909341SAndroid Build Coastguard Worker 404*c0909341SAndroid Build Coastguard Worker vmul.vx v28, v18, t4 405*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v16 406*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v14 407*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v12 408*c0909341SAndroid Build Coastguard Worker 409*c0909341SAndroid Build Coastguard Worker lb t4, 1(t3) 410*c0909341SAndroid Build Coastguard Worker lb t5, 1(t2) 411*c0909341SAndroid Build Coastguard Worker 412*c0909341SAndroid Build Coastguard Worker sh1add t6, t4, a0 413*c0909341SAndroid Build Coastguard Worker slli t4, t4, 1 414*c0909341SAndroid Build Coastguard Worker sub t4, a0, t4 415*c0909341SAndroid Build Coastguard Worker 416*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 417*c0909341SAndroid Build Coastguard Worker 418*c0909341SAndroid Build Coastguard Worker vle16.v v4, (t6) 419*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t4) 420*c0909341SAndroid Build Coastguard Worker 421*c0909341SAndroid Build Coastguard Worker sh1add t4, t5, a0 422*c0909341SAndroid Build Coastguard Worker slli t5, t5, 1 423*c0909341SAndroid Build Coastguard Worker sub t5, a0, t5 424*c0909341SAndroid Build Coastguard Worker 425*c0909341SAndroid Build Coastguard Worker vle16.v v8, (t4) 426*c0909341SAndroid Build Coastguard Worker vle16.v v10, (t5) 427*c0909341SAndroid Build Coastguard Worker 428*c0909341SAndroid Build Coastguard Worker vwsub.vv v12, v4, v2 429*c0909341SAndroid Build Coastguard Worker vwsub.vv v14, v6, v2 430*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v8, v2 431*c0909341SAndroid Build Coastguard Worker vwsub.vv v18, v10, v2 432*c0909341SAndroid Build Coastguard Worker 433*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 434*c0909341SAndroid Build Coastguard Worker 435*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t1, v12, v14 436*c0909341SAndroid Build Coastguard Worker constrain_vectors v8, v10, v2, a6, t1, v16, v18 437*c0909341SAndroid Build Coastguard Worker 438*c0909341SAndroid Build Coastguard Worker vadd.vv v4, v28, v12 439*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v4, v14 440*c0909341SAndroid Build Coastguard Worker vadd.vv v4, v28, v16 441*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v4, v18 442*c0909341SAndroid Build Coastguard Worker 443*c0909341SAndroid Build Coastguard Worker vmslt.vx v0, v28, zero 444*c0909341SAndroid Build Coastguard Worker vadd.vi v28, v28, -1, v0.t 445*c0909341SAndroid Build Coastguard Worker 446*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 447*c0909341SAndroid Build Coastguard Worker 448*c0909341SAndroid Build Coastguard Worker vnclip.wi v24, v28, 4 449*c0909341SAndroid Build Coastguard Worker 450*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v2, v24 451*c0909341SAndroid Build Coastguard Worker 452*c0909341SAndroid Build Coastguard Worker vse16.v v28, (a2) 453*c0909341SAndroid Build Coastguard Worker 454*c0909341SAndroid Build Coastguard Worker add a2, a2, a3 455*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 456*c0909341SAndroid Build Coastguard Worker 457*c0909341SAndroid Build Coastguard Worker addi t0, t0, -1 458*c0909341SAndroid Build Coastguard Worker bnez t0, 2b 459*c0909341SAndroid Build Coastguard Worker 460*c0909341SAndroid Build Coastguard Worker addi sp, sp, 32 + 144*2 461*c0909341SAndroid Build Coastguard Worker ret 462*c0909341SAndroid Build Coastguard Workercdef_filter_pri_sec_\w\()x\h: 463*c0909341SAndroid Build Coastguard Worker 464*c0909341SAndroid Build Coastguard Worker li t1, 63 465*c0909341SAndroid Build Coastguard Worker clz t2, a5 466*c0909341SAndroid Build Coastguard Worker clz t3, a6 467*c0909341SAndroid Build Coastguard Worker sub t2, t1, t2 468*c0909341SAndroid Build Coastguard Worker sub t3, t1, t3 469*c0909341SAndroid Build Coastguard Worker sub t1, a4, t2 470*c0909341SAndroid Build Coastguard Worker sub t2, a4, t3 471*c0909341SAndroid Build Coastguard Worker 472*c0909341SAndroid Build Coastguard Worker li t0, \h 473*c0909341SAndroid Build Coastguard Worker 474*c0909341SAndroid Build Coastguard Worker la t3, dav1d_cdef_directions 475*c0909341SAndroid Build Coastguard Worker 476*c0909341SAndroid Build Coastguard Worker vsetivli zero, \w, e16, m1, ta, ma 477*c0909341SAndroid Build Coastguard Worker blt zero, t1, 3f 478*c0909341SAndroid Build Coastguard Worker mv t1, zero 479*c0909341SAndroid Build Coastguard Worker3: 480*c0909341SAndroid Build Coastguard Worker li t5, 64-8 481*c0909341SAndroid Build Coastguard Worker ld t4, 32 + 2*144 + 16(sp) # bitdepth_max 482*c0909341SAndroid Build Coastguard Worker clz t4, t4 483*c0909341SAndroid Build Coastguard Worker sub t4, t5, t4 484*c0909341SAndroid Build Coastguard Worker sra t4, a5, t4 485*c0909341SAndroid Build Coastguard Worker li t6, 4 486*c0909341SAndroid Build Coastguard Worker andi t5, t4, 1 487*c0909341SAndroid Build Coastguard Worker sub t4, t6, t5 488*c0909341SAndroid Build Coastguard Worker 489*c0909341SAndroid Build Coastguard Worker addi t5, a7, 2 490*c0909341SAndroid Build Coastguard Worker 491*c0909341SAndroid Build Coastguard Worker sh1add t5, t5, t3 492*c0909341SAndroid Build Coastguard Worker 493*c0909341SAndroid Build Coastguard Worker vle16.v v2, (a2) 494*c0909341SAndroid Build Coastguard Worker 495*c0909341SAndroid Build Coastguard Worker lb t6, 0(t5) 496*c0909341SAndroid Build Coastguard Worker 497*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 498*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 499*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 500*c0909341SAndroid Build Coastguard Worker 501*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 502*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 503*c0909341SAndroid Build Coastguard Worker 504*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v2 505*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v2 506*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 507*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 508*c0909341SAndroid Build Coastguard Worker 509*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 510*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 511*c0909341SAndroid Build Coastguard Worker 512*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 513*c0909341SAndroid Build Coastguard Worker 514*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a5, t1, v8, v16 515*c0909341SAndroid Build Coastguard Worker 516*c0909341SAndroid Build Coastguard Worker vmul.vx v28, v16, t4 517*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v8 518*c0909341SAndroid Build Coastguard Worker 519*c0909341SAndroid Build Coastguard Worker andi t4, t4, 3 520*c0909341SAndroid Build Coastguard Worker ori t4, t4, 2 521*c0909341SAndroid Build Coastguard Worker 522*c0909341SAndroid Build Coastguard Worker lb t6, 1(t5) 523*c0909341SAndroid Build Coastguard Worker 524*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 525*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 526*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 527*c0909341SAndroid Build Coastguard Worker 528*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 529*c0909341SAndroid Build Coastguard Worker 530*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 531*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 532*c0909341SAndroid Build Coastguard Worker 533*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v20 534*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v24 535*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 536*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 537*c0909341SAndroid Build Coastguard Worker 538*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 539*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 540*c0909341SAndroid Build Coastguard Worker 541*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 542*c0909341SAndroid Build Coastguard Worker 543*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a5, t1, v8, v16 544*c0909341SAndroid Build Coastguard Worker 545*c0909341SAndroid Build Coastguard Worker addi t5, a7, 4 546*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v16 547*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t4, v8 548*c0909341SAndroid Build Coastguard Worker 549*c0909341SAndroid Build Coastguard Worker sh1add t5, t5, t3 550*c0909341SAndroid Build Coastguard Worker 551*c0909341SAndroid Build Coastguard Worker lb t6, 0(t5) 552*c0909341SAndroid Build Coastguard Worker 553*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 554*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 555*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 556*c0909341SAndroid Build Coastguard Worker 557*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 558*c0909341SAndroid Build Coastguard Worker 559*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 560*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 561*c0909341SAndroid Build Coastguard Worker 562*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v20 563*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v24 564*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 565*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 566*c0909341SAndroid Build Coastguard Worker 567*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 568*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 569*c0909341SAndroid Build Coastguard Worker 570*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 571*c0909341SAndroid Build Coastguard Worker 572*c0909341SAndroid Build Coastguard Worker li t6, 2 573*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t2, v8, v16 574*c0909341SAndroid Build Coastguard Worker 575*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t6, v16 576*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t6, v8 577*c0909341SAndroid Build Coastguard Worker 578*c0909341SAndroid Build Coastguard Worker lb t6, 1(t5) 579*c0909341SAndroid Build Coastguard Worker 580*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 581*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 582*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 583*c0909341SAndroid Build Coastguard Worker 584*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 585*c0909341SAndroid Build Coastguard Worker 586*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 587*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 588*c0909341SAndroid Build Coastguard Worker 589*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v20 590*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v24 591*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 592*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 593*c0909341SAndroid Build Coastguard Worker 594*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 595*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 596*c0909341SAndroid Build Coastguard Worker 597*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 598*c0909341SAndroid Build Coastguard Worker 599*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t2, v8, v16 600*c0909341SAndroid Build Coastguard Worker 601*c0909341SAndroid Build Coastguard Worker sh1add t5, a7, t3 602*c0909341SAndroid Build Coastguard Worker 603*c0909341SAndroid Build Coastguard Worker vadd.vv v4, v28, v8 604*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v4, v16 605*c0909341SAndroid Build Coastguard Worker 606*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 607*c0909341SAndroid Build Coastguard Worker 608*c0909341SAndroid Build Coastguard Worker lb t6, 0(t5) 609*c0909341SAndroid Build Coastguard Worker 610*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 611*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 612*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 613*c0909341SAndroid Build Coastguard Worker 614*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 615*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 616*c0909341SAndroid Build Coastguard Worker 617*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v20 618*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v24 619*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 620*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 621*c0909341SAndroid Build Coastguard Worker 622*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 623*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 624*c0909341SAndroid Build Coastguard Worker 625*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 626*c0909341SAndroid Build Coastguard Worker 627*c0909341SAndroid Build Coastguard Worker li t6, 2 628*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t2, v8, v16 629*c0909341SAndroid Build Coastguard Worker 630*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t6, v16 631*c0909341SAndroid Build Coastguard Worker vmacc.vx v28, t6, v8 632*c0909341SAndroid Build Coastguard Worker 633*c0909341SAndroid Build Coastguard Worker lb t6, 1(t5) 634*c0909341SAndroid Build Coastguard Worker 635*c0909341SAndroid Build Coastguard Worker sh1add a4, t6, a0 636*c0909341SAndroid Build Coastguard Worker slli t6, t6, 1 637*c0909341SAndroid Build Coastguard Worker sub t6, a0, t6 638*c0909341SAndroid Build Coastguard Worker 639*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 640*c0909341SAndroid Build Coastguard Worker 641*c0909341SAndroid Build Coastguard Worker vle16.v v4, (a4) 642*c0909341SAndroid Build Coastguard Worker vle16.v v6, (t6) 643*c0909341SAndroid Build Coastguard Worker 644*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v4, v20 645*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v4, v24 646*c0909341SAndroid Build Coastguard Worker vminu.vv v20, v6, v20 647*c0909341SAndroid Build Coastguard Worker vmax.vv v24, v6, v24 648*c0909341SAndroid Build Coastguard Worker 649*c0909341SAndroid Build Coastguard Worker vwsub.vv v8, v4, v2 650*c0909341SAndroid Build Coastguard Worker vwsub.vv v16, v6, v2 651*c0909341SAndroid Build Coastguard Worker 652*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e32, m2, ta, mu 653*c0909341SAndroid Build Coastguard Worker 654*c0909341SAndroid Build Coastguard Worker constrain_vectors v4, v6, v2, a6, t2, v8, v16 655*c0909341SAndroid Build Coastguard Worker 656*c0909341SAndroid Build Coastguard Worker vadd.vv v4, v28, v8 657*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v4, v16 658*c0909341SAndroid Build Coastguard Worker 659*c0909341SAndroid Build Coastguard Worker vmslt.vx v0, v28, zero 660*c0909341SAndroid Build Coastguard Worker vadd.vi v28, v28, -1, v0.t 661*c0909341SAndroid Build Coastguard Worker 662*c0909341SAndroid Build Coastguard Worker vsetvli zero, zero, e16, m1, ta, ma 663*c0909341SAndroid Build Coastguard Worker 664*c0909341SAndroid Build Coastguard Worker vnclip.wi v16, v28, 4 665*c0909341SAndroid Build Coastguard Worker 666*c0909341SAndroid Build Coastguard Worker vadd.vv v28, v2, v16 667*c0909341SAndroid Build Coastguard Worker 668*c0909341SAndroid Build Coastguard Worker vmslt.vv v0, v20, v28 669*c0909341SAndroid Build Coastguard Worker vmerge.vvm v4, v20, v28, v0 670*c0909341SAndroid Build Coastguard Worker 671*c0909341SAndroid Build Coastguard Worker vmslt.vv v0, v4, v24 672*c0909341SAndroid Build Coastguard Worker vmerge.vvm v28, v24, v4, v0 673*c0909341SAndroid Build Coastguard Worker 674*c0909341SAndroid Build Coastguard Worker vse16.v v28, (a2) 675*c0909341SAndroid Build Coastguard Worker 676*c0909341SAndroid Build Coastguard Worker add a2, a2, a3 677*c0909341SAndroid Build Coastguard Worker sh1add a0, a1, a0 678*c0909341SAndroid Build Coastguard Worker 679*c0909341SAndroid Build Coastguard Worker addi t0, t0, -1 680*c0909341SAndroid Build Coastguard Worker bnez t0, 3b 681*c0909341SAndroid Build Coastguard Worker 682*c0909341SAndroid Build Coastguard Worker addi sp, sp, 32 + 144*2 683*c0909341SAndroid Build Coastguard Worker ret 684*c0909341SAndroid Build Coastguard Workerendfunc 685*c0909341SAndroid Build Coastguard Worker.endm 686*c0909341SAndroid Build Coastguard Worker 687*c0909341SAndroid Build Coastguard Workercdef_fn 4, 4 688*c0909341SAndroid Build Coastguard Workercdef_fn 4, 8 689*c0909341SAndroid Build Coastguard Workercdef_fn 8, 8 690