1*c0909341SAndroid Build Coastguard Worker/* 2*c0909341SAndroid Build Coastguard Worker * Copyright © 2024, VideoLAN and dav1d authors 3*c0909341SAndroid Build Coastguard Worker * Copyright © 2024, Loongson Technology Corporation Limited 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/loongarch/loongson_asm.S" 29*c0909341SAndroid Build Coastguard Worker 30*c0909341SAndroid Build Coastguard Worker// static int cdef_find_dir_lsx(const pixel *img, const ptrdiff_t stride, 31*c0909341SAndroid Build Coastguard Worker// unsigned *const var HIGHBD_DECL_SUFFIX) 32*c0909341SAndroid Build Coastguard Worker// param: img: a0, stride: a1, var: a2 33*c0909341SAndroid Build Coastguard Workerfunction cdef_find_dir_8bpc_lsx 34*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -64 35*c0909341SAndroid Build Coastguard Worker fst.d f24, sp, 0 36*c0909341SAndroid Build Coastguard Worker fst.d f25, sp, 8 37*c0909341SAndroid Build Coastguard Worker fst.d f26, sp, 16 38*c0909341SAndroid Build Coastguard Worker fst.d f27, sp, 24 39*c0909341SAndroid Build Coastguard Worker fst.d f28, sp, 32 40*c0909341SAndroid Build Coastguard Worker fst.d f29, sp, 40 41*c0909341SAndroid Build Coastguard Worker fst.d f30, sp, 48 42*c0909341SAndroid Build Coastguard Worker fst.d f31, sp, 56 43*c0909341SAndroid Build Coastguard Worker 44*c0909341SAndroid Build Coastguard Worker li.d a3, 128 45*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr31, a3 46*c0909341SAndroid Build Coastguard Worker 47*c0909341SAndroid Build Coastguard Worker // hv: vr0-vr3 diag: vr4-vr11 alt: vr12-vr23 48*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, vr9, vr10, \ 49*c0909341SAndroid Build Coastguard Worker vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18, vr19, \ 50*c0909341SAndroid Build Coastguard Worker vr20, vr21, vr22, vr23 51*c0909341SAndroid Build Coastguard Worker vxor.v \i, \i, \i 52*c0909341SAndroid Build Coastguard Worker.endr 53*c0909341SAndroid Build Coastguard Worker 54*c0909341SAndroid Build Coastguard Worker.CFDL01: // 8 55*c0909341SAndroid Build Coastguard Worker // 0 56*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 57*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 58*c0909341SAndroid Build Coastguard Worker 59*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 60*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 61*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 62*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 63*c0909341SAndroid Build Coastguard Worker 64*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 65*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 66*c0909341SAndroid Build Coastguard Worker 67*c0909341SAndroid Build Coastguard Worker vadd.w vr4, vr4, vr24 //diag[0][y+x] 68*c0909341SAndroid Build Coastguard Worker vadd.w vr5, vr5, vr25 69*c0909341SAndroid Build Coastguard Worker 70*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 71*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 72*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 73*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 74*c0909341SAndroid Build Coastguard Worker vadd.w vr12, vr12, vr26 75*c0909341SAndroid Build Coastguard Worker vadd.w vr12, vr12, vr27 //alt[0][y+(x>>1)] 76*c0909341SAndroid Build Coastguard Worker 77*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 78*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 79*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 80*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 81*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 82*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 83*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 84*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr0, a3, 0 //hv[0][y] 85*c0909341SAndroid Build Coastguard Worker 86*c0909341SAndroid Build Coastguard Worker vadd.w vr15, vr15, vr26 87*c0909341SAndroid Build Coastguard Worker vadd.w vr15, vr15, vr27 //alt[1][3+y-(x>>1)] 88*c0909341SAndroid Build Coastguard Worker vpermi.w vr15, vr15, 0x1b 89*c0909341SAndroid Build Coastguard Worker 90*c0909341SAndroid Build Coastguard Worker vadd.w vr9, vr9, vr24 91*c0909341SAndroid Build Coastguard Worker vadd.w vr8, vr8, vr25 92*c0909341SAndroid Build Coastguard Worker vpermi.w vr8, vr8, 0x1b 93*c0909341SAndroid Build Coastguard Worker vpermi.w vr9, vr9, 0x1b //diag[1][7+y-x] 94*c0909341SAndroid Build Coastguard Worker 95*c0909341SAndroid Build Coastguard Worker vxor.v vr28, vr28, vr28 96*c0909341SAndroid Build Coastguard Worker vxor.v vr29, vr29, vr29 97*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 98*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 99*c0909341SAndroid Build Coastguard Worker vextrins.w vr18, vr28, 0x30 100*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr19, vr28, 0x39 101*c0909341SAndroid Build Coastguard Worker vextrins.w vr19, vr29, 0x30 102*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr20, vr29, 0x39 //alt[2][3-(y>>1)+7] 103*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr20, zero, 3 104*c0909341SAndroid Build Coastguard Worker 105*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 106*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 107*c0909341SAndroid Build Coastguard Worker 108*c0909341SAndroid Build Coastguard Worker vadd.w vr21, vr21, vr24 109*c0909341SAndroid Build Coastguard Worker vadd.w vr22, vr22, vr25 //alt[3][(y>>1)+x] 110*c0909341SAndroid Build Coastguard Worker 111*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 112*c0909341SAndroid Build Coastguard Worker 113*c0909341SAndroid Build Coastguard Worker // 1 114*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 115*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 116*c0909341SAndroid Build Coastguard Worker 117*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 118*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 119*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 120*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 121*c0909341SAndroid Build Coastguard Worker 122*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 123*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 124*c0909341SAndroid Build Coastguard Worker 125*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr4, 4 //1-4 126*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr5, 4 //5-8 127*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr5, 0x30 128*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 129*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 130*c0909341SAndroid Build Coastguard Worker vbsll.v vr5, vr29, 4 131*c0909341SAndroid Build Coastguard Worker vextrins.w vr5, vr28, 0x03 132*c0909341SAndroid Build Coastguard Worker vextrins.w vr6, vr29, 0x03 133*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr4, 0x30 134*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr4, vr28, 0x93 135*c0909341SAndroid Build Coastguard Worker 136*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr12, 4 137*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr13, 0x30 138*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 139*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 140*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 141*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 142*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 143*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 144*c0909341SAndroid Build Coastguard Worker vextrins.w vr13, vr28, 0x03 145*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr12, 0x30 146*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr12, vr28, 0x93 147*c0909341SAndroid Build Coastguard Worker 148*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 149*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 150*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 151*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 152*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 153*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 154*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 155*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr0, a3, 1 //hv[0][y] 156*c0909341SAndroid Build Coastguard Worker 157*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr15, 4 158*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr16, 0x30 159*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 160*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 161*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 162*c0909341SAndroid Build Coastguard Worker vextrins.w vr16, vr28, 0x00 163*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr15, 0x00 164*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr15, vr28, 0x6c 165*c0909341SAndroid Build Coastguard Worker 166*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr8, 4 //4321 167*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr9, 4 //8765 168*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr9, 0x30 169*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 170*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b 171*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 172*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 //diag[1][7+y-x] 173*c0909341SAndroid Build Coastguard Worker vextrins.w vr10, vr29, 0x00 174*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x00 175*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr9, vr29, 0x6c 176*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr8, 0x00 177*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr8, vr28, 0x6c 178*c0909341SAndroid Build Coastguard Worker 179*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr19, 4 180*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr18, 0x03 181*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr20, 4 182*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr19, 0x03 183*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 184*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[2][3-(y>>1)+7] 185*c0909341SAndroid Build Coastguard Worker vextrins.w vr18, vr28, 0x30 186*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x00 187*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr19, vr28, 0x39 188*c0909341SAndroid Build Coastguard Worker vbsrl.v vr20, vr29, 4 189*c0909341SAndroid Build Coastguard Worker 190*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 191*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 192*c0909341SAndroid Build Coastguard Worker 193*c0909341SAndroid Build Coastguard Worker vadd.w vr21, vr21, vr24 194*c0909341SAndroid Build Coastguard Worker vadd.w vr22, vr22, vr25 //alt[3][(y>>1)+x] 195*c0909341SAndroid Build Coastguard Worker 196*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 197*c0909341SAndroid Build Coastguard Worker 198*c0909341SAndroid Build Coastguard Worker // 2 199*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 200*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 201*c0909341SAndroid Build Coastguard Worker 202*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 203*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 204*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 205*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 206*c0909341SAndroid Build Coastguard Worker 207*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 208*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 209*c0909341SAndroid Build Coastguard Worker 210*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr4, 8 211*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr5, 8 212*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr5, 0x10 //2-5 213*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr6, 0x10 //6-9 214*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 215*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 216*c0909341SAndroid Build Coastguard Worker vextrins.d vr4, vr28, 0x10 217*c0909341SAndroid Build Coastguard Worker vextrins.d vr5, vr28, 0x01 218*c0909341SAndroid Build Coastguard Worker vextrins.d vr5, vr29, 0x10 219*c0909341SAndroid Build Coastguard Worker vextrins.d vr6, vr29, 0x01 220*c0909341SAndroid Build Coastguard Worker 221*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr12, 8 222*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr13, 0x10 223*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 224*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 225*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 226*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 227*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 228*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 229*c0909341SAndroid Build Coastguard Worker vextrins.d vr12, vr28, 0x10 230*c0909341SAndroid Build Coastguard Worker vextrins.d vr13, vr28, 0x01 231*c0909341SAndroid Build Coastguard Worker 232*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 233*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 234*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 235*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 236*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 237*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 238*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 239*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr0, a3, 2 //hv[0][y] 240*c0909341SAndroid Build Coastguard Worker 241*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr15, 8 242*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr16, 0x10 243*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 244*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 245*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 246*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 247*c0909341SAndroid Build Coastguard Worker vextrins.d vr15, vr28, 0x10 248*c0909341SAndroid Build Coastguard Worker vextrins.d vr16, vr28, 0x01 249*c0909341SAndroid Build Coastguard Worker 250*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr8, 8 251*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr9, 0x10 252*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr9, 8 253*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr10, 0x10 254*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //5432 255*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b //9876 256*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 257*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 258*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 259*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b 260*c0909341SAndroid Build Coastguard Worker vextrins.d vr8, vr28, 0x10 261*c0909341SAndroid Build Coastguard Worker vextrins.d vr9, vr28, 0x01 262*c0909341SAndroid Build Coastguard Worker vextrins.d vr9, vr29, 0x10 263*c0909341SAndroid Build Coastguard Worker vextrins.d vr10, vr29, 0x01 //diag[1][7+y-x] 264*c0909341SAndroid Build Coastguard Worker 265*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr18, 8 266*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr19, 0x10 //2345 267*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr19, 8 268*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr20, 0x10 //6789 269*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 270*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 271*c0909341SAndroid Build Coastguard Worker vextrins.d vr18, vr28, 0x10 272*c0909341SAndroid Build Coastguard Worker vextrins.d vr19, vr28, 0x01 273*c0909341SAndroid Build Coastguard Worker vextrins.d vr19, vr29, 0x10 274*c0909341SAndroid Build Coastguard Worker vextrins.d vr20, vr29, 0x01 //alt[2][3-(y>>1)+7] 275*c0909341SAndroid Build Coastguard Worker 276*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 277*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 278*c0909341SAndroid Build Coastguard Worker 279*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr21, 4 280*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr22, 0x30 //1234 281*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr22, 4 //5678 282*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 283*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[3][(y>>1)+x] 284*c0909341SAndroid Build Coastguard Worker vextrins.w vr23, vr29, 0x03 285*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x33 286*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr22, vr29, 0x93 287*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr21, 0x30 288*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr21, vr28, 0x93 289*c0909341SAndroid Build Coastguard Worker 290*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 291*c0909341SAndroid Build Coastguard Worker 292*c0909341SAndroid Build Coastguard Worker // 3 293*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 294*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 295*c0909341SAndroid Build Coastguard Worker 296*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 297*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 298*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 299*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 300*c0909341SAndroid Build Coastguard Worker 301*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 302*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 303*c0909341SAndroid Build Coastguard Worker 304*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr5, 4 305*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr4, 0x03 //3456 306*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr6, 4 307*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr5, 0x03 //78910 308*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 309*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 310*c0909341SAndroid Build Coastguard Worker vextrins.w vr4, vr28, 0x30 311*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x00 312*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr28, 0x39 313*c0909341SAndroid Build Coastguard Worker vbsrl.v vr6, vr29, 4 314*c0909341SAndroid Build Coastguard Worker 315*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr13, 4 316*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr12, 0x03 317*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 318*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 319*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 320*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 321*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 322*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 323*c0909341SAndroid Build Coastguard Worker vextrins.w vr12, vr28, 0x30 324*c0909341SAndroid Build Coastguard Worker vbsrl.v vr13, vr28, 4 325*c0909341SAndroid Build Coastguard Worker 326*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 327*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 328*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 329*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 330*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 331*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 332*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 333*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr0, a3, 3 //hv[0][y] 334*c0909341SAndroid Build Coastguard Worker 335*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr16, 4 336*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr15, 0x03 337*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //6543 338*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 339*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 340*c0909341SAndroid Build Coastguard Worker vextrins.w vr15, vr28, 0x33 341*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr16, vr28, 0xc6 342*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr16, zero, 3 343*c0909341SAndroid Build Coastguard Worker 344*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr9, 4 345*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr8, 0x03 //3456 346*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr10, 4 347*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr9, 0x03 //78910 348*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //6543 349*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b //10987 350*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 351*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 //diag[1][7+y-x] 352*c0909341SAndroid Build Coastguard Worker vextrins.w vr8, vr28, 0x33 353*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x33 354*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr9, vr28, 0xc6 355*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr10, vr29, 0xc6 356*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr10, zero, 3 357*c0909341SAndroid Build Coastguard Worker 358*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr18, 8 359*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr19, 0x10 //2345 360*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr19, 8 361*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr20, 0x10 //6789 362*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 363*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 364*c0909341SAndroid Build Coastguard Worker vextrins.d vr18, vr28, 0x10 365*c0909341SAndroid Build Coastguard Worker vextrins.d vr19, vr28, 0x01 366*c0909341SAndroid Build Coastguard Worker vextrins.d vr19, vr29, 0x10 367*c0909341SAndroid Build Coastguard Worker vextrins.d vr20, vr29, 0x01 //alt[2][3-(y>>1)+7] 368*c0909341SAndroid Build Coastguard Worker 369*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 370*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 371*c0909341SAndroid Build Coastguard Worker 372*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr21, 4 373*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr22, 0x30 //1234 374*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr22, 4 //5678 375*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr23, 0x30 376*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 377*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[3][(y>>1)+x] 378*c0909341SAndroid Build Coastguard Worker vextrins.w vr23, vr29, 0x03 379*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x33 380*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr22, vr29, 0x93 381*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr21, 0x30 382*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr21, vr28, 0x93 383*c0909341SAndroid Build Coastguard Worker 384*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 385*c0909341SAndroid Build Coastguard Worker 386*c0909341SAndroid Build Coastguard Worker // 4 387*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 388*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 389*c0909341SAndroid Build Coastguard Worker 390*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 391*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 392*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 393*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 394*c0909341SAndroid Build Coastguard Worker 395*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 396*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 397*c0909341SAndroid Build Coastguard Worker 398*c0909341SAndroid Build Coastguard Worker vadd.w vr5, vr5, vr24 //diag[0][y+x] 399*c0909341SAndroid Build Coastguard Worker vadd.w vr6, vr6, vr25 400*c0909341SAndroid Build Coastguard Worker 401*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 402*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 403*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 404*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 405*c0909341SAndroid Build Coastguard Worker vadd.w vr13, vr13, vr26 406*c0909341SAndroid Build Coastguard Worker vadd.w vr13, vr13, vr27 //alt[0][y+(x>>1)] 407*c0909341SAndroid Build Coastguard Worker 408*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 409*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 410*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 411*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 412*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 413*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 414*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 415*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr1, a3, 0 //hv[0][y] 416*c0909341SAndroid Build Coastguard Worker 417*c0909341SAndroid Build Coastguard Worker vpermi.w vr16, vr16, 0x1b 418*c0909341SAndroid Build Coastguard Worker vadd.w vr16, vr16, vr26 419*c0909341SAndroid Build Coastguard Worker vadd.w vr16, vr16, vr27 //alt[1][3+y-(x>>1)] 420*c0909341SAndroid Build Coastguard Worker vpermi.w vr16, vr16, 0x1b 421*c0909341SAndroid Build Coastguard Worker 422*c0909341SAndroid Build Coastguard Worker vpermi.w vr9, vr9, 0x1b 423*c0909341SAndroid Build Coastguard Worker vpermi.w vr10, vr10, 0x1b 424*c0909341SAndroid Build Coastguard Worker vadd.w vr10, vr10, vr24 425*c0909341SAndroid Build Coastguard Worker vadd.w vr9, vr9, vr25 426*c0909341SAndroid Build Coastguard Worker vpermi.w vr9, vr9, 0x1b 427*c0909341SAndroid Build Coastguard Worker vpermi.w vr10, vr10, 0x1b //diag[1][7+y-x] 428*c0909341SAndroid Build Coastguard Worker 429*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr18, 4 430*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr19, 0x30 //1234 431*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr19, 4 432*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr20, 0x30 //5678 433*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 434*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[2][3-(y>>1)+7] 435*c0909341SAndroid Build Coastguard Worker vextrins.w vr20, vr29, 0x03 436*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x33 437*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr19, vr29, 0x93 438*c0909341SAndroid Build Coastguard Worker vbsll.v vr18, vr28, 4 439*c0909341SAndroid Build Coastguard Worker 440*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 441*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 442*c0909341SAndroid Build Coastguard Worker 443*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr21, 8 444*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr22, 0x10 445*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr22, 8 446*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr23, 0x10 447*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 448*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 449*c0909341SAndroid Build Coastguard Worker vextrins.d vr21, vr28, 0x10 450*c0909341SAndroid Build Coastguard Worker vextrins.d vr22, vr28, 0x01 451*c0909341SAndroid Build Coastguard Worker vextrins.d vr22, vr29, 0x10 452*c0909341SAndroid Build Coastguard Worker vextrins.d vr23, vr29, 0x01 //alt[3][(y>>1)+x] 453*c0909341SAndroid Build Coastguard Worker 454*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 455*c0909341SAndroid Build Coastguard Worker 456*c0909341SAndroid Build Coastguard Worker // 5 457*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 458*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 459*c0909341SAndroid Build Coastguard Worker 460*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 461*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 462*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 463*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 464*c0909341SAndroid Build Coastguard Worker 465*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 466*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 467*c0909341SAndroid Build Coastguard Worker 468*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr5, 4 //5-8 469*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr6, 4 //9-12 470*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr6, 0x30 471*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 472*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 473*c0909341SAndroid Build Coastguard Worker vextrins.w vr7, vr29, 0x03 474*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x33 475*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr6, vr29, 0x93 476*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr5, 0x30 477*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr28, 0x93 478*c0909341SAndroid Build Coastguard Worker 479*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr13, 4 480*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr14, 0x30 481*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 482*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 483*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 484*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 485*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 486*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 487*c0909341SAndroid Build Coastguard Worker vextrins.w vr14, vr28, 0x03 488*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr13, 0x30 489*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr13, vr28, 0x93 490*c0909341SAndroid Build Coastguard Worker 491*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 492*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 493*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 494*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 495*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 496*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 497*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 498*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr1, a3, 1 //hv[0][y] 499*c0909341SAndroid Build Coastguard Worker 500*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr16, 4 501*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr17, 0x30 502*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 503*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 504*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 505*c0909341SAndroid Build Coastguard Worker vextrins.w vr17, vr28, 0x00 506*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr16, 0x00 507*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr16, vr28, 0x6c 508*c0909341SAndroid Build Coastguard Worker 509*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr9, 4 510*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr10, 4 511*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr10, 0x30 512*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //8-5 513*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b //12-9 514*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 515*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 //diag[1][7+y-x] 516*c0909341SAndroid Build Coastguard Worker vextrins.w vr11, vr29, 0x00 517*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x00 518*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr10, vr29, 0x6c 519*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr9, 0x00 520*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr9, vr28, 0x6c 521*c0909341SAndroid Build Coastguard Worker 522*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr18, 4 523*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr19, 0x30 //1234 524*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr19, 4 525*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr20, 0x30 //5678 526*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 527*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[2][3-(y>>1)+7] 528*c0909341SAndroid Build Coastguard Worker vextrins.w vr20, vr29, 0x03 529*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr28, 0x33 530*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr19, vr29, 0x93 531*c0909341SAndroid Build Coastguard Worker vbsll.v vr18, vr28, 4 532*c0909341SAndroid Build Coastguard Worker 533*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 534*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 535*c0909341SAndroid Build Coastguard Worker 536*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr21, 8 537*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr22, 0x10 538*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr22, 8 539*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr23, 0x10 540*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 541*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 542*c0909341SAndroid Build Coastguard Worker vextrins.d vr21, vr28, 0x10 543*c0909341SAndroid Build Coastguard Worker vextrins.d vr22, vr28, 0x01 544*c0909341SAndroid Build Coastguard Worker vextrins.d vr22, vr29, 0x10 545*c0909341SAndroid Build Coastguard Worker vextrins.d vr23, vr29, 0x01 //alt[3][(y>>1)+x] 546*c0909341SAndroid Build Coastguard Worker 547*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 548*c0909341SAndroid Build Coastguard Worker 549*c0909341SAndroid Build Coastguard Worker // 6 550*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 551*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 552*c0909341SAndroid Build Coastguard Worker 553*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 554*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 555*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 556*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 557*c0909341SAndroid Build Coastguard Worker 558*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 559*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 560*c0909341SAndroid Build Coastguard Worker 561*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr5, 8 562*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr6, 8 563*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr6, 0x10 //6-9 564*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr7, 0x10 //10-13 565*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 566*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 567*c0909341SAndroid Build Coastguard Worker vextrins.d vr5, vr28, 0x10 568*c0909341SAndroid Build Coastguard Worker vextrins.d vr6, vr28, 0x01 569*c0909341SAndroid Build Coastguard Worker vextrins.d vr6, vr29, 0x10 570*c0909341SAndroid Build Coastguard Worker vextrins.d vr7, vr29, 0x01 571*c0909341SAndroid Build Coastguard Worker 572*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr13, 8 573*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr14, 0x10 574*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 575*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 576*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 577*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 578*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 579*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 580*c0909341SAndroid Build Coastguard Worker vextrins.d vr13, vr28, 0x10 581*c0909341SAndroid Build Coastguard Worker vextrins.d vr14, vr28, 0x01 582*c0909341SAndroid Build Coastguard Worker 583*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 584*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 585*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 586*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 587*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 588*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 589*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 590*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr1, a3, 2 //hv[0][y] 591*c0909341SAndroid Build Coastguard Worker 592*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr16, 8 593*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr17, 0x10 594*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 595*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 596*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 597*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 598*c0909341SAndroid Build Coastguard Worker vextrins.d vr16, vr28, 0x10 599*c0909341SAndroid Build Coastguard Worker vextrins.d vr17, vr28, 0x01 600*c0909341SAndroid Build Coastguard Worker 601*c0909341SAndroid Build Coastguard Worker vbsrl.v vr28, vr9, 8 602*c0909341SAndroid Build Coastguard Worker vextrins.d vr28, vr10, 0x10 603*c0909341SAndroid Build Coastguard Worker vbsrl.v vr29, vr10, 8 604*c0909341SAndroid Build Coastguard Worker vextrins.d vr29, vr11, 0x10 605*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //9876 606*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b //13-10 607*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 608*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 609*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b 610*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b 611*c0909341SAndroid Build Coastguard Worker vextrins.d vr9, vr28, 0x10 612*c0909341SAndroid Build Coastguard Worker vextrins.d vr10, vr28, 0x01 613*c0909341SAndroid Build Coastguard Worker vextrins.d vr10, vr29, 0x10 614*c0909341SAndroid Build Coastguard Worker vextrins.d vr11, vr29, 0x01 //diag[1][7+y-x] 615*c0909341SAndroid Build Coastguard Worker 616*c0909341SAndroid Build Coastguard Worker vadd.w vr18, vr18, vr24 //0123 617*c0909341SAndroid Build Coastguard Worker vadd.w vr19, vr19, vr25 //4567 alt[2][3-(y>>1)+7] 618*c0909341SAndroid Build Coastguard Worker 619*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 620*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 621*c0909341SAndroid Build Coastguard Worker 622*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr22, 4 623*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr21, 0x03 //3456 624*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr23, 4 625*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr22, 0x03 //78910 626*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 627*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[3][(y>>1)+x] 628*c0909341SAndroid Build Coastguard Worker vextrins.w vr21, vr28, 0x30 629*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x00 630*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr22, vr28, 0x39 631*c0909341SAndroid Build Coastguard Worker vbsrl.v vr23, vr29, 4 632*c0909341SAndroid Build Coastguard Worker 633*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 634*c0909341SAndroid Build Coastguard Worker 635*c0909341SAndroid Build Coastguard Worker // 7 636*c0909341SAndroid Build Coastguard Worker fld.d f24, a0, 0 //img 637*c0909341SAndroid Build Coastguard Worker vpermi.w vr25, vr24, 0x01 638*c0909341SAndroid Build Coastguard Worker 639*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 640*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr24, vr24, 0 641*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 642*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr25, vr25, 0 643*c0909341SAndroid Build Coastguard Worker 644*c0909341SAndroid Build Coastguard Worker vsub.w vr24, vr24, vr31 //px 645*c0909341SAndroid Build Coastguard Worker vsub.w vr25, vr25, vr31 646*c0909341SAndroid Build Coastguard Worker 647*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr6, 4 648*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr5, 0x03 //78910 649*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr7, 4 650*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr6, 0x03 //11-14 651*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 //diag[0][y+x] 652*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 653*c0909341SAndroid Build Coastguard Worker vextrins.w vr5, vr28, 0x30 654*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x00 655*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr6, vr28, 0x39 656*c0909341SAndroid Build Coastguard Worker vbsrl.v vr7, vr29, 4 657*c0909341SAndroid Build Coastguard Worker 658*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr14, 4 659*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr13, 0x03 660*c0909341SAndroid Build Coastguard Worker vpackev.w vr26, vr25, vr24 661*c0909341SAndroid Build Coastguard Worker vpackod.w vr27, vr25, vr24 662*c0909341SAndroid Build Coastguard Worker vpermi.w vr26, vr26, 0xd8 //px0246 663*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0xd8 //px1357 664*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 665*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[0][y+(x>>1)] 666*c0909341SAndroid Build Coastguard Worker vextrins.w vr13, vr28, 0x30 667*c0909341SAndroid Build Coastguard Worker vbsrl.v vr14, vr28, 4 668*c0909341SAndroid Build Coastguard Worker 669*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr24, vr24 670*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 671*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 672*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr25, vr25 673*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 674*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 675*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 676*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr1, a3, 3 //hv[0][y] 677*c0909341SAndroid Build Coastguard Worker 678*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr17, 4 679*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr16, 0x03 680*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //10987 681*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr26 682*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr27 //alt[1][3+y-(x>>1)] 683*c0909341SAndroid Build Coastguard Worker vextrins.w vr16, vr28, 0x33 684*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr17, vr28, 0xc6 685*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr17, zero, 3 686*c0909341SAndroid Build Coastguard Worker 687*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr10, 4 688*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr9, 0x03 //7-10 689*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr11, 4 690*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr10, 0x03 //11-14 691*c0909341SAndroid Build Coastguard Worker vpermi.w vr28, vr28, 0x1b //10-7 692*c0909341SAndroid Build Coastguard Worker vpermi.w vr29, vr29, 0x1b //14-11 693*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr24 694*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr25 //diag[1][7+y-x] 695*c0909341SAndroid Build Coastguard Worker vextrins.w vr9, vr28, 0x33 696*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x33 697*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr10, vr28, 0xc6 698*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr11, vr29, 0xc6 699*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr11, zero, 3 700*c0909341SAndroid Build Coastguard Worker 701*c0909341SAndroid Build Coastguard Worker vadd.w vr18, vr18, vr24 //0123 702*c0909341SAndroid Build Coastguard Worker vadd.w vr19, vr19, vr25 //4567 alt[2][3-(y>>1)+7] 703*c0909341SAndroid Build Coastguard Worker 704*c0909341SAndroid Build Coastguard Worker vadd.w vr2, vr2, vr24 705*c0909341SAndroid Build Coastguard Worker vadd.w vr3, vr3, vr25 //hv[1][x] 706*c0909341SAndroid Build Coastguard Worker 707*c0909341SAndroid Build Coastguard Worker vbsll.v vr28, vr22, 4 708*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr21, 0x03 //3456 709*c0909341SAndroid Build Coastguard Worker vbsll.v vr29, vr23, 4 710*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr22, 0x03 //78910 711*c0909341SAndroid Build Coastguard Worker vadd.w vr28, vr28, vr24 712*c0909341SAndroid Build Coastguard Worker vadd.w vr29, vr29, vr25 //alt[3][(y>>1)+x] 713*c0909341SAndroid Build Coastguard Worker vextrins.w vr21, vr28, 0x30 714*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr29, 0x00 715*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr22, vr28, 0x39 716*c0909341SAndroid Build Coastguard Worker vbsrl.v vr23, vr29, 4 717*c0909341SAndroid Build Coastguard Worker 718*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 719*c0909341SAndroid Build Coastguard Worker 720*c0909341SAndroid Build Coastguard Worker vxor.v vr24, vr24, vr24 //unsigned cost[8] 721*c0909341SAndroid Build Coastguard Worker vxor.v vr25, vr25, vr25 722*c0909341SAndroid Build Coastguard Worker 723*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr0, vr0 724*c0909341SAndroid Build Coastguard Worker vmul.w vr27, vr1, vr1 725*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 726*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 727*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 728*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr27, vr27 729*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 730*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 731*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 732*c0909341SAndroid Build Coastguard Worker 733*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr2, vr2 734*c0909341SAndroid Build Coastguard Worker vmul.w vr27, vr3, vr3 735*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 736*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 737*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 738*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr27, vr27 739*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 740*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a5, vr28, 0 741*c0909341SAndroid Build Coastguard Worker add.d a4, a4, a5 742*c0909341SAndroid Build Coastguard Worker 743*c0909341SAndroid Build Coastguard Worker li.d a6, 105 744*c0909341SAndroid Build Coastguard Worker mul.w a3, a3, a6 745*c0909341SAndroid Build Coastguard Worker mul.w a4, a4, a6 746*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr24, a3, 2 747*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr25, a4, 2 748*c0909341SAndroid Build Coastguard Worker 749*c0909341SAndroid Build Coastguard Worker vxor.v vr30, vr30, vr30 //div_table 750*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 751*c0909341SAndroid Build Coastguard Worker li.d t0, 840 752*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr30, t0, 0 753*c0909341SAndroid Build Coastguard Worker li.d t0, 420 754*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr30, t0, 1 755*c0909341SAndroid Build Coastguard Worker li.d t0, 280 756*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr30, t0, 2 757*c0909341SAndroid Build Coastguard Worker li.d t0, 210 758*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr30, t0, 3 759*c0909341SAndroid Build Coastguard Worker li.d t0, 168 760*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr31, t0, 0 761*c0909341SAndroid Build Coastguard Worker li.d t0, 140 762*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr31, t0, 1 763*c0909341SAndroid Build Coastguard Worker li.d t0, 120 764*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr31, t0, 2 765*c0909341SAndroid Build Coastguard Worker 766*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr7, 4 767*c0909341SAndroid Build Coastguard Worker vextrins.w vr27, vr6, 0x03 768*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 769*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr4, vr4 770*c0909341SAndroid Build Coastguard Worker vmadd.w vr26, vr27, vr27 771*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr26, vr30 772*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 773*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 774*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a3, vr28, 0 775*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr6, 4 776*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 777*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr5, vr5 778*c0909341SAndroid Build Coastguard Worker vmadd.w vr26, vr27, vr27 779*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr26, vr31 780*c0909341SAndroid Build Coastguard Worker vextrins.w vr26, vr31, 0x33 781*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 782*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 783*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 784*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 //cost[0] 785*c0909341SAndroid Build Coastguard Worker 786*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr11, 4 787*c0909341SAndroid Build Coastguard Worker vextrins.w vr27, vr10, 0x03 788*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 789*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr8, vr8 790*c0909341SAndroid Build Coastguard Worker vmadd.w vr26, vr27, vr27 791*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr26, vr30 792*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 793*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 794*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 795*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr10, 4 796*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 797*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr9, vr9 798*c0909341SAndroid Build Coastguard Worker vmadd.w vr26, vr27, vr27 799*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr26, vr31 800*c0909341SAndroid Build Coastguard Worker vextrins.w vr26, vr31, 0x33 801*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 802*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 803*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a5, vr28, 0 804*c0909341SAndroid Build Coastguard Worker add.d a4, a4, a5 //cost[4] 805*c0909341SAndroid Build Coastguard Worker 806*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr5, 3 807*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 808*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a6 809*c0909341SAndroid Build Coastguard Worker add.w a3, a3, a5 810*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr24, a3, 0 811*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr9, 3 812*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 813*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a6 814*c0909341SAndroid Build Coastguard Worker add.w a4, a4, a5 815*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr25, a4, 0 816*c0909341SAndroid Build Coastguard Worker 817*c0909341SAndroid Build Coastguard Worker //n=0 818*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a3, vr24, 1 819*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr13, vr13 820*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 821*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 822*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 823*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr12, 3 824*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 825*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 826*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a5 827*c0909341SAndroid Build Coastguard Worker mul.w a3, a3, a6 //*cost_ptr 828*c0909341SAndroid Build Coastguard Worker 829*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr30, 0x01 830*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr30, 0x13 831*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr31, 0x21 832*c0909341SAndroid Build Coastguard Worker vextrins.w vr29, vr31, 0x33 833*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr14, 4 834*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 835*c0909341SAndroid Build Coastguard Worker vmul.w vr28, vr12, vr12 836*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr31, 0x33 837*c0909341SAndroid Build Coastguard Worker vmadd.w vr28, vr27, vr27 838*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr28, vr29 839*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 840*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 841*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 842*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 843*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr24, a3, 1 844*c0909341SAndroid Build Coastguard Worker 845*c0909341SAndroid Build Coastguard Worker //n=1 846*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a3, vr24, 3 847*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr16, vr16 848*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 849*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 850*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 851*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr15, 3 852*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 853*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 854*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a5 855*c0909341SAndroid Build Coastguard Worker mul.w a3, a3, a6 //*cost_ptr 856*c0909341SAndroid Build Coastguard Worker 857*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr17, 4 858*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 859*c0909341SAndroid Build Coastguard Worker vmul.w vr28, vr15, vr15 860*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr31, 0x33 861*c0909341SAndroid Build Coastguard Worker vmadd.w vr28, vr27, vr27 862*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr28, vr29 863*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 864*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 865*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 866*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 867*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr24, a3, 3 868*c0909341SAndroid Build Coastguard Worker 869*c0909341SAndroid Build Coastguard Worker //n=2 870*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a3, vr25, 1 871*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr19, vr19 872*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 873*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 874*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 875*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr18, 3 876*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 877*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 878*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a5 879*c0909341SAndroid Build Coastguard Worker mul.w a3, a3, a6 //*cost_ptr 880*c0909341SAndroid Build Coastguard Worker 881*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr20, 4 882*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 883*c0909341SAndroid Build Coastguard Worker vmul.w vr28, vr18, vr18 884*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr31, 0x33 885*c0909341SAndroid Build Coastguard Worker vmadd.w vr28, vr27, vr27 886*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr28, vr29 887*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 888*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 889*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 890*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 891*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr25, a3, 1 892*c0909341SAndroid Build Coastguard Worker 893*c0909341SAndroid Build Coastguard Worker //n=3 894*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a3, vr25, 3 895*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr22, vr22 896*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 897*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 898*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 899*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr21, 3 900*c0909341SAndroid Build Coastguard Worker mul.w a5, a5, a5 901*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 902*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a5 903*c0909341SAndroid Build Coastguard Worker mul.w a3, a3, a6 //*cost_ptr 904*c0909341SAndroid Build Coastguard Worker 905*c0909341SAndroid Build Coastguard Worker vbsll.v vr27, vr23, 4 906*c0909341SAndroid Build Coastguard Worker vpermi.w vr27, vr27, 0x1b 907*c0909341SAndroid Build Coastguard Worker vmul.w vr28, vr21, vr21 908*c0909341SAndroid Build Coastguard Worker vextrins.w vr28, vr31, 0x33 909*c0909341SAndroid Build Coastguard Worker vmadd.w vr28, vr27, vr27 910*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr28, vr29 911*c0909341SAndroid Build Coastguard Worker vhaddw.d.w vr28, vr26, vr26 912*c0909341SAndroid Build Coastguard Worker vhaddw.q.d vr28, vr28, vr28 913*c0909341SAndroid Build Coastguard Worker vpickve2gr.d a4, vr28, 0 914*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a4 915*c0909341SAndroid Build Coastguard Worker vinsgr2vr.w vr25, a3, 3 916*c0909341SAndroid Build Coastguard Worker 917*c0909341SAndroid Build Coastguard Worker xor a3, a3, a3 //best_dir 918*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a4, vr24, 0 //best_cost 919*c0909341SAndroid Build Coastguard Worker.BSETDIR01: 920*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr24, 1 921*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR02 922*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 923*c0909341SAndroid Build Coastguard Worker ori a3, zero, 1 924*c0909341SAndroid Build Coastguard Worker.BSETDIR02: 925*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr24, 2 926*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR03 927*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 928*c0909341SAndroid Build Coastguard Worker ori a3, zero, 2 929*c0909341SAndroid Build Coastguard Worker.BSETDIR03: 930*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr24, 3 931*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR04 932*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 933*c0909341SAndroid Build Coastguard Worker ori a3, zero, 3 934*c0909341SAndroid Build Coastguard Worker.BSETDIR04: 935*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr25, 0 936*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR05 937*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 938*c0909341SAndroid Build Coastguard Worker ori a3, zero, 4 939*c0909341SAndroid Build Coastguard Worker.BSETDIR05: 940*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr25, 1 941*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR06 942*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 943*c0909341SAndroid Build Coastguard Worker ori a3, zero, 5 944*c0909341SAndroid Build Coastguard Worker.BSETDIR06: 945*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr25, 2 946*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIR07 947*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 948*c0909341SAndroid Build Coastguard Worker ori a3, zero, 6 949*c0909341SAndroid Build Coastguard Worker.BSETDIR07: 950*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr25, 3 951*c0909341SAndroid Build Coastguard Worker bge a4, a5, .BSETDIREND 952*c0909341SAndroid Build Coastguard Worker or a4, a5, a5 953*c0909341SAndroid Build Coastguard Worker ori a3, zero, 7 954*c0909341SAndroid Build Coastguard Worker.BSETDIREND: 955*c0909341SAndroid Build Coastguard Worker xori a5, a3, 4 956*c0909341SAndroid Build Coastguard Worker li.d a1, 4 957*c0909341SAndroid Build Coastguard Worker bge a5, a1, .GETCOST01 958*c0909341SAndroid Build Coastguard Worker vreplve.w vr26, vr24, a5 959*c0909341SAndroid Build Coastguard Worker b .GETCOST02 960*c0909341SAndroid Build Coastguard Worker.GETCOST01: 961*c0909341SAndroid Build Coastguard Worker vreplve.w vr26, vr25, a5 962*c0909341SAndroid Build Coastguard Worker.GETCOST02: 963*c0909341SAndroid Build Coastguard Worker vpickve2gr.w a5, vr26, 0 964*c0909341SAndroid Build Coastguard Worker sub.w a5, a4, a5 965*c0909341SAndroid Build Coastguard Worker srai.d a5, a5, 10 966*c0909341SAndroid Build Coastguard Worker st.w a5, a2, 0 967*c0909341SAndroid Build Coastguard Worker or a0, a3, a3 968*c0909341SAndroid Build Coastguard Worker 969*c0909341SAndroid Build Coastguard Worker fld.d f24, sp, 0 970*c0909341SAndroid Build Coastguard Worker fld.d f25, sp, 8 971*c0909341SAndroid Build Coastguard Worker fld.d f26, sp, 16 972*c0909341SAndroid Build Coastguard Worker fld.d f27, sp, 24 973*c0909341SAndroid Build Coastguard Worker fld.d f28, sp, 32 974*c0909341SAndroid Build Coastguard Worker fld.d f29, sp, 40 975*c0909341SAndroid Build Coastguard Worker fld.d f30, sp, 48 976*c0909341SAndroid Build Coastguard Worker fld.d f31, sp, 56 977*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, 64 978*c0909341SAndroid Build Coastguard Worker 979*c0909341SAndroid Build Coastguard Workerendfunc 980*c0909341SAndroid Build Coastguard Worker 981*c0909341SAndroid Build Coastguard Worker.macro cdef_fill tmp, stride, w, h 982*c0909341SAndroid Build Coastguard Worker beqz \h, 700f //h 983*c0909341SAndroid Build Coastguard Worker or t0, zero, zero //y 984*c0909341SAndroid Build Coastguard Worker100: 985*c0909341SAndroid Build Coastguard Worker or t1, zero, zero //xx 986*c0909341SAndroid Build Coastguard Worker srai.d s6, \w, 3 //x 987*c0909341SAndroid Build Coastguard Worker beqz s6, 300f 988*c0909341SAndroid Build Coastguard Worker200: 989*c0909341SAndroid Build Coastguard Worker vstx vr18, \tmp, t1 990*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 991*c0909341SAndroid Build Coastguard Worker addi.d s6, s6, -1 992*c0909341SAndroid Build Coastguard Worker bnez s6, 200b 993*c0909341SAndroid Build Coastguard Worker300: 994*c0909341SAndroid Build Coastguard Worker andi s6, \w, 4 995*c0909341SAndroid Build Coastguard Worker beqz s6, 400f 996*c0909341SAndroid Build Coastguard Worker fstx.d f18, \tmp, t1 997*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 8 998*c0909341SAndroid Build Coastguard Worker400: 999*c0909341SAndroid Build Coastguard Worker andi s6, \w, 2 1000*c0909341SAndroid Build Coastguard Worker beqz s6, 500f 1001*c0909341SAndroid Build Coastguard Worker fstx.s f18, \tmp, t1 1002*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 4 1003*c0909341SAndroid Build Coastguard Worker500: 1004*c0909341SAndroid Build Coastguard Worker andi s6, \w, 1 1005*c0909341SAndroid Build Coastguard Worker beqz s6, 600f 1006*c0909341SAndroid Build Coastguard Worker li.w s6, -16384 1007*c0909341SAndroid Build Coastguard Worker stx.h s6, \tmp, t1 1008*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 2 1009*c0909341SAndroid Build Coastguard Worker600: 1010*c0909341SAndroid Build Coastguard Worker add.d \tmp, \tmp, \stride 1011*c0909341SAndroid Build Coastguard Worker add.d \tmp, \tmp, \stride 1012*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 1 1013*c0909341SAndroid Build Coastguard Worker blt t0, \h, 100b 1014*c0909341SAndroid Build Coastguard Worker700: 1015*c0909341SAndroid Build Coastguard Worker.endm 1016*c0909341SAndroid Build Coastguard Worker 1017*c0909341SAndroid Build Coastguard Workerconst dav1d_cdef_directions 1018*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 0, 2 * 12 + 0 1019*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 0, 2 * 12 - 1 1020*c0909341SAndroid Build Coastguard Worker.byte -1 * 12 + 1, -2 * 12 + 2 1021*c0909341SAndroid Build Coastguard Worker.byte 0 * 12 + 1, -1 * 12 + 2 1022*c0909341SAndroid Build Coastguard Worker.byte 0 * 12 + 1, 0 * 12 + 2 1023*c0909341SAndroid Build Coastguard Worker.byte 0 * 12 + 1, 1 * 12 + 2 1024*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 1, 2 * 12 + 2 1025*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 0, 2 * 12 + 1 1026*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 0, 2 * 12 + 0 1027*c0909341SAndroid Build Coastguard Worker.byte 1 * 12 + 0, 2 * 12 - 1 1028*c0909341SAndroid Build Coastguard Worker.byte -1 * 12 + 1, -2 * 12 + 2 1029*c0909341SAndroid Build Coastguard Worker.byte 0 * 12 + 1, -1 * 12 + 2 1030*c0909341SAndroid Build Coastguard Workerendconst 1031*c0909341SAndroid Build Coastguard Worker 1032*c0909341SAndroid Build Coastguard Worker.macro constrain_vrh in0, in1, in2, tmp0, tmp1, out 1033*c0909341SAndroid Build Coastguard Worker vabsd.h \tmp0, \in0, vr23 //adiff 1034*c0909341SAndroid Build Coastguard Worker vsra.h \tmp1, \tmp0, \in2 1035*c0909341SAndroid Build Coastguard Worker vsub.h \tmp1, \in1, \tmp1 1036*c0909341SAndroid Build Coastguard Worker vmax.h \tmp1, vr23, \tmp1 //imax 1037*c0909341SAndroid Build Coastguard Worker vmin.h \tmp0, \tmp0, \tmp1 //imin 1038*c0909341SAndroid Build Coastguard Worker 1039*c0909341SAndroid Build Coastguard Worker //apply_sign 1040*c0909341SAndroid Build Coastguard Worker vslt.h \tmp1, \in0, vr23 1041*c0909341SAndroid Build Coastguard Worker vandn.v \in0, \tmp1, \tmp0 1042*c0909341SAndroid Build Coastguard Worker vsigncov.h \tmp0, \tmp1, \tmp0 1043*c0909341SAndroid Build Coastguard Worker vor.v \out, \in0, \tmp0 1044*c0909341SAndroid Build Coastguard Worker.endm 1045*c0909341SAndroid Build Coastguard Worker 1046*c0909341SAndroid Build Coastguard Worker.macro iclip_vrh in0, in1, in2, tmp0, tmp1, out 1047*c0909341SAndroid Build Coastguard Worker vmin.h \tmp0, \in2, \in0 1048*c0909341SAndroid Build Coastguard Worker vslt.h \in0, \in0, \in1 1049*c0909341SAndroid Build Coastguard Worker vand.v \tmp1, \in0, \in1 1050*c0909341SAndroid Build Coastguard Worker vandn.v \tmp0, \in0, \tmp0 1051*c0909341SAndroid Build Coastguard Worker vor.v \out, \tmp1, \tmp0 1052*c0909341SAndroid Build Coastguard Worker.endm 1053*c0909341SAndroid Build Coastguard Worker 1054*c0909341SAndroid Build Coastguard Worker.macro cdef_padding_data 1055*c0909341SAndroid Build Coastguard Worker //y < 0 1056*c0909341SAndroid Build Coastguard Worker beqz t7, 90f 1057*c0909341SAndroid Build Coastguard Worker4: 1058*c0909341SAndroid Build Coastguard Worker or t4, t5, t5 //data index xx 1059*c0909341SAndroid Build Coastguard Worker slli.d t0, t4, 1 1060*c0909341SAndroid Build Coastguard Worker mul.w t2, t7, s5 1061*c0909341SAndroid Build Coastguard Worker slli.d t2, t2, 1 1062*c0909341SAndroid Build Coastguard Worker add.d t2, s4, t2 1063*c0909341SAndroid Build Coastguard Worker 1064*c0909341SAndroid Build Coastguard Worker sub.d t3, t6, t5 //loop param x 1065*c0909341SAndroid Build Coastguard Worker srai.d t3, t3, 3 1066*c0909341SAndroid Build Coastguard Worker add.d t3, t3, t5 1067*c0909341SAndroid Build Coastguard Worker beq t5, t3, 6f 1068*c0909341SAndroid Build Coastguard Worker5: // /8 1069*c0909341SAndroid Build Coastguard Worker fldx.d f18, a3, t4 1070*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1071*c0909341SAndroid Build Coastguard Worker vstx vr18, t2, t0 1072*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 16 1073*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 8 1074*c0909341SAndroid Build Coastguard Worker 1075*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, -1 1076*c0909341SAndroid Build Coastguard Worker bne t5, t3, 5b 1077*c0909341SAndroid Build Coastguard Worker6: // &4 1078*c0909341SAndroid Build Coastguard Worker sub.d t1, t6, t5 1079*c0909341SAndroid Build Coastguard Worker andi t1, t1, 4 1080*c0909341SAndroid Build Coastguard Worker beqz t1, 7f 1081*c0909341SAndroid Build Coastguard Worker 1082*c0909341SAndroid Build Coastguard Worker fldx.s f18, a3, t4 1083*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1084*c0909341SAndroid Build Coastguard Worker fstx.d f18, t2, t0 1085*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 8 1086*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 4 1087*c0909341SAndroid Build Coastguard Worker7: // &2 1088*c0909341SAndroid Build Coastguard Worker sub.d t1, t6, t5 1089*c0909341SAndroid Build Coastguard Worker andi t1, t1, 2 1090*c0909341SAndroid Build Coastguard Worker beqz t1, 9f 1091*c0909341SAndroid Build Coastguard Worker 1092*c0909341SAndroid Build Coastguard Worker ldx.bu t1, a3, t4 1093*c0909341SAndroid Build Coastguard Worker stx.h t1, t2, t0 1094*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 2 1095*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1 1096*c0909341SAndroid Build Coastguard Worker ldx.bu t1, a3, t4 1097*c0909341SAndroid Build Coastguard Worker stx.h t1, t2, t0 1098*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 2 1099*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1 1100*c0909341SAndroid Build Coastguard Worker9: 1101*c0909341SAndroid Build Coastguard Worker add.d a3, a3, a1 1102*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 1 1103*c0909341SAndroid Build Coastguard Worker bnez t7, 4b 1104*c0909341SAndroid Build Coastguard Worker 1105*c0909341SAndroid Build Coastguard Worker90: 1106*c0909341SAndroid Build Coastguard Worker // y < h 1107*c0909341SAndroid Build Coastguard Worker beqz s1, 12f 1108*c0909341SAndroid Build Coastguard Worker beqz t5, 12f 1109*c0909341SAndroid Build Coastguard Worker or t7, zero, zero //y 1110*c0909341SAndroid Build Coastguard Worker10: 1111*c0909341SAndroid Build Coastguard Worker or t4, t5, t5 //data index x 1112*c0909341SAndroid Build Coastguard Worker11: 1113*c0909341SAndroid Build Coastguard Worker slli.d t3, t7, 1 1114*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 2 1115*c0909341SAndroid Build Coastguard Worker add.d t3, t3, t4 1116*c0909341SAndroid Build Coastguard Worker ldx.bu t1, a2, t3 1117*c0909341SAndroid Build Coastguard Worker 1118*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 1119*c0909341SAndroid Build Coastguard Worker add.d t3, t3, t4 1120*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1121*c0909341SAndroid Build Coastguard Worker stx.h t1, s4, t3 1122*c0909341SAndroid Build Coastguard Worker 1123*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1 1124*c0909341SAndroid Build Coastguard Worker bnez t4, 11b 1125*c0909341SAndroid Build Coastguard Worker 1126*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 1 1127*c0909341SAndroid Build Coastguard Worker bne t7, s1, 10b 1128*c0909341SAndroid Build Coastguard Worker 1129*c0909341SAndroid Build Coastguard Worker12: 1130*c0909341SAndroid Build Coastguard Worker // y = 0 ; y < h 1131*c0909341SAndroid Build Coastguard Worker or s0, s4, s4 1132*c0909341SAndroid Build Coastguard Worker beqz s1, 20f 1133*c0909341SAndroid Build Coastguard Worker or s6, a0, a0 1134*c0909341SAndroid Build Coastguard Worker or t7, zero, zero //y 1135*c0909341SAndroid Build Coastguard Worker srai.d t4, t6, 3 //loop max 1136*c0909341SAndroid Build Coastguard Worker13: 1137*c0909341SAndroid Build Coastguard Worker or t0, zero, zero //loop param 1138*c0909341SAndroid Build Coastguard Worker or t3, t0, t0 //data index src 1139*c0909341SAndroid Build Coastguard Worker or t1, t0, t0 //data index tmp 1140*c0909341SAndroid Build Coastguard Worker beqz t4, 16f 1141*c0909341SAndroid Build Coastguard Worker15: // /8 1142*c0909341SAndroid Build Coastguard Worker fldx.d f18, s6, t3 1143*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1144*c0909341SAndroid Build Coastguard Worker vstx vr18, s0, t1 1145*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 8 1146*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 1147*c0909341SAndroid Build Coastguard Worker 1148*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 1 1149*c0909341SAndroid Build Coastguard Worker blt t0, t4, 15b 1150*c0909341SAndroid Build Coastguard Worker16: // &4 1151*c0909341SAndroid Build Coastguard Worker andi t0, t6, 4 1152*c0909341SAndroid Build Coastguard Worker beqz t0, 17f 1153*c0909341SAndroid Build Coastguard Worker 1154*c0909341SAndroid Build Coastguard Worker fldx.s f18, s6, t3 1155*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1156*c0909341SAndroid Build Coastguard Worker fstx.d f18, s0, t1 1157*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 4 1158*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 8 1159*c0909341SAndroid Build Coastguard Worker17: // &2 1160*c0909341SAndroid Build Coastguard Worker andi t0, t6, 2 1161*c0909341SAndroid Build Coastguard Worker beqz t0, 19f 1162*c0909341SAndroid Build Coastguard Worker 1163*c0909341SAndroid Build Coastguard Worker ldx.bu t2, s6, t3 1164*c0909341SAndroid Build Coastguard Worker stx.h t2, s0, t1 1165*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1 1166*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 2 1167*c0909341SAndroid Build Coastguard Worker ldx.bu t2, s6, t3 1168*c0909341SAndroid Build Coastguard Worker stx.h t2, s0, t1 1169*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1 1170*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 2 1171*c0909341SAndroid Build Coastguard Worker19: // src+ tmp+ 1172*c0909341SAndroid Build Coastguard Worker add.d s6, s6, a1 1173*c0909341SAndroid Build Coastguard Worker add.d s0, s0, s5 1174*c0909341SAndroid Build Coastguard Worker add.d s0, s0, s5 1175*c0909341SAndroid Build Coastguard Worker 1176*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 1 1177*c0909341SAndroid Build Coastguard Worker blt t7, s1, 13b 1178*c0909341SAndroid Build Coastguard Worker 1179*c0909341SAndroid Build Coastguard Worker // y = h ; y < y_end 1180*c0909341SAndroid Build Coastguard Worker20: 1181*c0909341SAndroid Build Coastguard Worker beq s1, t8, 27f 1182*c0909341SAndroid Build Coastguard Worker or t7, s1, s1 //y 1183*c0909341SAndroid Build Coastguard Worker sub.d t4, t6, t5 1184*c0909341SAndroid Build Coastguard Worker srai.d t4, t4, 3 1185*c0909341SAndroid Build Coastguard Worker add.d t4, t4, t5 //8 loop max 1186*c0909341SAndroid Build Coastguard Worker21: 1187*c0909341SAndroid Build Coastguard Worker or t0, t5, t5 //xx 1188*c0909341SAndroid Build Coastguard Worker or t3, t0, t0 //data index bottom 1189*c0909341SAndroid Build Coastguard Worker slli.d t1, t0, 1 //data index tmp 1190*c0909341SAndroid Build Coastguard Worker beq t5, t4, 23f 1191*c0909341SAndroid Build Coastguard Worker22: // /8 1192*c0909341SAndroid Build Coastguard Worker fldx.d f18, a4, t3 1193*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1194*c0909341SAndroid Build Coastguard Worker vstx vr18, s0, t1 1195*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 8 1196*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 1197*c0909341SAndroid Build Coastguard Worker 1198*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 1 1199*c0909341SAndroid Build Coastguard Worker blt t0, t4, 22b 1200*c0909341SAndroid Build Coastguard Worker23: // &4 1201*c0909341SAndroid Build Coastguard Worker sub.d t0, t6, t5 1202*c0909341SAndroid Build Coastguard Worker andi t0, t0, 4 1203*c0909341SAndroid Build Coastguard Worker beqz t0, 24f 1204*c0909341SAndroid Build Coastguard Worker 1205*c0909341SAndroid Build Coastguard Worker fldx.s f18, a4, t3 1206*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr18, vr18, 0 1207*c0909341SAndroid Build Coastguard Worker fstx.d f18, s0, t1 1208*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 4 1209*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 8 1210*c0909341SAndroid Build Coastguard Worker24: // &2 1211*c0909341SAndroid Build Coastguard Worker sub.d t0, t6, t5 1212*c0909341SAndroid Build Coastguard Worker andi t0, t0, 2 1213*c0909341SAndroid Build Coastguard Worker beqz t0, 26f 1214*c0909341SAndroid Build Coastguard Worker 1215*c0909341SAndroid Build Coastguard Worker ldx.bu t2, a4, t3 1216*c0909341SAndroid Build Coastguard Worker stx.h t2, s0, t1 1217*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1 1218*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 2 1219*c0909341SAndroid Build Coastguard Worker ldx.bu t2, a4, t3 1220*c0909341SAndroid Build Coastguard Worker stx.h t2, s0, t1 1221*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1 1222*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 2 1223*c0909341SAndroid Build Coastguard Worker26: // bottom+ tmp+ 1224*c0909341SAndroid Build Coastguard Worker add.d a4, a4, a1 1225*c0909341SAndroid Build Coastguard Worker add.d s0, s0, s5 1226*c0909341SAndroid Build Coastguard Worker add.d s0, s0, s5 1227*c0909341SAndroid Build Coastguard Worker 1228*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 1 1229*c0909341SAndroid Build Coastguard Worker blt t7, t8, 21b 1230*c0909341SAndroid Build Coastguard Worker27: 1231*c0909341SAndroid Build Coastguard Worker // padding end 1232*c0909341SAndroid Build Coastguard Worker.endm 1233*c0909341SAndroid Build Coastguard Worker 1234*c0909341SAndroid Build Coastguard Worker.macro cdef_pri_sec_init 1235*c0909341SAndroid Build Coastguard Worker clz.w t3, a6 1236*c0909341SAndroid Build Coastguard Worker sub.w t3, t2, t3 1237*c0909341SAndroid Build Coastguard Worker sub.w t3, s7, t3 //sec_shift 1238*c0909341SAndroid Build Coastguard Worker 1239*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr4, t0 //pri_tap_k 1240*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr9, a5 //pri_strength 1241*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr10, t1 //pri_shift 1242*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr18, a6 //sec_strength 1243*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr19, t3 //sec_shift 1244*c0909341SAndroid Build Coastguard Worker 1245*c0909341SAndroid Build Coastguard Worker or t2, s1, s1 //dowhile loop param 1246*c0909341SAndroid Build Coastguard Worker addi.d s1, a7, 2 1247*c0909341SAndroid Build Coastguard Worker slli.d s1, s1, 1 //directions dir+2 1248*c0909341SAndroid Build Coastguard Worker addi.d s2, a7, 4 1249*c0909341SAndroid Build Coastguard Worker slli.d s2, s2, 1 //directions dir+4 1250*c0909341SAndroid Build Coastguard Worker slli.d s3, a7, 1 //directions dir+0 1251*c0909341SAndroid Build Coastguard Worker 1252*c0909341SAndroid Build Coastguard Worker la.local t0, dav1d_cdef_directions 1253*c0909341SAndroid Build Coastguard Worker add.d s1, t0, s1 1254*c0909341SAndroid Build Coastguard Worker ld.b a2, s1, 0 //off01 1255*c0909341SAndroid Build Coastguard Worker ld.b a3, s1, 1 //off11 1256*c0909341SAndroid Build Coastguard Worker add.d s2, t0, s2 1257*c0909341SAndroid Build Coastguard Worker ld.b s1, s2, 0 //off02 1258*c0909341SAndroid Build Coastguard Worker ld.b s2, s2, 1 //off12 1259*c0909341SAndroid Build Coastguard Worker add.d s3, t0, s3 1260*c0909341SAndroid Build Coastguard Worker ld.b t0, s3, 0 //off03 1261*c0909341SAndroid Build Coastguard Worker ld.b s3, s3, 1 //off13 1262*c0909341SAndroid Build Coastguard Worker 1263*c0909341SAndroid Build Coastguard Worker slli.d a2, a2, 1 1264*c0909341SAndroid Build Coastguard Worker slli.d a3, a3, 1 1265*c0909341SAndroid Build Coastguard Worker slli.d s1, s1, 1 1266*c0909341SAndroid Build Coastguard Worker slli.d s2, s2, 1 1267*c0909341SAndroid Build Coastguard Worker slli.d t0, t0, 1 1268*c0909341SAndroid Build Coastguard Worker slli.d s3, s3, 1 1269*c0909341SAndroid Build Coastguard Worker.endm 1270*c0909341SAndroid Build Coastguard Worker 1271*c0909341SAndroid Build Coastguard Worker.macro cdef_pri_init 1272*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr4, t0 //pri_tap_k 1273*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr9, a5 //pri_strength 1274*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr10, t1 //pri_shift 1275*c0909341SAndroid Build Coastguard Worker 1276*c0909341SAndroid Build Coastguard Worker or t2, s1, s1 //dowhile loop param 1277*c0909341SAndroid Build Coastguard Worker addi.d s1, a7, 2 1278*c0909341SAndroid Build Coastguard Worker slli.d s1, s1, 1 //directions dir+2 1279*c0909341SAndroid Build Coastguard Worker 1280*c0909341SAndroid Build Coastguard Worker la.local t0, dav1d_cdef_directions 1281*c0909341SAndroid Build Coastguard Worker add.d s1, t0, s1 1282*c0909341SAndroid Build Coastguard Worker ld.b a2, s1, 0 //off01 1283*c0909341SAndroid Build Coastguard Worker ld.b a3, s1, 1 //off11 1284*c0909341SAndroid Build Coastguard Worker 1285*c0909341SAndroid Build Coastguard Worker slli.d a2, a2, 1 1286*c0909341SAndroid Build Coastguard Worker slli.d a3, a3, 1 1287*c0909341SAndroid Build Coastguard Worker.endm 1288*c0909341SAndroid Build Coastguard Worker 1289*c0909341SAndroid Build Coastguard Worker.macro cdef_sec_init 1290*c0909341SAndroid Build Coastguard Worker clz.w t3, a6 1291*c0909341SAndroid Build Coastguard Worker li.w t2, 31 1292*c0909341SAndroid Build Coastguard Worker sub.w t3, t2, t3 1293*c0909341SAndroid Build Coastguard Worker sub.w t3, s7, t3 //sec_shift 1294*c0909341SAndroid Build Coastguard Worker 1295*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr18, a6 //sec_strength 1296*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr19, t3 //sec_shift 1297*c0909341SAndroid Build Coastguard Worker 1298*c0909341SAndroid Build Coastguard Worker or t2, s1, s1 //dowhile loop param 1299*c0909341SAndroid Build Coastguard Worker addi.d s2, a7, 4 1300*c0909341SAndroid Build Coastguard Worker slli.d s2, s2, 1 //directions dir+4 1301*c0909341SAndroid Build Coastguard Worker slli.d s3, a7, 1 //directions dir+0 1302*c0909341SAndroid Build Coastguard Worker 1303*c0909341SAndroid Build Coastguard Worker la.local t0, dav1d_cdef_directions 1304*c0909341SAndroid Build Coastguard Worker add.d s1, t0, s1 1305*c0909341SAndroid Build Coastguard Worker add.d s2, t0, s2 1306*c0909341SAndroid Build Coastguard Worker ld.b s1, s2, 0 //off02 1307*c0909341SAndroid Build Coastguard Worker ld.b s2, s2, 1 //off12 1308*c0909341SAndroid Build Coastguard Worker add.d s3, t0, s3 1309*c0909341SAndroid Build Coastguard Worker ld.b t0, s3, 0 //off03 1310*c0909341SAndroid Build Coastguard Worker ld.b s3, s3, 1 //off13 1311*c0909341SAndroid Build Coastguard Worker 1312*c0909341SAndroid Build Coastguard Worker slli.d s1, s1, 1 1313*c0909341SAndroid Build Coastguard Worker slli.d s2, s2, 1 1314*c0909341SAndroid Build Coastguard Worker slli.d t0, t0, 1 1315*c0909341SAndroid Build Coastguard Worker slli.d s3, s3, 1 1316*c0909341SAndroid Build Coastguard Worker.endm 1317*c0909341SAndroid Build Coastguard Worker 1318*c0909341SAndroid Build Coastguard Worker.macro cdef_process_data_w8 in0, in1 1319*c0909341SAndroid Build Coastguard Worker vsub.h vr11, vr5, vr0 1320*c0909341SAndroid Build Coastguard Worker vsub.h vr12, vr6, vr0 1321*c0909341SAndroid Build Coastguard Worker vsub.h vr13, vr7, vr0 1322*c0909341SAndroid Build Coastguard Worker vsub.h vr14, vr8, vr0 1323*c0909341SAndroid Build Coastguard Worker 1324*c0909341SAndroid Build Coastguard Worker constrain_vrh vr11, \in0, \in1, vr16, vr17, vr11 1325*c0909341SAndroid Build Coastguard Worker constrain_vrh vr12, \in0, \in1, vr16, vr17, vr12 1326*c0909341SAndroid Build Coastguard Worker constrain_vrh vr13, \in0, \in1, vr16, vr17, vr13 1327*c0909341SAndroid Build Coastguard Worker constrain_vrh vr14, \in0, \in1, vr16, vr17, vr14 1328*c0909341SAndroid Build Coastguard Worker.endm 1329*c0909341SAndroid Build Coastguard Worker 1330*c0909341SAndroid Build Coastguard Worker.macro cdef_process_data_w4 in0, in1 1331*c0909341SAndroid Build Coastguard Worker vpermi.w vr6, vr5, 0x44 1332*c0909341SAndroid Build Coastguard Worker vpermi.w vr8, vr7, 0x44 1333*c0909341SAndroid Build Coastguard Worker 1334*c0909341SAndroid Build Coastguard Worker vsub.h vr12, vr6, vr0 1335*c0909341SAndroid Build Coastguard Worker vsub.h vr14, vr8, vr0 1336*c0909341SAndroid Build Coastguard Worker 1337*c0909341SAndroid Build Coastguard Worker constrain_vrh vr12, \in0, \in1, vr16, vr17, vr12 1338*c0909341SAndroid Build Coastguard Worker constrain_vrh vr14, \in0, \in1, vr16, vr17, vr14 1339*c0909341SAndroid Build Coastguard Worker.endm 1340*c0909341SAndroid Build Coastguard Worker 1341*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_sum_tapchange_w8 1342*c0909341SAndroid Build Coastguard Worker vmul.h vr1, vr15, vr11 //sum 1343*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, vr15, vr12 //sum 1344*c0909341SAndroid Build Coastguard Worker vand.v vr15, vr15, vr21 1345*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr15, vr22 1346*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, vr15, vr13 //sum 1347*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, vr15, vr14 //sum 1348*c0909341SAndroid Build Coastguard Worker.endm 1349*c0909341SAndroid Build Coastguard Worker 1350*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_sum_tapchange_w4 1351*c0909341SAndroid Build Coastguard Worker vmul.h vr1, vr15, vr12 //sum 1352*c0909341SAndroid Build Coastguard Worker vand.v vr15, vr15, vr21 1353*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr15, vr22 1354*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, vr15, vr14 //sum 1355*c0909341SAndroid Build Coastguard Worker.endm 1356*c0909341SAndroid Build Coastguard Worker 1357*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_sum_no_tapchange_w4 in0 1358*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr12 1359*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr14 1360*c0909341SAndroid Build Coastguard Worker.endm 1361*c0909341SAndroid Build Coastguard Worker 1362*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_sum_no_tapchange_w8 in0 1363*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr11 //sum 1364*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr12 1365*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr13 1366*c0909341SAndroid Build Coastguard Worker vmadd.h vr1, \in0, vr14 1367*c0909341SAndroid Build Coastguard Worker.endm 1368*c0909341SAndroid Build Coastguard Worker 1369*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_maxmin_w4 1370*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr6, vr3 1371*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr6, vr2 1372*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr8, vr3 //min 1373*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr8, vr2 //max 1374*c0909341SAndroid Build Coastguard Worker.endm 1375*c0909341SAndroid Build Coastguard Worker 1376*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_maxmin_w8 1377*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr5, vr3 1378*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr5, vr2 1379*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr6, vr3 1380*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr6, vr2 1381*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr7, vr3 1382*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr7, vr2 1383*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr8, vr3 //min 1384*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr8, vr2 //max 1385*c0909341SAndroid Build Coastguard Worker.endm 1386*c0909341SAndroid Build Coastguard Worker 1387*c0909341SAndroid Build Coastguard Worker.macro cdef_calc_dst 1388*c0909341SAndroid Build Coastguard Worker vslti.h vr5, vr1, 0 1389*c0909341SAndroid Build Coastguard Worker vand.v vr5, vr5, vr20 1390*c0909341SAndroid Build Coastguard Worker vsub.h vr5, vr1, vr5 1391*c0909341SAndroid Build Coastguard Worker vaddi.hu vr5, vr5, 8 1392*c0909341SAndroid Build Coastguard Worker vsrai.h vr5, vr5, 4 1393*c0909341SAndroid Build Coastguard Worker vadd.h vr5, vr0, vr5 1394*c0909341SAndroid Build Coastguard Worker.endm 1395*c0909341SAndroid Build Coastguard Worker 1396*c0909341SAndroid Build Coastguard Worker//static NOINLINE void cdef_filter_block_lsx 1397*c0909341SAndroid Build Coastguard Worker// (pixel *dst, const ptrdiff_t dst_stride, 1398*c0909341SAndroid Build Coastguard Worker// const pixel (*left)[2], const pixel *const top, 1399*c0909341SAndroid Build Coastguard Worker// const int pri_strength, const int sec_strength, 1400*c0909341SAndroid Build Coastguard Worker// const int dir, const int damping, const int w, int h, 1401*c0909341SAndroid Build Coastguard Worker// const enum CdefEdgeFlags edges HIGHBD_DECL_SUFFIX) 1402*c0909341SAndroid Build Coastguard Worker// w=4 h=4 1403*c0909341SAndroid Build Coastguard Worker//param: dst:a0, dst_stride:a1, left:a2, top:a3, bottom:a4, pri_strength:a5 1404*c0909341SAndroid Build Coastguard Worker//sec_strength:a6, dir:a7, damping:s7, w:s0, h:s1, edges:s2 1405*c0909341SAndroid Build Coastguard Workerfunction cdef_filter_block_4x4_8bpc_lsx 1406*c0909341SAndroid Build Coastguard Worker ld.w t0, sp, 0 1407*c0909341SAndroid Build Coastguard Worker ld.w t1, sp, 8 1408*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -(64+288) 1409*c0909341SAndroid Build Coastguard Worker st.d s0, sp, 0 1410*c0909341SAndroid Build Coastguard Worker st.d s1, sp, 8 1411*c0909341SAndroid Build Coastguard Worker st.d s2, sp, 16 1412*c0909341SAndroid Build Coastguard Worker st.d s3, sp, 24 1413*c0909341SAndroid Build Coastguard Worker st.d s4, sp, 32 1414*c0909341SAndroid Build Coastguard Worker st.d s5, sp, 40 1415*c0909341SAndroid Build Coastguard Worker st.d s6, sp, 48 1416*c0909341SAndroid Build Coastguard Worker st.d s7, sp, 56 1417*c0909341SAndroid Build Coastguard Worker 1418*c0909341SAndroid Build Coastguard Worker li.w s0, 4 //w 1419*c0909341SAndroid Build Coastguard Worker li.w s1, 4 //h 1420*c0909341SAndroid Build Coastguard Worker or s2, t1, t1 //edges 1421*c0909341SAndroid Build Coastguard Worker or s7, t0, t0 //damping 1422*c0909341SAndroid Build Coastguard Worker 1423*c0909341SAndroid Build Coastguard Worker li.d s5, 12 //tmp_stride 1424*c0909341SAndroid Build Coastguard Worker addi.d s4, sp, 64 1425*c0909341SAndroid Build Coastguard Worker slli.d t0, s5, 1 1426*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 2 1427*c0909341SAndroid Build Coastguard Worker slli.d t0, t0, 1 1428*c0909341SAndroid Build Coastguard Worker add.d s4, s4, t0 //ptr tmp 1429*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1430*c0909341SAndroid Build Coastguard Worker li.w t2, 1 1431*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr20, t2 1432*c0909341SAndroid Build Coastguard Worker vaddi.hu vr21, vr20, 2 1433*c0909341SAndroid Build Coastguard Worker vaddi.hu vr22, vr20, 1 1434*c0909341SAndroid Build Coastguard Worker 1435*c0909341SAndroid Build Coastguard Worker li.w t0, -16384 1436*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr18, t0 1437*c0909341SAndroid Build Coastguard Worker 1438*c0909341SAndroid Build Coastguard Worker //padding 1439*c0909341SAndroid Build Coastguard Worker li.w t5, -2 //x_start 1440*c0909341SAndroid Build Coastguard Worker addi.d t6, s0, 2 //x_end 1441*c0909341SAndroid Build Coastguard Worker li.w t7, -2 //y_start 1442*c0909341SAndroid Build Coastguard Worker addi.d t8, s1, 2 //y_end 1443*c0909341SAndroid Build Coastguard Worker li.w t2, 2 1444*c0909341SAndroid Build Coastguard Worker 1445*c0909341SAndroid Build Coastguard Worker andi t4, s2, 4 1446*c0909341SAndroid Build Coastguard Worker bnez t4, 1f 1447*c0909341SAndroid Build Coastguard Worker 1448*c0909341SAndroid Build Coastguard Worker //CDEF_HAVE_TOP 1449*c0909341SAndroid Build Coastguard Worker slli.d t3, s5, 2 1450*c0909341SAndroid Build Coastguard Worker addi.d t4, s4, -4 1451*c0909341SAndroid Build Coastguard Worker sub.d t4, t4, t3 1452*c0909341SAndroid Build Coastguard Worker addi.d t3, s0, 4 1453*c0909341SAndroid Build Coastguard Worker 1454*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 1455*c0909341SAndroid Build Coastguard Worker 1456*c0909341SAndroid Build Coastguard Worker or t7, zero, zero 1457*c0909341SAndroid Build Coastguard Worker 1458*c0909341SAndroid Build Coastguard Worker1: //CDEF_HAVE_BOTTOM 1459*c0909341SAndroid Build Coastguard Worker andi t4, s2,8 1460*c0909341SAndroid Build Coastguard Worker bnez t4, 2f 1461*c0909341SAndroid Build Coastguard Worker 1462*c0909341SAndroid Build Coastguard Worker mul.w t3, s1, s5 1463*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1464*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1465*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 1466*c0909341SAndroid Build Coastguard Worker li.d t3, 8 1467*c0909341SAndroid Build Coastguard Worker 1468*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 1469*c0909341SAndroid Build Coastguard Worker 1470*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, -2 1471*c0909341SAndroid Build Coastguard Worker 1472*c0909341SAndroid Build Coastguard Worker2: //CDEF_HAVE_LEFT 1473*c0909341SAndroid Build Coastguard Worker andi t4, s2,1 1474*c0909341SAndroid Build Coastguard Worker bnez t4, 3f 1475*c0909341SAndroid Build Coastguard Worker 1476*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 1477*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1478*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1479*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 1480*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 1481*c0909341SAndroid Build Coastguard Worker 1482*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 1483*c0909341SAndroid Build Coastguard Worker 1484*c0909341SAndroid Build Coastguard Worker or t5, zero, zero 1485*c0909341SAndroid Build Coastguard Worker 1486*c0909341SAndroid Build Coastguard Worker3: //CDEF_HAVE_RIGHT 1487*c0909341SAndroid Build Coastguard Worker andi t4, s2,2 1488*c0909341SAndroid Build Coastguard Worker bnez t4, 40f 1489*c0909341SAndroid Build Coastguard Worker 1490*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 1491*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1492*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1493*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 8 1494*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 1495*c0909341SAndroid Build Coastguard Worker 1496*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 1497*c0909341SAndroid Build Coastguard Worker 1498*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, -2 1499*c0909341SAndroid Build Coastguard Worker 1500*c0909341SAndroid Build Coastguard Worker40: 1501*c0909341SAndroid Build Coastguard Worker cdef_padding_data 1502*c0909341SAndroid Build Coastguard Worker 1503*c0909341SAndroid Build Coastguard Worker beqz a5, 33f 1504*c0909341SAndroid Build Coastguard Worker 1505*c0909341SAndroid Build Coastguard Worker28: //if (pri_strength) 1506*c0909341SAndroid Build Coastguard Worker li.w t0, 4 1507*c0909341SAndroid Build Coastguard Worker andi t1, a5, 1 1508*c0909341SAndroid Build Coastguard Worker sub.d t0, t0, t1 //pri_tap 1509*c0909341SAndroid Build Coastguard Worker 1510*c0909341SAndroid Build Coastguard Worker clz.w t1, a5 1511*c0909341SAndroid Build Coastguard Worker li.d t2, 31 1512*c0909341SAndroid Build Coastguard Worker sub.w t1, t2, t1 1513*c0909341SAndroid Build Coastguard Worker sub.w t1, s7, t1 1514*c0909341SAndroid Build Coastguard Worker 1515*c0909341SAndroid Build Coastguard Worker blt t1, zero, 281f 1516*c0909341SAndroid Build Coastguard Worker or t1, t1, t1 1517*c0909341SAndroid Build Coastguard Worker b 282f 1518*c0909341SAndroid Build Coastguard Worker281: 1519*c0909341SAndroid Build Coastguard Worker or t1, zero, zero //t1: pri_shift 1520*c0909341SAndroid Build Coastguard Worker282: 1521*c0909341SAndroid Build Coastguard Worker 1522*c0909341SAndroid Build Coastguard Worker beqz a6, 31f 1523*c0909341SAndroid Build Coastguard Worker 1524*c0909341SAndroid Build Coastguard Worker29: //if (sec_strength) 1525*c0909341SAndroid Build Coastguard Worker cdef_pri_sec_init 1526*c0909341SAndroid Build Coastguard Worker 1527*c0909341SAndroid Build Coastguard Worker30: 1528*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1529*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1530*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1531*c0909341SAndroid Build Coastguard Worker 1532*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1533*c0909341SAndroid Build Coastguard Worker vor.v vr2, vr0, vr0 //max 1534*c0909341SAndroid Build Coastguard Worker vor.v vr3, vr0, vr0 //min 1535*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 1536*c0909341SAndroid Build Coastguard Worker 1537*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 1538*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 1539*c0909341SAndroid Build Coastguard Worker 1540*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, a2 //p0_00 1541*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //p0_01 1542*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, a3 //p0_10 1543*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //p0_11 1544*c0909341SAndroid Build Coastguard Worker 1545*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr9, vr10 1546*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w4 1547*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1548*c0909341SAndroid Build Coastguard Worker 1549*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 1550*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 1551*c0909341SAndroid Build Coastguard Worker 1552*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s1 //s0_00 1553*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_01 1554*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, t0 //s0_02 1555*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_03 1556*c0909341SAndroid Build Coastguard Worker 1557*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1558*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr22 1559*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1560*c0909341SAndroid Build Coastguard Worker 1561*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 1562*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 1563*c0909341SAndroid Build Coastguard Worker 1564*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s2 //s0_10 1565*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_11 1566*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, s3 //s0_12 1567*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_13 1568*c0909341SAndroid Build Coastguard Worker 1569*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1570*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr20 1571*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1572*c0909341SAndroid Build Coastguard Worker 1573*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1574*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr6, vr3, 0x0e 1575*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr7, vr2, 0x0e 1576*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1577*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr6, vr3 1578*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr7, vr2 1579*c0909341SAndroid Build Coastguard Worker 1580*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1581*c0909341SAndroid Build Coastguard Worker iclip_vrh vr5, vr3, vr2, vr16, vr17, vr5 1582*c0909341SAndroid Build Coastguard Worker 1583*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1584*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1585*c0909341SAndroid Build Coastguard Worker 1586*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1587*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1588*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1589*c0909341SAndroid Build Coastguard Worker 1590*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1591*c0909341SAndroid Build Coastguard Worker blt zero, t2, 30b 1592*c0909341SAndroid Build Coastguard Worker b 35f 1593*c0909341SAndroid Build Coastguard Worker 1594*c0909341SAndroid Build Coastguard Worker31: // pri_strength only 1595*c0909341SAndroid Build Coastguard Worker cdef_pri_init 1596*c0909341SAndroid Build Coastguard Worker 1597*c0909341SAndroid Build Coastguard Worker32: 1598*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1599*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1600*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1601*c0909341SAndroid Build Coastguard Worker 1602*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1603*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 1604*c0909341SAndroid Build Coastguard Worker 1605*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 1606*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 1607*c0909341SAndroid Build Coastguard Worker 1608*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, a2 //p0_00 1609*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //p0_01 1610*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, a3 //p0_10 1611*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //p0_11 1612*c0909341SAndroid Build Coastguard Worker 1613*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr9, vr10 1614*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w4 1615*c0909341SAndroid Build Coastguard Worker 1616*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1617*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1618*c0909341SAndroid Build Coastguard Worker 1619*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1620*c0909341SAndroid Build Coastguard Worker 1621*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1622*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1623*c0909341SAndroid Build Coastguard Worker 1624*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1625*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1626*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1627*c0909341SAndroid Build Coastguard Worker 1628*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1629*c0909341SAndroid Build Coastguard Worker blt zero, t2, 32b 1630*c0909341SAndroid Build Coastguard Worker b 35f 1631*c0909341SAndroid Build Coastguard Worker 1632*c0909341SAndroid Build Coastguard Worker33: // sec_strength only 1633*c0909341SAndroid Build Coastguard Worker cdef_sec_init 1634*c0909341SAndroid Build Coastguard Worker 1635*c0909341SAndroid Build Coastguard Worker34: 1636*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1637*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1638*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1639*c0909341SAndroid Build Coastguard Worker 1640*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1641*c0909341SAndroid Build Coastguard Worker 1642*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 1643*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 1644*c0909341SAndroid Build Coastguard Worker 1645*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s1 //s0_00 1646*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_01 1647*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, t0 //s0_02 1648*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_03 1649*c0909341SAndroid Build Coastguard Worker 1650*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1651*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr22 1652*c0909341SAndroid Build Coastguard Worker 1653*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 1654*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 1655*c0909341SAndroid Build Coastguard Worker 1656*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s2 //s0_10 1657*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_11 1658*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, s3 //s0_12 1659*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_13 1660*c0909341SAndroid Build Coastguard Worker 1661*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1662*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr20 1663*c0909341SAndroid Build Coastguard Worker 1664*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1665*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1666*c0909341SAndroid Build Coastguard Worker 1667*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1668*c0909341SAndroid Build Coastguard Worker 1669*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1670*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1671*c0909341SAndroid Build Coastguard Worker 1672*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1673*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1674*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1675*c0909341SAndroid Build Coastguard Worker 1676*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1677*c0909341SAndroid Build Coastguard Worker blt zero, t2, 34b 1678*c0909341SAndroid Build Coastguard Worker 1679*c0909341SAndroid Build Coastguard Worker35: 1680*c0909341SAndroid Build Coastguard Worker ld.d s0, sp, 0 1681*c0909341SAndroid Build Coastguard Worker ld.d s1, sp, 8 1682*c0909341SAndroid Build Coastguard Worker ld.d s2, sp, 16 1683*c0909341SAndroid Build Coastguard Worker ld.d s3, sp, 24 1684*c0909341SAndroid Build Coastguard Worker ld.d s4, sp, 32 1685*c0909341SAndroid Build Coastguard Worker ld.d s5, sp, 40 1686*c0909341SAndroid Build Coastguard Worker ld.d s6, sp, 48 1687*c0909341SAndroid Build Coastguard Worker ld.d s7, sp, 56 1688*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, (64+288) 1689*c0909341SAndroid Build Coastguard Workerendfunc 1690*c0909341SAndroid Build Coastguard Worker 1691*c0909341SAndroid Build Coastguard Workerfunction cdef_filter_block_4x8_8bpc_lsx 1692*c0909341SAndroid Build Coastguard Worker ld.w t0, sp, 0 1693*c0909341SAndroid Build Coastguard Worker ld.w t1, sp, 8 1694*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -(64+288) 1695*c0909341SAndroid Build Coastguard Worker st.d s0, sp, 0 1696*c0909341SAndroid Build Coastguard Worker st.d s1, sp, 8 1697*c0909341SAndroid Build Coastguard Worker st.d s2, sp, 16 1698*c0909341SAndroid Build Coastguard Worker st.d s3, sp, 24 1699*c0909341SAndroid Build Coastguard Worker st.d s4, sp, 32 1700*c0909341SAndroid Build Coastguard Worker st.d s5, sp, 40 1701*c0909341SAndroid Build Coastguard Worker st.d s6, sp, 48 1702*c0909341SAndroid Build Coastguard Worker st.d s7, sp, 56 1703*c0909341SAndroid Build Coastguard Worker 1704*c0909341SAndroid Build Coastguard Worker li.w s0, 4 //w 1705*c0909341SAndroid Build Coastguard Worker li.w s1, 8 //h 1706*c0909341SAndroid Build Coastguard Worker or s2, t1, t1 //edges 1707*c0909341SAndroid Build Coastguard Worker or s7, t0, t0 //damping 1708*c0909341SAndroid Build Coastguard Worker 1709*c0909341SAndroid Build Coastguard Worker li.d s5, 12 //tmp_stride 1710*c0909341SAndroid Build Coastguard Worker addi.d s4, sp, 64 1711*c0909341SAndroid Build Coastguard Worker slli.d t0, s5, 1 1712*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 2 1713*c0909341SAndroid Build Coastguard Worker slli.d t0, t0, 1 1714*c0909341SAndroid Build Coastguard Worker add.d s4, s4, t0 //ptr tmp 1715*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1716*c0909341SAndroid Build Coastguard Worker li.w t2, 1 1717*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr20, t2 1718*c0909341SAndroid Build Coastguard Worker vaddi.hu vr21, vr20, 2 1719*c0909341SAndroid Build Coastguard Worker vaddi.hu vr22, vr20, 1 1720*c0909341SAndroid Build Coastguard Worker 1721*c0909341SAndroid Build Coastguard Worker li.w t0, -16384 1722*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr18, t0 1723*c0909341SAndroid Build Coastguard Worker 1724*c0909341SAndroid Build Coastguard Worker //padding 1725*c0909341SAndroid Build Coastguard Worker li.w t5, -2 //x_start 1726*c0909341SAndroid Build Coastguard Worker addi.d t6, s0, 2 //x_end 1727*c0909341SAndroid Build Coastguard Worker li.w t7, -2 //y_start 1728*c0909341SAndroid Build Coastguard Worker addi.d t8, s1, 2 //y_end 1729*c0909341SAndroid Build Coastguard Worker li.w t2, 2 1730*c0909341SAndroid Build Coastguard Worker 1731*c0909341SAndroid Build Coastguard Worker andi t4, s2, 4 1732*c0909341SAndroid Build Coastguard Worker bnez t4, 1f 1733*c0909341SAndroid Build Coastguard Worker 1734*c0909341SAndroid Build Coastguard Worker //CDEF_HAVE_TOP 1735*c0909341SAndroid Build Coastguard Worker slli.d t3, s5, 2 1736*c0909341SAndroid Build Coastguard Worker addi.d t4, s4, -4 1737*c0909341SAndroid Build Coastguard Worker sub.d t4, t4, t3 1738*c0909341SAndroid Build Coastguard Worker addi.d t3, s0, 4 1739*c0909341SAndroid Build Coastguard Worker 1740*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 1741*c0909341SAndroid Build Coastguard Worker 1742*c0909341SAndroid Build Coastguard Worker or t7, zero, zero 1743*c0909341SAndroid Build Coastguard Worker 1744*c0909341SAndroid Build Coastguard Worker1: //CDEF_HAVE_BOTTOM 1745*c0909341SAndroid Build Coastguard Worker andi t4, s2,8 1746*c0909341SAndroid Build Coastguard Worker bnez t4, 2f 1747*c0909341SAndroid Build Coastguard Worker 1748*c0909341SAndroid Build Coastguard Worker mul.w t3, s1, s5 1749*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1750*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1751*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 1752*c0909341SAndroid Build Coastguard Worker li.d t3, 8 1753*c0909341SAndroid Build Coastguard Worker 1754*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 1755*c0909341SAndroid Build Coastguard Worker 1756*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, -2 1757*c0909341SAndroid Build Coastguard Worker 1758*c0909341SAndroid Build Coastguard Worker2: //CDEF_HAVE_LEFT 1759*c0909341SAndroid Build Coastguard Worker andi t4, s2,1 1760*c0909341SAndroid Build Coastguard Worker bnez t4, 3f 1761*c0909341SAndroid Build Coastguard Worker 1762*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 1763*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1764*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1765*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 1766*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 1767*c0909341SAndroid Build Coastguard Worker 1768*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 1769*c0909341SAndroid Build Coastguard Worker 1770*c0909341SAndroid Build Coastguard Worker or t5, zero, zero 1771*c0909341SAndroid Build Coastguard Worker 1772*c0909341SAndroid Build Coastguard Worker3: //CDEF_HAVE_RIGHT 1773*c0909341SAndroid Build Coastguard Worker andi t4, s2,2 1774*c0909341SAndroid Build Coastguard Worker bnez t4, 40f 1775*c0909341SAndroid Build Coastguard Worker 1776*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 1777*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 1778*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 1779*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 8 1780*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 1781*c0909341SAndroid Build Coastguard Worker 1782*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 1783*c0909341SAndroid Build Coastguard Worker 1784*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, -2 1785*c0909341SAndroid Build Coastguard Worker 1786*c0909341SAndroid Build Coastguard Worker40: 1787*c0909341SAndroid Build Coastguard Worker cdef_padding_data 1788*c0909341SAndroid Build Coastguard Worker 1789*c0909341SAndroid Build Coastguard Worker beqz a5, 33f 1790*c0909341SAndroid Build Coastguard Worker 1791*c0909341SAndroid Build Coastguard Worker28: //if (pri_strength) 1792*c0909341SAndroid Build Coastguard Worker li.w t0, 4 1793*c0909341SAndroid Build Coastguard Worker andi t1, a5, 1 1794*c0909341SAndroid Build Coastguard Worker sub.d t0, t0, t1 //pri_tap 1795*c0909341SAndroid Build Coastguard Worker 1796*c0909341SAndroid Build Coastguard Worker clz.w t1, a5 1797*c0909341SAndroid Build Coastguard Worker li.d t2, 31 1798*c0909341SAndroid Build Coastguard Worker sub.w t1, t2, t1 1799*c0909341SAndroid Build Coastguard Worker sub.w t1, s7, t1 1800*c0909341SAndroid Build Coastguard Worker 1801*c0909341SAndroid Build Coastguard Worker blt t1, zero, 281f 1802*c0909341SAndroid Build Coastguard Worker or t1, t1, t1 1803*c0909341SAndroid Build Coastguard Worker b 282f 1804*c0909341SAndroid Build Coastguard Worker281: 1805*c0909341SAndroid Build Coastguard Worker or t1, zero, zero //t1: pri_shift 1806*c0909341SAndroid Build Coastguard Worker282: 1807*c0909341SAndroid Build Coastguard Worker 1808*c0909341SAndroid Build Coastguard Worker beqz a6, 31f 1809*c0909341SAndroid Build Coastguard Worker 1810*c0909341SAndroid Build Coastguard Worker29: //if (sec_strength) 1811*c0909341SAndroid Build Coastguard Worker cdef_pri_sec_init 1812*c0909341SAndroid Build Coastguard Worker 1813*c0909341SAndroid Build Coastguard Worker30: 1814*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1815*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1816*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1817*c0909341SAndroid Build Coastguard Worker 1818*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1819*c0909341SAndroid Build Coastguard Worker vor.v vr2, vr0, vr0 //max 1820*c0909341SAndroid Build Coastguard Worker vor.v vr3, vr0, vr0 //min 1821*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 1822*c0909341SAndroid Build Coastguard Worker 1823*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 1824*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 1825*c0909341SAndroid Build Coastguard Worker 1826*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, a2 //p0_00 1827*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //p0_01 1828*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, a3 //p0_10 1829*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //p0_11 1830*c0909341SAndroid Build Coastguard Worker 1831*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr9, vr10 1832*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w4 1833*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1834*c0909341SAndroid Build Coastguard Worker 1835*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 1836*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 1837*c0909341SAndroid Build Coastguard Worker 1838*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s1 //s0_00 1839*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_01 1840*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, t0 //s0_02 1841*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_03 1842*c0909341SAndroid Build Coastguard Worker 1843*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1844*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr22 1845*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1846*c0909341SAndroid Build Coastguard Worker 1847*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 1848*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 1849*c0909341SAndroid Build Coastguard Worker 1850*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s2 //s0_10 1851*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_11 1852*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, s3 //s0_12 1853*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_13 1854*c0909341SAndroid Build Coastguard Worker 1855*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1856*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr20 1857*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w4 1858*c0909341SAndroid Build Coastguard Worker 1859*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1860*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr6, vr3, 0x0e 1861*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr7, vr2, 0x0e 1862*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1863*c0909341SAndroid Build Coastguard Worker vmin.hu vr3, vr6, vr3 1864*c0909341SAndroid Build Coastguard Worker vmax.h vr2, vr7, vr2 1865*c0909341SAndroid Build Coastguard Worker 1866*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1867*c0909341SAndroid Build Coastguard Worker iclip_vrh vr5, vr3, vr2, vr16, vr17, vr5 1868*c0909341SAndroid Build Coastguard Worker 1869*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1870*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1871*c0909341SAndroid Build Coastguard Worker 1872*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1873*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1874*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1875*c0909341SAndroid Build Coastguard Worker 1876*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1877*c0909341SAndroid Build Coastguard Worker blt zero, t2, 30b 1878*c0909341SAndroid Build Coastguard Worker b 35f 1879*c0909341SAndroid Build Coastguard Worker 1880*c0909341SAndroid Build Coastguard Worker31: // pri_strength only 1881*c0909341SAndroid Build Coastguard Worker cdef_pri_init 1882*c0909341SAndroid Build Coastguard Worker 1883*c0909341SAndroid Build Coastguard Worker32: 1884*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1885*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1886*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1887*c0909341SAndroid Build Coastguard Worker 1888*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1889*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 1890*c0909341SAndroid Build Coastguard Worker 1891*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 1892*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 1893*c0909341SAndroid Build Coastguard Worker 1894*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, a2 //p0_00 1895*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //p0_01 1896*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, a3 //p0_10 1897*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //p0_11 1898*c0909341SAndroid Build Coastguard Worker 1899*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr9, vr10 1900*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w4 1901*c0909341SAndroid Build Coastguard Worker 1902*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1903*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1904*c0909341SAndroid Build Coastguard Worker 1905*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1906*c0909341SAndroid Build Coastguard Worker 1907*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1908*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1909*c0909341SAndroid Build Coastguard Worker 1910*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1911*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1912*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1913*c0909341SAndroid Build Coastguard Worker 1914*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1915*c0909341SAndroid Build Coastguard Worker blt zero, t2, 32b 1916*c0909341SAndroid Build Coastguard Worker b 35f 1917*c0909341SAndroid Build Coastguard Worker 1918*c0909341SAndroid Build Coastguard Worker33: // sec_strength only 1919*c0909341SAndroid Build Coastguard Worker cdef_sec_init 1920*c0909341SAndroid Build Coastguard Worker 1921*c0909341SAndroid Build Coastguard Worker34: 1922*c0909341SAndroid Build Coastguard Worker fld.s f0, a0, 0 //px 1923*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 1924*c0909341SAndroid Build Coastguard Worker vpermi.w vr0, vr0, 0x44 1925*c0909341SAndroid Build Coastguard Worker 1926*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 1927*c0909341SAndroid Build Coastguard Worker 1928*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 1929*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 1930*c0909341SAndroid Build Coastguard Worker 1931*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s1 //s0_00 1932*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_01 1933*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, t0 //s0_02 1934*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_03 1935*c0909341SAndroid Build Coastguard Worker 1936*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1937*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr22 1938*c0909341SAndroid Build Coastguard Worker 1939*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 1940*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 1941*c0909341SAndroid Build Coastguard Worker 1942*c0909341SAndroid Build Coastguard Worker fldx.d f5, s4, s2 //s0_10 1943*c0909341SAndroid Build Coastguard Worker fld.d f6, t4, 0 //s0_11 1944*c0909341SAndroid Build Coastguard Worker fldx.d f7, s4, s3 //s0_12 1945*c0909341SAndroid Build Coastguard Worker fld.d f8, t5, 0 //s0_13 1946*c0909341SAndroid Build Coastguard Worker 1947*c0909341SAndroid Build Coastguard Worker cdef_process_data_w4 vr18, vr19 1948*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w4 vr20 1949*c0909341SAndroid Build Coastguard Worker 1950*c0909341SAndroid Build Coastguard Worker vshuf4i.w vr5, vr1, 0x0e 1951*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, vr5 1952*c0909341SAndroid Build Coastguard Worker 1953*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 1954*c0909341SAndroid Build Coastguard Worker 1955*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 1956*c0909341SAndroid Build Coastguard Worker fst.s f5, a0, 0 1957*c0909341SAndroid Build Coastguard Worker 1958*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 1959*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1960*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 1961*c0909341SAndroid Build Coastguard Worker 1962*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 1963*c0909341SAndroid Build Coastguard Worker blt zero, t2, 34b 1964*c0909341SAndroid Build Coastguard Worker 1965*c0909341SAndroid Build Coastguard Worker35: 1966*c0909341SAndroid Build Coastguard Worker ld.d s0, sp, 0 1967*c0909341SAndroid Build Coastguard Worker ld.d s1, sp, 8 1968*c0909341SAndroid Build Coastguard Worker ld.d s2, sp, 16 1969*c0909341SAndroid Build Coastguard Worker ld.d s3, sp, 24 1970*c0909341SAndroid Build Coastguard Worker ld.d s4, sp, 32 1971*c0909341SAndroid Build Coastguard Worker ld.d s5, sp, 40 1972*c0909341SAndroid Build Coastguard Worker ld.d s6, sp, 48 1973*c0909341SAndroid Build Coastguard Worker ld.d s7, sp, 56 1974*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, (64+288) 1975*c0909341SAndroid Build Coastguard Workerendfunc 1976*c0909341SAndroid Build Coastguard Worker 1977*c0909341SAndroid Build Coastguard Workerfunction cdef_filter_block_8x8_8bpc_lsx 1978*c0909341SAndroid Build Coastguard Worker ld.w t0, sp, 0 1979*c0909341SAndroid Build Coastguard Worker ld.w t1, sp, 8 1980*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -(64+288) 1981*c0909341SAndroid Build Coastguard Worker st.d s0, sp, 0 1982*c0909341SAndroid Build Coastguard Worker st.d s1, sp, 8 1983*c0909341SAndroid Build Coastguard Worker st.d s2, sp, 16 1984*c0909341SAndroid Build Coastguard Worker st.d s3, sp, 24 1985*c0909341SAndroid Build Coastguard Worker st.d s4, sp, 32 1986*c0909341SAndroid Build Coastguard Worker st.d s5, sp, 40 1987*c0909341SAndroid Build Coastguard Worker st.d s6, sp, 48 1988*c0909341SAndroid Build Coastguard Worker st.d s7, sp, 56 1989*c0909341SAndroid Build Coastguard Worker 1990*c0909341SAndroid Build Coastguard Worker li.w s0, 8 //w 1991*c0909341SAndroid Build Coastguard Worker li.w s1, 8 //h 1992*c0909341SAndroid Build Coastguard Worker or s2, t1, t1 //edges 1993*c0909341SAndroid Build Coastguard Worker or s7, t0, t0 //damping 1994*c0909341SAndroid Build Coastguard Worker 1995*c0909341SAndroid Build Coastguard Worker // cdef_filter_block_kernel 1996*c0909341SAndroid Build Coastguard Worker li.d s5, 12 //tmp_stride 1997*c0909341SAndroid Build Coastguard Worker addi.d s4, sp, 64 1998*c0909341SAndroid Build Coastguard Worker slli.d t0, s5, 1 1999*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 2 2000*c0909341SAndroid Build Coastguard Worker slli.d t0, t0, 1 2001*c0909341SAndroid Build Coastguard Worker add.d s4, s4, t0 //ptr tmp 2002*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 2003*c0909341SAndroid Build Coastguard Worker li.w t2, 1 2004*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr20, t2 2005*c0909341SAndroid Build Coastguard Worker vaddi.hu vr21, vr20, 2 2006*c0909341SAndroid Build Coastguard Worker vaddi.hu vr22, vr20, 1 2007*c0909341SAndroid Build Coastguard Worker 2008*c0909341SAndroid Build Coastguard Worker li.w t0, -16384 2009*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr18, t0 2010*c0909341SAndroid Build Coastguard Worker 2011*c0909341SAndroid Build Coastguard Worker //padding 2012*c0909341SAndroid Build Coastguard Worker li.w t5, -2 //x_start 2013*c0909341SAndroid Build Coastguard Worker addi.d t6, s0, 2 //x_end 2014*c0909341SAndroid Build Coastguard Worker li.w t7, -2 //y_start 2015*c0909341SAndroid Build Coastguard Worker addi.d t8, s1, 2 //y_end 2016*c0909341SAndroid Build Coastguard Worker li.w t2, 2 2017*c0909341SAndroid Build Coastguard Worker 2018*c0909341SAndroid Build Coastguard Worker andi t4, s2, 4 2019*c0909341SAndroid Build Coastguard Worker bnez t4, 1f 2020*c0909341SAndroid Build Coastguard Worker 2021*c0909341SAndroid Build Coastguard Worker //CDEF_HAVE_TOP 2022*c0909341SAndroid Build Coastguard Worker slli.d t3, s5, 2 2023*c0909341SAndroid Build Coastguard Worker addi.d t4, s4, -4 2024*c0909341SAndroid Build Coastguard Worker sub.d t4, t4, t3 2025*c0909341SAndroid Build Coastguard Worker addi.d t3, s0, 4 2026*c0909341SAndroid Build Coastguard Worker 2027*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 2028*c0909341SAndroid Build Coastguard Worker 2029*c0909341SAndroid Build Coastguard Worker or t7, zero, zero 2030*c0909341SAndroid Build Coastguard Worker 2031*c0909341SAndroid Build Coastguard Worker1: //CDEF_HAVE_BOTTOM 2032*c0909341SAndroid Build Coastguard Worker andi t4, s2,8 2033*c0909341SAndroid Build Coastguard Worker bnez t4, 2f 2034*c0909341SAndroid Build Coastguard Worker 2035*c0909341SAndroid Build Coastguard Worker mul.w t3, s1, s5 2036*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 2037*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 2038*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 2039*c0909341SAndroid Build Coastguard Worker li.d t3, 12 2040*c0909341SAndroid Build Coastguard Worker 2041*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t3, t2 2042*c0909341SAndroid Build Coastguard Worker 2043*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, -2 2044*c0909341SAndroid Build Coastguard Worker 2045*c0909341SAndroid Build Coastguard Worker2: //CDEF_HAVE_LEFT 2046*c0909341SAndroid Build Coastguard Worker andi t4, s2,1 2047*c0909341SAndroid Build Coastguard Worker bnez t4, 3f 2048*c0909341SAndroid Build Coastguard Worker 2049*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 2050*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 2051*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 2052*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -4 2053*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 2054*c0909341SAndroid Build Coastguard Worker li.d t2, 2 2055*c0909341SAndroid Build Coastguard Worker 2056*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 2057*c0909341SAndroid Build Coastguard Worker 2058*c0909341SAndroid Build Coastguard Worker or t5, zero, zero 2059*c0909341SAndroid Build Coastguard Worker 2060*c0909341SAndroid Build Coastguard Worker3: //CDEF_HAVE_RIGHT 2061*c0909341SAndroid Build Coastguard Worker andi t4, s2,2 2062*c0909341SAndroid Build Coastguard Worker bnez t4, 40f 2063*c0909341SAndroid Build Coastguard Worker 2064*c0909341SAndroid Build Coastguard Worker mul.w t3, t7, s5 2065*c0909341SAndroid Build Coastguard Worker slli.d t3, t3, 1 2066*c0909341SAndroid Build Coastguard Worker add.d t4, s4, t3 2067*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 16 2068*c0909341SAndroid Build Coastguard Worker sub.d t3, t8, t7 2069*c0909341SAndroid Build Coastguard Worker li.d t2, 2 2070*c0909341SAndroid Build Coastguard Worker 2071*c0909341SAndroid Build Coastguard Worker cdef_fill t4, s5, t2, t3 2072*c0909341SAndroid Build Coastguard Worker 2073*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, -2 2074*c0909341SAndroid Build Coastguard Worker 2075*c0909341SAndroid Build Coastguard Worker40: 2076*c0909341SAndroid Build Coastguard Worker cdef_padding_data 2077*c0909341SAndroid Build Coastguard Worker 2078*c0909341SAndroid Build Coastguard Worker beqz a5, 33f 2079*c0909341SAndroid Build Coastguard Worker 2080*c0909341SAndroid Build Coastguard Worker28: //if (pri_strength) 2081*c0909341SAndroid Build Coastguard Worker li.w t0, 4 2082*c0909341SAndroid Build Coastguard Worker andi t1, a5, 1 2083*c0909341SAndroid Build Coastguard Worker sub.d t0, t0, t1 //pri_tap 2084*c0909341SAndroid Build Coastguard Worker 2085*c0909341SAndroid Build Coastguard Worker //edit 2086*c0909341SAndroid Build Coastguard Worker clz.w t1, a5 2087*c0909341SAndroid Build Coastguard Worker li.d t2, 31 2088*c0909341SAndroid Build Coastguard Worker sub.w t3, t2, t1 2089*c0909341SAndroid Build Coastguard Worker sub.w t3, s7, t3 2090*c0909341SAndroid Build Coastguard Worker 2091*c0909341SAndroid Build Coastguard Worker or t1, zero, zero //t1: pri_shift 2092*c0909341SAndroid Build Coastguard Worker blt t3, zero, 281f 2093*c0909341SAndroid Build Coastguard Worker or t1, t3, t3 2094*c0909341SAndroid Build Coastguard Worker281: 2095*c0909341SAndroid Build Coastguard Worker 2096*c0909341SAndroid Build Coastguard Worker beqz a6, 31f 2097*c0909341SAndroid Build Coastguard Worker 2098*c0909341SAndroid Build Coastguard Worker29: //if (sec_strength) 2099*c0909341SAndroid Build Coastguard Worker cdef_pri_sec_init 2100*c0909341SAndroid Build Coastguard Worker 2101*c0909341SAndroid Build Coastguard Worker301: 2102*c0909341SAndroid Build Coastguard Worker fld.d f0, a0, 0 //px 2103*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 2104*c0909341SAndroid Build Coastguard Worker 2105*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 2106*c0909341SAndroid Build Coastguard Worker vor.v vr2, vr0, vr0 //max 2107*c0909341SAndroid Build Coastguard Worker vor.v vr3, vr0, vr0 //min 2108*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 2109*c0909341SAndroid Build Coastguard Worker 2110*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 2111*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 2112*c0909341SAndroid Build Coastguard Worker 2113*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, a2 2114*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2115*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, a3 2116*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2117*c0909341SAndroid Build Coastguard Worker 2118*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr9, vr10 2119*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w8 2120*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w8 2121*c0909341SAndroid Build Coastguard Worker 2122*c0909341SAndroid Build Coastguard Worker //s 00-03 2123*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 2124*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 2125*c0909341SAndroid Build Coastguard Worker 2126*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, s1 2127*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2128*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, t0 2129*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2130*c0909341SAndroid Build Coastguard Worker 2131*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr18, vr19 2132*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w8 vr22 2133*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w8 2134*c0909341SAndroid Build Coastguard Worker 2135*c0909341SAndroid Build Coastguard Worker //s 10-13 2136*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 2137*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 2138*c0909341SAndroid Build Coastguard Worker 2139*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, s2 2140*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2141*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, s3 2142*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2143*c0909341SAndroid Build Coastguard Worker 2144*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr18, vr19 2145*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w8 vr20 2146*c0909341SAndroid Build Coastguard Worker 2147*c0909341SAndroid Build Coastguard Worker cdef_calc_maxmin_w8 2148*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 2149*c0909341SAndroid Build Coastguard Worker 2150*c0909341SAndroid Build Coastguard Worker iclip_vrh vr5, vr3, vr2, vr16, vr17, vr5 2151*c0909341SAndroid Build Coastguard Worker 2152*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 2153*c0909341SAndroid Build Coastguard Worker fst.d f5, a0, 0 2154*c0909341SAndroid Build Coastguard Worker 2155*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 2156*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2157*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2158*c0909341SAndroid Build Coastguard Worker 2159*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 2160*c0909341SAndroid Build Coastguard Worker blt zero, t2, 301b 2161*c0909341SAndroid Build Coastguard Worker b 35f 2162*c0909341SAndroid Build Coastguard Worker 2163*c0909341SAndroid Build Coastguard Worker31: // pri_strength only 2164*c0909341SAndroid Build Coastguard Worker cdef_pri_init 2165*c0909341SAndroid Build Coastguard Worker 2166*c0909341SAndroid Build Coastguard Worker32: 2167*c0909341SAndroid Build Coastguard Worker fld.d f0, a0, 0 //px 2168*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 2169*c0909341SAndroid Build Coastguard Worker 2170*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 2171*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr4, vr4 //pri_tap_k 2172*c0909341SAndroid Build Coastguard Worker 2173*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, a2 2174*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, a3 2175*c0909341SAndroid Build Coastguard Worker 2176*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, a2 2177*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2178*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, a3 2179*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2180*c0909341SAndroid Build Coastguard Worker 2181*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr9, vr10 2182*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_tapchange_w8 2183*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 2184*c0909341SAndroid Build Coastguard Worker 2185*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 2186*c0909341SAndroid Build Coastguard Worker fst.d f5, a0, 0 2187*c0909341SAndroid Build Coastguard Worker 2188*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 2189*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2190*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2191*c0909341SAndroid Build Coastguard Worker 2192*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 2193*c0909341SAndroid Build Coastguard Worker blt zero, t2, 32b 2194*c0909341SAndroid Build Coastguard Worker b 35f 2195*c0909341SAndroid Build Coastguard Worker 2196*c0909341SAndroid Build Coastguard Worker33: // sec_strength only 2197*c0909341SAndroid Build Coastguard Worker cdef_sec_init 2198*c0909341SAndroid Build Coastguard Worker 2199*c0909341SAndroid Build Coastguard Worker34: 2200*c0909341SAndroid Build Coastguard Worker fld.d f0, a0, 0 //px 2201*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, vr0, 0 2202*c0909341SAndroid Build Coastguard Worker 2203*c0909341SAndroid Build Coastguard Worker vxor.v vr1, vr1, vr1 //sum 2204*c0909341SAndroid Build Coastguard Worker 2205*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s1 //tmp[-off02] 2206*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, t0 //tmp[-off03] 2207*c0909341SAndroid Build Coastguard Worker 2208*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, s1 2209*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2210*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, t0 2211*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2212*c0909341SAndroid Build Coastguard Worker 2213*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr18, vr19 2214*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w8 vr22 2215*c0909341SAndroid Build Coastguard Worker 2216*c0909341SAndroid Build Coastguard Worker sub.d t4, s4, s2 //tmp[-off12] 2217*c0909341SAndroid Build Coastguard Worker sub.d t5, s4, s3 //tmp[-off13] 2218*c0909341SAndroid Build Coastguard Worker 2219*c0909341SAndroid Build Coastguard Worker vldx vr5, s4, s2 2220*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 0 2221*c0909341SAndroid Build Coastguard Worker vldx vr7, s4, s3 2222*c0909341SAndroid Build Coastguard Worker vld vr8, t5, 0 2223*c0909341SAndroid Build Coastguard Worker 2224*c0909341SAndroid Build Coastguard Worker cdef_process_data_w8 vr18, vr19 2225*c0909341SAndroid Build Coastguard Worker cdef_calc_sum_no_tapchange_w8 vr20 2226*c0909341SAndroid Build Coastguard Worker cdef_calc_dst 2227*c0909341SAndroid Build Coastguard Worker 2228*c0909341SAndroid Build Coastguard Worker vsrlni.b.h vr5, vr5, 0 2229*c0909341SAndroid Build Coastguard Worker fst.d f5, a0, 0 2230*c0909341SAndroid Build Coastguard Worker 2231*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 2232*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2233*c0909341SAndroid Build Coastguard Worker add.d s4, s4, s5 2234*c0909341SAndroid Build Coastguard Worker 2235*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, -1 2236*c0909341SAndroid Build Coastguard Worker blt zero, t2, 34b 2237*c0909341SAndroid Build Coastguard Worker 2238*c0909341SAndroid Build Coastguard Worker35: 2239*c0909341SAndroid Build Coastguard Worker ld.d s0, sp, 0 2240*c0909341SAndroid Build Coastguard Worker ld.d s1, sp, 8 2241*c0909341SAndroid Build Coastguard Worker ld.d s2, sp, 16 2242*c0909341SAndroid Build Coastguard Worker ld.d s3, sp, 24 2243*c0909341SAndroid Build Coastguard Worker ld.d s4, sp, 32 2244*c0909341SAndroid Build Coastguard Worker ld.d s5, sp, 40 2245*c0909341SAndroid Build Coastguard Worker ld.d s6, sp, 48 2246*c0909341SAndroid Build Coastguard Worker ld.d s7, sp, 56 2247*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, (64+288) 2248*c0909341SAndroid Build Coastguard Workerendfunc 2249*c0909341SAndroid Build Coastguard Worker 2250