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 pal_idx_finish_rvv, export=1, ext="v,zba,zbb" 31*c0909341SAndroid Build Coastguard Worker csrw vxrm, zero 32*c0909341SAndroid Build Coastguard Worker srl t0, a2, 1 33*c0909341SAndroid Build Coastguard Worker sub a2, a2, a4 34*c0909341SAndroid Build Coastguard Worker srl t1, a4, 1 35*c0909341SAndroid Build Coastguard Worker mv t2, a5 36*c0909341SAndroid Build Coastguard Worker 37*c0909341SAndroid Build Coastguard Worker csrr t6, vlenb 38*c0909341SAndroid Build Coastguard Worker li t4, -3 39*c0909341SAndroid Build Coastguard Worker ctz a6, t0 40*c0909341SAndroid Build Coastguard Worker ctz t6, t6 41*c0909341SAndroid Build Coastguard Worker li a7, 16 42*c0909341SAndroid Build Coastguard Worker sub a6, a6, t6 43*c0909341SAndroid Build Coastguard Worker li t6, 1<<4+1 44*c0909341SAndroid Build Coastguard Worker 45*c0909341SAndroid Build Coastguard Worker // a6 is never > 3 for VLEN >=128 46*c0909341SAndroid Build Coastguard Worker // that would've required stripmining with a6 set to 3 47*c0909341SAndroid Build Coastguard Worker max a6, a6, t4 48*c0909341SAndroid Build Coastguard Worker li t5, 2 49*c0909341SAndroid Build Coastguard Worker andi a6, a6, 7 50*c0909341SAndroid Build Coastguard Worker addi t4, a1, 1 51*c0909341SAndroid Build Coastguard Worker ori a6, a6, 0xc0 52*c0909341SAndroid Build Coastguard Worker 53*c0909341SAndroid Build Coastguard Worker1: 54*c0909341SAndroid Build Coastguard Worker sub t3, t0, t1 55*c0909341SAndroid Build Coastguard Worker vsetvl zero, t1, a6 56*c0909341SAndroid Build Coastguard Worker vlse8.v v0, (a1), t5 57*c0909341SAndroid Build Coastguard Worker sh1add a1, t1, a1 58*c0909341SAndroid Build Coastguard Worker vlse8.v v8, (t4), t5 59*c0909341SAndroid Build Coastguard Worker sh1add t4, t1, t4 60*c0909341SAndroid Build Coastguard Worker vmacc.vx v0, a7, v8 61*c0909341SAndroid Build Coastguard Worker vse8.v v0, (a0) 62*c0909341SAndroid Build Coastguard Worker add a0, a0, t1 63*c0909341SAndroid Build Coastguard Worker ble t3, zero, 4f 64*c0909341SAndroid Build Coastguard Worker 65*c0909341SAndroid Build Coastguard Worker lbu a4, -1(a1) 66*c0909341SAndroid Build Coastguard Worker mul a4, a4, t6 67*c0909341SAndroid Build Coastguard Worker vsetvl zero, t3, a6 68*c0909341SAndroid Build Coastguard Worker vmv.v.x v0, a4 69*c0909341SAndroid Build Coastguard Worker vse8.v v0, (a0) 70*c0909341SAndroid Build Coastguard Worker add a0, a0, t3 71*c0909341SAndroid Build Coastguard Worker4: 72*c0909341SAndroid Build Coastguard Worker addi t2, t2, -1 73*c0909341SAndroid Build Coastguard Worker add a1, a1, a2 74*c0909341SAndroid Build Coastguard Worker add t4, t4, a2 75*c0909341SAndroid Build Coastguard Worker bnez t2, 1b 76*c0909341SAndroid Build Coastguard Worker 77*c0909341SAndroid Build Coastguard Worker sub t1, a3, a5 78*c0909341SAndroid Build Coastguard Worker 79*c0909341SAndroid Build Coastguard Worker sub t2, a0, t0 80*c0909341SAndroid Build Coastguard Worker ble t1, zero, 7f 81*c0909341SAndroid Build Coastguard Worker 82*c0909341SAndroid Build Coastguard Worker vsetvl zero, t0, a6 83*c0909341SAndroid Build Coastguard Worker vle8.v v0, (t2) 84*c0909341SAndroid Build Coastguard Worker add t2, a0, t0 85*c0909341SAndroid Build Coastguard Worker5: 86*c0909341SAndroid Build Coastguard Worker addi t1, t1, -2 87*c0909341SAndroid Build Coastguard Worker vse8.v v0, (a0) 88*c0909341SAndroid Build Coastguard Worker vse8.v v0, (t2) 89*c0909341SAndroid Build Coastguard Worker sh1add a0, t0, a0 90*c0909341SAndroid Build Coastguard Worker sh1add t2, t0, t2 91*c0909341SAndroid Build Coastguard Worker 92*c0909341SAndroid Build Coastguard Worker bnez t1, 5b 93*c0909341SAndroid Build Coastguard Worker7: 94*c0909341SAndroid Build Coastguard Worker ret 95*c0909341SAndroid Build Coastguard Workerendfunc 96