1*c0909341SAndroid Build Coastguard Worker/* 2*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, VideoLAN and dav1d authors 3*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, 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#include "src/loongarch/loongson_util.S" 30*c0909341SAndroid Build Coastguard Worker 31*c0909341SAndroid Build Coastguard Worker.macro PUSH_REG 32*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -64 33*c0909341SAndroid Build Coastguard Worker fst.d f24, sp, 0 34*c0909341SAndroid Build Coastguard Worker fst.d f25, sp, 8 35*c0909341SAndroid Build Coastguard Worker fst.d f26, sp, 16 36*c0909341SAndroid Build Coastguard Worker fst.d f27, sp, 24 37*c0909341SAndroid Build Coastguard Worker fst.d f28, sp, 32 38*c0909341SAndroid Build Coastguard Worker fst.d f29, sp, 40 39*c0909341SAndroid Build Coastguard Worker fst.d f30, sp, 48 40*c0909341SAndroid Build Coastguard Worker fst.d f31, sp, 56 41*c0909341SAndroid Build Coastguard Worker.endm 42*c0909341SAndroid Build Coastguard Worker 43*c0909341SAndroid Build Coastguard Worker.macro POP_REG 44*c0909341SAndroid Build Coastguard Worker fld.d f24, sp, 0 45*c0909341SAndroid Build Coastguard Worker fld.d f25, sp, 8 46*c0909341SAndroid Build Coastguard Worker fld.d f26, sp, 16 47*c0909341SAndroid Build Coastguard Worker fld.d f27, sp, 24 48*c0909341SAndroid Build Coastguard Worker fld.d f28, sp, 32 49*c0909341SAndroid Build Coastguard Worker fld.d f29, sp, 40 50*c0909341SAndroid Build Coastguard Worker fld.d f30, sp, 48 51*c0909341SAndroid Build Coastguard Worker fld.d f31, sp, 56 52*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, 64 53*c0909341SAndroid Build Coastguard Worker.endm 54*c0909341SAndroid Build Coastguard Worker 55*c0909341SAndroid Build Coastguard Worker.macro malloc_space number 56*c0909341SAndroid Build Coastguard Worker li.w t0, \number 57*c0909341SAndroid Build Coastguard Worker sub.d sp, sp, t0 58*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, -64 59*c0909341SAndroid Build Coastguard Worker PUSH_REG 60*c0909341SAndroid Build Coastguard Worker.endm 61*c0909341SAndroid Build Coastguard Worker 62*c0909341SAndroid Build Coastguard Worker.macro free_space number 63*c0909341SAndroid Build Coastguard Worker POP_REG 64*c0909341SAndroid Build Coastguard Worker li.w t0, \number 65*c0909341SAndroid Build Coastguard Worker add.d sp, sp, t0 66*c0909341SAndroid Build Coastguard Worker addi.d sp, sp, 64 67*c0909341SAndroid Build Coastguard Worker.endm 68*c0909341SAndroid Build Coastguard Worker 69*c0909341SAndroid Build Coastguard Worker.macro iwht4 70*c0909341SAndroid Build Coastguard Worker vadd.h vr0, vr0, vr1 71*c0909341SAndroid Build Coastguard Worker vsub.h vr4, vr2, vr3 72*c0909341SAndroid Build Coastguard Worker vsub.h vr5, vr0, vr4 73*c0909341SAndroid Build Coastguard Worker vsrai.h vr5, vr5, 1 74*c0909341SAndroid Build Coastguard Worker vsub.h vr2, vr5, vr1 75*c0909341SAndroid Build Coastguard Worker vsub.h vr1, vr5, vr3 76*c0909341SAndroid Build Coastguard Worker vadd.h vr3, vr4, vr2 77*c0909341SAndroid Build Coastguard Worker vsub.h vr0, vr0, vr1 78*c0909341SAndroid Build Coastguard Worker.endm 79*c0909341SAndroid Build Coastguard Worker 80*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W4 in0, in1, in2, in3, in4, in5 81*c0909341SAndroid Build Coastguard Worker vilvl.w \in0, \in1, \in0 // 0 1 2 3 4 5 6 7 x ... 82*c0909341SAndroid Build Coastguard Worker vilvl.w \in2, \in3, \in2 // 8 9 10 11 12 13 14 15 x ... 83*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu \in0, \in0, 0 84*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu \in2, \in2, 0 85*c0909341SAndroid Build Coastguard Worker vadd.h \in0, \in4, \in0 86*c0909341SAndroid Build Coastguard Worker vadd.h \in2, \in5, \in2 87*c0909341SAndroid Build Coastguard Worker vssrani.bu.h \in2, \in0, 0 88*c0909341SAndroid Build Coastguard Worker vstelm.w \in2, a0, 0, 0 89*c0909341SAndroid Build Coastguard Worker vstelmx.w \in2, a0, a1, 1 90*c0909341SAndroid Build Coastguard Worker vstelmx.w \in2, a0, a1, 2 91*c0909341SAndroid Build Coastguard Worker vstelmx.w \in2, a0, a1, 3 92*c0909341SAndroid Build Coastguard Worker.endm 93*c0909341SAndroid Build Coastguard Worker 94*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W4 in0, in1 95*c0909341SAndroid Build Coastguard Worker vld vr0, a0, 0 96*c0909341SAndroid Build Coastguard Worker vldx vr1, a0, a1 97*c0909341SAndroid Build Coastguard Worker vld vr2, t2, 0 98*c0909341SAndroid Build Coastguard Worker vldx vr3, t2, a1 99*c0909341SAndroid Build Coastguard Worker 100*c0909341SAndroid Build Coastguard Worker DST_ADD_W4 vr0, vr1, vr2, vr3, \in0, \in1 101*c0909341SAndroid Build Coastguard Worker.endm 102*c0909341SAndroid Build Coastguard Worker 103*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_wht_wht_4x4_8bpc_lsx 104*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 0 105*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 16 106*c0909341SAndroid Build Coastguard Worker 107*c0909341SAndroid Build Coastguard Worker vxor.v vr20, vr20, vr20 108*c0909341SAndroid Build Coastguard Worker vsrai.h vr0, vr0, 2 109*c0909341SAndroid Build Coastguard Worker vsrai.h vr2, vr2, 2 110*c0909341SAndroid Build Coastguard Worker vst vr20, a2, 0 111*c0909341SAndroid Build Coastguard Worker vpickod.d vr1, vr0, vr0 112*c0909341SAndroid Build Coastguard Worker vpickod.d vr3, vr2, vr2 113*c0909341SAndroid Build Coastguard Worker vst vr20, a2, 16 114*c0909341SAndroid Build Coastguard Worker 115*c0909341SAndroid Build Coastguard Worker iwht4 116*c0909341SAndroid Build Coastguard Worker 117*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5 118*c0909341SAndroid Build Coastguard Worker 119*c0909341SAndroid Build Coastguard Worker iwht4 120*c0909341SAndroid Build Coastguard Worker 121*c0909341SAndroid Build Coastguard Worker vilvl.d vr4, vr1, vr0 122*c0909341SAndroid Build Coastguard Worker vilvl.d vr5, vr3, vr2 123*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 124*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr4, vr5 125*c0909341SAndroid Build Coastguard Workerendfunc 126*c0909341SAndroid Build Coastguard Worker 127*c0909341SAndroid Build Coastguard Workerconst idct_coeffs, align=4 128*c0909341SAndroid Build Coastguard Worker .word 2896, 2896*8, 1567, 3784 129*c0909341SAndroid Build Coastguard Worker .word 799, 4017, 3406, 2276 130*c0909341SAndroid Build Coastguard Worker .word 401, 4076, 3166, 2598 131*c0909341SAndroid Build Coastguard Worker .word 1931, 3612, 3920, 1189 132*c0909341SAndroid Build Coastguard Worker .word 201, 4091, 3035, 2751 133*c0909341SAndroid Build Coastguard Worker .word 1751, 3703, 3857, 1380 134*c0909341SAndroid Build Coastguard Worker .word 995, 3973, 3513, 2106 135*c0909341SAndroid Build Coastguard Worker .word 2440, 3290, 4052, 601 136*c0909341SAndroid Build Coastguard Workerendconst 137*c0909341SAndroid Build Coastguard Worker 138*c0909341SAndroid Build Coastguard Worker.macro vsrari_h_x4 in0, in1, in2, in3, out0, out1, out2, out3, shift 139*c0909341SAndroid Build Coastguard Worker vsrari.h \out0, \in0, \shift 140*c0909341SAndroid Build Coastguard Worker vsrari.h \out1, \in1, \shift 141*c0909341SAndroid Build Coastguard Worker vsrari.h \out2, \in2, \shift 142*c0909341SAndroid Build Coastguard Worker vsrari.h \out3, \in3, \shift 143*c0909341SAndroid Build Coastguard Worker.endm 144*c0909341SAndroid Build Coastguard Worker 145*c0909341SAndroid Build Coastguard Worker.macro vsrari_h_x8 in0, in1, in2, in3, in4, in5, in6, in7, out0, \ 146*c0909341SAndroid Build Coastguard Worker out1, out2, out3, out4, out5, out6, out7, shift 147*c0909341SAndroid Build Coastguard Worker vsrari.h \out0, \in0, \shift 148*c0909341SAndroid Build Coastguard Worker vsrari.h \out1, \in1, \shift 149*c0909341SAndroid Build Coastguard Worker vsrari.h \out2, \in2, \shift 150*c0909341SAndroid Build Coastguard Worker vsrari.h \out3, \in3, \shift 151*c0909341SAndroid Build Coastguard Worker vsrari.h \out4, \in4, \shift 152*c0909341SAndroid Build Coastguard Worker vsrari.h \out5, \in5, \shift 153*c0909341SAndroid Build Coastguard Worker vsrari.h \out6, \in6, \shift 154*c0909341SAndroid Build Coastguard Worker vsrari.h \out7, \in7, \shift 155*c0909341SAndroid Build Coastguard Worker.endm 156*c0909341SAndroid Build Coastguard Worker 157*c0909341SAndroid Build Coastguard Worker.macro vmulev_vmaddod_lsx in0, in1, in2, in3, out0, out1, sz 158*c0909341SAndroid Build Coastguard Worker vmulwev.w.h \out0, \in0, \in2 159*c0909341SAndroid Build Coastguard Worker vmulwod.w.h \out1, \in0, \in2 160*c0909341SAndroid Build Coastguard Worker vmaddwev.w.h \out0, \in1, \in3 161*c0909341SAndroid Build Coastguard Worker vmaddwod.w.h \out1, \in1, \in3 162*c0909341SAndroid Build Coastguard Worker.ifc \sz, .4h 163*c0909341SAndroid Build Coastguard Worker vilvl.w \out0, \out1, \out0 164*c0909341SAndroid Build Coastguard Worker.else 165*c0909341SAndroid Build Coastguard Worker vilvl.w vr22, \out1, \out0 166*c0909341SAndroid Build Coastguard Worker vilvh.w \out1, \out1, \out0 167*c0909341SAndroid Build Coastguard Worker vor.v \out0, vr22, vr22 168*c0909341SAndroid Build Coastguard Worker.endif 169*c0909341SAndroid Build Coastguard Worker.endm 170*c0909341SAndroid Build Coastguard Worker 171*c0909341SAndroid Build Coastguard Workerconst idct_coeffs_h, align=4 172*c0909341SAndroid Build Coastguard Worker .short 2896, 2896*8, 1567, 3784 173*c0909341SAndroid Build Coastguard Worker .short 799, 4017, 3406, 2276 174*c0909341SAndroid Build Coastguard Worker .short 401, 4076, 3166, 2598 175*c0909341SAndroid Build Coastguard Worker .short 1931, 3612, 3920, 1189 176*c0909341SAndroid Build Coastguard Worker .short 201, 4091, 3035, 2751 177*c0909341SAndroid Build Coastguard Worker .short 1751, 3703, 3857, 1380 178*c0909341SAndroid Build Coastguard Worker .short 995, 3973, 3513, 2106 179*c0909341SAndroid Build Coastguard Worker .short 2440, 3290, 4052, 601 180*c0909341SAndroid Build Coastguard Workerendconst 181*c0909341SAndroid Build Coastguard Worker 182*c0909341SAndroid Build Coastguard Workerconst iadst4_coeffs, align=4 183*c0909341SAndroid Build Coastguard Worker .word 1321, 3803, 2482, 3344 184*c0909341SAndroid Build Coastguard Workerendconst 185*c0909341SAndroid Build Coastguard Worker 186*c0909341SAndroid Build Coastguard Worker.macro inv_dct4_lsx in0, in1, in2, in3, out0, out1, out2, out3, sz 187*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 188*c0909341SAndroid Build Coastguard Worker 189*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 2896 190*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in0, \in2, vr20, vr20, vr16, vr18, \sz 191*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr20 192*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in0, \in2, vr20, vr21, vr17, vr19, \sz 193*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr16, 12 // t0 194*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr17, 12 // t1 195*c0909341SAndroid Build Coastguard Worker 196*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 1567 197*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 3784 198*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in1, \in3, vr21, vr20, \in0, vr16, \sz 199*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 200*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in1, \in3, vr20, vr21, \in2, vr17, \sz 201*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, \in0, 12 // t3 202*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, \in2, 12 // t2 203*c0909341SAndroid Build Coastguard Worker 204*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr18, vr16 205*c0909341SAndroid Build Coastguard Worker vsadd.h \out1, vr19, vr17 206*c0909341SAndroid Build Coastguard Worker vssub.h \out2, vr19, vr17 207*c0909341SAndroid Build Coastguard Worker vssub.h \out3, vr18, vr16 208*c0909341SAndroid Build Coastguard Worker.endm 209*c0909341SAndroid Build Coastguard Worker 210*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x4_lsx 211*c0909341SAndroid Build Coastguard Worker inv_dct4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, .4h 212*c0909341SAndroid Build Coastguard Workerendfuncl 213*c0909341SAndroid Build Coastguard Worker 214*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x4_lsx 215*c0909341SAndroid Build Coastguard Worker inv_dct4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, .8h 216*c0909341SAndroid Build Coastguard Workerendfuncl 217*c0909341SAndroid Build Coastguard Worker 218*c0909341SAndroid Build Coastguard Worker.macro inv_adst4_core_lsx in0, in1, in2, in3, out0, out1, out2, out3 219*c0909341SAndroid Build Coastguard Worker vsub.w vr16, \in0, \in2 // in0-in2 220*c0909341SAndroid Build Coastguard Worker vmul.w vr17, \in0, vr20 // in0*1321 221*c0909341SAndroid Build Coastguard Worker vmul.w vr19, \in0, vr22 // in0*2482 222*c0909341SAndroid Build Coastguard Worker vmul.w vr18, \in1, vr23 // in1*3344 223*c0909341SAndroid Build Coastguard Worker vmadd.w vr17, \in2, vr21 // in0*1321+in2*3803 224*c0909341SAndroid Build Coastguard Worker vmsub.w vr19, \in2, vr20 // in2*1321 225*c0909341SAndroid Build Coastguard Worker vadd.w vr16, vr16, \in3 // in0-in2+in3 226*c0909341SAndroid Build Coastguard Worker vmadd.w vr17, \in3, vr22 // in0*1321+in2*3803+in3*2482 227*c0909341SAndroid Build Coastguard Worker vmsub.w vr19, \in3, vr21 // in0*2482-in2*1321-in3*3803 228*c0909341SAndroid Build Coastguard Worker vadd.w vr15, vr17, vr19 229*c0909341SAndroid Build Coastguard Worker vmul.w \out2, vr16, vr23 // out[2] 8 9 10 11 230*c0909341SAndroid Build Coastguard Worker vadd.w \out0, vr17, vr18 // out[0] 0 1 2 3 231*c0909341SAndroid Build Coastguard Worker vadd.w \out1, vr19, vr18 // out[1] 4 5 6 7 232*c0909341SAndroid Build Coastguard Worker vsub.w \out3, vr15, vr18 // out[3] 12 13 14 15 233*c0909341SAndroid Build Coastguard Worker.endm 234*c0909341SAndroid Build Coastguard Worker 235*c0909341SAndroid Build Coastguard Worker.macro inv_adst4_lsx in0, in1, in2, in3, out0, out1, out2, out3 236*c0909341SAndroid Build Coastguard Worker la.local t0, iadst4_coeffs 237*c0909341SAndroid Build Coastguard Worker 238*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 1321 239*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 4 // 3803 240*c0909341SAndroid Build Coastguard Worker vldrepl.w vr22, t0, 8 // 2482 241*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 12 // 3344 242*c0909341SAndroid Build Coastguard Worker 243*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr0, \in0, 0 244*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr1, \in1, 0 245*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr2, \in2, 0 246*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr3, \in3, 0 247*c0909341SAndroid Build Coastguard Worker inv_adst4_core_lsx vr0, vr1, vr2, vr3, \out0, \out1, \out2, \out3 248*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out0, \out0, 12 249*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out1, \out1, 12 250*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out2, \out2, 12 251*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out3, \out3, 12 252*c0909341SAndroid Build Coastguard Worker.endm 253*c0909341SAndroid Build Coastguard Worker 254*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x4_lsx 255*c0909341SAndroid Build Coastguard Worker inv_adst4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3 256*c0909341SAndroid Build Coastguard Workerendfuncl 257*c0909341SAndroid Build Coastguard Worker 258*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x4_lsx 259*c0909341SAndroid Build Coastguard Worker inv_adst4_lsx vr0, vr1, vr2, vr3, vr3, vr2, vr1, vr0 260*c0909341SAndroid Build Coastguard Workerendfuncl 261*c0909341SAndroid Build Coastguard Worker 262*c0909341SAndroid Build Coastguard Worker.macro inv_adst_8x4_lsx in0, in1, in2, in3, out0, out1, out2, out3 263*c0909341SAndroid Build Coastguard Worker la.local t0, iadst4_coeffs 264*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 1321 265*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 4 // 3803 266*c0909341SAndroid Build Coastguard Worker vldrepl.w vr22, t0, 8 // 2482 267*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 12 // 3344 268*c0909341SAndroid Build Coastguard Worker 269*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr10, \in0, 0 // in0 270*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr11, \in1, 0 // in1 271*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr12, \in2, 0 // in2 272*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr13, \in3, 0 // in3 273*c0909341SAndroid Build Coastguard Worker inv_adst4_core_lsx vr10, vr11, vr12, vr13, vr10, vr11, vr12, vr13 274*c0909341SAndroid Build Coastguard Worker 275*c0909341SAndroid Build Coastguard Worker vexth.w.h \in0, \in0 // in0 276*c0909341SAndroid Build Coastguard Worker vexth.w.h \in1, \in1 // in1 277*c0909341SAndroid Build Coastguard Worker vexth.w.h \in2, \in2 // in2 278*c0909341SAndroid Build Coastguard Worker vexth.w.h \in3, \in3 // in3 279*c0909341SAndroid Build Coastguard Worker inv_adst4_core_lsx \in0, \in1, \in2, \in3, \out0, \out1, \out2, \out3 280*c0909341SAndroid Build Coastguard Worker 281*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out0, vr10, 12 282*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out1, vr11, 12 283*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out2, vr12, 12 284*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out3, vr13, 12 285*c0909341SAndroid Build Coastguard Worker.endm 286*c0909341SAndroid Build Coastguard Worker 287*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x4_lsx 288*c0909341SAndroid Build Coastguard Worker inv_adst_8x4_lsx vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3 289*c0909341SAndroid Build Coastguard Workerendfuncl 290*c0909341SAndroid Build Coastguard Worker 291*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x4_lsx 292*c0909341SAndroid Build Coastguard Worker inv_adst_8x4_lsx vr0, vr1, vr2, vr3, vr3, vr2, vr1, vr0 293*c0909341SAndroid Build Coastguard Workerendfuncl 294*c0909341SAndroid Build Coastguard Worker 295*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x4_lsx 296*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 297*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr20, t0 298*c0909341SAndroid Build Coastguard Worker 299*c0909341SAndroid Build Coastguard Worker vilvl.d vr0, vr1, vr0 300*c0909341SAndroid Build Coastguard Worker vilvl.d vr2, vr3, vr2 301*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr16, vr0, vr20 302*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr17, vr0, vr20 303*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr18, vr2, vr20 304*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr19, vr2, vr20 305*c0909341SAndroid Build Coastguard Worker vilvl.w vr1, vr17, vr16 306*c0909341SAndroid Build Coastguard Worker vilvh.w vr3, vr17, vr16 307*c0909341SAndroid Build Coastguard Worker vilvl.w vr22, vr19, vr18 308*c0909341SAndroid Build Coastguard Worker vilvh.w vr23, vr19, vr18 309*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr3, vr1, 12 310*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr23, vr22, 12 311*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr3, vr0 // t0 312*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr23, vr2 // t2 313*c0909341SAndroid Build Coastguard Worker vilvh.d vr1, vr0, vr0 // t1 314*c0909341SAndroid Build Coastguard Worker vilvh.d vr3, vr2, vr2 // t3 315*c0909341SAndroid Build Coastguard Workerendfuncl 316*c0909341SAndroid Build Coastguard Worker 317*c0909341SAndroid Build Coastguard Worker.macro inv_identity4_lsx1 in0, in1, in2, out0, out1 318*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr16, \in0, 0 319*c0909341SAndroid Build Coastguard Worker vexth.w.h vr17, \in1 320*c0909341SAndroid Build Coastguard Worker vmul.w vr18, vr16, \in2 321*c0909341SAndroid Build Coastguard Worker vmul.w vr19, vr17, \in2 322*c0909341SAndroid Build Coastguard Worker vsrari.w vr18, vr18, 12 323*c0909341SAndroid Build Coastguard Worker vsrari.w vr19, vr19, 12 324*c0909341SAndroid Build Coastguard Worker vadd.w \out0, vr18, vr16 325*c0909341SAndroid Build Coastguard Worker vadd.w \out1, vr19, vr17 326*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out1, \out0, 1 327*c0909341SAndroid Build Coastguard Worker.endm 328*c0909341SAndroid Build Coastguard Worker 329*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x4_lsx 330*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 331*c0909341SAndroid Build Coastguard Worker vreplgr2vr.h vr20, t0 332*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr16, vr0, vr20 333*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr17, vr0, vr20 334*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr18, vr1, vr20 335*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr19, vr1, vr20 336*c0909341SAndroid Build Coastguard Worker vilvl.w vr21, vr17, vr16 337*c0909341SAndroid Build Coastguard Worker vilvh.w vr22, vr17, vr16 338*c0909341SAndroid Build Coastguard Worker vilvl.w vr23, vr19, vr18 339*c0909341SAndroid Build Coastguard Worker vilvh.w vr16, vr19, vr18 340*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr22, vr21, 12 341*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr23, 12 342*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr22, vr0 // t0 343*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr16, vr1 // t1 344*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr16, vr2, vr20 345*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr17, vr2, vr20 346*c0909341SAndroid Build Coastguard Worker vmulwev.w.h vr18, vr3, vr20 347*c0909341SAndroid Build Coastguard Worker vmulwod.w.h vr19, vr3, vr20 348*c0909341SAndroid Build Coastguard Worker vilvl.w vr21, vr17, vr16 349*c0909341SAndroid Build Coastguard Worker vilvh.w vr22, vr17, vr16 350*c0909341SAndroid Build Coastguard Worker vilvl.w vr23, vr19, vr18 351*c0909341SAndroid Build Coastguard Worker vilvh.w vr16, vr19, vr18 352*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr22, vr21, 12 353*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr23, 12 354*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr22, vr2 // t2 355*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr16, vr3 // t3 356*c0909341SAndroid Build Coastguard Workerendfuncl 357*c0909341SAndroid Build Coastguard Worker 358*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x4_lsx1 359*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 360*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr20, t0 361*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3 362*c0909341SAndroid Build Coastguard Worker inv_identity4_lsx1 \i, \i vr20, vr21, \i 363*c0909341SAndroid Build Coastguard Worker.endr 364*c0909341SAndroid Build Coastguard Workerendfuncl 365*c0909341SAndroid Build Coastguard Worker 366*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_4x4_lsx 367*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 368*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 0 369*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 16 370*c0909341SAndroid Build Coastguard Worker vilvh.d vr1, vr0, vr0 371*c0909341SAndroid Build Coastguard Worker vilvh.d vr3, vr2, vr2 372*c0909341SAndroid Build Coastguard Worker vst vr23, a2, 0 373*c0909341SAndroid Build Coastguard Worker vst vr23, a2, 16 374*c0909341SAndroid Build Coastguard Worker 375*c0909341SAndroid Build Coastguard Worker move t6, ra 376*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 377*c0909341SAndroid Build Coastguard Worker move ra, t6 378*c0909341SAndroid Build Coastguard Worker 379*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE4x4_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5 380*c0909341SAndroid Build Coastguard Worker 381*c0909341SAndroid Build Coastguard Worker move t6, ra 382*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 383*c0909341SAndroid Build Coastguard Worker move ra, t6 384*c0909341SAndroid Build Coastguard Worker 385*c0909341SAndroid Build Coastguard Worker vilvl.d vr4, vr1, vr0 386*c0909341SAndroid Build Coastguard Worker vilvl.d vr5, vr3, vr2 387*c0909341SAndroid Build Coastguard Worker vsrari.h vr4, vr4, 4 388*c0909341SAndroid Build Coastguard Worker vsrari.h vr5, vr5, 4 389*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 390*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr4, vr5 391*c0909341SAndroid Build Coastguard Workerendfuncl 392*c0909341SAndroid Build Coastguard Worker 393*c0909341SAndroid Build Coastguard Worker.macro idct_dc w, h, shift 394*c0909341SAndroid Build Coastguard Worker ld.h t2, a2, 0 // dc 395*c0909341SAndroid Build Coastguard Worker vldi vr0, 0x8b5 // 181 396*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr1, t2 397*c0909341SAndroid Build Coastguard Worker vldi vr20, 0x880 // 128 398*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr0, vr1 // dc * 181 399*c0909341SAndroid Build Coastguard Worker st.h zero, a2, 0 400*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 // (dc * 181 + 128) >> 8 401*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 // 0 1 2 3 4 5 6 7 402*c0909341SAndroid Build Coastguard Worker 403*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w) 404*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr0, vr2 405*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 // (dc * 181 + 128) >> 8 406*c0909341SAndroid Build Coastguard Worker.endif 407*c0909341SAndroid Build Coastguard Worker.if \shift>0 408*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, \shift // (dc + rnd) >> shift 409*c0909341SAndroid Build Coastguard Worker.endif 410*c0909341SAndroid Build Coastguard Worker vldx vr11, a0, a1 // 8 9 10 11 12 13 14 15 411*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 412*c0909341SAndroid Build Coastguard Worker vmadd.w vr20, vr2, vr0 413*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 // 16 17 18 19 20 21 22 23 414*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr20, vr20, 12 415*c0909341SAndroid Build Coastguard Worker vldx vr13, t2, a1 // 24 25 26 27 28 29 30 31 416*c0909341SAndroid Build Coastguard Worker.endm 417*c0909341SAndroid Build Coastguard Worker 418*c0909341SAndroid Build Coastguard Worker.macro fun4x4 txfm1, txfm2 419*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x4_8bpc_lsx 420*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 421*c0909341SAndroid Build Coastguard Worker bnez a3, 1f 422*c0909341SAndroid Build Coastguard Worker 423*c0909341SAndroid Build Coastguard Worker idct_dc 4, 4, 0 424*c0909341SAndroid Build Coastguard Worker 425*c0909341SAndroid Build Coastguard Worker DST_ADD_W4 vr10, vr11, vr12, vr13, vr20, vr20 426*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_4X4_END 427*c0909341SAndroid Build Coastguard Worker1: 428*c0909341SAndroid Build Coastguard Worker.endif 429*c0909341SAndroid Build Coastguard Worker 430*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_4h_x4_lsx 431*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_4h_x4_lsx 432*c0909341SAndroid Build Coastguard Worker 433*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_4x4_lsx 434*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X4_END: 435*c0909341SAndroid Build Coastguard Workerendfunc 436*c0909341SAndroid Build Coastguard Worker.endm 437*c0909341SAndroid Build Coastguard Worker 438*c0909341SAndroid Build Coastguard Workerfun4x4 dct, dct 439*c0909341SAndroid Build Coastguard Workerfun4x4 identity, identity 440*c0909341SAndroid Build Coastguard Workerfun4x4 adst, dct 441*c0909341SAndroid Build Coastguard Workerfun4x4 dct, adst 442*c0909341SAndroid Build Coastguard Workerfun4x4 adst, adst 443*c0909341SAndroid Build Coastguard Workerfun4x4 dct, flipadst 444*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, adst 445*c0909341SAndroid Build Coastguard Workerfun4x4 adst, flipadst 446*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, dct 447*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, flipadst 448*c0909341SAndroid Build Coastguard Workerfun4x4 dct, identity 449*c0909341SAndroid Build Coastguard Workerfun4x4 identity, dct 450*c0909341SAndroid Build Coastguard Workerfun4x4 flipadst, identity 451*c0909341SAndroid Build Coastguard Workerfun4x4 identity, flipadst 452*c0909341SAndroid Build Coastguard Workerfun4x4 identity, adst 453*c0909341SAndroid Build Coastguard Workerfun4x4 adst, identity 454*c0909341SAndroid Build Coastguard Worker 455*c0909341SAndroid Build Coastguard Workerconst iadst8_coeffs_h, align=4 456*c0909341SAndroid Build Coastguard Worker .short 4076, 401, 3612, 1931 457*c0909341SAndroid Build Coastguard Worker .short 2598, 3166, 1189, 3920 458*c0909341SAndroid Build Coastguard Worker .short 2896, 0, 1567, 3784, 0, 0, 0, 0 459*c0909341SAndroid Build Coastguard Workerendconst 460*c0909341SAndroid Build Coastguard Worker 461*c0909341SAndroid Build Coastguard Worker.macro inv_adst8_lsx out0, out1, out2, out3, out4, out5, out6, out7, sz 462*c0909341SAndroid Build Coastguard Worker la.local t0, iadst8_coeffs_h 463*c0909341SAndroid Build Coastguard Worker 464*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 4076 465*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 2 // 401 466*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr0, vr20, vr21, vr16, vr17, \sz 467*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 468*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr0, vr21, vr20, vr18, vr19, \sz 469*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr16, 12 // t0a 470*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr18, 12 // t1a 471*c0909341SAndroid Build Coastguard Worker 472*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 3612 473*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 1931 474*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr2, vr20, vr21, vr0, vr16, \sz 475*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 476*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr2, vr21, vr20, vr7, vr18, \sz 477*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr0, 12 // t2a 478*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr7, 12 // t3a 479*c0909341SAndroid Build Coastguard Worker 480*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 8 // 2598 481*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 10 // 3166 482*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr4, vr20, vr21, vr2, vr0, \sz 483*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 484*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr4, vr21, vr20, vr5, vr7, \sz 485*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr2, 12 // t4a 486*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr5, 12 // t5a 487*c0909341SAndroid Build Coastguard Worker 488*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 12 // 1189 489*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 14 // 3920 490*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr6, vr20, vr21, vr3, vr2, \sz 491*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 492*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr6, vr21, vr20, vr4, vr5, \sz 493*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr3, 12 // t6a 494*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr4, 12 // t7a 495*c0909341SAndroid Build Coastguard Worker 496*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr17, vr0 // t0 497*c0909341SAndroid Build Coastguard Worker vssub.h vr4, vr17, vr0 // t4 498*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr19, vr7 // t1 499*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr19, vr7 // t5 500*c0909341SAndroid Build Coastguard Worker vsadd.h vr17, vr16, vr2 // t2 501*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr16, vr2 // t6 502*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr18, vr5 // t3 503*c0909341SAndroid Build Coastguard Worker vssub.h vr7, vr18, vr5 // t7 504*c0909341SAndroid Build Coastguard Worker 505*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 506*c0909341SAndroid Build Coastguard Worker 507*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 1567 508*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 3784 509*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr4, vr6, vr21, vr20, vr16, vr5, \sz 510*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 511*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr4, vr6, vr20, vr21, vr18, vr2, \sz 512*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr16, 12 // t4a 513*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr18, 12 // t5a 514*c0909341SAndroid Build Coastguard Worker 515*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 516*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr19, vr20, vr21, vr4, vr16, \sz 517*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 518*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr19, vr21, vr20, vr6, vr18, \sz 519*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr4, 12 // t7a 520*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr6, 12 // t6a 521*c0909341SAndroid Build Coastguard Worker 522*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr5, vr18 // out1 523*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr5, vr18 // t6 524*c0909341SAndroid Build Coastguard Worker vsadd.h vr20, vr1, vr0 // out7 525*c0909341SAndroid Build Coastguard Worker vssub.h vr18, vr1, vr0 // t3 526*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr3, vr17 // out0 527*c0909341SAndroid Build Coastguard Worker vssub.h vr5, vr3, vr17 // t2 528*c0909341SAndroid Build Coastguard Worker vsadd.h \out6, vr2, vr16 // out6 529*c0909341SAndroid Build Coastguard Worker vssub.h vr23, vr2, vr16 // t7 530*c0909341SAndroid Build Coastguard Worker 531*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr3, vr20, 0 // out7 532*c0909341SAndroid Build Coastguard Worker vexth.w.h \out7, vr20 // out7 533*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr21, vr4, 0 // out1 534*c0909341SAndroid Build Coastguard Worker vexth.w.h \out1, vr4 // out1 535*c0909341SAndroid Build Coastguard Worker vneg.w vr3, vr3 536*c0909341SAndroid Build Coastguard Worker vneg.w \out7, \out7 537*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 538*c0909341SAndroid Build Coastguard Worker vneg.w \out1, \out1 539*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out7, vr3, 0 540*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out1, vr21, 0 541*c0909341SAndroid Build Coastguard Worker 542*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 543*c0909341SAndroid Build Coastguard Worker 544*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 2896 545*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr18, vr20, vr20, vr16, \out3, \sz 546*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr20 547*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr18, vr20, vr21, vr17, \out4, \sz 548*c0909341SAndroid Build Coastguard Worker vsrari.w vr16, vr16, 12 549*c0909341SAndroid Build Coastguard Worker vsrari.w \out3, \out3, 12 550*c0909341SAndroid Build Coastguard Worker vneg.w vr16, vr16 551*c0909341SAndroid Build Coastguard Worker vneg.w \out3, \out3 552*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out3, vr16, 0 // out3 553*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out4, vr17, 12 // out4 554*c0909341SAndroid Build Coastguard Worker 555*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr19, vr23, vr20, vr20, vr16, \out2, \sz 556*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr19, vr23, vr20, vr21, vr17, \out5, \sz 557*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out2, vr16, 12 // out2 558*c0909341SAndroid Build Coastguard Worker vsrari.w vr17, vr17, 12 559*c0909341SAndroid Build Coastguard Worker vsrari.w \out5, \out5, 12 560*c0909341SAndroid Build Coastguard Worker vneg.w vr17, vr17 561*c0909341SAndroid Build Coastguard Worker vneg.w \out5, \out5 562*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out5, vr17, 0 // out5 563*c0909341SAndroid Build Coastguard Worker.endm 564*c0909341SAndroid Build Coastguard Worker 565*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x8_lsx 566*c0909341SAndroid Build Coastguard Worker inv_adst8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h 567*c0909341SAndroid Build Coastguard Workerendfuncl 568*c0909341SAndroid Build Coastguard Worker 569*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x8_lsx 570*c0909341SAndroid Build Coastguard Worker inv_adst8_lsx vr7, vr6, vr5, vr4, vr3, vr2, vr1, vr0, .8h 571*c0909341SAndroid Build Coastguard Workerendfuncl 572*c0909341SAndroid Build Coastguard Worker 573*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x8_lsx 574*c0909341SAndroid Build Coastguard Worker inv_adst8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h 575*c0909341SAndroid Build Coastguard Workerendfuncl 576*c0909341SAndroid Build Coastguard Worker 577*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x8_lsx 578*c0909341SAndroid Build Coastguard Worker inv_adst8_lsx vr7, vr6, vr5, vr4, vr3, vr2, vr1, vr0, .8h 579*c0909341SAndroid Build Coastguard Workerendfuncl 580*c0909341SAndroid Build Coastguard Worker 581*c0909341SAndroid Build Coastguard Worker.macro inv_dct8_lsx in0, in1, in2, in3, in4, in5, in6, in7, sz 582*c0909341SAndroid Build Coastguard Worker inv_dct4_lsx \in0, \in2, \in4, \in6, \in0, \in2, \in4, \in6, \sz 583*c0909341SAndroid Build Coastguard Worker 584*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 585*c0909341SAndroid Build Coastguard Worker 586*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 8 // 799 587*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 10 // 4017 588*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in1, \in7, vr21, vr20, vr16, vr17, \sz 589*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 590*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in1, \in7, vr20, vr21, vr18, vr19, \sz 591*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr16, 12 // t7a 592*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr18, 12 // t4a 593*c0909341SAndroid Build Coastguard Worker 594*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 12 // 3406 595*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 14 // 2276 596*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in5, \in3, vr21, vr20, \in1, vr16, \sz 597*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 598*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in5, \in3, vr20, vr21, \in7, vr18, \sz 599*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, \in1, 12 // t6a 600*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, \in7, 12 // t5a 601*c0909341SAndroid Build Coastguard Worker 602*c0909341SAndroid Build Coastguard Worker vssub.h \in7, vr19, vr18 // t5a 603*c0909341SAndroid Build Coastguard Worker vsadd.h vr18, vr19, vr18 // t4 604*c0909341SAndroid Build Coastguard Worker vssub.h \in5, vr17, vr16 // t6a 605*c0909341SAndroid Build Coastguard Worker vsadd.h vr16, vr17, vr16 // t7 606*c0909341SAndroid Build Coastguard Worker 607*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 2896 608*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in5, \in7, vr20, vr20, \in1, vr17, \sz 609*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr20 610*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx \in5, \in7, vr20, vr21, vr23, vr19, \sz 611*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, \in1, 12 // t6 612*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr23, 12 // t5 613*c0909341SAndroid Build Coastguard Worker 614*c0909341SAndroid Build Coastguard Worker vssub.h \in7, \in0, vr16 //c[7] 615*c0909341SAndroid Build Coastguard Worker vsadd.h \in0, \in0, vr16 //c[0] 616*c0909341SAndroid Build Coastguard Worker vssub.h \in5, \in4, vr19 //c[5] 617*c0909341SAndroid Build Coastguard Worker vsadd.h vr23, \in4, vr19 //c[2] 618*c0909341SAndroid Build Coastguard Worker vssub.h \in4, \in6, vr18 //c[4] 619*c0909341SAndroid Build Coastguard Worker vsadd.h \in3, \in6, vr18 //c[3] 620*c0909341SAndroid Build Coastguard Worker vssub.h \in6, \in2, vr17 //c[6] 621*c0909341SAndroid Build Coastguard Worker vsadd.h \in1, \in2, vr17 //c[1] 622*c0909341SAndroid Build Coastguard Worker vor.v \in2, vr23, vr23 623*c0909341SAndroid Build Coastguard Worker.endm 624*c0909341SAndroid Build Coastguard Worker 625*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x8_lsx 626*c0909341SAndroid Build Coastguard Worker inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h 627*c0909341SAndroid Build Coastguard Workerendfuncl 628*c0909341SAndroid Build Coastguard Worker 629*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x8_lsx 630*c0909341SAndroid Build Coastguard Worker inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .4h 631*c0909341SAndroid Build Coastguard Workerendfuncl 632*c0909341SAndroid Build Coastguard Worker 633*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W8 in0, in1, in2, in3, in4, in5, in6, in7 634*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr0, \in0, 0 635*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr1, \in1, 0 636*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr2, \in2, 0 637*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr3, \in3, 0 638*c0909341SAndroid Build Coastguard Worker vadd.h vr0, \in4, vr0 639*c0909341SAndroid Build Coastguard Worker vadd.h vr1, \in5, vr1 640*c0909341SAndroid Build Coastguard Worker vadd.h vr2, \in6, vr2 641*c0909341SAndroid Build Coastguard Worker vadd.h vr3, \in7, vr3 642*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr1, vr0, 0 643*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr3, vr2, 0 644*c0909341SAndroid Build Coastguard Worker vstelm.d vr1, a0, 0, 0 645*c0909341SAndroid Build Coastguard Worker vstelmx.d vr1, a0, a1, 1 646*c0909341SAndroid Build Coastguard Worker vstelmx.d vr3, a0, a1, 0 647*c0909341SAndroid Build Coastguard Worker vstelmx.d vr3, a0, a1, 1 648*c0909341SAndroid Build Coastguard Worker.endm 649*c0909341SAndroid Build Coastguard Worker 650*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8 in0, in1, in2, in3 651*c0909341SAndroid Build Coastguard Worker vld vr0, a0, 0 652*c0909341SAndroid Build Coastguard Worker vldx vr1, a0, a1 653*c0909341SAndroid Build Coastguard Worker vld vr2, t2, 0 654*c0909341SAndroid Build Coastguard Worker vldx vr3, t2, a1 655*c0909341SAndroid Build Coastguard Worker 656*c0909341SAndroid Build Coastguard Worker DST_ADD_W8 vr0, vr1, vr2, vr3, \in0, \in1, \in2, \in3 657*c0909341SAndroid Build Coastguard Worker.endm 658*c0909341SAndroid Build Coastguard Worker 659*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x8_lsx 660*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 661*c0909341SAndroid Build Coastguard Worker vsadd.h \i, \i, \i 662*c0909341SAndroid Build Coastguard Worker.endr 663*c0909341SAndroid Build Coastguard Workerendfuncl 664*c0909341SAndroid Build Coastguard Worker 665*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x8_lsx 666*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 667*c0909341SAndroid Build Coastguard Worker vsadd.h \i, \i, \i 668*c0909341SAndroid Build Coastguard Worker.endr 669*c0909341SAndroid Build Coastguard Workerendfuncl 670*c0909341SAndroid Build Coastguard Worker 671*c0909341SAndroid Build Coastguard Worker.macro def_fn_8x8_base variant 672*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\variant\()add_8x8_lsx 673*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 674*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 675*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112 676*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 677*c0909341SAndroid Build Coastguard Worker.endr 678*c0909341SAndroid Build Coastguard Worker 679*c0909341SAndroid Build Coastguard Worker.ifc \variant, identity_ 680*c0909341SAndroid Build Coastguard Worker // The identity shl #1 and downshift srshr #1 cancel out 681*c0909341SAndroid Build Coastguard Worker b .itx_8x8_epilog 682*c0909341SAndroid Build Coastguard Worker.else 683*c0909341SAndroid Build Coastguard Worker 684*c0909341SAndroid Build Coastguard Worker move t6, ra 685*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 686*c0909341SAndroid Build Coastguard Worker move ra, t6 687*c0909341SAndroid Build Coastguard Worker 688*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 689*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 1 690*c0909341SAndroid Build Coastguard Worker.endr 691*c0909341SAndroid Build Coastguard Worker 692*c0909341SAndroid Build Coastguard Worker.itx_8x8_epilog: 693*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 694*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 695*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 696*c0909341SAndroid Build Coastguard Worker 697*c0909341SAndroid Build Coastguard Worker move t6, ra 698*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 699*c0909341SAndroid Build Coastguard Worker move ra, t6 700*c0909341SAndroid Build Coastguard Worker 701*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 702*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, 4 703*c0909341SAndroid Build Coastguard Worker 704*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 705*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr16, vr17, vr18, vr19 706*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 707*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 708*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr20, vr21, vr22, vr23 709*c0909341SAndroid Build Coastguard Worker.endif 710*c0909341SAndroid Build Coastguard Workerendfuncl 711*c0909341SAndroid Build Coastguard Worker.endm 712*c0909341SAndroid Build Coastguard Worker 713*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base identity_ 714*c0909341SAndroid Build Coastguard Workerdef_fn_8x8_base 715*c0909341SAndroid Build Coastguard Worker 716*c0909341SAndroid Build Coastguard Worker.macro fn8x8 txfm1, txfm2 717*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x8_8bpc_lsx 718*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 719*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_8x8 720*c0909341SAndroid Build Coastguard Worker 721*c0909341SAndroid Build Coastguard Worker idct_dc 8, 8, 1 722*c0909341SAndroid Build Coastguard Worker 723*c0909341SAndroid Build Coastguard Worker DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20 724*c0909341SAndroid Build Coastguard Worker 725*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 726*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 727*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr20, vr20, vr20, vr20 728*c0909341SAndroid Build Coastguard Worker 729*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_8X8_END 730*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x8: 731*c0909341SAndroid Build Coastguard Worker.endif 732*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x8_lsx 733*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 734*c0909341SAndroid Build Coastguard Worker b inv_txfm_identity_add_8x8_lsx 735*c0909341SAndroid Build Coastguard Worker.else 736*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x8_lsx 737*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_8x8_lsx 738*c0909341SAndroid Build Coastguard Worker.endif 739*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8X8_END: 740*c0909341SAndroid Build Coastguard Workerendfunc 741*c0909341SAndroid Build Coastguard Worker.endm 742*c0909341SAndroid Build Coastguard Worker 743*c0909341SAndroid Build Coastguard Workerfn8x8 dct, dct 744*c0909341SAndroid Build Coastguard Workerfn8x8 identity, identity 745*c0909341SAndroid Build Coastguard Workerfn8x8 dct, adst 746*c0909341SAndroid Build Coastguard Workerfn8x8 dct, flipadst 747*c0909341SAndroid Build Coastguard Workerfn8x8 dct, identity 748*c0909341SAndroid Build Coastguard Workerfn8x8 adst, dct 749*c0909341SAndroid Build Coastguard Workerfn8x8 adst, adst 750*c0909341SAndroid Build Coastguard Workerfn8x8 adst, flipadst 751*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, dct 752*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, adst 753*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, flipadst 754*c0909341SAndroid Build Coastguard Workerfn8x8 identity, dct 755*c0909341SAndroid Build Coastguard Workerfn8x8 adst, identity 756*c0909341SAndroid Build Coastguard Workerfn8x8 flipadst, identity 757*c0909341SAndroid Build Coastguard Workerfn8x8 identity, adst 758*c0909341SAndroid Build Coastguard Workerfn8x8 identity, flipadst 759*c0909341SAndroid Build Coastguard Worker 760*c0909341SAndroid Build Coastguard Worker.macro rect2_lsx in0, in1, out0 761*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in0, 0 // in1 762*c0909341SAndroid Build Coastguard Worker vexth.w.h \in0, \in0 // in1 763*c0909341SAndroid Build Coastguard Worker vmul.w vr22, vr22, \in1 764*c0909341SAndroid Build Coastguard Worker vmul.w \out0, \in0, \in1 765*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out0, vr22, 12 766*c0909341SAndroid Build Coastguard Worker.endm 767*c0909341SAndroid Build Coastguard Worker 768*c0909341SAndroid Build Coastguard Worker.macro LSX_TRANSPOSE8x4_H in0, in1, in2, in3, in4, in5, in6, in7, out0, out1, \ 769*c0909341SAndroid Build Coastguard Worker out2, out3, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5 770*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp0, \in1, \in0 771*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp1, \in3, \in2 772*c0909341SAndroid Build Coastguard Worker vilvl.w \tmp2, \tmp1, \tmp0 773*c0909341SAndroid Build Coastguard Worker vilvh.w \tmp3, \tmp1, \tmp0 774*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp0, \in5, \in4 775*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp1, \in7, \in6 776*c0909341SAndroid Build Coastguard Worker vilvl.w \tmp4, \tmp1, \tmp0 777*c0909341SAndroid Build Coastguard Worker vilvh.w \tmp5, \tmp1, \tmp0 778*c0909341SAndroid Build Coastguard Worker vilvl.d \out0, \tmp4, \tmp2 779*c0909341SAndroid Build Coastguard Worker vilvh.d \out1, \tmp4, \tmp2 780*c0909341SAndroid Build Coastguard Worker vilvl.d \out2, \tmp5, \tmp3 781*c0909341SAndroid Build Coastguard Worker vilvh.d \out3, \tmp5, \tmp3 782*c0909341SAndroid Build Coastguard Worker.endm 783*c0909341SAndroid Build Coastguard Worker 784*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_8x4_lsx 785*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 786*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 0 787*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 16 788*c0909341SAndroid Build Coastguard Worker vld vr4, a2, 32 789*c0909341SAndroid Build Coastguard Worker vld vr6, a2, 48 790*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48 791*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 792*c0909341SAndroid Build Coastguard Worker.endr 793*c0909341SAndroid Build Coastguard Worker 794*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 795*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 796*c0909341SAndroid Build Coastguard Worker rect2_lsx vr0, vr23, vr0 797*c0909341SAndroid Build Coastguard Worker rect2_lsx vr2, vr23, vr2 798*c0909341SAndroid Build Coastguard Worker rect2_lsx vr4, vr23, vr4 799*c0909341SAndroid Build Coastguard Worker rect2_lsx vr6, vr23, vr6 800*c0909341SAndroid Build Coastguard Worker 801*c0909341SAndroid Build Coastguard Worker vilvh.d vr1, vr0, vr0 802*c0909341SAndroid Build Coastguard Worker vilvh.d vr3, vr2, vr2 803*c0909341SAndroid Build Coastguard Worker vilvh.d vr5, vr4, vr4 804*c0909341SAndroid Build Coastguard Worker vilvh.d vr7, vr6, vr6 805*c0909341SAndroid Build Coastguard Worker 806*c0909341SAndroid Build Coastguard Worker move t6, ra 807*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 808*c0909341SAndroid Build Coastguard Worker move ra, t6 809*c0909341SAndroid Build Coastguard Worker 810*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x4_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr0, vr1, \ 811*c0909341SAndroid Build Coastguard Worker vr2, vr3, vr16, vr17, vr18, vr19, vr20, vr21 812*c0909341SAndroid Build Coastguard Worker 813*c0909341SAndroid Build Coastguard Worker move t6, ra 814*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 815*c0909341SAndroid Build Coastguard Worker move ra, t6 816*c0909341SAndroid Build Coastguard Worker 817*c0909341SAndroid Build Coastguard Worker vsrari_h_x4 vr0, vr1, vr2, vr3, vr16, vr17, vr18, vr19, 4 818*c0909341SAndroid Build Coastguard Worker 819*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 820*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr16, vr17, vr18, vr19 821*c0909341SAndroid Build Coastguard Workerendfuncl 822*c0909341SAndroid Build Coastguard Worker 823*c0909341SAndroid Build Coastguard Worker.macro LSX_TRANSPOSE4x8_H in0, in1, in2, in3, out0, out1, out2, out3, out4, \ 824*c0909341SAndroid Build Coastguard Worker out5, out6, out7, tmp0, tmp1, tmp2, tmp3 825*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp0, \in1, \in0 826*c0909341SAndroid Build Coastguard Worker vilvl.h \tmp1, \in3, \in2 827*c0909341SAndroid Build Coastguard Worker vilvh.h \tmp2, \in1, \in0 828*c0909341SAndroid Build Coastguard Worker vilvh.h \tmp3, \in3, \in2 829*c0909341SAndroid Build Coastguard Worker vilvl.w \out0, \tmp1, \tmp0 830*c0909341SAndroid Build Coastguard Worker vilvh.w \out2, \tmp1, \tmp0 831*c0909341SAndroid Build Coastguard Worker vilvl.w \out4, \tmp3, \tmp2 832*c0909341SAndroid Build Coastguard Worker vilvh.w \out6, \tmp3, \tmp2 833*c0909341SAndroid Build Coastguard Worker 834*c0909341SAndroid Build Coastguard Worker vbsrl.v \out1, \out0, 8 835*c0909341SAndroid Build Coastguard Worker vbsrl.v \out3, \out2, 8 836*c0909341SAndroid Build Coastguard Worker vbsrl.v \out5, \out4, 8 837*c0909341SAndroid Build Coastguard Worker vbsrl.v \out7, \out6, 8 838*c0909341SAndroid Build Coastguard Worker vinsgr2vr.d \out0, zero, 1 839*c0909341SAndroid Build Coastguard Worker vinsgr2vr.d \out2, zero, 1 840*c0909341SAndroid Build Coastguard Worker vinsgr2vr.d \out4, zero, 1 841*c0909341SAndroid Build Coastguard Worker vinsgr2vr.d \out6, zero, 1 842*c0909341SAndroid Build Coastguard Worker.endm 843*c0909341SAndroid Build Coastguard Worker 844*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_4x8_lsx 845*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 846*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 0 847*c0909341SAndroid Build Coastguard Worker vld vr1, a2, 16 848*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 32 849*c0909341SAndroid Build Coastguard Worker vld vr3, a2, 48 850*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48 851*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 852*c0909341SAndroid Build Coastguard Worker.endr 853*c0909341SAndroid Build Coastguard Worker 854*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 855*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 856*c0909341SAndroid Build Coastguard Worker rect2_lsx vr0, vr23, vr0 857*c0909341SAndroid Build Coastguard Worker rect2_lsx vr1, vr23, vr1 858*c0909341SAndroid Build Coastguard Worker rect2_lsx vr2, vr23, vr2 859*c0909341SAndroid Build Coastguard Worker rect2_lsx vr3, vr23, vr3 860*c0909341SAndroid Build Coastguard Worker 861*c0909341SAndroid Build Coastguard Worker move t6, ra 862*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 863*c0909341SAndroid Build Coastguard Worker move ra, t6 864*c0909341SAndroid Build Coastguard Worker 865*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5, \ 866*c0909341SAndroid Build Coastguard Worker vr6, vr7, vr16, vr17, vr18, vr19 867*c0909341SAndroid Build Coastguard Worker 868*c0909341SAndroid Build Coastguard Worker move t6, ra 869*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 870*c0909341SAndroid Build Coastguard Worker move ra, t6 871*c0909341SAndroid Build Coastguard Worker 872*c0909341SAndroid Build Coastguard Worker vilvl.d vr0, vr1, vr0 873*c0909341SAndroid Build Coastguard Worker vilvl.d vr1, vr3, vr2 874*c0909341SAndroid Build Coastguard Worker vilvl.d vr2, vr5, vr4 875*c0909341SAndroid Build Coastguard Worker vilvl.d vr3, vr7, vr6 876*c0909341SAndroid Build Coastguard Worker 877*c0909341SAndroid Build Coastguard Worker vsrari_h_x4 vr0, vr1, vr2, vr3, vr16, vr17, vr18, vr19, 4 878*c0909341SAndroid Build Coastguard Worker 879*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 880*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr16, vr17 881*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 882*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 883*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr18, vr19 884*c0909341SAndroid Build Coastguard Workerendfuncl 885*c0909341SAndroid Build Coastguard Worker 886*c0909341SAndroid Build Coastguard Worker.macro fn8x4 txfm1, txfm2 887*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x4_8bpc_lsx 888*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct 889*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_8x4 890*c0909341SAndroid Build Coastguard Worker 891*c0909341SAndroid Build Coastguard Worker idct_dc 8, 4, 0 892*c0909341SAndroid Build Coastguard Worker 893*c0909341SAndroid Build Coastguard Worker DST_ADD_W8 vr10, vr11, vr12, vr13, vr5, vr5, vr5, vr5 894*c0909341SAndroid Build Coastguard Worker 895*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_8X4_END 896*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x4: 897*c0909341SAndroid Build Coastguard Worker.endif 898*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_4h_x8_lsx 899*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x4_lsx 900*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_8x4_lsx 901*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8X4_END: 902*c0909341SAndroid Build Coastguard Workerendfunc 903*c0909341SAndroid Build Coastguard Worker.endm 904*c0909341SAndroid Build Coastguard Worker 905*c0909341SAndroid Build Coastguard Workerfn8x4 dct, dct 906*c0909341SAndroid Build Coastguard Workerfn8x4 identity, identity 907*c0909341SAndroid Build Coastguard Workerfn8x4 dct, adst 908*c0909341SAndroid Build Coastguard Workerfn8x4 dct, flipadst 909*c0909341SAndroid Build Coastguard Workerfn8x4 dct, identity 910*c0909341SAndroid Build Coastguard Workerfn8x4 adst, dct 911*c0909341SAndroid Build Coastguard Workerfn8x4 adst, adst 912*c0909341SAndroid Build Coastguard Workerfn8x4 adst, flipadst 913*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, dct 914*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, adst 915*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, flipadst 916*c0909341SAndroid Build Coastguard Workerfn8x4 identity, dct 917*c0909341SAndroid Build Coastguard Workerfn8x4 adst, identity 918*c0909341SAndroid Build Coastguard Workerfn8x4 flipadst, identity 919*c0909341SAndroid Build Coastguard Workerfn8x4 identity, adst 920*c0909341SAndroid Build Coastguard Workerfn8x4 identity, flipadst 921*c0909341SAndroid Build Coastguard Worker 922*c0909341SAndroid Build Coastguard Worker.macro fn4x8 txfm1, txfm2 923*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x8_8bpc_lsx 924*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct 925*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_4x8 926*c0909341SAndroid Build Coastguard Worker 927*c0909341SAndroid Build Coastguard Worker idct_dc 4, 8, 0 928*c0909341SAndroid Build Coastguard Worker 929*c0909341SAndroid Build Coastguard Worker DST_ADD_W4 vr10, vr11, vr12, vr13, vr20, vr20 930*c0909341SAndroid Build Coastguard Worker 931*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 932*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 933*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr5, vr5 934*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_4X8_END 935*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_4x8: 936*c0909341SAndroid Build Coastguard Worker.endif 937*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x4_lsx 938*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_4h_x8_lsx 939*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_4x8_lsx 940*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X8_END: 941*c0909341SAndroid Build Coastguard Workerendfunc 942*c0909341SAndroid Build Coastguard Worker.endm 943*c0909341SAndroid Build Coastguard Worker 944*c0909341SAndroid Build Coastguard Workerfn4x8 dct, dct 945*c0909341SAndroid Build Coastguard Workerfn4x8 identity, identity 946*c0909341SAndroid Build Coastguard Workerfn4x8 dct, adst 947*c0909341SAndroid Build Coastguard Workerfn4x8 dct, flipadst 948*c0909341SAndroid Build Coastguard Workerfn4x8 dct, identity 949*c0909341SAndroid Build Coastguard Workerfn4x8 adst, dct 950*c0909341SAndroid Build Coastguard Workerfn4x8 adst, adst 951*c0909341SAndroid Build Coastguard Workerfn4x8 adst, flipadst 952*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, dct 953*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, adst 954*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, flipadst 955*c0909341SAndroid Build Coastguard Workerfn4x8 identity, dct 956*c0909341SAndroid Build Coastguard Workerfn4x8 adst, identity 957*c0909341SAndroid Build Coastguard Workerfn4x8 flipadst, identity 958*c0909341SAndroid Build Coastguard Workerfn4x8 identity, adst 959*c0909341SAndroid Build Coastguard Workerfn4x8 identity, flipadst 960*c0909341SAndroid Build Coastguard Worker 961*c0909341SAndroid Build Coastguard Worker.macro inv_identity4_lsx_x2 in0, in1, in2, in3, in4, out0, out1 962*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr4, \in0, 0 963*c0909341SAndroid Build Coastguard Worker vexth.w.h vr5, \in0 964*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr6, \in1, 0 965*c0909341SAndroid Build Coastguard Worker vexth.w.h vr7, \in1 966*c0909341SAndroid Build Coastguard Worker vmul.w vr4, vr4, \in2 967*c0909341SAndroid Build Coastguard Worker vmul.w vr5, vr5, \in2 968*c0909341SAndroid Build Coastguard Worker vmul.w vr6, vr6, \in2 969*c0909341SAndroid Build Coastguard Worker vmul.w vr7, vr7, \in2 970*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr4, 12 971*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr6, 12 972*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr5, \in3 973*c0909341SAndroid Build Coastguard Worker vsadd.h \out1, vr7, \in4 974*c0909341SAndroid Build Coastguard Worker.endm 975*c0909341SAndroid Build Coastguard Worker 976*c0909341SAndroid Build Coastguard Worker.macro vmul_vmadd_w in0, in1, in2, in3, out0, out1 977*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in0, 0 978*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in0 979*c0909341SAndroid Build Coastguard Worker vmul.w \out0, vr22, \in2 980*c0909341SAndroid Build Coastguard Worker vmul.w \out1, vr23, \in2 981*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in1, 0 982*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in1 983*c0909341SAndroid Build Coastguard Worker vmadd.w \out0, vr22, \in3 984*c0909341SAndroid Build Coastguard Worker vmadd.w \out1, vr23, \in3 985*c0909341SAndroid Build Coastguard Worker.endm 986*c0909341SAndroid Build Coastguard Worker 987*c0909341SAndroid Build Coastguard Worker.macro vmul_vmsub_w in0, in1, in2, in3, out0, out1 988*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in0, 0 989*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in0 990*c0909341SAndroid Build Coastguard Worker vmul.w \out0, vr22, \in2 991*c0909341SAndroid Build Coastguard Worker vmul.w \out1, vr23, \in2 992*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in1, 0 993*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in1 994*c0909341SAndroid Build Coastguard Worker vmsub.w \out0, vr22, \in3 995*c0909341SAndroid Build Coastguard Worker vmsub.w \out1, vr23, \in3 996*c0909341SAndroid Build Coastguard Worker.endm 997*c0909341SAndroid Build Coastguard Worker 998*c0909341SAndroid Build Coastguard Worker.macro inv_dct16_lsx sz 999*c0909341SAndroid Build Coastguard Worker inv_dct8_lsx vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14, \sz 1000*c0909341SAndroid Build Coastguard Worker 1001*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 1002*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 16 // 401 1003*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 18 // 4076 1004*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr15, vr21, vr20, vr16, vr17, \sz 1005*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1006*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr15, vr20, vr21, vr18, vr19, \sz 1007*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr16, 12 // t15a 1008*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr18, 12 // t8a 1009*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 20 // 3166 -> 1583 1010*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 22 // 2598 -> 1299 1011*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr7, vr21, vr20, vr1, vr16, \sz 1012*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1013*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr7, vr20, vr21, vr15, vr18, \sz 1014*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr1, 12 // t14a 1015*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr15, 12 // t9a 1016*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 24 // 1931 1017*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 26 // 3612 1018*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr11, vr21, vr20, vr7, vr1, \sz 1019*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1020*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr11, vr20, vr21, vr9, vr15, \sz 1021*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr7, 12 // t13a 1022*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr15, vr9, 12 // t10a 1023*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 28 // 3920 1024*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 30 // 1189 1025*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr3, vr21, vr20, vr5, vr7, \sz 1026*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1027*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr3, vr20, vr21, vr11, vr9, \sz 1028*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr5, 12 // t12a 1029*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr11, 12 // t11a 1030*c0909341SAndroid Build Coastguard Worker 1031*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr19, vr18 // t8 1032*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr19, vr18 // t9 1033*c0909341SAndroid Build Coastguard Worker vssub.h vr3, vr9, vr15 // t10 1034*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr9, vr15 // t11 1035*c0909341SAndroid Build Coastguard Worker vsadd.h vr18, vr7, vr1 // t12 1036*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr7, vr1 // t13 1037*c0909341SAndroid Build Coastguard Worker vssub.h vr9, vr17, vr16 // t14 1038*c0909341SAndroid Build Coastguard Worker vsadd.h vr15, vr17, vr16 // t15 1039*c0909341SAndroid Build Coastguard Worker 1040*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 1567 1041*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 3784 1042*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr11, vr21, vr20, vr1, vr16, \sz 1043*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1044*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr11, vr20, vr21, vr7, vr17, \sz 1045*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr1, 12 // t14a 1046*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr7, 12 // t9a 1047*c0909341SAndroid Build Coastguard Worker 1048*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1049*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr19, vr3, vr21, vr20, vr9, vr1, \sz 1050*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1051*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr19, vr3, vr20, vr21, vr11, vr7, \sz 1052*c0909341SAndroid Build Coastguard Worker vneg.w vr1, vr1 1053*c0909341SAndroid Build Coastguard Worker vneg.w vr9, vr9 1054*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr11, 12 // t13a 1055*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr9, 12 // t10a 1056*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr5, vr13 // t8a 1057*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr5, vr13 // t11a 1058*c0909341SAndroid Build Coastguard Worker vssub.h vr3, vr15, vr18 // t12a 1059*c0909341SAndroid Build Coastguard Worker vsadd.h vr19, vr15, vr18 // t15a 1060*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr17, vr1 // t9 1061*c0909341SAndroid Build Coastguard Worker vssub.h vr13, vr17, vr1 // t10 1062*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr16, vr7 // t13 1063*c0909341SAndroid Build Coastguard Worker vsadd.h vr18, vr16, vr7 // t14 1064*c0909341SAndroid Build Coastguard Worker 1065*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 2896 1066*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr13, vr20, vr20, vr1, vr7, \sz 1067*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr20 1068*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr13, vr20, vr21, vr17, vr16, \sz 1069*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr1, 12 // t13a 1070*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr17, 12 // t10a 1071*c0909341SAndroid Build Coastguard Worker 1072*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr11, vr20, vr20, vr13, vr23, \sz 1073*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr11, vr20, vr21, vr15, vr17, \sz 1074*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr23, vr13, 12 // t12 1075*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr15, 12 // t11 1076*c0909341SAndroid Build Coastguard Worker 1077*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr0, vr19 // c[15] 1078*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr0, vr19 // c[0] 1079*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr2, vr18 // c[1] 1080*c0909341SAndroid Build Coastguard Worker vssub.h vr20, vr2, vr18 // c[14] 1081*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr4, vr7 // c[2] 1082*c0909341SAndroid Build Coastguard Worker vssub.h vr13, vr4, vr7 // c[13] 1083*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr6, vr23 // c[3] 1084*c0909341SAndroid Build Coastguard Worker vssub.h vr21, vr6, vr23 // c[12] 1085*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr8, vr17 // c[4] 1086*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr8, vr17 // c[11] 1087*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr14, vr9 // c[7] 1088*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr14, vr9 // c[8] 1089*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr12, vr5 // c[6] 1090*c0909341SAndroid Build Coastguard Worker vssub.h vr9, vr12, vr5 // c[9] 1091*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr10, vr16 // c[5] 1092*c0909341SAndroid Build Coastguard Worker vssub.h vr10, vr10, vr16 // c[10] 1093*c0909341SAndroid Build Coastguard Worker vor.v vr14, vr20, vr20 1094*c0909341SAndroid Build Coastguard Worker vor.v vr12, vr21, vr21 1095*c0909341SAndroid Build Coastguard Worker.endm 1096*c0909341SAndroid Build Coastguard Worker 1097*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_8h_x16_lsx 1098*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 1099*c0909341SAndroid Build Coastguard Workerendfuncl 1100*c0909341SAndroid Build Coastguard Worker 1101*c0909341SAndroid Build Coastguard Workerfunctionl inv_dct_4h_x16_lsx 1102*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .4h 1103*c0909341SAndroid Build Coastguard Workerendfuncl 1104*c0909341SAndroid Build Coastguard Worker 1105*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W4_x4 in0, in1, in2, in3, in4, in5, in6 ,in7 1106*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1107*c0909341SAndroid Build Coastguard Worker 1108*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 \in0, \in1 1109*c0909341SAndroid Build Coastguard Worker 1110*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1111*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1112*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 \in2, \in3 1113*c0909341SAndroid Build Coastguard Worker 1114*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1115*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1116*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 \in4, \in5 1117*c0909341SAndroid Build Coastguard Worker 1118*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1119*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1120*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 \in6, \in7 1121*c0909341SAndroid Build Coastguard Worker.endm 1122*c0909341SAndroid Build Coastguard Worker 1123*c0909341SAndroid Build Coastguard Worker.macro def_fn_4x16_base txfm 1124*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm\()add_4x16_lsx 1125*c0909341SAndroid Build Coastguard Worker PUSH_REG 1126*c0909341SAndroid Build Coastguard Worker blt a3, t5, 416f 1127*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 16 1128*c0909341SAndroid Build Coastguard Worker vld vr1, a2, 48 1129*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 80 1130*c0909341SAndroid Build Coastguard Worker vld vr3, a2, 112 1131*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1132*c0909341SAndroid Build Coastguard Worker.irp i, 16, 48, 80, 112 1133*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1134*c0909341SAndroid Build Coastguard Worker.endr 1135*c0909341SAndroid Build Coastguard Worker 1136*c0909341SAndroid Build Coastguard Worker move t6, ra 1137*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1138*c0909341SAndroid Build Coastguard Worker move ra, t6 1139*c0909341SAndroid Build Coastguard Worker 1140*c0909341SAndroid Build Coastguard Worker.ifnc \txfm, identity_ 1141*c0909341SAndroid Build Coastguard Worker vsrari.h vr0, vr0, 1 1142*c0909341SAndroid Build Coastguard Worker vsrari.h vr1, vr1, 1 1143*c0909341SAndroid Build Coastguard Worker vsrari.h vr2, vr2, 1 1144*c0909341SAndroid Build Coastguard Worker vsrari.h vr3, vr3, 1 1145*c0909341SAndroid Build Coastguard Worker.endif 1146*c0909341SAndroid Build Coastguard Worker 1147*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr8, vr9, vr24, vr25, vr26, \ 1148*c0909341SAndroid Build Coastguard Worker vr27, vr14, vr28, vr10, vr11, vr12, vr13 1149*c0909341SAndroid Build Coastguard Worker 1150*c0909341SAndroid Build Coastguard Worker416: 1151*c0909341SAndroid Build Coastguard Worker ble t5, a3, 416416f 1152*c0909341SAndroid Build Coastguard Worker.irp i, vr8, vr9, vr24, vr25, vr26, vr27, vr14, vr28 1153*c0909341SAndroid Build Coastguard Worker vxor.v \i, \i, \i 1154*c0909341SAndroid Build Coastguard Worker.endr 1155*c0909341SAndroid Build Coastguard Worker 1156*c0909341SAndroid Build Coastguard Worker416416: 1157*c0909341SAndroid Build Coastguard Worker vld vr0, a2, 0 1158*c0909341SAndroid Build Coastguard Worker vld vr1, a2, 32 1159*c0909341SAndroid Build Coastguard Worker vld vr2, a2, 64 1160*c0909341SAndroid Build Coastguard Worker vld vr3, a2, 96 1161*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1162*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96 1163*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1164*c0909341SAndroid Build Coastguard Worker.endr 1165*c0909341SAndroid Build Coastguard Worker 1166*c0909341SAndroid Build Coastguard Worker move t6, ra 1167*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1168*c0909341SAndroid Build Coastguard Worker move ra, t6 1169*c0909341SAndroid Build Coastguard Worker 1170*c0909341SAndroid Build Coastguard Worker.ifnc \txfm, identity_ 1171*c0909341SAndroid Build Coastguard Worker vsrari.h vr0, vr0, 1 1172*c0909341SAndroid Build Coastguard Worker vsrari.h vr1, vr1, 1 1173*c0909341SAndroid Build Coastguard Worker vsrari.h vr2, vr2, 1 1174*c0909341SAndroid Build Coastguard Worker vsrari.h vr3, vr3, 1 1175*c0909341SAndroid Build Coastguard Worker.endif 1176*c0909341SAndroid Build Coastguard Worker 1177*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE4x8_H vr0, vr1, vr2, vr3, vr0, vr1, vr2, vr3, vr4, vr5, \ 1178*c0909341SAndroid Build Coastguard Worker vr6, vr7, vr16, vr17, vr18, vr19 1179*c0909341SAndroid Build Coastguard Worker 1180*c0909341SAndroid Build Coastguard Worker vor.v vr10, vr24, vr24 1181*c0909341SAndroid Build Coastguard Worker vor.v vr11, vr25, vr25 1182*c0909341SAndroid Build Coastguard Worker vor.v vr12, vr26, vr26 1183*c0909341SAndroid Build Coastguard Worker vor.v vr13, vr27, vr27 1184*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr28, vr28 1185*c0909341SAndroid Build Coastguard Worker 1186*c0909341SAndroid Build Coastguard Worker move t6, ra 1187*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 1188*c0909341SAndroid Build Coastguard Worker move ra, t6 1189*c0909341SAndroid Build Coastguard Worker 1190*c0909341SAndroid Build Coastguard Worker vilvl.d vr16, vr1, vr0 1191*c0909341SAndroid Build Coastguard Worker vilvl.d vr17, vr3, vr2 1192*c0909341SAndroid Build Coastguard Worker vilvl.d vr18, vr5, vr4 1193*c0909341SAndroid Build Coastguard Worker vilvl.d vr19, vr7, vr6 1194*c0909341SAndroid Build Coastguard Worker vilvl.d vr20, vr9, vr8 1195*c0909341SAndroid Build Coastguard Worker vilvl.d vr21, vr11, vr10 1196*c0909341SAndroid Build Coastguard Worker vilvl.d vr22, vr13, vr12 1197*c0909341SAndroid Build Coastguard Worker vilvl.d vr23, vr15, vr14 1198*c0909341SAndroid Build Coastguard Worker 1199*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1200*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 4 1201*c0909341SAndroid Build Coastguard Worker.endr 1202*c0909341SAndroid Build Coastguard Worker 1203*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4_x4 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1204*c0909341SAndroid Build Coastguard Worker POP_REG 1205*c0909341SAndroid Build Coastguard Workerendfuncl 1206*c0909341SAndroid Build Coastguard Worker.endm 1207*c0909341SAndroid Build Coastguard Worker 1208*c0909341SAndroid Build Coastguard Workerdef_fn_4x16_base identity_ 1209*c0909341SAndroid Build Coastguard Workerdef_fn_4x16_base 1210*c0909341SAndroid Build Coastguard Worker 1211*c0909341SAndroid Build Coastguard Worker.macro fn4x16 txfm1, txfm2, eob_half 1212*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_4x16_8bpc_lsx 1213*c0909341SAndroid Build Coastguard Worker.ifc \txfm1()_\txfm2, dct_dct 1214*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_4x16 1215*c0909341SAndroid Build Coastguard Worker 1216*c0909341SAndroid Build Coastguard Worker idct_dc 4, 16, 1 1217*c0909341SAndroid Build Coastguard Worker 1218*c0909341SAndroid Build Coastguard Worker DST_ADD_W4 vr10, vr11, vr12, vr13, vr5, vr5 1219*c0909341SAndroid Build Coastguard Worker 1220*c0909341SAndroid Build Coastguard Worker.rept 3 1221*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1222*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1223*c0909341SAndroid Build Coastguard Worker 1224*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W4 vr5, vr5 1225*c0909341SAndroid Build Coastguard Worker.endr 1226*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_4X16_END 1227*c0909341SAndroid Build Coastguard Worker 1228*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_4x16: 1229*c0909341SAndroid Build Coastguard Worker.endif 1230*c0909341SAndroid Build Coastguard Worker li.w t5, \eob_half 1231*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x4_lsx 1232*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 1233*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x4_lsx1 1234*c0909341SAndroid Build Coastguard Worker.endif 1235*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_4h_x16_lsx 1236*c0909341SAndroid Build Coastguard Worker 1237*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 1238*c0909341SAndroid Build Coastguard Worker b inv_txfm_identity_add_4x16_lsx 1239*c0909341SAndroid Build Coastguard Worker.else 1240*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_4x16_lsx 1241*c0909341SAndroid Build Coastguard Worker.endif 1242*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_4X16_END: 1243*c0909341SAndroid Build Coastguard Workerendfunc 1244*c0909341SAndroid Build Coastguard Worker.endm 1245*c0909341SAndroid Build Coastguard Worker 1246*c0909341SAndroid Build Coastguard Workerfn4x16 dct, dct, 29 1247*c0909341SAndroid Build Coastguard Workerfn4x16 identity, identity, 29 1248*c0909341SAndroid Build Coastguard Workerfn4x16 dct, adst, 29 1249*c0909341SAndroid Build Coastguard Workerfn4x16 dct, flipadst, 29 1250*c0909341SAndroid Build Coastguard Workerfn4x16 dct, identity, 8 1251*c0909341SAndroid Build Coastguard Workerfn4x16 adst, dct, 29 1252*c0909341SAndroid Build Coastguard Workerfn4x16 adst, adst, 29 1253*c0909341SAndroid Build Coastguard Workerfn4x16 adst, flipadst, 29 1254*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, dct, 29 1255*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, adst, 29 1256*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, flipadst, 29 1257*c0909341SAndroid Build Coastguard Workerfn4x16 identity, dct, 32 1258*c0909341SAndroid Build Coastguard Workerfn4x16 adst, identity, 8 1259*c0909341SAndroid Build Coastguard Workerfn4x16 flipadst, identity, 8 1260*c0909341SAndroid Build Coastguard Workerfn4x16 identity, adst, 32 1261*c0909341SAndroid Build Coastguard Workerfn4x16 identity, flipadst, 32 1262*c0909341SAndroid Build Coastguard Worker 1263*c0909341SAndroid Build Coastguard Worker.macro inv_identity16_lsx in0, in1, in2, out0, sz 1264*c0909341SAndroid Build Coastguard Worker.ifc \sz, .8h 1265*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr16, \in0, 0 1266*c0909341SAndroid Build Coastguard Worker vexth.w.h vr17, \in0 1267*c0909341SAndroid Build Coastguard Worker vmul.w vr16, vr16, \in1 1268*c0909341SAndroid Build Coastguard Worker vmul.w vr17, vr17, \in1 1269*c0909341SAndroid Build Coastguard Worker vsadd.h \in2, \in2, \in2 1270*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr16, 11 1271*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr17, \in2 1272*c0909341SAndroid Build Coastguard Worker.else 1273*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr16, \in0, 0 1274*c0909341SAndroid Build Coastguard Worker vmul.w vr16, vr16, \in1 1275*c0909341SAndroid Build Coastguard Worker vsadd.h \in2, \in2, \in2 1276*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr16, 11 1277*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr16, \in2 1278*c0909341SAndroid Build Coastguard Worker.endif 1279*c0909341SAndroid Build Coastguard Worker.endm 1280*c0909341SAndroid Build Coastguard Worker 1281*c0909341SAndroid Build Coastguard Worker.macro inv_identity16_lsx1 in0, in1, in2, out0 1282*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr16, \in0, 0 1283*c0909341SAndroid Build Coastguard Worker vexth.w.h vr17, \in1 1284*c0909341SAndroid Build Coastguard Worker vmul.w vr18, vr16, \in2 1285*c0909341SAndroid Build Coastguard Worker vmul.w vr19, vr17, \in2 1286*c0909341SAndroid Build Coastguard Worker vsrari.w vr18, vr18, 11 1287*c0909341SAndroid Build Coastguard Worker vsrari.w vr19, vr19, 11 1288*c0909341SAndroid Build Coastguard Worker vslli.w vr16, vr16, 1 1289*c0909341SAndroid Build Coastguard Worker vslli.w vr17, vr17, 1 1290*c0909341SAndroid Build Coastguard Worker vadd.w vr16, vr18, vr16 1291*c0909341SAndroid Build Coastguard Worker vadd.w \out0, vr19, vr17 1292*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out0, vr16, 1 1293*c0909341SAndroid Build Coastguard Worker.endm 1294*c0909341SAndroid Build Coastguard Worker 1295*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x16_lsx 1296*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 1297*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr20, t0 1298*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \ 1299*c0909341SAndroid Build Coastguard Worker vr9, vr10, vr11, vr12, vr13, vr14, vr15 1300*c0909341SAndroid Build Coastguard Worker inv_identity16_lsx \i, vr20, \i, \i, .8h 1301*c0909341SAndroid Build Coastguard Worker.endr 1302*c0909341SAndroid Build Coastguard Workerendfuncl 1303*c0909341SAndroid Build Coastguard Worker 1304*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_4h_x16_lsx 1305*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 1306*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr20, t0 1307*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \ 1308*c0909341SAndroid Build Coastguard Worker vr9, vr10, vr11, vr12, vr13, vr14, vr15 1309*c0909341SAndroid Build Coastguard Worker inv_identity16_lsx \i, vr20, \i, \i, .4h 1310*c0909341SAndroid Build Coastguard Worker.endr 1311*c0909341SAndroid Build Coastguard Workerendfuncl 1312*c0909341SAndroid Build Coastguard Worker 1313*c0909341SAndroid Build Coastguard Workerfunctionl inv_identity_8h_x16_lsx1 1314*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 1315*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr20, t0 1316*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr8, \ 1317*c0909341SAndroid Build Coastguard Worker vr9, vr10, vr11, vr12, vr13, vr14, vr15 1318*c0909341SAndroid Build Coastguard Worker inv_identity16_lsx1 \i, \i, vr20, \i 1319*c0909341SAndroid Build Coastguard Worker.endr 1320*c0909341SAndroid Build Coastguard Workerendfuncl 1321*c0909341SAndroid Build Coastguard Worker 1322*c0909341SAndroid Build Coastguard Workerconst iadst16_coeffs_h, align=4 1323*c0909341SAndroid Build Coastguard Worker .short 4091, 201, 3973, 995 1324*c0909341SAndroid Build Coastguard Worker .short 3703, 1751, 3290, 2440 1325*c0909341SAndroid Build Coastguard Worker .short 2751, 3035, 2106, 3513 1326*c0909341SAndroid Build Coastguard Worker .short 1380, 3857, 601, 4052 1327*c0909341SAndroid Build Coastguard Workerendconst 1328*c0909341SAndroid Build Coastguard Worker 1329*c0909341SAndroid Build Coastguard Worker.macro inv_adst16_lsx txfm, sz 1330*c0909341SAndroid Build Coastguard Worker la.local t0, iadst16_coeffs_h 1331*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 4091 1332*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 2 // 201 1333*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr0, vr20, vr21, vr16, vr18, \sz 1334*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1335*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr0, vr21, vr20, vr17, vr19, \sz 1336*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr16, 12 // t0 1337*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr17, 12 // t1 1338*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 3973 1339*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 995 1340*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr2, vr20, vr21, vr16, vr0, \sz 1341*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1342*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr2, vr21, vr20, vr17, vr15, \sz 1343*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr16, 12 // t2 1344*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr15, vr17, 12 // t3 1345*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 8 // 3703 1346*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 10 // 1751 1347*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr11, vr4, vr20, vr21, vr16, vr2, \sz 1348*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1349*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr11, vr4, vr21, vr20, vr17, vr13, \sz 1350*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr16, 12 // t4 1351*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr13, vr17, 12 // t5 1352*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 12 // 3290 -> 1645 1353*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 14 // 2440 -> 1220 1354*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr6, vr20, vr21, vr16, vr4, \sz 1355*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1356*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr9, vr6, vr21, vr20, vr17, vr11, \sz 1357*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr16, 12 // t6 1358*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr11, vr17, 12 // t7 1359*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 16 // 2751 1360*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 18 // 3035 1361*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr8, vr20, vr21, vr16, vr6, \sz 1362*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1363*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr7, vr8, vr21, vr20, vr17, vr9, \sz 1364*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr16, 12 // t8 1365*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr17, 12 // t9 1366*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 20 // 2106 1367*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 22 // 3513 1368*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr10, vr20, vr21, vr16, vr7, \sz 1369*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1370*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr5, vr10, vr21, vr20, vr17, vr8, \sz 1371*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr16, 12 // t10 1372*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr17, 12 // t11 1373*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 24 // 1380 1374*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 26 // 3857 1375*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr12, vr20, vr21, vr16, vr5, \sz 1376*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1377*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr3, vr12, vr21, vr20, vr17, vr10, \sz 1378*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr16, 12 // t12 1379*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr17, 12 // t13 1380*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 28 // 601 1381*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 30 // 4052 1382*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr14, vr20, vr21, vr16, vr3, \sz 1383*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1384*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr1, vr14, vr21, vr20, vr17, vr12, \sz 1385*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr3, vr16, 12 // t14 1386*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr12, vr17, 12 // t15 1387*c0909341SAndroid Build Coastguard Worker 1388*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr18, vr6 // t0a 1389*c0909341SAndroid Build Coastguard Worker vssub.h vr14, vr18, vr6 // t8a 1390*c0909341SAndroid Build Coastguard Worker vsadd.h vr16, vr19, vr9 // t1a 1391*c0909341SAndroid Build Coastguard Worker vssub.h vr17, vr19, vr9 // t9a 1392*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr0, vr7 // t2a 1393*c0909341SAndroid Build Coastguard Worker vssub.h vr18, vr0, vr7 // t10a 1394*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr15, vr8 // t3a 1395*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr15, vr8 // t11a 1396*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr2, vr5 // t4a 1397*c0909341SAndroid Build Coastguard Worker vssub.h vr7, vr2, vr5 // t12a 1398*c0909341SAndroid Build Coastguard Worker vsadd.h vr8, vr13, vr10 // t5a 1399*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr13, vr10 // t13a 1400*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr4, vr3 // t6a 1401*c0909341SAndroid Build Coastguard Worker vssub.h vr5, vr4, vr3 // t14a 1402*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr11, vr12 // t7a 1403*c0909341SAndroid Build Coastguard Worker vssub.h vr13, vr11, vr12 // t15a 1404*c0909341SAndroid Build Coastguard Worker 1405*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 1406*c0909341SAndroid Build Coastguard Worker 1407*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 8 // 799 1408*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 10 // 4017 1409*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr14, vr17, vr21, vr20, vr3, vr11, \sz 1410*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1411*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr14, vr17, vr20, vr21, vr4, vr12, \sz 1412*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr11, vr3, 12 // t8 1413*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr12, vr4, 12 // t9 1414*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1415*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr7, vr20, vr21, vr3, vr14, \sz 1416*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1417*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr15, vr7, vr21, vr20, vr4, vr17, \sz 1418*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr14, vr3, 12 // t13 1419*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr4, 12 // t12 1420*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 12 // 3406 1421*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 14 // 2276 1422*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr18, vr19, vr21, vr20, vr3, vr7, \sz 1423*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1424*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr18, vr19, vr20, vr21, vr4, vr15, \sz 1425*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr3, 12 // t10 1426*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr15, vr4, 12 // t11 1427*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1428*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr5, vr20, vr21, vr3, vr18, \sz 1429*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1430*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr5, vr21, vr20, vr4, vr19, \sz 1431*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr3, 12 // t15 1432*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr4, 12 // t14 1433*c0909341SAndroid Build Coastguard Worker 1434*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr1, vr0 // t0 1435*c0909341SAndroid Build Coastguard Worker vssub.h vr13, vr1, vr0 // t4 1436*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr16, vr8 // t1 1437*c0909341SAndroid Build Coastguard Worker vssub.h vr4, vr16, vr8 // t5 1438*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr6, vr2 // t2 1439*c0909341SAndroid Build Coastguard Worker vssub.h vr1, vr6, vr2 // t6 1440*c0909341SAndroid Build Coastguard Worker vsadd.h vr8, vr9, vr10 // t3 1441*c0909341SAndroid Build Coastguard Worker vssub.h vr16, vr9, vr10 // t7 1442*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr11, vr17 // t8a 1443*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr11, vr17 // t12a 1444*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr12, vr14 // t9a 1445*c0909341SAndroid Build Coastguard Worker vssub.h vr10, vr12, vr14 // t13a 1446*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr7, vr19 // t10a 1447*c0909341SAndroid Build Coastguard Worker vssub.h vr17, vr7, vr19 // t14a 1448*c0909341SAndroid Build Coastguard Worker vsadd.h vr12, vr15, vr18 // t11a 1449*c0909341SAndroid Build Coastguard Worker vssub.h vr14, vr15, vr18 // t15a 1450*c0909341SAndroid Build Coastguard Worker 1451*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 4 // 1567 1452*c0909341SAndroid Build Coastguard Worker vldrepl.h vr21, t0, 6 // 3784 1453*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr4, vr21, vr20, vr7, vr18, \sz 1454*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1455*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr13, vr4, vr20, vr21, vr15, vr19, \sz 1456*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr7, 12 // t4a 1457*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr15, 12 // t5a 1458*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1459*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr16, vr1, vr20, vr21, vr7, vr4, \sz 1460*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1461*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr16, vr1, vr21, vr20, vr15, vr13, \sz 1462*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr7, 12 // t7a 1463*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr13, vr15, 12 // t6a 1464*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1465*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr6, vr10, vr21, vr20, vr7, vr1, \sz 1466*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1467*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr6, vr10, vr20, vr21, vr15, vr16, \sz 1468*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr7, 12 // t12 1469*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr16, vr15, 12 // t13 1470*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr21 1471*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr14, vr17, vr20, vr21, vr7, vr6, \sz 1472*c0909341SAndroid Build Coastguard Worker vneg.h vr20, vr20 1473*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr14, vr17, vr21, vr20, vr15, vr10, \sz 1474*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr7, 12 // t15 1475*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr15, 12 // t14 1476*c0909341SAndroid Build Coastguard Worker 1477*c0909341SAndroid Build Coastguard Worker vssub.h vr17, vr5, vr0 // t2a 1478*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr5, vr0 // out[0] 1479*c0909341SAndroid Build Coastguard Worker vssub.h vr7, vr3, vr8 // t3a 1480*c0909341SAndroid Build Coastguard Worker vsadd.h vr15, vr3, vr8 // out[15] 1481*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr15, 0 1482*c0909341SAndroid Build Coastguard Worker vexth.w.h vr15, vr15 1483*c0909341SAndroid Build Coastguard Worker vneg.w vr22, vr22 1484*c0909341SAndroid Build Coastguard Worker vneg.w vr15, vr15 1485*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr15, vr22, 0 // out[15] 1486*c0909341SAndroid Build Coastguard Worker 1487*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr19, vr4 // out[12] 1488*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr19, vr4 // t7 1489*c0909341SAndroid Build Coastguard Worker vssub.h vr0, vr18, vr13 // t6 1490*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr18, vr13 // out[3] 1491*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr5, 0 1492*c0909341SAndroid Build Coastguard Worker vexth.w.h vr5, vr5 1493*c0909341SAndroid Build Coastguard Worker vneg.w vr22, vr22 1494*c0909341SAndroid Build Coastguard Worker vneg.w vr5, vr5 1495*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr22, 0 // out[3] 1496*c0909341SAndroid Build Coastguard Worker 1497*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr9, vr12 // out[14] 1498*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr9, vr12 // t11 1499*c0909341SAndroid Build Coastguard Worker vssub.h vr4, vr2, vr11 // t10 1500*c0909341SAndroid Build Coastguard Worker vsadd.h vr18, vr2, vr11 // out[1] 1501*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr18, 0 1502*c0909341SAndroid Build Coastguard Worker vexth.w.h vr18, vr18 1503*c0909341SAndroid Build Coastguard Worker vneg.w vr22, vr22 1504*c0909341SAndroid Build Coastguard Worker vneg.w vr18, vr18 1505*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr18, vr22, 0 // out[1] 1506*c0909341SAndroid Build Coastguard Worker 1507*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr1, vr10 // out[2] 1508*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr1, vr10 // t14a 1509*c0909341SAndroid Build Coastguard Worker vssub.h vr12, vr16, vr6 // t15a 1510*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr16, vr6 // out[13] 1511*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr9, 0 1512*c0909341SAndroid Build Coastguard Worker vexth.w.h vr9, vr9 1513*c0909341SAndroid Build Coastguard Worker vneg.w vr22, vr22 1514*c0909341SAndroid Build Coastguard Worker vneg.w vr9, vr9 1515*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr22, 0 // out[13] 1516*c0909341SAndroid Build Coastguard Worker 1517*c0909341SAndroid Build Coastguard Worker vldrepl.h vr20, t0, 0 // 2896 1518*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr17, vr7, vr20, vr20, vr6, vr10, \sz 1519*c0909341SAndroid Build Coastguard Worker vneg.h vr21, vr20 1520*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr17, vr7, vr20, vr21, vr16, vr1, \sz 1521*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr16, 12 // out[8] 1522*c0909341SAndroid Build Coastguard Worker vsrari.w vr6, vr6, 12 1523*c0909341SAndroid Build Coastguard Worker vsrari.w vr10, vr10, 12 1524*c0909341SAndroid Build Coastguard Worker vneg.w vr6, vr6 1525*c0909341SAndroid Build Coastguard Worker vneg.w vr10, vr10 1526*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr6, 0 // out[7] 1527*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr0, vr8, vr20, vr21, vr16, vr17, \sz 1528*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr0, vr8, vr20, vr20, vr6, vr7, \sz 1529*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr6, 12 // out[4] 1530*c0909341SAndroid Build Coastguard Worker vsrari.w vr16, vr16, 12 1531*c0909341SAndroid Build Coastguard Worker vsrari.w vr17, vr17, 12 1532*c0909341SAndroid Build Coastguard Worker vneg.w vr16, vr16 1533*c0909341SAndroid Build Coastguard Worker vneg.w vr17, vr17 1534*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr17, vr16, 0 // out[11] 1535*c0909341SAndroid Build Coastguard Worker 1536*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr4, vr19, vr20, vr21, vr16, vr0, \sz 1537*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr4, vr19, vr20, vr20, vr6, vr8, \sz 1538*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr6, 12 // out[6] 1539*c0909341SAndroid Build Coastguard Worker vsrari.w vr16, vr16, 12 1540*c0909341SAndroid Build Coastguard Worker vsrari.w vr0, vr0, 12 1541*c0909341SAndroid Build Coastguard Worker vneg.w vr16, vr16 1542*c0909341SAndroid Build Coastguard Worker vneg.w vr0, vr0 1543*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr16, 0 // out[9] 1544*c0909341SAndroid Build Coastguard Worker 1545*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr11, vr12, vr20, vr20, vr6, vr4, \sz 1546*c0909341SAndroid Build Coastguard Worker vmulev_vmaddod_lsx vr11, vr12, vr20, vr21, vr16, vr19, \sz 1547*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr16, 12 // out[10] 1548*c0909341SAndroid Build Coastguard Worker vsrari.w vr6, vr6, 12 1549*c0909341SAndroid Build Coastguard Worker vsrari.w vr4, vr4, 12 1550*c0909341SAndroid Build Coastguard Worker vneg.w vr6, vr6 1551*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 1552*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr6, 0 // out[5] 1553*c0909341SAndroid Build Coastguard Worker 1554*c0909341SAndroid Build Coastguard Worker.ifc \txfm, adst 1555*c0909341SAndroid Build Coastguard Worker vor.v vr12, vr3, vr3 1556*c0909341SAndroid Build Coastguard Worker vor.v vr3, vr5, vr5 1557*c0909341SAndroid Build Coastguard Worker vor.v vr5, vr4, vr4 1558*c0909341SAndroid Build Coastguard Worker vor.v vr4, vr7, vr7 1559*c0909341SAndroid Build Coastguard Worker vor.v vr7, vr10, vr10 1560*c0909341SAndroid Build Coastguard Worker vor.v vr10, vr19, vr19 1561*c0909341SAndroid Build Coastguard Worker vor.v vr6, vr8, vr8 1562*c0909341SAndroid Build Coastguard Worker vor.v vr8, vr1, vr1 1563*c0909341SAndroid Build Coastguard Worker vor.v vr11, vr17, vr17 1564*c0909341SAndroid Build Coastguard Worker vor.v vr20, vr13, vr13 1565*c0909341SAndroid Build Coastguard Worker vor.v vr13, vr9, vr9 1566*c0909341SAndroid Build Coastguard Worker vor.v vr9, vr0, vr0 1567*c0909341SAndroid Build Coastguard Worker vor.v vr0, vr14, vr14 1568*c0909341SAndroid Build Coastguard Worker vor.v vr14, vr20, vr20 1569*c0909341SAndroid Build Coastguard Worker vor.v vr1, vr18, vr18 1570*c0909341SAndroid Build Coastguard Worker.else 1571*c0909341SAndroid Build Coastguard Worker vor.v vr6, vr0, vr0 1572*c0909341SAndroid Build Coastguard Worker vor.v vr0, vr15, vr15 1573*c0909341SAndroid Build Coastguard Worker vor.v vr15, vr14, vr14 1574*c0909341SAndroid Build Coastguard Worker vor.v vr14, vr18, vr18 1575*c0909341SAndroid Build Coastguard Worker vor.v vr11, vr7, vr7 1576*c0909341SAndroid Build Coastguard Worker vor.v vr7, vr1, vr1 1577*c0909341SAndroid Build Coastguard Worker vor.v vr1, vr13, vr13 1578*c0909341SAndroid Build Coastguard Worker vor.v vr13, vr2, vr2 1579*c0909341SAndroid Build Coastguard Worker vor.v vr2, vr9, vr9 1580*c0909341SAndroid Build Coastguard Worker vor.v vr9, vr8, vr8 1581*c0909341SAndroid Build Coastguard Worker vor.v vr8, vr10, vr10 1582*c0909341SAndroid Build Coastguard Worker vor.v vr10, vr4, vr4 1583*c0909341SAndroid Build Coastguard Worker vor.v vr4, vr17, vr17 1584*c0909341SAndroid Build Coastguard Worker vor.v vr12, vr5, vr5 1585*c0909341SAndroid Build Coastguard Worker vor.v vr5, vr19, vr19 1586*c0909341SAndroid Build Coastguard Worker.endif 1587*c0909341SAndroid Build Coastguard Worker.endm // inv_adst16_lsx 1588*c0909341SAndroid Build Coastguard Worker 1589*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_8h_x16_lsx 1590*c0909341SAndroid Build Coastguard Worker inv_adst16_lsx adst, 8h 1591*c0909341SAndroid Build Coastguard Workerendfuncl 1592*c0909341SAndroid Build Coastguard Worker 1593*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_8h_x16_lsx 1594*c0909341SAndroid Build Coastguard Worker inv_adst16_lsx flipadst, 8h 1595*c0909341SAndroid Build Coastguard Workerendfuncl 1596*c0909341SAndroid Build Coastguard Worker 1597*c0909341SAndroid Build Coastguard Workerfunctionl inv_adst_4h_x16_lsx 1598*c0909341SAndroid Build Coastguard Worker inv_adst16_lsx adst, 4h 1599*c0909341SAndroid Build Coastguard Workerendfuncl 1600*c0909341SAndroid Build Coastguard Worker 1601*c0909341SAndroid Build Coastguard Workerfunctionl inv_flipadst_4h_x16_lsx 1602*c0909341SAndroid Build Coastguard Worker inv_adst16_lsx flipadst, 4h 1603*c0909341SAndroid Build Coastguard Workerendfuncl 1604*c0909341SAndroid Build Coastguard Worker 1605*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8_x4 in0, in1, in2, in3, in4, in5, in6, in7, in8, \ 1606*c0909341SAndroid Build Coastguard Worker in9, in10, in11, in12, in13, in14, in15 1607*c0909341SAndroid Build Coastguard Worker 1608*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1609*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 \in0, \in1, \in2, \in3 1610*c0909341SAndroid Build Coastguard Worker 1611*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1612*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1613*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 \in4, \in5, \in6, \in7 1614*c0909341SAndroid Build Coastguard Worker 1615*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1616*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1617*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 \in8, \in9, \in10, \in11 1618*c0909341SAndroid Build Coastguard Worker 1619*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1620*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1621*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 \in12, \in13, \in14, \in15 1622*c0909341SAndroid Build Coastguard Worker.endm 1623*c0909341SAndroid Build Coastguard Worker 1624*c0909341SAndroid Build Coastguard Worker.macro def_base_8x16 txfm1 1625*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm1\()add_8x16_lsx 1626*c0909341SAndroid Build Coastguard Worker blt a3, t5, 816f 1627*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1628*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1629*c0909341SAndroid Build Coastguard Worker.irp i, 16, 48, 80, 112, 144, 176, 208, 240 1630*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1631*c0909341SAndroid Build Coastguard Worker.endr 1632*c0909341SAndroid Build Coastguard Worker 1633*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 1634*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 1635*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1636*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 1637*c0909341SAndroid Build Coastguard Worker.endr 1638*c0909341SAndroid Build Coastguard Worker 1639*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity_ 1640*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1641*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1642*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1643*c0909341SAndroid Build Coastguard Worker.else 1644*c0909341SAndroid Build Coastguard Worker move t6, ra 1645*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1646*c0909341SAndroid Build Coastguard Worker move ra, t6 1647*c0909341SAndroid Build Coastguard Worker 1648*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1649*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 1 1650*c0909341SAndroid Build Coastguard Worker 1651*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1652*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1653*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1654*c0909341SAndroid Build Coastguard Worker.endif 1655*c0909341SAndroid Build Coastguard Worker 1656*c0909341SAndroid Build Coastguard Worker816: 1657*c0909341SAndroid Build Coastguard Worker ble t5, a3, 816816f 1658*c0909341SAndroid Build Coastguard Worker.irp i, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1659*c0909341SAndroid Build Coastguard Worker vxor.v \i, \i, \i 1660*c0909341SAndroid Build Coastguard Worker.endr 1661*c0909341SAndroid Build Coastguard Worker 1662*c0909341SAndroid Build Coastguard Worker816816: 1663*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1664*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1665*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224 1666*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1667*c0909341SAndroid Build Coastguard Worker.endr 1668*c0909341SAndroid Build Coastguard Worker 1669*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 1670*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 1671*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1672*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 1673*c0909341SAndroid Build Coastguard Worker.endr 1674*c0909341SAndroid Build Coastguard Worker 1675*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity_ 1676*c0909341SAndroid Build Coastguard Worker 1677*c0909341SAndroid Build Coastguard Worker.else 1678*c0909341SAndroid Build Coastguard Worker move t6, ra 1679*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1680*c0909341SAndroid Build Coastguard Worker move ra, t6 1681*c0909341SAndroid Build Coastguard Worker 1682*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1683*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 1 1684*c0909341SAndroid Build Coastguard Worker.endr 1685*c0909341SAndroid Build Coastguard Worker.endif 1686*c0909341SAndroid Build Coastguard Worker 1687*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1688*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1689*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1690*c0909341SAndroid Build Coastguard Worker 1691*c0909341SAndroid Build Coastguard Worker move t6, ra 1692*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 1693*c0909341SAndroid Build Coastguard Worker move ra, t6 1694*c0909341SAndroid Build Coastguard Worker 1695*c0909341SAndroid Build Coastguard Worker vor.v vr0, vr0, vr0 1696*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1697*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, 4 1698*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1699*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 4 1700*c0909341SAndroid Build Coastguard Worker 1701*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8_x4 vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1702*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1703*c0909341SAndroid Build Coastguard Workerendfuncl 1704*c0909341SAndroid Build Coastguard Worker.endm 1705*c0909341SAndroid Build Coastguard Worker 1706*c0909341SAndroid Build Coastguard Workerdef_base_8x16 identity_ 1707*c0909341SAndroid Build Coastguard Workerdef_base_8x16 1708*c0909341SAndroid Build Coastguard Worker 1709*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W16 in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11 1710*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr4, \in0, 0 1711*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr0, \in0 1712*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr5, \in1, 0 1713*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr1, \in1 1714*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr6, \in2, 0 1715*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr2, \in2 1716*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr7, \in3, 0 1717*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr3, \in3 1718*c0909341SAndroid Build Coastguard Worker vadd.h vr4, vr4, \in4 1719*c0909341SAndroid Build Coastguard Worker vadd.h vr0, vr0, \in5 1720*c0909341SAndroid Build Coastguard Worker vadd.h vr5, vr5, \in6 1721*c0909341SAndroid Build Coastguard Worker vadd.h vr1, vr1, \in7 1722*c0909341SAndroid Build Coastguard Worker vadd.h vr6, vr6, \in8 1723*c0909341SAndroid Build Coastguard Worker vadd.h vr2, vr2, \in9 1724*c0909341SAndroid Build Coastguard Worker vadd.h vr7, vr7, \in10 1725*c0909341SAndroid Build Coastguard Worker vadd.h vr3, vr3, \in11 1726*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr0, vr4, 0 1727*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr1, vr5, 0 1728*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr2, vr6, 0 1729*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr3, vr7, 0 1730*c0909341SAndroid Build Coastguard Worker vst vr0, a0, 0 1731*c0909341SAndroid Build Coastguard Worker vstx vr1, a0, a1 1732*c0909341SAndroid Build Coastguard Worker vst vr2, t2, 0 1733*c0909341SAndroid Build Coastguard Worker vstx vr3, t2, a1 1734*c0909341SAndroid Build Coastguard Worker.endm 1735*c0909341SAndroid Build Coastguard Worker 1736*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W16 in0, in1, in2, in3, in4, in5, in6, in7 1737*c0909341SAndroid Build Coastguard Worker vld vr0, a0, 0 1738*c0909341SAndroid Build Coastguard Worker vldx vr1, a0, a1 1739*c0909341SAndroid Build Coastguard Worker vld vr2, t2, 0 1740*c0909341SAndroid Build Coastguard Worker vldx vr3, t2, a1 1741*c0909341SAndroid Build Coastguard Worker DST_ADD_W16 vr0, vr1, vr2, vr3, \in0, \in1, \in2, \in3, \ 1742*c0909341SAndroid Build Coastguard Worker \in4, \in5, \in6, \in7 1743*c0909341SAndroid Build Coastguard Worker.endm 1744*c0909341SAndroid Build Coastguard Worker 1745*c0909341SAndroid Build Coastguard Worker.macro def_fn_16x8 txfm1 1746*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm1\()add_16x8_lsx 1747*c0909341SAndroid Build Coastguard Worker PUSH_REG 1748*c0909341SAndroid Build Coastguard Worker 1749*c0909341SAndroid Build Coastguard Worker vld_x16 a2, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1750*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1751*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1752*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, \ 1753*c0909341SAndroid Build Coastguard Worker 176, 192, 208, 224, 240 1754*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1755*c0909341SAndroid Build Coastguard Worker.endr 1756*c0909341SAndroid Build Coastguard Worker 1757*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 1758*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 1759*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1760*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1761*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 1762*c0909341SAndroid Build Coastguard Worker.endr 1763*c0909341SAndroid Build Coastguard Worker 1764*c0909341SAndroid Build Coastguard Worker move t6, ra 1765*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1766*c0909341SAndroid Build Coastguard Worker move ra, t6 1767*c0909341SAndroid Build Coastguard Worker 1768*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity_ 1769*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1770*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1771*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 1 1772*c0909341SAndroid Build Coastguard Worker.endr 1773*c0909341SAndroid Build Coastguard Worker.endif 1774*c0909341SAndroid Build Coastguard Worker 1775*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1776*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1777*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1778*c0909341SAndroid Build Coastguard Worker 1779*c0909341SAndroid Build Coastguard Worker move t6, ra 1780*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 1781*c0909341SAndroid Build Coastguard Worker move ra, t6 1782*c0909341SAndroid Build Coastguard Worker 1783*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1784*c0909341SAndroid Build Coastguard Worker vr24, vr25, vr26, vr27, vr28, vr29, vr30, vr31, 4 1785*c0909341SAndroid Build Coastguard Worker 1786*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1787*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1788*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1789*c0909341SAndroid Build Coastguard Worker move t6, ra 1790*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 1791*c0909341SAndroid Build Coastguard Worker move ra, t6 1792*c0909341SAndroid Build Coastguard Worker 1793*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1794*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, 4 1795*c0909341SAndroid Build Coastguard Worker 1796*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1797*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr24, vr8, vr25, vr9, vr26, vr10, vr27, vr11 1798*c0909341SAndroid Build Coastguard Worker 1799*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 1800*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1801*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr28, vr12, vr29, vr13, vr30, vr14, vr31, vr15 1802*c0909341SAndroid Build Coastguard Worker 1803*c0909341SAndroid Build Coastguard Worker POP_REG 1804*c0909341SAndroid Build Coastguard Workerendfuncl 1805*c0909341SAndroid Build Coastguard Worker.endm 1806*c0909341SAndroid Build Coastguard Worker 1807*c0909341SAndroid Build Coastguard Workerdef_fn_16x8 identity_ 1808*c0909341SAndroid Build Coastguard Workerdef_fn_16x8 1809*c0909341SAndroid Build Coastguard Worker 1810*c0909341SAndroid Build Coastguard Worker.macro fun16x8 txfm1, txfm2 1811*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x8_8bpc_lsx 1812*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 1813*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_16x8 1814*c0909341SAndroid Build Coastguard Worker 1815*c0909341SAndroid Build Coastguard Worker idct_dc 16, 8, 1 1816*c0909341SAndroid Build Coastguard Worker 1817*c0909341SAndroid Build Coastguard Worker DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \ 1818*c0909341SAndroid Build Coastguard Worker vr20, vr20, vr20, vr20, vr20 1819*c0909341SAndroid Build Coastguard Worker 1820*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 1821*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1822*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20, 1823*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_16x8_END 1824*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x8: 1825*c0909341SAndroid Build Coastguard Worker.endif 1826*c0909341SAndroid Build Coastguard Worker 1827*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x16_lsx 1828*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 1829*c0909341SAndroid Build Coastguard Worker la.local t7, inv_identity_8h_x16_lsx1 1830*c0909341SAndroid Build Coastguard Worker.endif 1831*c0909341SAndroid Build Coastguard Worker 1832*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x8_lsx 1833*c0909341SAndroid Build Coastguard Worker 1834*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 1835*c0909341SAndroid Build Coastguard Worker b inv_txfm_identity_add_16x8_lsx 1836*c0909341SAndroid Build Coastguard Worker.else 1837*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_16x8_lsx 1838*c0909341SAndroid Build Coastguard Worker.endif 1839*c0909341SAndroid Build Coastguard Worker 1840*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x8_END: 1841*c0909341SAndroid Build Coastguard Workerendfunc 1842*c0909341SAndroid Build Coastguard Worker.endm 1843*c0909341SAndroid Build Coastguard Worker 1844*c0909341SAndroid Build Coastguard Workerfun16x8 dct, dct 1845*c0909341SAndroid Build Coastguard Workerfun16x8 identity, identity 1846*c0909341SAndroid Build Coastguard Workerfun16x8 dct, adst 1847*c0909341SAndroid Build Coastguard Workerfun16x8 dct, flipadst 1848*c0909341SAndroid Build Coastguard Workerfun16x8 dct, identity 1849*c0909341SAndroid Build Coastguard Workerfun16x8 adst, dct 1850*c0909341SAndroid Build Coastguard Workerfun16x8 adst, adst 1851*c0909341SAndroid Build Coastguard Workerfun16x8 adst, flipadst 1852*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, dct 1853*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, adst 1854*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, flipadst 1855*c0909341SAndroid Build Coastguard Workerfun16x8 identity, dct 1856*c0909341SAndroid Build Coastguard Workerfun16x8 adst, identity 1857*c0909341SAndroid Build Coastguard Workerfun16x8 flipadst, identity 1858*c0909341SAndroid Build Coastguard Workerfun16x8 identity, adst 1859*c0909341SAndroid Build Coastguard Workerfun16x8 identity, flipadst 1860*c0909341SAndroid Build Coastguard Worker 1861*c0909341SAndroid Build Coastguard Worker.macro fun8x16 txfm1, txfm2, eob_half 1862*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_8x16_8bpc_lsx 1863*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 1864*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_8x16 1865*c0909341SAndroid Build Coastguard Worker 1866*c0909341SAndroid Build Coastguard Worker idct_dc 8, 16, 1 1867*c0909341SAndroid Build Coastguard Worker 1868*c0909341SAndroid Build Coastguard Worker DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20 1869*c0909341SAndroid Build Coastguard Worker.rept 3 1870*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 1871*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1872*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr20, vr20, vr20, vr20 1873*c0909341SAndroid Build Coastguard Worker.endr 1874*c0909341SAndroid Build Coastguard Worker 1875*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_8x16_END 1876*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x16: 1877*c0909341SAndroid Build Coastguard Worker.endif 1878*c0909341SAndroid Build Coastguard Worker li.w t5, \eob_half 1879*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity 1880*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x8_lsx 1881*c0909341SAndroid Build Coastguard Worker.endif 1882*c0909341SAndroid Build Coastguard Worker 1883*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x16_lsx 1884*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 1885*c0909341SAndroid Build Coastguard Worker b inv_txfm_identity_add_8x16_lsx 1886*c0909341SAndroid Build Coastguard Worker.else 1887*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_8x16_lsx 1888*c0909341SAndroid Build Coastguard Worker.endif 1889*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_8x16_END: 1890*c0909341SAndroid Build Coastguard Workerendfunc 1891*c0909341SAndroid Build Coastguard Worker.endm 1892*c0909341SAndroid Build Coastguard Worker 1893*c0909341SAndroid Build Coastguard Workerfun8x16 dct, dct, 43 1894*c0909341SAndroid Build Coastguard Workerfun8x16 identity, identity, 43 1895*c0909341SAndroid Build Coastguard Workerfun8x16 dct, adst, 43 1896*c0909341SAndroid Build Coastguard Workerfun8x16 dct, flipadst, 43 1897*c0909341SAndroid Build Coastguard Workerfun8x16 dct, identity, 8 1898*c0909341SAndroid Build Coastguard Workerfun8x16 adst, dct, 43 1899*c0909341SAndroid Build Coastguard Workerfun8x16 adst, adst, 43 1900*c0909341SAndroid Build Coastguard Workerfun8x16 adst, flipadst, 43 1901*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, dct, 43 1902*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, adst, 43 1903*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, flipadst, 43 1904*c0909341SAndroid Build Coastguard Workerfun8x16 identity, dct, 64 1905*c0909341SAndroid Build Coastguard Workerfun8x16 adst, identity, 8 1906*c0909341SAndroid Build Coastguard Workerfun8x16 flipadst, identity, 8 1907*c0909341SAndroid Build Coastguard Workerfun8x16 identity, adst, 64 1908*c0909341SAndroid Build Coastguard Workerfun8x16 identity, flipadst, 64 1909*c0909341SAndroid Build Coastguard Worker 1910*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_add_16x16_lsx 1911*c0909341SAndroid Build Coastguard Worker malloc_space 512 1912*c0909341SAndroid Build Coastguard Worker 1913*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 1914*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 1915*c0909341SAndroid Build Coastguard Worker.rept 2 1916*c0909341SAndroid Build Coastguard Worker vld_x16 a2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1917*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1918*c0909341SAndroid Build Coastguard Worker 1919*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1920*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, \ 1921*c0909341SAndroid Build Coastguard Worker 384, 416, 448, 480 1922*c0909341SAndroid Build Coastguard Worker vst vr23, a2, \i 1923*c0909341SAndroid Build Coastguard Worker.endr 1924*c0909341SAndroid Build Coastguard Worker 1925*c0909341SAndroid Build Coastguard Worker move t6, ra 1926*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 1927*c0909341SAndroid Build Coastguard Worker move ra, t6 1928*c0909341SAndroid Build Coastguard Worker 1929*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1930*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1931*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1932*c0909341SAndroid Build Coastguard Worker 1933*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1934*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 1935*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1936*c0909341SAndroid Build Coastguard Worker 1937*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1938*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1939*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 2 1940*c0909341SAndroid Build Coastguard Worker.endr 1941*c0909341SAndroid Build Coastguard Worker vst_x8 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 1942*c0909341SAndroid Build Coastguard Worker vst_x8 t1, 16, 32, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1943*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 256 1944*c0909341SAndroid Build Coastguard Worker addi.d a2, a2, 16 1945*c0909341SAndroid Build Coastguard Worker blt a3, t5, 1616f 1946*c0909341SAndroid Build Coastguard Worker.endr 1947*c0909341SAndroid Build Coastguard Worker 1948*c0909341SAndroid Build Coastguard Worker1616: 1949*c0909341SAndroid Build Coastguard Worker ble t5, a3, 16161616f 1950*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 320 1951*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 1952*c0909341SAndroid Build Coastguard Worker.irp i, 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, \ 1953*c0909341SAndroid Build Coastguard Worker 240 1954*c0909341SAndroid Build Coastguard Worker vst vr23, t1, \i 1955*c0909341SAndroid Build Coastguard Worker.endr 1956*c0909341SAndroid Build Coastguard Worker 1957*c0909341SAndroid Build Coastguard Worker16161616: 1958*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 1959*c0909341SAndroid Build Coastguard Worker.rept 2 1960*c0909341SAndroid Build Coastguard Worker vld_x16 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1961*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1962*c0909341SAndroid Build Coastguard Worker 1963*c0909341SAndroid Build Coastguard Worker move t6, ra 1964*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 1965*c0909341SAndroid Build Coastguard Worker move ra, t6 1966*c0909341SAndroid Build Coastguard Worker 1967*c0909341SAndroid Build Coastguard Worker vst_x16 t1, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 1968*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 1969*c0909341SAndroid Build Coastguard Worker 1970*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 1971*c0909341SAndroid Build Coastguard Worker.endr 1972*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1973*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 1974*c0909341SAndroid Build Coastguard Worker.rept 4 1975*c0909341SAndroid Build Coastguard Worker vld_x8 t1, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1976*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, \ 1977*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4 1978*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 1979*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 1980*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1981*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 128 1982*c0909341SAndroid Build Coastguard Worker.endr 1983*c0909341SAndroid Build Coastguard Worker free_space 512 1984*c0909341SAndroid Build Coastguard Workerendfuncl 1985*c0909341SAndroid Build Coastguard Worker 1986*c0909341SAndroid Build Coastguard Worker.macro fun16x16 txfm1, txfm2, eob_half 1987*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x16_8bpc_lsx 1988*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 1989*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_16x16 1990*c0909341SAndroid Build Coastguard Worker 1991*c0909341SAndroid Build Coastguard Worker idct_dc 16, 16, 2 1992*c0909341SAndroid Build Coastguard Worker 1993*c0909341SAndroid Build Coastguard Worker DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \ 1994*c0909341SAndroid Build Coastguard Worker vr20, vr20, vr20, vr20, vr20 1995*c0909341SAndroid Build Coastguard Worker.rept 3 1996*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 1997*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 1998*c0909341SAndroid Build Coastguard Worker 1999*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2000*c0909341SAndroid Build Coastguard Worker.endr 2001*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_16x16_END 2002*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x16: 2003*c0909341SAndroid Build Coastguard Worker.endif 2004*c0909341SAndroid Build Coastguard Worker li.w t5, \eob_half 2005*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_8h_x16_lsx 2006*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x16_lsx 2007*c0909341SAndroid Build Coastguard Worker 2008*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_16x16_lsx 2009*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x16_END: 2010*c0909341SAndroid Build Coastguard Workerendfunc 2011*c0909341SAndroid Build Coastguard Worker.endm 2012*c0909341SAndroid Build Coastguard Worker 2013*c0909341SAndroid Build Coastguard Workerfun16x16 dct, dct, 36 2014*c0909341SAndroid Build Coastguard Workerfun16x16 adst, adst, 36 2015*c0909341SAndroid Build Coastguard Workerfun16x16 adst, dct, 36 2016*c0909341SAndroid Build Coastguard Workerfun16x16 dct, adst, 36 2017*c0909341SAndroid Build Coastguard Workerfun16x16 flipadst, dct, 36 2018*c0909341SAndroid Build Coastguard Workerfun16x16 dct, flipadst, 36 2019*c0909341SAndroid Build Coastguard Workerfun16x16 adst, flipadst, 36 2020*c0909341SAndroid Build Coastguard Workerfun16x16 flipadst, adst, 36 2021*c0909341SAndroid Build Coastguard Worker 2022*c0909341SAndroid Build Coastguard Worker.macro dct_8x32_core_lsx in1, in2, vld_st0, vld_st1, vld_stride, \ 2023*c0909341SAndroid Build Coastguard Worker vst_st0, vst_st1, vst_st2, vst_st3, vst_stride, \ 2024*c0909341SAndroid Build Coastguard Worker transpose8x8, shift 2025*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 2026*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 64 // 201 2027*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 68 // 4091 2028*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr0, vr30, vr21, vr20, vr8, vr9 2029*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr0, vr30, vr20, vr21, vr11, vr10 2030*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr8, 12 // t31a 2031*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr11, 12 // t16a 2032*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 72 // 3035 2033*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 76 // 2751 2034*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr19, vr7, vr21, vr20, vr8, vr0 2035*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr19, vr7, vr20, vr21, vr11, vr30 2036*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr8, 12 // t30a 2037*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr11, 12 // t17a 2038*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 80 // 1751 2039*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 84 // 3703 2040*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr4, vr26, vr21, vr20, vr8, vr7 2041*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr4, vr26, vr20, vr21, vr11, vr19 2042*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr8, 12 // t29a 2043*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr11, 12 // t18a 2044*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 88 // 3857 2045*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 92 // 1380 2046*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr27, vr3, vr21, vr20, vr8, vr4 2047*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr27, vr3, vr20, vr21, vr11, vr26 2048*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr8, 12 // t28a 2049*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr26, vr11, 12 // t19a 2050*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 96 // 995 2051*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 100 // 3973 2052*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr2, vr28, vr21, vr20, vr8, vr3 2053*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr2, vr28, vr20, vr21, vr11, vr27 2054*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr3, vr8, 12 // t27a 2055*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr27, vr11, 12 // t20a 2056*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 104 // 3513 2057*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 108 // 2106 2058*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr25, vr5, vr21, vr20, vr8, vr2 2059*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr25, vr5, vr20, vr21, vr11, vr28 2060*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr8, 12 // t26a 2061*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr28, vr11, 12 // t21a 2062*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 112 // 2440 -> 1220 2063*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 116 // 3290 -> 1645 2064*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr24, vr21, vr20, vr8, vr5 2065*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr24, vr20, vr21, vr11, vr25 2066*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr8, 12 // t25a 2067*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr11, 12 // t22a 2068*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 120 // 4052 2069*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 124 // 601 2070*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr29, vr1, vr21, vr20, vr8, vr6 2071*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr29, vr1, vr20, vr21, vr11, vr24 2072*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr8, 12 // t24a 2073*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr11, 12 // t23a 2074*c0909341SAndroid Build Coastguard Worker 2075*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr10, vr30 // t16 2076*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr10, vr30 // t17 2077*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr26, vr19 // t18 2078*c0909341SAndroid Build Coastguard Worker vsadd.h vr31, vr26, vr19 // t19 2079*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr27, vr28 // t20 2080*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr27, vr28 // t21 2081*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr24, vr25 // t22 2082*c0909341SAndroid Build Coastguard Worker vsadd.h vr26, vr24, vr25 // t23 2083*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr6, vr5 // t24 2084*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr6, vr5 // t25 2085*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr3, vr2 // t26 2086*c0909341SAndroid Build Coastguard Worker vsadd.h vr25, vr3, vr2 // t27 2087*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr4, vr7 // t28 2088*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr4, vr7 // t29 2089*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr9, vr0 // t30 2090*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr9, vr0 // t31 2091*c0909341SAndroid Build Coastguard Worker 2092*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 16 // 799 2093*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 20 // 4017 2094*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr2, vr29, vr21, vr20, vr4, vr7 2095*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr2, vr29, vr20, vr21, vr11, vr0 2096*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr4, 12 // t30a 2097*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr11, 12 // t17a 2098*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr8, vr21, vr20, vr4, vr9 2099*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 2100*c0909341SAndroid Build Coastguard Worker vneg.w vr9, vr9 2101*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr8, vr20, vr21, vr11, vr2 2102*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr4, 12 // t18a 2103*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr11, 12 // t29a 2104*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 24 // 3406 -> 1703 2105*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 28 // 2276 -> 1138 2106*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr30, vr21, vr20, vr4, vr29 2107*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr30, vr20, vr21, vr11, vr6 2108*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr29, vr4, 12 // t26a 2109*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr11, 12 // t21a 2110*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr28, vr19, vr21, vr20, vr4, vr8 2111*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 2112*c0909341SAndroid Build Coastguard Worker vneg.w vr8, vr8 2113*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr28, vr19, vr20, vr21, vr11, vr24 2114*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr4, 12 // t22a 2115*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr11, 12 // t25a 2116*c0909341SAndroid Build Coastguard Worker 2117*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr1, vr31 // t16a 2118*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr1, vr31 // t19a 2119*c0909341SAndroid Build Coastguard Worker vsadd.h vr19, vr0, vr9 // t17 2120*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr0, vr9 // t18 2121*c0909341SAndroid Build Coastguard Worker vssub.h vr1, vr26, vr10 // t20a 2122*c0909341SAndroid Build Coastguard Worker vsadd.h vr31, vr26, vr10 // t23a 2123*c0909341SAndroid Build Coastguard Worker vssub.h vr0, vr8, vr6 // t21 2124*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr8, vr6 // t22 2125*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr27, vr25 // t24a 2126*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr27, vr25 // t27a 2127*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr24, vr29 // t25 2128*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr24, vr29 // t26 2129*c0909341SAndroid Build Coastguard Worker vssub.h vr25, vr3, vr5 // t28a 2130*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr3, vr5 // t31a 2131*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr7, vr2 // t29 2132*c0909341SAndroid Build Coastguard Worker vsadd.h vr29, vr7, vr2 // t30 2133*c0909341SAndroid Build Coastguard Worker 2134*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 1567 2135*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // 3784 2136*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr28, vr21, vr20, vr3, vr5 2137*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr28, vr20, vr21, vr11, vr2 2138*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr3, 12 // t29a 2139*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr11, 12 // 18a 2140*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr25, vr30, vr21, vr20, vr3, vr7 2141*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr25, vr30, vr20, vr21, vr11, vr24 2142*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr3, 12 // t28 2143*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr11, 12 // t19 2144*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr26, vr1, vr21, vr20, vr3, vr28 2145*c0909341SAndroid Build Coastguard Worker vneg.w vr3, vr3 2146*c0909341SAndroid Build Coastguard Worker vneg.w vr28, vr28 2147*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr26, vr1, vr20, vr21, vr11, vr25 2148*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr28, vr3, 12 // t20 2149*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr11, 12 // t27 2150*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr8, vr0, vr21, vr20, vr3, vr30 2151*c0909341SAndroid Build Coastguard Worker vneg.w vr3, vr3 2152*c0909341SAndroid Build Coastguard Worker vneg.w vr30, vr30 2153*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr8, vr0, vr20, vr21, vr11, vr1 2154*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr3, 12 // t21a 2155*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr11, 12 // t26a 2156*c0909341SAndroid Build Coastguard Worker 2157*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr4, vr31 // t16 2158*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr4, vr31 // t23 2159*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr19, vr9 // t17a 2160*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr19, vr9 // t22a 2161*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr2, vr30 // t18 2162*c0909341SAndroid Build Coastguard Worker vssub.h vr31, vr2, vr30 // t21 2163*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr24, vr28 // t19a 2164*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr24, vr28 // t20a 2165*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr27, vr10 // t24 2166*c0909341SAndroid Build Coastguard Worker vsadd.h vr30, vr27, vr10 // t31 2167*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr29, vr6 // t25a 2168*c0909341SAndroid Build Coastguard Worker vsadd.h vr28, vr29, vr6 // t30a 2169*c0909341SAndroid Build Coastguard Worker vssub.h vr10, vr5, vr1 // t26 2170*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr5, vr1 // t29 2171*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr7, vr25 // t27a 2172*c0909341SAndroid Build Coastguard Worker vsadd.h vr29, vr7, vr25 // t28a 2173*c0909341SAndroid Build Coastguard Worker 2174*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 2175*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr19, vr20, vr20, vr1, vr5 2176*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr19, vr20, vr20, vr11, vr7 2177*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr1, 12 // t20 2178*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr11, 12 // t27 2179*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr10, vr31, vr20, vr20, vr1, vr25 2180*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr10, vr31, vr20, vr20, vr11, vr6 2181*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr1, 12 // t21a 2182*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr11, 12 // t26a 2183*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr8, vr20, vr20, vr1, vr19 2184*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr8, vr20, vr20, vr11, vr10 2185*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr1, 12 // t22 2186*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr11, 12 // t25 2187*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr2, vr26, vr20, vr20, vr1, vr31 2188*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr2, vr26, vr20, vr20, vr11, vr8 2189*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr31, vr1, 12 // t23a 2190*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr11, 12 // t24a 2191*c0909341SAndroid Build Coastguard Worker 2192*c0909341SAndroid Build Coastguard Worker // t31 t30a t29 t28a t27 t26a t25 t24a t23a t22 t21a t20 t19a t18 t17a t16 2193*c0909341SAndroid Build Coastguard Worker // vr30 vr28 vr27 vr29 vr7 vr6 vr10 vr8 vr31 vr19 vr25 vr5 vr9 vr4 vr0 vr3 2194*c0909341SAndroid Build Coastguard Worker vld_x8 \in2, \vld_st0, \vld_stride, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18 2195*c0909341SAndroid Build Coastguard Worker 2196*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr11, vr30 // c[0] 2197*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr11, vr30 // c[31] 2198*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr12, vr28 // c[1] 2199*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr12, vr28 // c[30] 2200*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr13, vr27 // c[2] 2201*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr13, vr27 // c[29] 2202*c0909341SAndroid Build Coastguard Worker vsadd.h vr12, vr14, vr29 // c[3] 2203*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr14, vr29 // c[28] 2204*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr15, vr7 // c[4] 2205*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr15, vr7 // c[27] 2206*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr16, vr6 // c[5] 2207*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr16, vr6 // c[26] 2208*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr17, vr10 // c[6] 2209*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr17, vr10 // c[25] 2210*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr18, vr8 // c[7] 2211*c0909341SAndroid Build Coastguard Worker vssub.h vr16, vr18, vr8 // c[24] 2212*c0909341SAndroid Build Coastguard Worker 2213*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8 2214*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \ 2215*c0909341SAndroid Build Coastguard Worker vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \ 2216*c0909341SAndroid Build Coastguard Worker vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23 2217*c0909341SAndroid Build Coastguard Worker.endif 2218*c0909341SAndroid Build Coastguard Worker 2219*c0909341SAndroid Build Coastguard Worker.ifnb \shift 2220*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 2221*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, \shift 2222*c0909341SAndroid Build Coastguard Worker.endr 2223*c0909341SAndroid Build Coastguard Worker.endif 2224*c0909341SAndroid Build Coastguard Worker 2225*c0909341SAndroid Build Coastguard Worker vst_x8 \in1, \vst_st0, \vst_stride, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 2226*c0909341SAndroid Build Coastguard Worker 2227*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8 2228*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \ 2229*c0909341SAndroid Build Coastguard Worker vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \ 2230*c0909341SAndroid Build Coastguard Worker vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23 2231*c0909341SAndroid Build Coastguard Worker.endif 2232*c0909341SAndroid Build Coastguard Worker 2233*c0909341SAndroid Build Coastguard Worker.ifnb \shift 2234*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 2235*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, \shift 2236*c0909341SAndroid Build Coastguard Worker.endr 2237*c0909341SAndroid Build Coastguard Worker.endif 2238*c0909341SAndroid Build Coastguard Worker 2239*c0909341SAndroid Build Coastguard Worker vst_x8 \in1, \vst_st1, \vst_stride, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 2240*c0909341SAndroid Build Coastguard Worker 2241*c0909341SAndroid Build Coastguard Worker vld_x8 \in2, \vld_st1, \vld_stride, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18 2242*c0909341SAndroid Build Coastguard Worker 2243*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr11, vr31 // c[8] 2244*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr11, vr31 // c[23] 2245*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr12, vr19 // c[9] 2246*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr12, vr19 // c[22] 2247*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr13, vr25 // c[10] 2248*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr13, vr25 // c[21] 2249*c0909341SAndroid Build Coastguard Worker vsadd.h vr12, vr14, vr5 // c[11] 2250*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr14, vr5 // c[20] 2251*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr15, vr9 // c[12] 2252*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr15, vr9 // c[19] 2253*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr16, vr4 // c[13] 2254*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr16, vr4 // c[18] 2255*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr17, vr0 // c[14] 2256*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr17, vr0 // c[17] 2257*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr18, vr3 // c[15] 2258*c0909341SAndroid Build Coastguard Worker vssub.h vr16, vr18, vr3 // c[16] 2259*c0909341SAndroid Build Coastguard Worker 2260*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8 2261*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \ 2262*c0909341SAndroid Build Coastguard Worker vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6, \ 2263*c0909341SAndroid Build Coastguard Worker vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23 2264*c0909341SAndroid Build Coastguard Worker.endif 2265*c0909341SAndroid Build Coastguard Worker 2266*c0909341SAndroid Build Coastguard Worker.ifnb \shift 2267*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 2268*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, \shift 2269*c0909341SAndroid Build Coastguard Worker.endr 2270*c0909341SAndroid Build Coastguard Worker.endif 2271*c0909341SAndroid Build Coastguard Worker 2272*c0909341SAndroid Build Coastguard Worker vst_x8 \in1, \vst_st2, \vst_stride, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 2273*c0909341SAndroid Build Coastguard Worker 2274*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8 2275*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \ 2276*c0909341SAndroid Build Coastguard Worker vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2, \ 2277*c0909341SAndroid Build Coastguard Worker vr8, vr10, vr17, vr18, vr20, vr21, vr22, vr23 2278*c0909341SAndroid Build Coastguard Worker.endif 2279*c0909341SAndroid Build Coastguard Worker 2280*c0909341SAndroid Build Coastguard Worker.ifnb \shift 2281*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 2282*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, \shift 2283*c0909341SAndroid Build Coastguard Worker.endr 2284*c0909341SAndroid Build Coastguard Worker.endif 2285*c0909341SAndroid Build Coastguard Worker 2286*c0909341SAndroid Build Coastguard Worker vst_x8 \in1, \vst_st3, \vst_stride, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 2287*c0909341SAndroid Build Coastguard Worker.endm 2288*c0909341SAndroid Build Coastguard Worker 2289*c0909341SAndroid Build Coastguard Workerconst eob_32x32 2290*c0909341SAndroid Build Coastguard Worker .short 36, 136, 300, 1024 2291*c0909341SAndroid Build Coastguard Workerendconst 2292*c0909341SAndroid Build Coastguard Worker 2293*c0909341SAndroid Build Coastguard Workerconst eob_8x32 2294*c0909341SAndroid Build Coastguard Worker .short 43, 107, 171, 256 2295*c0909341SAndroid Build Coastguard Workerendconst 2296*c0909341SAndroid Build Coastguard Worker 2297*c0909341SAndroid Build Coastguard Workerconst eob_16x32 2298*c0909341SAndroid Build Coastguard Worker .short 36, 151, 279, 512 2299*c0909341SAndroid Build Coastguard Workerendconst 2300*c0909341SAndroid Build Coastguard Worker 2301*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W32 in0, in1, in2, in3, in4, in5, in6, in7 2302*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr4, vr10, 0 2303*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr5, vr11, 0 2304*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr6, vr12, 0 2305*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr7, vr13, 0 2306*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr10, vr10 2307*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr11, vr11 2308*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr12, vr12 2309*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr13, vr13 2310*c0909341SAndroid Build Coastguard Worker vadd.h vr4, vr4, \in0 2311*c0909341SAndroid Build Coastguard Worker vadd.h vr10, vr10, \in1 2312*c0909341SAndroid Build Coastguard Worker vadd.h vr5, vr5, \in2 2313*c0909341SAndroid Build Coastguard Worker vadd.h vr11, vr11, \in3 2314*c0909341SAndroid Build Coastguard Worker vadd.h vr6, vr6, \in4 2315*c0909341SAndroid Build Coastguard Worker vadd.h vr12, vr12, \in5 2316*c0909341SAndroid Build Coastguard Worker vadd.h vr7, vr7, \in6 2317*c0909341SAndroid Build Coastguard Worker vadd.h vr13, vr13, \in7 2318*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr10, vr4, 0 2319*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr11, vr5, 0 2320*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr12, vr6, 0 2321*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr13, vr7, 0 2322*c0909341SAndroid Build Coastguard Worker vst vr10, a0, 0 2323*c0909341SAndroid Build Coastguard Worker vst vr11, a0, 16 2324*c0909341SAndroid Build Coastguard Worker vst vr12, t2, 0 2325*c0909341SAndroid Build Coastguard Worker vst vr13, t2, 16 2326*c0909341SAndroid Build Coastguard Worker.endm 2327*c0909341SAndroid Build Coastguard Worker 2328*c0909341SAndroid Build Coastguard Worker.macro idct_dc_w32 w, h, shift 2329*c0909341SAndroid Build Coastguard Worker ld.h t2, a2, 0 // dc 2330*c0909341SAndroid Build Coastguard Worker vldi vr0, 0x8b5 // 181 2331*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr1, t2 2332*c0909341SAndroid Build Coastguard Worker vldi vr20, 0x880 // 128 2333*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr0, vr1 // dc * 181 2334*c0909341SAndroid Build Coastguard Worker st.h zero, a2, 0 2335*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2336*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 // (dc * 181 + 128) >> 8 2337*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2338*c0909341SAndroid Build Coastguard Worker 2339*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w) 2340*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr2, vr0 2341*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 2342*c0909341SAndroid Build Coastguard Worker.endif 2343*c0909341SAndroid Build Coastguard Worker 2344*c0909341SAndroid Build Coastguard Worker.if \shift>0 2345*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, \shift // (dc + rnd) >> shift 2346*c0909341SAndroid Build Coastguard Worker.endif 2347*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2348*c0909341SAndroid Build Coastguard Worker vmadd.w vr20, vr2, vr0 2349*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2350*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr20, vr20, 12 2351*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2352*c0909341SAndroid Build Coastguard Worker.endm 2353*c0909341SAndroid Build Coastguard Worker 2354*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x8_8bpc_lsx 2355*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_32x8 2356*c0909341SAndroid Build Coastguard Worker 2357*c0909341SAndroid Build Coastguard Worker idct_dc_w32 32, 8, 2 2358*c0909341SAndroid Build Coastguard Worker 2359*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2360*c0909341SAndroid Build Coastguard Worker 2361*c0909341SAndroid Build Coastguard Worker.rept 3 2362*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2363*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2364*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2365*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2366*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2367*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2368*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2369*c0909341SAndroid Build Coastguard Worker.endr 2370*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_32X8_END 2371*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x8: 2372*c0909341SAndroid Build Coastguard Worker malloc_space 512+256 2373*c0909341SAndroid Build Coastguard Worker 2374*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 2375*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 2376*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 2377*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 512 2378*c0909341SAndroid Build Coastguard Worker 2379*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2380*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2381*c0909341SAndroid Build Coastguard Worker 2382*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2383*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 0, 32, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2384*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2385*c0909341SAndroid Build Coastguard Worker 2386*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 2387*c0909341SAndroid Build Coastguard Worker 2388*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2389*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2390*c0909341SAndroid Build Coastguard Worker 2391*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2392*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2393*c0909341SAndroid Build Coastguard Worker 2394*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2395*c0909341SAndroid Build Coastguard Worker 2396*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 16, 32, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2397*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2398*c0909341SAndroid Build Coastguard Worker 2399*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 2 2400*c0909341SAndroid Build Coastguard Worker 2401*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 2402*c0909341SAndroid Build Coastguard Worker.rept 4 2403*c0909341SAndroid Build Coastguard Worker vld_x8 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 2404*c0909341SAndroid Build Coastguard Worker 2405*c0909341SAndroid Build Coastguard Worker inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h 2406*c0909341SAndroid Build Coastguard Worker 2407*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 2408*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 4 2409*c0909341SAndroid Build Coastguard Worker.endr 2410*c0909341SAndroid Build Coastguard Worker 2411*c0909341SAndroid Build Coastguard Worker vst_x8 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 2412*c0909341SAndroid Build Coastguard Worker 2413*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 2414*c0909341SAndroid Build Coastguard Worker.endr 2415*c0909341SAndroid Build Coastguard Worker 2416*c0909341SAndroid Build Coastguard Worker addi.d t0, sp, 64 2417*c0909341SAndroid Build Coastguard Worker.rept 4 2418*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2419*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2420*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2421*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2422*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2423*c0909341SAndroid Build Coastguard Worker vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2424*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2425*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2426*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 128 2427*c0909341SAndroid Build Coastguard Worker.endr 2428*c0909341SAndroid Build Coastguard Worker free_space 512+256 2429*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X8_END: 2430*c0909341SAndroid Build Coastguard Workerendfunc 2431*c0909341SAndroid Build Coastguard Worker 2432*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x16_8bpc_lsx 2433*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_32x16 2434*c0909341SAndroid Build Coastguard Worker 2435*c0909341SAndroid Build Coastguard Worker idct_dc_w32 32, 16, 1 2436*c0909341SAndroid Build Coastguard Worker 2437*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2438*c0909341SAndroid Build Coastguard Worker 2439*c0909341SAndroid Build Coastguard Worker.rept 7 2440*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2441*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2442*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2443*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2444*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2445*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2446*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2447*c0909341SAndroid Build Coastguard Worker.endr 2448*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_32X16_END 2449*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x16: 2450*c0909341SAndroid Build Coastguard Worker malloc_space 1024+256 // 32*32*2+512 2451*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 2452*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 2453*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 2454*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1024 2455*c0909341SAndroid Build Coastguard Worker.rept 2 2456*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2457*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2458*c0909341SAndroid Build Coastguard Worker 2459*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2460*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 0, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2461*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2462*c0909341SAndroid Build Coastguard Worker 2463*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 2464*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 2465*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2466*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2467*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 2468*c0909341SAndroid Build Coastguard Worker.endr 2469*c0909341SAndroid Build Coastguard Worker 2470*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 2471*c0909341SAndroid Build Coastguard Worker 2472*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2473*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2474*c0909341SAndroid Build Coastguard Worker 2475*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 32, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2476*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2477*c0909341SAndroid Build Coastguard Worker 2478*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 2479*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 0 // 2896 2480*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2481*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2482*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 2483*c0909341SAndroid Build Coastguard Worker.endr 2484*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2485*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 32, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2486*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2487*c0909341SAndroid Build Coastguard Worker 2488*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 1 2489*c0909341SAndroid Build Coastguard Worker 2490*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 2491*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 512 2492*c0909341SAndroid Build Coastguard Worker.endr 2493*c0909341SAndroid Build Coastguard Worker 2494*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 2495*c0909341SAndroid Build Coastguard Worker.rept 4 2496*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2497*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2498*c0909341SAndroid Build Coastguard Worker 2499*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 2500*c0909341SAndroid Build Coastguard Worker 2501*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2502*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2503*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 4 2504*c0909341SAndroid Build Coastguard Worker.endr 2505*c0909341SAndroid Build Coastguard Worker 2506*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2507*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2508*c0909341SAndroid Build Coastguard Worker 2509*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 2510*c0909341SAndroid Build Coastguard Worker.endr 2511*c0909341SAndroid Build Coastguard Worker 2512*c0909341SAndroid Build Coastguard Worker addi.d t0, sp, 64 2513*c0909341SAndroid Build Coastguard Worker.rept 8 2514*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2515*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2516*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2517*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2518*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2519*c0909341SAndroid Build Coastguard Worker vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2520*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2521*c0909341SAndroid Build Coastguard Worker 2522*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2523*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 128 2524*c0909341SAndroid Build Coastguard Worker.endr 2525*c0909341SAndroid Build Coastguard Worker free_space 1024+256 2526*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X16_END: 2527*c0909341SAndroid Build Coastguard Workerendfunc 2528*c0909341SAndroid Build Coastguard Worker 2529*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_32x32_8bpc_lsx 2530*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_32x32 2531*c0909341SAndroid Build Coastguard Worker 2532*c0909341SAndroid Build Coastguard Worker idct_dc_w32 32, 32, 2 2533*c0909341SAndroid Build Coastguard Worker 2534*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2535*c0909341SAndroid Build Coastguard Worker.rept 15 2536*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2537*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2538*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2539*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2540*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2541*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2542*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 2543*c0909341SAndroid Build Coastguard Worker.endr 2544*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_32X32_END 2545*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_32x32: 2546*c0909341SAndroid Build Coastguard Worker malloc_space 2560 // 32*32*2+512 2547*c0909341SAndroid Build Coastguard Worker 2548*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 2549*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 2550*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 1024 2551*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 1024 2552*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 64 2553*c0909341SAndroid Build Coastguard Worker 2554*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 2555*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_32x32: 2556*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 2557*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, 2 2558*c0909341SAndroid Build Coastguard Worker 2559*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2560*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2561*c0909341SAndroid Build Coastguard Worker 2562*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2563*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 0, 128, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2564*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2565*c0909341SAndroid Build Coastguard Worker 2566*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 2567*c0909341SAndroid Build Coastguard Worker 2568*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2569*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2570*c0909341SAndroid Build Coastguard Worker 2571*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 64, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2572*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2573*c0909341SAndroid Build Coastguard Worker 2574*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2575*c0909341SAndroid Build Coastguard Worker 2576*c0909341SAndroid Build Coastguard Worker vst_x16 t2, 64, 128, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2577*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2578*c0909341SAndroid Build Coastguard Worker 2579*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 48, 16, 32, 64, transpose8x8, 2 2580*c0909341SAndroid Build Coastguard Worker 2581*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 2582*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 512 2583*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_32x32 2584*c0909341SAndroid Build Coastguard Worker 2585*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 2586*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 2587*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 4 2588*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_32x32_END // a3>=t7 2589*c0909341SAndroid Build Coastguard Worker vst_x16 sp, 64+1536, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2590*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2591*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 256+64 2592*c0909341SAndroid Build Coastguard Worker vst_x16 t1, 1536, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2593*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2594*c0909341SAndroid Build Coastguard Worker 2595*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 2 2596*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_32x32_END 2597*c0909341SAndroid Build Coastguard Worker vst_x16 sp, 64+1024, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2598*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2599*c0909341SAndroid Build Coastguard Worker vst_x16 t1, 1024, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2600*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2601*c0909341SAndroid Build Coastguard Worker 2602*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 2603*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_32x32_END 2604*c0909341SAndroid Build Coastguard Worker vst_x16 sp, 64+512, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2605*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2606*c0909341SAndroid Build Coastguard Worker 2607*c0909341SAndroid Build Coastguard Worker vst_x16 t1, 512, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 2608*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 2609*c0909341SAndroid Build Coastguard Worker 2610*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_32x32_END: 2611*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 2612*c0909341SAndroid Build Coastguard Worker addi.d t1, sp, 64 2613*c0909341SAndroid Build Coastguard Worker.rept 4 2614*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2615*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2616*c0909341SAndroid Build Coastguard Worker 2617*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 2618*c0909341SAndroid Build Coastguard Worker 2619*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2620*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 2621*c0909341SAndroid Build Coastguard Worker 2622*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 64, 128, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 2623*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2624*c0909341SAndroid Build Coastguard Worker 2625*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t1, t3, 0, 128, 16, 0, 1536, 512, 1024, 64, , 4 2626*c0909341SAndroid Build Coastguard Worker 2627*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 2628*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 2629*c0909341SAndroid Build Coastguard Worker.endr 2630*c0909341SAndroid Build Coastguard Worker 2631*c0909341SAndroid Build Coastguard Worker addi.d t0, sp, 64 2632*c0909341SAndroid Build Coastguard Worker.rept 16 2633*c0909341SAndroid Build Coastguard Worker add.d t2, a0, a1 2634*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 2635*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 2636*c0909341SAndroid Build Coastguard Worker vld vr12, t2, 0 2637*c0909341SAndroid Build Coastguard Worker vld vr13, t2, 16 2638*c0909341SAndroid Build Coastguard Worker vld_x8 t0, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2639*c0909341SAndroid Build Coastguard Worker DST_ADD_W32 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 2640*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 1 2641*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 128 2642*c0909341SAndroid Build Coastguard Worker.endr 2643*c0909341SAndroid Build Coastguard Worker 2644*c0909341SAndroid Build Coastguard Worker free_space 2560 // 32*32*2+512 2645*c0909341SAndroid Build Coastguard Worker.DCT_DCT_32X32_END: 2646*c0909341SAndroid Build Coastguard Workerendfunc 2647*c0909341SAndroid Build Coastguard Worker 2648*c0909341SAndroid Build Coastguard Worker/* 2649*c0909341SAndroid Build Coastguard Worker * temp: vr8, vr9, vr10, vr12, vr20, vr21, vr22, vr23 2650*c0909341SAndroid Build Coastguard Worker */ 2651*c0909341SAndroid Build Coastguard Worker.macro dct_8x8_tx64_core_lsx in0, in1, in2, in3, in4, in5, in6, in7, out0, \ 2652*c0909341SAndroid Build Coastguard Worker out1, out2, out3, out4, out5, out6, out7, rect2 2653*c0909341SAndroid Build Coastguard Worker 2654*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 2655*c0909341SAndroid Build Coastguard Worker 2656*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 2657*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 0 // 2896 2658*c0909341SAndroid Build Coastguard Worker.irp i, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7 2659*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 2660*c0909341SAndroid Build Coastguard Worker.endr 2661*c0909341SAndroid Build Coastguard Worker.endif 2662*c0909341SAndroid Build Coastguard Worker 2663*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 2664*c0909341SAndroid Build Coastguard Worker 2665*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 1567 2666*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // 3784 2667*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in2, 0 2668*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in2 2669*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 2670*c0909341SAndroid Build Coastguard Worker vmul.w vr10, vr23, vr20 2671*c0909341SAndroid Build Coastguard Worker vmul.w \in2, vr22, vr21 2672*c0909341SAndroid Build Coastguard Worker vmul.w vr9, vr23, vr21 2673*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr8, 12 // t2 2674*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, \in2, 12 // t3 2675*c0909341SAndroid Build Coastguard Worker 2676*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 2677*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in0, 0 2678*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in0 2679*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 2680*c0909341SAndroid Build Coastguard Worker vmul.w \in2, vr23, vr20 2681*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in2, vr8, 12 2682*c0909341SAndroid Build Coastguard Worker 2683*c0909341SAndroid Build Coastguard Worker vsadd.h vr8, \in2, vr9 // c[0] 2684*c0909341SAndroid Build Coastguard Worker vssub.h vr9, \in2, vr9 // c[3] 2685*c0909341SAndroid Build Coastguard Worker vsadd.h \in0, \in2, vr10 // c[1] 2686*c0909341SAndroid Build Coastguard Worker vssub.h vr10, \in2, vr10 // c[2] 2687*c0909341SAndroid Build Coastguard Worker 2688*c0909341SAndroid Build Coastguard Worker // inv_dct8_1d_internal_c tx64 2689*c0909341SAndroid Build Coastguard Worker // in1 in3 2690*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 16 // 799 2691*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 20 // 4017 2692*c0909341SAndroid Build Coastguard Worker 2693*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in1, 0 2694*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in1 2695*c0909341SAndroid Build Coastguard Worker vmul.w \in2, vr22, vr21 2696*c0909341SAndroid Build Coastguard Worker vmul.w \in4, vr23, vr21 2697*c0909341SAndroid Build Coastguard Worker vmul.w \in1, vr22, vr20 2698*c0909341SAndroid Build Coastguard Worker vmul.w \in6, vr23, vr20 2699*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in4, \in2, 12 // t7a 2700*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in6, \in1, 12 // t4a 2701*c0909341SAndroid Build Coastguard Worker 2702*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 24 // 3406 2703*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 28 // 2276 2704*c0909341SAndroid Build Coastguard Worker 2705*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in3, 0 2706*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in3 2707*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 2708*c0909341SAndroid Build Coastguard Worker vmul.w \in2, vr22, vr20 2709*c0909341SAndroid Build Coastguard Worker vmul.w \in1, vr23, vr20 2710*c0909341SAndroid Build Coastguard Worker vmul.w \in3, vr22, vr21 2711*c0909341SAndroid Build Coastguard Worker vmul.w \in7, vr23, vr21 2712*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in1, \in2, 12 // t6a 2713*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in7, \in3, 12 // t5a 2714*c0909341SAndroid Build Coastguard Worker 2715*c0909341SAndroid Build Coastguard Worker vsadd.h \in3, \in6, \in7 // t4 2716*c0909341SAndroid Build Coastguard Worker vssub.h \in6, \in6, \in7 // t5a 2717*c0909341SAndroid Build Coastguard Worker vsadd.h \in5, \in4, \in1 // t7 2718*c0909341SAndroid Build Coastguard Worker vssub.h \in4, \in4, \in1 // t6a 2719*c0909341SAndroid Build Coastguard Worker 2720*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 2721*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w \in4, \in6, vr20, vr20, vr21, \in1 2722*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w \in4, \in6, vr20, vr20, \in2, \in7 2723*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in1, vr21, 12 // t6 2724*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \in7, \in2, 12 // t5 2725*c0909341SAndroid Build Coastguard Worker 2726*c0909341SAndroid Build Coastguard Worker vsadd.h \out0, vr8, \in5 // c[0] 2727*c0909341SAndroid Build Coastguard Worker vssub.h \out7, vr8, \in5 // c[7] 2728*c0909341SAndroid Build Coastguard Worker vsadd.h \out1, \in0, \in1 // c[1] 2729*c0909341SAndroid Build Coastguard Worker vssub.h \out6, \in0, \in1 // c[6] 2730*c0909341SAndroid Build Coastguard Worker vsadd.h \out2, vr10, \in7 // c[2] 2731*c0909341SAndroid Build Coastguard Worker vssub.h \out5, vr10, \in7 // c[5] 2732*c0909341SAndroid Build Coastguard Worker vsadd.h \out3, vr9, \in3 // c[3] 2733*c0909341SAndroid Build Coastguard Worker vssub.h \out4, vr9, \in3 // c[4] 2734*c0909341SAndroid Build Coastguard Worker.endm 2735*c0909341SAndroid Build Coastguard Worker 2736*c0909341SAndroid Build Coastguard Worker/* 2737*c0909341SAndroid Build Coastguard Worker * input: in0, in1, in2, in3, in4, in5, in6, in7 (fixed) 2738*c0909341SAndroid Build Coastguard Worker * vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 2739*c0909341SAndroid Build Coastguard Worker * in8, in9, in10, in11, in12, in13, in14, in15 2740*c0909341SAndroid Build Coastguard Worker * vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 2741*c0909341SAndroid Build Coastguard Worker * output: out0, out1, out2, out3, out4, out5, out6, out7 (fixed) 2742*c0909341SAndroid Build Coastguard Worker * vr22, vr18, vr17, vr28, vr20, vr14, vr15, vr16 2743*c0909341SAndroid Build Coastguard Worker * out8, out9, out10, out11, out12, out13, out14, out15 2744*c0909341SAndroid Build Coastguard Worker * vr27, vr30, vr23, vr21, vr29, vr26, vr25, vr24 2745*c0909341SAndroid Build Coastguard Worker */ 2746*c0909341SAndroid Build Coastguard Worker.macro dct_8x16_tx64_core_lsx rect2 2747*c0909341SAndroid Build Coastguard Worker dct_8x8_tx64_core_lsx vr0, vr2, vr4, vr6, vr19, vr25, vr27, vr29, vr11, \ 2748*c0909341SAndroid Build Coastguard Worker vr12, vr13, vr14, vr15, vr16, vr17, vr18, \rect2 2749*c0909341SAndroid Build Coastguard Worker 2750*c0909341SAndroid Build Coastguard Worker // in1 in3 in5 in7 in9 in11 in13 in15 2751*c0909341SAndroid Build Coastguard Worker // vr1 vr3 vr5 vr7 vr24 vr26 vr28 vr30 2752*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 2753*c0909341SAndroid Build Coastguard Worker 2754*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 2755*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 0 // 2896 2756*c0909341SAndroid Build Coastguard Worker.irp i, vr1, vr3, vr5, vr7, vr24, vr26, vr28, vr30 2757*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 2758*c0909341SAndroid Build Coastguard Worker.endr 2759*c0909341SAndroid Build Coastguard Worker.endif 2760*c0909341SAndroid Build Coastguard Worker 2761*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 32 // 401 2762*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 36 // 4076 2763*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr1, 0 2764*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr1 2765*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr22, vr21 2766*c0909341SAndroid Build Coastguard Worker vmul.w vr10, vr23, vr21 2767*c0909341SAndroid Build Coastguard Worker vmul.w vr1, vr22, vr20 2768*c0909341SAndroid Build Coastguard Worker vmul.w vr29, vr23, vr20 2769*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr0, 12 // t15a 2770*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr29, vr1, 12 // t8a 2771*c0909341SAndroid Build Coastguard Worker 2772*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 40 // 3166 -> 1583 2773*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 44 // 2598 -> 1299 2774*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr7, 0 2775*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr7 2776*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 2777*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr22, vr20 2778*c0909341SAndroid Build Coastguard Worker vmul.w vr30, vr23, vr20 2779*c0909341SAndroid Build Coastguard Worker vmul.w vr7, vr22, vr21 2780*c0909341SAndroid Build Coastguard Worker vmul.w vr31, vr23, vr21 2781*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr0, 12 // t14a 2782*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr31, vr7, 12 // t9a 2783*c0909341SAndroid Build Coastguard Worker 2784*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 48 // 1931 2785*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 52 // 3612 2786*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr5, 0 2787*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr5 2788*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr22, vr21 2789*c0909341SAndroid Build Coastguard Worker vmul.w vr24, vr23, vr21 2790*c0909341SAndroid Build Coastguard Worker vmul.w vr5, vr22, vr20 2791*c0909341SAndroid Build Coastguard Worker vmul.w vr25, vr23, vr20 2792*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr0, 12 // t13a 2793*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr5, 12 // t10a 2794*c0909341SAndroid Build Coastguard Worker 2795*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 56 // 3920 2796*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 60 // 1189 2797*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr3, 0 2798*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr3 2799*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 2800*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr22, vr20 2801*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr23, vr20 2802*c0909341SAndroid Build Coastguard Worker vmul.w vr3, vr22, vr21 2803*c0909341SAndroid Build Coastguard Worker vmul.w vr27, vr23, vr21 2804*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr26, vr0, 12 // t12a 2805*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr27, vr3, 12 // t11a 2806*c0909341SAndroid Build Coastguard Worker 2807*c0909341SAndroid Build Coastguard Worker // vr22 vr23 vr30 vr31 vr24 vr25 vr26 vr27 2808*c0909341SAndroid Build Coastguard Worker vsadd.h vr28, vr29, vr31 // t8 2809*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr29, vr31 // t9 2810*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr27, vr25 // t10 2811*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr27, vr25 // t11 2812*c0909341SAndroid Build Coastguard Worker vsadd.h vr31, vr26, vr24 // t12 2813*c0909341SAndroid Build Coastguard Worker vssub.h vr25, vr26, vr24 // t13 2814*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr10, vr30 // t14 2815*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr10, vr30 // t15 2816*c0909341SAndroid Build Coastguard Worker 2817*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 1567 2818*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // 3784 2819*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr27, vr19, vr21, vr20, vr0, vr26 2820*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr27, vr19, vr20, vr21, vr1, vr30 2821*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr26, vr0, 12 // t14a 2822*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr1, 12 // t9a 2823*c0909341SAndroid Build Coastguard Worker 2824*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr25, vr29, vr21, vr20, vr0, vr19 2825*c0909341SAndroid Build Coastguard Worker vneg.w vr0, vr0 2826*c0909341SAndroid Build Coastguard Worker vneg.w vr19, vr19 2827*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr25, vr29, vr20, vr21, vr1, vr27 2828*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr0, 12 // t10a 2829*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr27, vr1, 12 // t13a 2830*c0909341SAndroid Build Coastguard Worker 2831*c0909341SAndroid Build Coastguard Worker vsadd.h vr25, vr28, vr9 // t8a 2832*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr28, vr9 // t11a 2833*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr24, vr31 // t12a 2834*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr24, vr31 // t15a 2835*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr30, vr19 // t9 2836*c0909341SAndroid Build Coastguard Worker vssub.h vr31, vr30, vr19 // t10 2837*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr26, vr27 // t13 2838*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr26, vr27 // t14 2839*c0909341SAndroid Build Coastguard Worker 2840*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 2841*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr30, vr31, vr20, vr20, vr0, vr26 2842*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr30, vr31, vr20, vr20, vr1, vr27 2843*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr26, vr0, 12 // t13a 2844*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr27, vr1, 12 // t10a 2845*c0909341SAndroid Build Coastguard Worker 2846*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr28, vr29, vr20, vr20, vr0, vr31 2847*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr28, vr29, vr20, vr20, vr1, vr30 2848*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr31, vr0, 12 // t12 2849*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr1, 12 // t11 2850*c0909341SAndroid Build Coastguard Worker 2851*c0909341SAndroid Build Coastguard Worker // vr11 vr12 ... vr18 2852*c0909341SAndroid Build Coastguard Worker vsadd.h vr28, vr14, vr31 // c[3] 2853*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr14, vr31 // c[12] 2854*c0909341SAndroid Build Coastguard Worker vsadd.h vr20, vr15, vr30 // c[4] 2855*c0909341SAndroid Build Coastguard Worker vssub.h vr21, vr15, vr30 // c[11] 2856*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr16, vr27 // c[5] 2857*c0909341SAndroid Build Coastguard Worker vssub.h vr23, vr16, vr27 // c[10] 2858*c0909341SAndroid Build Coastguard Worker vsadd.h vr15, vr17, vr9 // c[6] 2859*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr17, vr9 // c[9] 2860*c0909341SAndroid Build Coastguard Worker vsadd.h vr16, vr18, vr25 // c[7] 2861*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr18, vr25 // c[8] 2862*c0909341SAndroid Build Coastguard Worker vsadd.h vr17, vr13, vr26 // c[2] 2863*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr13, vr26 // c[13] 2864*c0909341SAndroid Build Coastguard Worker vsadd.h vr18, vr12, vr24 // c[1] 2865*c0909341SAndroid Build Coastguard Worker vssub.h vr25, vr12, vr24 // c[14] 2866*c0909341SAndroid Build Coastguard Worker vsadd.h vr22, vr11, vr10 // c[0] 2867*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr11, vr10 // c[15] 2868*c0909341SAndroid Build Coastguard Worker.endm // dct_8x16_tx64_core_lsx 2869*c0909341SAndroid Build Coastguard Worker 2870*c0909341SAndroid Build Coastguard Worker.macro vmul_vssrarni_hw in0, in1, in2, tmp0, tmp1, out0, out1 2871*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, \in0, 0 2872*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, \in0 2873*c0909341SAndroid Build Coastguard Worker vmul.w \tmp0, vr22, \in1 2874*c0909341SAndroid Build Coastguard Worker vmul.w \out0, vr23, \in1 2875*c0909341SAndroid Build Coastguard Worker vmul.w \tmp1, vr22, \in2 2876*c0909341SAndroid Build Coastguard Worker vmul.w \out1, vr23, \in2 2877*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out0, \tmp0, 12 2878*c0909341SAndroid Build Coastguard Worker vssrarni.h.w \out1, \tmp1, 12 2879*c0909341SAndroid Build Coastguard Worker.endm 2880*c0909341SAndroid Build Coastguard Worker 2881*c0909341SAndroid Build Coastguard Workerconst idct64_coeffs, align=4 2882*c0909341SAndroid Build Coastguard Worker .word 101, 4095, 2967, -2824 2883*c0909341SAndroid Build Coastguard Worker .word 1660, 3745, 3822, -1474 2884*c0909341SAndroid Build Coastguard Worker .word 4076, 401, 4017, 799 2885*c0909341SAndroid Build Coastguard Worker .word 4036, -700, 2359, 3349 2886*c0909341SAndroid Build Coastguard Worker .word 3461, -2191, 897, 3996 2887*c0909341SAndroid Build Coastguard Worker .word -3166, -2598, -799, -4017 2888*c0909341SAndroid Build Coastguard Worker .word 501, 4065, 3229, -2520 2889*c0909341SAndroid Build Coastguard Worker .word 2019, 3564, 3948, -1092 2890*c0909341SAndroid Build Coastguard Worker .word 3612, 1931, 2276, 3406 2891*c0909341SAndroid Build Coastguard Worker .word 4085, -301, 2675, 3102 2892*c0909341SAndroid Build Coastguard Worker .word 3659, -1842, 1285, 3889 2893*c0909341SAndroid Build Coastguard Worker .word -3920, -1189, -3406, -2276 2894*c0909341SAndroid Build Coastguard Workerendconst 2895*c0909341SAndroid Build Coastguard Worker 2896*c0909341SAndroid Build Coastguard Worker.macro dct64_step1_lsx 2897*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 101 2898*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 4 // 4095 2899*c0909341SAndroid Build Coastguard Worker vmul_vssrarni_hw vr0, vr20, vr21, vr16, vr0, vr8, vr9 // vr8 t32a vr9 t63a 2900*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 2967 2901*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // -2824 2902*c0909341SAndroid Build Coastguard Worker vmul_vssrarni_hw vr1, vr20, vr21, vr16, vr1, vr10, vr11 // vr10 t62a vr11 t33a 2903*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 16 // 1660 2904*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 20 // 3745 2905*c0909341SAndroid Build Coastguard Worker vmul_vssrarni_hw vr2, vr20, vr21, vr16, vr2, vr12, vr13 // vr12 t34a vr13 t61a 2906*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 24 // 3822 2907*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 28 // -1474 2908*c0909341SAndroid Build Coastguard Worker vmul_vssrarni_hw vr3, vr20, vr21, vr16, vr3, vr14, vr15 // vr14 t60a vr15 t35a 2909*c0909341SAndroid Build Coastguard Worker 2910*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr8, vr11 // t32 2911*c0909341SAndroid Build Coastguard Worker vssub.h vr1, vr8, vr11 // t33 2912*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr15, vr12 // t34 2913*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr15, vr12 // t35 2914*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr14, vr13 // t60 2915*c0909341SAndroid Build Coastguard Worker vssub.h vr5, vr14, vr13 // t61 2916*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr9, vr10 // t62 2917*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr9, vr10 // t63 2918*c0909341SAndroid Build Coastguard Worker 2919*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 32 // 4076 2920*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 36 // 401 2921*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr1, vr20, vr21, vr9, vr10 2922*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr1, vr21, vr20, vr13, vr11 2923*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr9, 12 // t62a 2924*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr11, vr13, 12 // t33a 2925*c0909341SAndroid Build Coastguard Worker 2926*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr5, vr2, vr20, vr21, vr9, vr1 2927*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr5, vr2, vr21, vr20, vr13, vr6 2928*c0909341SAndroid Build Coastguard Worker vneg.w vr9, vr9 2929*c0909341SAndroid Build Coastguard Worker vneg.w vr1, vr1 2930*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr13, 12 // t61a 2931*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr9, 12 // t34a 2932*c0909341SAndroid Build Coastguard Worker 2933*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr0, vr3 // t32a 2934*c0909341SAndroid Build Coastguard Worker vssub.h vr5, vr0, vr3 // t35a 2935*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr11, vr1 // t33 2936*c0909341SAndroid Build Coastguard Worker vssub.h vr13, vr11, vr1 // t34 2937*c0909341SAndroid Build Coastguard Worker vssub.h vr0, vr7, vr4 // t60a 2938*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr7, vr4 // t63a 2939*c0909341SAndroid Build Coastguard Worker vssub.h vr1, vr10, vr6 // t61 2940*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr10, vr6 // t62 2941*c0909341SAndroid Build Coastguard Worker 2942*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 40 // 4017 2943*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 44 // 799 2944*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr1, vr13, vr20, vr21, vr8, vr4 2945*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr1, vr13, vr21, vr20, vr12, vr7 2946*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr8, 12 // t61a 2947*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr12, 12 // t34a 2948*c0909341SAndroid Build Coastguard Worker 2949*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr0, vr5, vr20, vr21, vr8, vr6 2950*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr0, vr5, vr21, vr20, vr12, vr10 2951*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr8, 12 // t60 2952*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr12, 12 // t35 2953*c0909341SAndroid Build Coastguard Worker 2954*c0909341SAndroid Build Coastguard Worker vst_x8 t6, 0, 16, vr2, vr9, vr7, vr10, vr6, vr4, vr11, vr3 2955*c0909341SAndroid Build Coastguard Worker.endm // dct64_step1 2956*c0909341SAndroid Build Coastguard Worker 2957*c0909341SAndroid Build Coastguard Worker // in1/31/17/15 -> t32a/33/34a/35/60/61a/62/63a 2958*c0909341SAndroid Build Coastguard Worker // in7/25/23/ 9 -> t56a/57/58a/59/36/37a/38/39a 2959*c0909341SAndroid Build Coastguard Worker // in5/27/21/11 -> t40a/41/42a/43/52/53a/54/55a 2960*c0909341SAndroid Build Coastguard Worker // in3/29/19/13 -> t48a/49/50a/51/44/45a/46/47a 2961*c0909341SAndroid Build Coastguard Worker.macro dct64_step2_lsx 2962*c0909341SAndroid Build Coastguard Worker vld vr0, t5, 0 // t32a 2963*c0909341SAndroid Build Coastguard Worker vld vr2, t4, 0 // t63a 2964*c0909341SAndroid Build Coastguard Worker vld vr3, t5, 16*8 // t56a 2965*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 16*8 // t39a 2966*c0909341SAndroid Build Coastguard Worker vld vr4, t5, 16*16 // t40a 2967*c0909341SAndroid Build Coastguard Worker vld vr6, t4, 16*16 // t55a 2968*c0909341SAndroid Build Coastguard Worker vld vr7, t5, 16*24 // t48a 2969*c0909341SAndroid Build Coastguard Worker vld vr5, t4, 16*24 // t47a 2970*c0909341SAndroid Build Coastguard Worker 2971*c0909341SAndroid Build Coastguard Worker vsadd.h vr8, vr0, vr1 // t32 2972*c0909341SAndroid Build Coastguard Worker vssub.h vr9, vr0, vr1 // t39 2973*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr2, vr3 // t63 2974*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr2, vr3 // t56 2975*c0909341SAndroid Build Coastguard Worker vssub.h vr12, vr5, vr4 // t40 2976*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr5, vr4 // t47 2977*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr7, vr6 // t48 2978*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr7, vr6 // t55 2979*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 1567 2980*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // 3784 2981*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr11, vr9, vr21, vr20, vr0, vr2 2982*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr11, vr9, vr20, vr21, vr1, vr3 2983*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr0, 12 // t56a 2984*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr3, vr1, 12 // t39a 2985*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr15, vr12, vr21, vr20, vr0, vr4 2986*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr15, vr12, vr20, vr21, vr1, vr5 2987*c0909341SAndroid Build Coastguard Worker vneg.w vr0, vr0 2988*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 2989*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr1, 12 // t55a 2990*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr0, 12 // t40a 2991*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr8, vr13 // t32a 2992*c0909341SAndroid Build Coastguard Worker vssub.h vr11, vr8, vr13 // t47a 2993*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr3, vr4 // t39 2994*c0909341SAndroid Build Coastguard Worker vssub.h vr7, vr3, vr4 // t40 2995*c0909341SAndroid Build Coastguard Worker vssub.h vr12, vr10, vr14 // t48a 2996*c0909341SAndroid Build Coastguard Worker vsadd.h vr15, vr10, vr14 // t63a 2997*c0909341SAndroid Build Coastguard Worker vssub.h vr0, vr2, vr5 // t55 2998*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr2, vr5 // t56 2999*c0909341SAndroid Build Coastguard Worker 3000*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 3001*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr0, vr7, vr20, vr20, vr8, vr13 3002*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr0, vr7, vr20, vr20, vr3, vr4 3003*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr13, vr8, 12 // t40a 3004*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr3, 12 // t55a 3005*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr12, vr11, vr20, vr20, vr8, vr10 3006*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr12, vr11, vr20, vr20, vr3, vr14 3007*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr8, 12 // t47 3008*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr14, vr3, 12 // t48 3009*c0909341SAndroid Build Coastguard Worker 3010*c0909341SAndroid Build Coastguard Worker // t32a t39 t40a t47 t48 t55a t56 t63a 3011*c0909341SAndroid Build Coastguard Worker // vr9 vr6 vr13 vr10 vr14 vr4 vr1 vr15 3012*c0909341SAndroid Build Coastguard Worker vst vr9, t5, 0 // t32a 3013*c0909341SAndroid Build Coastguard Worker vst vr6, t4, 0 // t39 3014*c0909341SAndroid Build Coastguard Worker vst vr13, t5, 16*8 // t40a 3015*c0909341SAndroid Build Coastguard Worker vst vr10, t4, 16*8 // t47 3016*c0909341SAndroid Build Coastguard Worker vst vr14, t5, 16*16 // t48 3017*c0909341SAndroid Build Coastguard Worker vst vr4, t4, 16*16 // t55a 3018*c0909341SAndroid Build Coastguard Worker vst vr1, t5, 16*24 // t56 3019*c0909341SAndroid Build Coastguard Worker vst vr15, t4, 16*24 // t63a 3020*c0909341SAndroid Build Coastguard Worker.endm // dct64_step2_lsx 3021*c0909341SAndroid Build Coastguard Worker 3022*c0909341SAndroid Build Coastguard Worker.macro dct64_step3_lsx 3023*c0909341SAndroid Build Coastguard Worker // t0 t1 t2 t3 t4 t5 t6 t7 3024*c0909341SAndroid Build Coastguard Worker vld_x8 t3, 0, 16, vr2, vr3, vr7, vr8, vr11, vr12, vr16, vr17 3025*c0909341SAndroid Build Coastguard Worker vld vr9, t5, 16*24 // t56 3026*c0909341SAndroid Build Coastguard Worker vld vr6, t5, 16*24+16 // t57a 3027*c0909341SAndroid Build Coastguard Worker vld vr13, t5, 16*24+32 // t58 3028*c0909341SAndroid Build Coastguard Worker vld vr10, t5, 16*24+48 // t59a 3029*c0909341SAndroid Build Coastguard Worker vld vr14, t4, 16*24-48 // t60 3030*c0909341SAndroid Build Coastguard Worker vld vr4, t4, 16*24-32 // t61a 3031*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 16*24-16 // t62 3032*c0909341SAndroid Build Coastguard Worker vld vr15, t4, 16*24 // t63a 3033*c0909341SAndroid Build Coastguard Worker vsadd.h vr20, vr2, vr15 // c[0] 3034*c0909341SAndroid Build Coastguard Worker vssub.h vr21, vr2, vr15 // c[63] 3035*c0909341SAndroid Build Coastguard Worker vsadd.h vr22, vr3, vr1 // c[1] 3036*c0909341SAndroid Build Coastguard Worker vssub.h vr23, vr3, vr1 // c[62] 3037*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr7, vr4 // c[2] 3038*c0909341SAndroid Build Coastguard Worker vssub.h vr25, vr7, vr4 // c[61] 3039*c0909341SAndroid Build Coastguard Worker vsadd.h vr26, vr8, vr14 // c[3] 3040*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr8, vr14 // c[60] 3041*c0909341SAndroid Build Coastguard Worker vsadd.h vr28, vr11, vr10 // c[4] 3042*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr11, vr10 // c[59] 3043*c0909341SAndroid Build Coastguard Worker vsadd.h vr30, vr12, vr13 // c[5] 3044*c0909341SAndroid Build Coastguard Worker vssub.h vr31, vr12, vr13 // c[58] 3045*c0909341SAndroid Build Coastguard Worker vsadd.h vr2, vr16, vr6 // c[6] 3046*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr16, vr6 // c[57] 3047*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr17, vr9 // c[7] 3048*c0909341SAndroid Build Coastguard Worker vssub.h vr3, vr17, vr9 // c[56] 3049*c0909341SAndroid Build Coastguard Worker.endm // dct64_step3_lsx 3050*c0909341SAndroid Build Coastguard Worker 3051*c0909341SAndroid Build Coastguard Worker.macro dct64_step4_lsx transpose8x8, shift, start0, stride0, start1, stride1 3052*c0909341SAndroid Build Coastguard Worker dct64_step3_lsx 3053*c0909341SAndroid Build Coastguard Worker 3054*c0909341SAndroid Build Coastguard Worker.ifnb \transpose8x8 3055*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \ 3056*c0909341SAndroid Build Coastguard Worker vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \ 3057*c0909341SAndroid Build Coastguard Worker vr4, vr7, vr8, vr14, vr10, vr11, vr12, vr13 3058*c0909341SAndroid Build Coastguard Worker 3059*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21, \ 3060*c0909341SAndroid Build Coastguard Worker vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21, \ 3061*c0909341SAndroid Build Coastguard Worker vr4, vr7, vr8, vr14, vr10, vr11, vr12, vr13 3062*c0909341SAndroid Build Coastguard Worker.endif 3063*c0909341SAndroid Build Coastguard Worker 3064*c0909341SAndroid Build Coastguard Worker.ifnb \shift 3065*c0909341SAndroid Build Coastguard Worker.irp i, vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1, \ 3066*c0909341SAndroid Build Coastguard Worker vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3067*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, \shift 3068*c0909341SAndroid Build Coastguard Worker.endr 3069*c0909341SAndroid Build Coastguard Worker.endif 3070*c0909341SAndroid Build Coastguard Worker 3071*c0909341SAndroid Build Coastguard Worker vst_x8 t7, \start0, \stride0, vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1 3072*c0909341SAndroid Build Coastguard Worker 3073*c0909341SAndroid Build Coastguard Worker vst_x8 t7, \start1, \stride1, vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3074*c0909341SAndroid Build Coastguard Worker.endm // dct64_step4_lsx 3075*c0909341SAndroid Build Coastguard Worker 3076*c0909341SAndroid Build Coastguard Worker.macro dct64_step5_lsx in0, in1, in2, in3, in4, in5, in6, in7 3077*c0909341SAndroid Build Coastguard Worker fld.d f4, t0, 0 3078*c0909341SAndroid Build Coastguard Worker fldx.d f5, t0, a1 3079*c0909341SAndroid Build Coastguard Worker fld.d f6, t6, 0 3080*c0909341SAndroid Build Coastguard Worker fldx.d f7, t6, a1 3081*c0909341SAndroid Build Coastguard Worker alsl.d t0, a1, t0, 2 3082*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t6, 2 3083*c0909341SAndroid Build Coastguard Worker fld.d f8, t0, 0 3084*c0909341SAndroid Build Coastguard Worker fldx.d f9, t0, a1 3085*c0909341SAndroid Build Coastguard Worker fld.d f10, t6, 0 3086*c0909341SAndroid Build Coastguard Worker fldx.d f11, t6, a1 3087*c0909341SAndroid Build Coastguard Worker.irp i, vr4, vr5, vr6, vr7, vr8, vr9, vr10, vr11 3088*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu \i, \i, 0 3089*c0909341SAndroid Build Coastguard Worker.endr 3090*c0909341SAndroid Build Coastguard Worker vsrari.h vr20, \in0, 4 3091*c0909341SAndroid Build Coastguard Worker vsrari.h vr22, \in1, 4 3092*c0909341SAndroid Build Coastguard Worker vsrari.h vr24, \in2, 4 3093*c0909341SAndroid Build Coastguard Worker vsrari.h vr26, \in3, 4 3094*c0909341SAndroid Build Coastguard Worker vsrari.h vr28, \in4, 4 3095*c0909341SAndroid Build Coastguard Worker vsrari.h vr30, \in5, 4 3096*c0909341SAndroid Build Coastguard Worker vsrari.h vr2, \in6, 4 3097*c0909341SAndroid Build Coastguard Worker vsrari.h vr1, \in7, 4 3098*c0909341SAndroid Build Coastguard Worker vadd.h vr4, vr4, vr20 3099*c0909341SAndroid Build Coastguard Worker vadd.h vr5, vr5, vr22 3100*c0909341SAndroid Build Coastguard Worker vadd.h vr6, vr6, vr24 3101*c0909341SAndroid Build Coastguard Worker vadd.h vr7, vr7, vr26 3102*c0909341SAndroid Build Coastguard Worker vadd.h vr8, vr8, vr28 3103*c0909341SAndroid Build Coastguard Worker vadd.h vr9, vr9, vr30 3104*c0909341SAndroid Build Coastguard Worker vadd.h vr10, vr10, vr2 3105*c0909341SAndroid Build Coastguard Worker vadd.h vr11, vr11, vr1 3106*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr5, vr4, 0 3107*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr7, vr6, 0 3108*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr9, vr8, 0 3109*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr11, vr10, 0 3110*c0909341SAndroid Build Coastguard Worker 3111*c0909341SAndroid Build Coastguard Worker vstelm.d vr5, t1, 0, 0 3112*c0909341SAndroid Build Coastguard Worker vstelm.d vr5, t2, 0, 1 3113*c0909341SAndroid Build Coastguard Worker alsl.d t1, a1, t1, 1 3114*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 1 3115*c0909341SAndroid Build Coastguard Worker vstelm.d vr7, t1, 0, 0 3116*c0909341SAndroid Build Coastguard Worker vstelm.d vr7, t2, 0, 1 3117*c0909341SAndroid Build Coastguard Worker alsl.d t1, a1, t1, 1 3118*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 1 3119*c0909341SAndroid Build Coastguard Worker vstelm.d vr9, t1, 0, 0 3120*c0909341SAndroid Build Coastguard Worker vstelm.d vr9, t2, 0, 1 3121*c0909341SAndroid Build Coastguard Worker alsl.d t1, a1, t1, 1 3122*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 1 3123*c0909341SAndroid Build Coastguard Worker vstelm.d vr11, t1, 0, 0 3124*c0909341SAndroid Build Coastguard Worker vstelm.d vr11, t2, 0, 1 3125*c0909341SAndroid Build Coastguard Worker.endm // dct64_step5_lsx 3126*c0909341SAndroid Build Coastguard Worker 3127*c0909341SAndroid Build Coastguard Worker.macro dct_8x32_tx64_new_lsx vld_loc0, stride0, vld_loc1, stride1, rect2 3128*c0909341SAndroid Build Coastguard Worker vld_x8 t2, \vld_loc0, \stride0, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3129*c0909341SAndroid Build Coastguard Worker 3130*c0909341SAndroid Build Coastguard Worker dct_8x16_tx64_core_lsx \rect2 3131*c0909341SAndroid Build Coastguard Worker 3132*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr22, vr18, vr17, vr28, vr20, vr14, vr15, vr16, \ 3133*c0909341SAndroid Build Coastguard Worker vr27, vr30, vr23, vr21, vr29, vr26, vr25, vr24 3134*c0909341SAndroid Build Coastguard Worker 3135*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 3136*c0909341SAndroid Build Coastguard Worker vst_x8 t2, \vld_loc0, \stride0, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3137*c0909341SAndroid Build Coastguard Worker 3138*c0909341SAndroid Build Coastguard Worker vld_x8 t2, \vld_loc1, \stride1, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3139*c0909341SAndroid Build Coastguard Worker 3140*c0909341SAndroid Build Coastguard Worker vst_x8 t2, \vld_loc1, \stride1, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3141*c0909341SAndroid Build Coastguard Worker 3142*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 3143*c0909341SAndroid Build Coastguard Worker 3144*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 3145*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, t0, 0 // 2896 3146*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3147*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 3148*c0909341SAndroid Build Coastguard Worker.endr 3149*c0909341SAndroid Build Coastguard Worker.endif 3150*c0909341SAndroid Build Coastguard Worker 3151*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 64 // 201 3152*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 68 // 4091 3153*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr0, 0 3154*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr0 3155*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr21 3156*c0909341SAndroid Build Coastguard Worker vmul.w vr9, vr23, vr21 3157*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr22, vr20 3158*c0909341SAndroid Build Coastguard Worker vmul.w vr10, vr23, vr20 3159*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr8, 12 // t31a 3160*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr0, 12 // t16a 3161*c0909341SAndroid Build Coastguard Worker 3162*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 72 // 3035 3163*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 76 // 2751 3164*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr7, 0 3165*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr7 3166*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 3167*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 3168*c0909341SAndroid Build Coastguard Worker vmul.w vr0, vr23, vr20 3169*c0909341SAndroid Build Coastguard Worker vmul.w vr7, vr22, vr21 3170*c0909341SAndroid Build Coastguard Worker vmul.w vr30, vr23, vr21 3171*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr8, 12 // t30a 3172*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr7, 12 // t17a 3173*c0909341SAndroid Build Coastguard Worker 3174*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 80 // 1751 3175*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 84 // 3703 3176*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr4, 0 3177*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr4 3178*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr21 3179*c0909341SAndroid Build Coastguard Worker vmul.w vr7, vr23, vr21 3180*c0909341SAndroid Build Coastguard Worker vmul.w vr4, vr22, vr20 3181*c0909341SAndroid Build Coastguard Worker vmul.w vr19, vr23, vr20 3182*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr8, 12 // t29a 3183*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr4, 12 // t18a 3184*c0909341SAndroid Build Coastguard Worker 3185*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 88 // 3857 3186*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 92 // 1380 3187*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr3, 0 3188*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr3 3189*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 3190*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 3191*c0909341SAndroid Build Coastguard Worker vmul.w vr4, vr23, vr20 3192*c0909341SAndroid Build Coastguard Worker vmul.w vr3, vr22, vr21 3193*c0909341SAndroid Build Coastguard Worker vmul.w vr26, vr23, vr21 3194*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr4, vr8, 12 // t28a 3195*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr26, vr3, 12 // t19a 3196*c0909341SAndroid Build Coastguard Worker 3197*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 96 // 995 3198*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 100 // 3973 3199*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr2, 0 3200*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr2 3201*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr21 3202*c0909341SAndroid Build Coastguard Worker vmul.w vr3, vr23, vr21 3203*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr22, vr20 3204*c0909341SAndroid Build Coastguard Worker vmul.w vr27, vr23, vr20 3205*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr3, vr8, 12 // t27a 3206*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr27, vr2, 12 // t20a 3207*c0909341SAndroid Build Coastguard Worker 3208*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 104 // 3513 3209*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 108 // 2106 3210*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr5, 0 3211*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr5 3212*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 3213*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 3214*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr23, vr20 3215*c0909341SAndroid Build Coastguard Worker vmul.w vr5, vr22, vr21 3216*c0909341SAndroid Build Coastguard Worker vmul.w vr28, vr23, vr21 3217*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr8, 12 // t26a 3218*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr28, vr5, 12 // t21a 3219*c0909341SAndroid Build Coastguard Worker 3220*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 112 // 2440 -> 1220 3221*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 116 // 3290 -> 1645 3222*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr6, 0 3223*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr6 3224*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr21 3225*c0909341SAndroid Build Coastguard Worker vmul.w vr5, vr23, vr21 3226*c0909341SAndroid Build Coastguard Worker vmul.w vr6, vr22, vr20 3227*c0909341SAndroid Build Coastguard Worker vmul.w vr25, vr23, vr20 3228*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr8, 12 // t25a 3229*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr6, 12 // t22a 3230*c0909341SAndroid Build Coastguard Worker 3231*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 120 // 4052 3232*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 124 // 601 3233*c0909341SAndroid Build Coastguard Worker vsllwil.w.h vr22, vr1, 0 3234*c0909341SAndroid Build Coastguard Worker vexth.w.h vr23, vr1 3235*c0909341SAndroid Build Coastguard Worker vneg.w vr21, vr21 3236*c0909341SAndroid Build Coastguard Worker vmul.w vr8, vr22, vr20 3237*c0909341SAndroid Build Coastguard Worker vmul.w vr6, vr23, vr20 3238*c0909341SAndroid Build Coastguard Worker vmul.w vr1, vr22, vr21 3239*c0909341SAndroid Build Coastguard Worker vmul.w vr24, vr23, vr21 3240*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr8, 12 // t24a 3241*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr1, 12 // t23a 3242*c0909341SAndroid Build Coastguard Worker 3243*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr10, vr30 // t16 3244*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr10, vr30 // t17 3245*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr26, vr19 // t18 3246*c0909341SAndroid Build Coastguard Worker vsadd.h vr31, vr26, vr19 // t19 3247*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr27, vr28 // t20 3248*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr27, vr28 // t21 3249*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr24, vr25 // t22 3250*c0909341SAndroid Build Coastguard Worker vsadd.h vr26, vr24, vr25 // t23 3251*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr6, vr5 // t24 3252*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr6, vr5 // t25 3253*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr3, vr2 // t26 3254*c0909341SAndroid Build Coastguard Worker vsadd.h vr25, vr3, vr2 // t27 3255*c0909341SAndroid Build Coastguard Worker vsadd.h vr5, vr4, vr7 // t28 3256*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr4, vr7 // t29 3257*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr9, vr0 // t30 3258*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr9, vr0 // t31 3259*c0909341SAndroid Build Coastguard Worker 3260*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 16 // 799 3261*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 20 // 4017 3262*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr2, vr29, vr21, vr20, vr4, vr7 3263*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr2, vr29, vr20, vr21, vr11, vr0 3264*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr4, 12 // t30a 3265*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr0, vr11, 12 // t17a 3266*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr8, vr21, vr20, vr4, vr9 3267*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 3268*c0909341SAndroid Build Coastguard Worker vneg.w vr9, vr9 3269*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr8, vr20, vr21, vr11, vr2 3270*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr9, vr4, 12 // t18a 3271*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr11, 12 // t29a 3272*c0909341SAndroid Build Coastguard Worker 3273*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 24 // 3406 -> 1703 3274*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 28 // 2276 -> 1138 3275*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr30, vr21, vr20, vr4, vr29 3276*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr30, vr20, vr21, vr11, vr6 3277*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr29, vr4, 12 // t26a 3278*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr11, 12 // t21a 3279*c0909341SAndroid Build Coastguard Worker 3280*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr28, vr19, vr21, vr20, vr4, vr8 3281*c0909341SAndroid Build Coastguard Worker vneg.w vr4, vr4 3282*c0909341SAndroid Build Coastguard Worker vneg.w vr8, vr8 3283*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr28, vr19, vr20, vr21, vr11, vr24 3284*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr4, 12 // t22a 3285*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr11, 12 // t25a 3286*c0909341SAndroid Build Coastguard Worker 3287*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr1, vr31 // t16a 3288*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr1, vr31 // t19a 3289*c0909341SAndroid Build Coastguard Worker vsadd.h vr19, vr0, vr9 // t17 3290*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr0, vr9 // t18 3291*c0909341SAndroid Build Coastguard Worker vssub.h vr1, vr26, vr10 // t20a 3292*c0909341SAndroid Build Coastguard Worker vsadd.h vr31, vr26, vr10 // t23a 3293*c0909341SAndroid Build Coastguard Worker vssub.h vr0, vr8, vr6 // t21 3294*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr8, vr6 // t22 3295*c0909341SAndroid Build Coastguard Worker vsadd.h vr10, vr27, vr25 // t24a 3296*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr27, vr25 // t27a 3297*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr24, vr29 // t25 3298*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr24, vr29 // t26 3299*c0909341SAndroid Build Coastguard Worker vssub.h vr25, vr3, vr5 // t28a 3300*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr3, vr5 // t31a 3301*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr7, vr2 // t29 3302*c0909341SAndroid Build Coastguard Worker vsadd.h vr29, vr7, vr2 // t30 3303*c0909341SAndroid Build Coastguard Worker 3304*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 8 // 1567 3305*c0909341SAndroid Build Coastguard Worker vldrepl.w vr21, t0, 12 // 3784 3306*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr28, vr21, vr20, vr3, vr5 3307*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr28, vr20, vr21, vr11, vr2 3308*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr3, 12 // t29a 3309*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr2, vr11, 12 // 18a 3310*c0909341SAndroid Build Coastguard Worker 3311*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr25, vr30, vr21, vr20, vr3, vr7 3312*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr25, vr30, vr20, vr21, vr11, vr24 3313*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr3, 12 // t28 3314*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr24, vr11, 12 // t19 3315*c0909341SAndroid Build Coastguard Worker 3316*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr26, vr1, vr21, vr20, vr3, vr28 3317*c0909341SAndroid Build Coastguard Worker vneg.w vr3, vr3 3318*c0909341SAndroid Build Coastguard Worker vneg.w vr28, vr28 3319*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr26, vr1, vr20, vr21, vr11, vr25 3320*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr28, vr3, 12 // t20 3321*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr11, 12 // t27 3322*c0909341SAndroid Build Coastguard Worker 3323*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr8, vr0, vr21, vr20, vr3, vr30 3324*c0909341SAndroid Build Coastguard Worker vneg.w vr3, vr3 3325*c0909341SAndroid Build Coastguard Worker vneg.w vr30, vr30 3326*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr8, vr0, vr20, vr21, vr11, vr1 3327*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr30, vr3, 12 // t21a 3328*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr1, vr11, 12 // t26a 3329*c0909341SAndroid Build Coastguard Worker 3330*c0909341SAndroid Build Coastguard Worker vsadd.h vr3, vr4, vr31 // t16 3331*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr4, vr31 // t23 3332*c0909341SAndroid Build Coastguard Worker vsadd.h vr0, vr19, vr9 // t17a 3333*c0909341SAndroid Build Coastguard Worker vssub.h vr8, vr19, vr9 // t22a 3334*c0909341SAndroid Build Coastguard Worker vsadd.h vr4, vr2, vr30 // t18 3335*c0909341SAndroid Build Coastguard Worker vssub.h vr31, vr2, vr30 // t21 3336*c0909341SAndroid Build Coastguard Worker vsadd.h vr9, vr24, vr28 // t19a 3337*c0909341SAndroid Build Coastguard Worker vssub.h vr19, vr24, vr28 // t20a 3338*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr27, vr10 // t24 3339*c0909341SAndroid Build Coastguard Worker vsadd.h vr30, vr27, vr10 // t31 3340*c0909341SAndroid Build Coastguard Worker vssub.h vr24, vr29, vr6 // t25a 3341*c0909341SAndroid Build Coastguard Worker vsadd.h vr28, vr29, vr6 // t30a 3342*c0909341SAndroid Build Coastguard Worker vssub.h vr10, vr5, vr1 // t26 3343*c0909341SAndroid Build Coastguard Worker vsadd.h vr27, vr5, vr1 // t29 3344*c0909341SAndroid Build Coastguard Worker vssub.h vr6, vr7, vr25 // t27a 3345*c0909341SAndroid Build Coastguard Worker vsadd.h vr29, vr7, vr25 // t28a 3346*c0909341SAndroid Build Coastguard Worker 3347*c0909341SAndroid Build Coastguard Worker vldrepl.w vr20, t0, 0 // 2896 3348*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr6, vr19, vr20, vr20, vr1, vr5 3349*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr6, vr19, vr20, vr20, vr11, vr7 3350*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr5, vr1, 12 // t20 3351*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr7, vr11, 12 // t27 3352*c0909341SAndroid Build Coastguard Worker 3353*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr10, vr31, vr20, vr20, vr1, vr25 3354*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr10, vr31, vr20, vr20, vr11, vr6 3355*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr25, vr1, 12 // t21a 3356*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr6, vr11, 12 // t26a 3357*c0909341SAndroid Build Coastguard Worker 3358*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr24, vr8, vr20, vr20, vr1, vr19 3359*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr24, vr8, vr20, vr20, vr11, vr10 3360*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr19, vr1, 12 // t22 3361*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr10, vr11, 12 // t25 3362*c0909341SAndroid Build Coastguard Worker 3363*c0909341SAndroid Build Coastguard Worker vmul_vmsub_w vr2, vr26, vr20, vr20, vr1, vr31 3364*c0909341SAndroid Build Coastguard Worker vmul_vmadd_w vr2, vr26, vr20, vr20, vr11, vr8 3365*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr31, vr1, 12 // t23a 3366*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr8, vr11, 12 // t24a 3367*c0909341SAndroid Build Coastguard Worker 3368*c0909341SAndroid Build Coastguard Worker // t31 t30a t29 t28a t27 t26a t25 t24a t23a t22 t21a t20 t19a t18 t17a t16 3369*c0909341SAndroid Build Coastguard Worker // vr30 vr28 vr27 vr29 vr7 vr6 vr10 vr8 vr31 vr19 vr25 vr5 vr9 vr4 vr0 vr3 3370*c0909341SAndroid Build Coastguard Worker vld_x8 t3, 0, 16, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18 3371*c0909341SAndroid Build Coastguard Worker 3372*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr11, vr30 // c[0] 3373*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr11, vr30 // c[31] 3374*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr12, vr28 // c[1] 3375*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr12, vr28 // c[30] 3376*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr13, vr27 // c[2] 3377*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr13, vr27 // c[29] 3378*c0909341SAndroid Build Coastguard Worker vsadd.h vr12, vr14, vr29 // c[3] 3379*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr14, vr29 // c[28] 3380*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr15, vr7 // c[4] 3381*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr15, vr7 // c[27] 3382*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr16, vr6 // c[5] 3383*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr16, vr6 // c[26] 3384*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr17, vr10 // c[6] 3385*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr17, vr10 // c[25] 3386*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr18, vr8 // c[7] 3387*c0909341SAndroid Build Coastguard Worker vssub.h vr16, vr18, vr8 // c[24] 3388*c0909341SAndroid Build Coastguard Worker 3389*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 0, 16, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 3390*c0909341SAndroid Build Coastguard Worker 3391*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 384, 16, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 3392*c0909341SAndroid Build Coastguard Worker 3393*c0909341SAndroid Build Coastguard Worker vld_x8 t3, 128, 16, vr11, vr12, vr13, vr14, vr15, vr16, vr17, vr18 3394*c0909341SAndroid Build Coastguard Worker 3395*c0909341SAndroid Build Coastguard Worker vsadd.h vr1, vr11, vr31 // c[8] 3396*c0909341SAndroid Build Coastguard Worker vssub.h vr2, vr11, vr31 // c[23] 3397*c0909341SAndroid Build Coastguard Worker vsadd.h vr24, vr12, vr19 // c[9] 3398*c0909341SAndroid Build Coastguard Worker vssub.h vr26, vr12, vr19 // c[22] 3399*c0909341SAndroid Build Coastguard Worker vsadd.h vr11, vr13, vr25 // c[10] 3400*c0909341SAndroid Build Coastguard Worker vssub.h vr30, vr13, vr25 // c[21] 3401*c0909341SAndroid Build Coastguard Worker vsadd.h vr12, vr14, vr5 // c[11] 3402*c0909341SAndroid Build Coastguard Worker vssub.h vr28, vr14, vr5 // c[20] 3403*c0909341SAndroid Build Coastguard Worker vsadd.h vr13, vr15, vr9 // c[12] 3404*c0909341SAndroid Build Coastguard Worker vssub.h vr27, vr15, vr9 // c[19] 3405*c0909341SAndroid Build Coastguard Worker vsadd.h vr14, vr16, vr4 // c[13] 3406*c0909341SAndroid Build Coastguard Worker vssub.h vr29, vr16, vr4 // c[18] 3407*c0909341SAndroid Build Coastguard Worker vsadd.h vr7, vr17, vr0 // c[14] 3408*c0909341SAndroid Build Coastguard Worker vssub.h vr15, vr17, vr0 // c[17] 3409*c0909341SAndroid Build Coastguard Worker vsadd.h vr6, vr18, vr3 // c[15] 3410*c0909341SAndroid Build Coastguard Worker vssub.h vr16, vr18, vr3 // c[16] 3411*c0909341SAndroid Build Coastguard Worker 3412*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 128, 16, vr1, vr24, vr11, vr12, vr13, vr14, vr7, vr6 3413*c0909341SAndroid Build Coastguard Worker 3414*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 256, 16, vr16, vr15, vr29, vr27, vr28, vr30, vr26, vr2 3415*c0909341SAndroid Build Coastguard Worker.endm // dct_8x32_tx64_new_lsx 3416*c0909341SAndroid Build Coastguard Worker 3417*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W64 in0, in1, in2, in3, in4, in5, in6, in7 3418*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr4, vr10, 0 3419*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr5, vr11, 0 3420*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr6, vr12, 0 3421*c0909341SAndroid Build Coastguard Worker vsllwil.hu.bu vr7, vr13, 0 3422*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr10, vr10 3423*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr11, vr11 3424*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr12, vr12 3425*c0909341SAndroid Build Coastguard Worker vexth.hu.bu vr13, vr13 3426*c0909341SAndroid Build Coastguard Worker vadd.h vr4, vr4, \in0 3427*c0909341SAndroid Build Coastguard Worker vadd.h vr10, vr10, \in1 3428*c0909341SAndroid Build Coastguard Worker vadd.h vr5, vr5, \in2 3429*c0909341SAndroid Build Coastguard Worker vadd.h vr11, vr11, \in3 3430*c0909341SAndroid Build Coastguard Worker vadd.h vr6, vr6, \in4 3431*c0909341SAndroid Build Coastguard Worker vadd.h vr12, vr12, \in5 3432*c0909341SAndroid Build Coastguard Worker vadd.h vr7, vr7, \in6 3433*c0909341SAndroid Build Coastguard Worker vadd.h vr13, vr13, \in7 3434*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr10, vr4, 0 3435*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr11, vr5, 0 3436*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr12, vr6, 0 3437*c0909341SAndroid Build Coastguard Worker vssrani.bu.h vr13, vr7, 0 3438*c0909341SAndroid Build Coastguard Worker vst vr10, a0, 0 3439*c0909341SAndroid Build Coastguard Worker vst vr11, a0, 16 3440*c0909341SAndroid Build Coastguard Worker vst vr12, a0, 32 3441*c0909341SAndroid Build Coastguard Worker vst vr13, a0, 48 3442*c0909341SAndroid Build Coastguard Worker.endm 3443*c0909341SAndroid Build Coastguard Worker 3444*c0909341SAndroid Build Coastguard Worker.macro idct_dc_w64 w, h, shift 3445*c0909341SAndroid Build Coastguard Worker ld.h t2, a2, 0 3446*c0909341SAndroid Build Coastguard Worker vldi vr0, 0x8b5 3447*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr1, t2 3448*c0909341SAndroid Build Coastguard Worker vldi vr20, 0x880 3449*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr0, vr1 3450*c0909341SAndroid Build Coastguard Worker st.h zero, a2, 0 3451*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 3452*c0909341SAndroid Build Coastguard Worker vld vr13, a0, 48 3453*c0909341SAndroid Build Coastguard Worker 3454*c0909341SAndroid Build Coastguard Worker.if (2*\w == \h) || (2*\h == \w) 3455*c0909341SAndroid Build Coastguard Worker vmul.w vr2, vr2, vr0 3456*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, 8 3457*c0909341SAndroid Build Coastguard Worker.endif 3458*c0909341SAndroid Build Coastguard Worker 3459*c0909341SAndroid Build Coastguard Worker.if \shift>0 3460*c0909341SAndroid Build Coastguard Worker vsrari.w vr2, vr2, \shift 3461*c0909341SAndroid Build Coastguard Worker.endif 3462*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 3463*c0909341SAndroid Build Coastguard Worker vmadd.w vr20, vr2, vr0 3464*c0909341SAndroid Build Coastguard Worker vld vr12, a0, 32 3465*c0909341SAndroid Build Coastguard Worker vssrarni.h.w vr20, vr20, 12 3466*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 3467*c0909341SAndroid Build Coastguard Worker.endm 3468*c0909341SAndroid Build Coastguard Worker 3469*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_64x64_8bpc_lsx 3470*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_64x64 3471*c0909341SAndroid Build Coastguard Worker 3472*c0909341SAndroid Build Coastguard Worker idct_dc_w64 64, 64, 2 3473*c0909341SAndroid Build Coastguard Worker 3474*c0909341SAndroid Build Coastguard Worker DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 3475*c0909341SAndroid Build Coastguard Worker 3476*c0909341SAndroid Build Coastguard Worker li.w t3, 63 3477*c0909341SAndroid Build Coastguard Worker.loop63: 3478*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 3479*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 3480*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 3481*c0909341SAndroid Build Coastguard Worker vld vr12, a0, 32 3482*c0909341SAndroid Build Coastguard Worker vld vr13, a0, 48 3483*c0909341SAndroid Build Coastguard Worker DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 3484*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, -1 3485*c0909341SAndroid Build Coastguard Worker blt zero, t3, .loop63 3486*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_64X64_END 3487*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_64x64: 3488*c0909341SAndroid Build Coastguard Worker 3489*c0909341SAndroid Build Coastguard Worker malloc_space 64*32*2+512+512 3490*c0909341SAndroid Build Coastguard Worker 3491*c0909341SAndroid Build Coastguard Worker.macro dct64x64_core1_lsx shift, rect2 3492*c0909341SAndroid Build Coastguard Worker //addi.d t2, a2, \in0 3493*c0909341SAndroid Build Coastguard Worker //addi.d t7, t7, \in1 3494*c0909341SAndroid Build Coastguard Worker li.w t4, 64*32*2+64 3495*c0909341SAndroid Build Coastguard Worker add.d t3, sp, t4 3496*c0909341SAndroid Build Coastguard Worker addi.d t6, t3, 512 3497*c0909341SAndroid Build Coastguard Worker add.d t5, t6, zero 3498*c0909341SAndroid Build Coastguard Worker 3499*c0909341SAndroid Build Coastguard Worker dct_8x32_tx64_new_lsx 0, 256, 128, 256, \rect2 3500*c0909341SAndroid Build Coastguard Worker 3501*c0909341SAndroid Build Coastguard Worker la.local t0, idct64_coeffs 3502*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 3503*c0909341SAndroid Build Coastguard Worker 3504*c0909341SAndroid Build Coastguard Worker //addi.d a4, a2, \in2 // 32 ... 3505*c0909341SAndroid Build Coastguard Worker // in1/31/17/15 -> t32a/33/34a/35/60/61a/62/63a 3506*c0909341SAndroid Build Coastguard Worker vld vr0, a4, 128*0 // in1 3507*c0909341SAndroid Build Coastguard Worker vld vr1, a4, 128*15 // in31 3508*c0909341SAndroid Build Coastguard Worker vld vr2, a4, 128*8 // in17 3509*c0909341SAndroid Build Coastguard Worker vld vr3, a4, 128*7 // in15 3510*c0909341SAndroid Build Coastguard Worker la.local a6, idct_coeffs 3511*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 3512*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, a6, 0 // 2896 3513*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3 3514*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 3515*c0909341SAndroid Build Coastguard Worker.endr 3516*c0909341SAndroid Build Coastguard Worker.endif 3517*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*0 3518*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*15 3519*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*8 3520*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*7 3521*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3522*c0909341SAndroid Build Coastguard Worker 3523*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3524*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3525*c0909341SAndroid Build Coastguard Worker // in7/25/23/ 9 -> t56a/57/58a/59/36/37a/38/39a 3526*c0909341SAndroid Build Coastguard Worker vld vr0, a4, 128*3 // in7 3527*c0909341SAndroid Build Coastguard Worker vld vr1, a4, 128*12 // in25 3528*c0909341SAndroid Build Coastguard Worker vld vr2, a4, 128*11 // in23 3529*c0909341SAndroid Build Coastguard Worker vld vr3, a4, 128*4 // in9 3530*c0909341SAndroid Build Coastguard Worker la.local a6, idct_coeffs 3531*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 3532*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, a6, 0 // 2896 3533*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3 3534*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 3535*c0909341SAndroid Build Coastguard Worker.endr 3536*c0909341SAndroid Build Coastguard Worker.endif 3537*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*3 3538*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*12 3539*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*11 3540*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*4 3541*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3542*c0909341SAndroid Build Coastguard Worker 3543*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3544*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3545*c0909341SAndroid Build Coastguard Worker // in5/27/21/11 -> t40a/41/42a/43/52/53a/54/55a 3546*c0909341SAndroid Build Coastguard Worker vld vr0, a4, 128*2 // in5 3547*c0909341SAndroid Build Coastguard Worker vld vr1, a4, 128*13 // in27 3548*c0909341SAndroid Build Coastguard Worker vld vr2, a4, 128*10 // in21 3549*c0909341SAndroid Build Coastguard Worker vld vr3, a4, 128*5 // in11 3550*c0909341SAndroid Build Coastguard Worker la.local a6, idct_coeffs 3551*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 3552*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, a6, 0 // 2896 3553*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3 3554*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 3555*c0909341SAndroid Build Coastguard Worker.endr 3556*c0909341SAndroid Build Coastguard Worker.endif 3557*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*2 3558*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*13 3559*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*10 3560*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*5 3561*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3562*c0909341SAndroid Build Coastguard Worker 3563*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3564*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3565*c0909341SAndroid Build Coastguard Worker // in3/29/19/13 -> t48a/49/50a/51/44/45a/46/47a 3566*c0909341SAndroid Build Coastguard Worker vld vr0, a4, 128*1 // in3 3567*c0909341SAndroid Build Coastguard Worker vld vr1, a4, 128*14 // in29 3568*c0909341SAndroid Build Coastguard Worker vld vr2, a4, 128*9 // in19 3569*c0909341SAndroid Build Coastguard Worker vld vr3, a4, 128*6 // in13 3570*c0909341SAndroid Build Coastguard Worker la.local a6, idct_coeffs 3571*c0909341SAndroid Build Coastguard Worker.ifc \rect2, rect2_lsx 3572*c0909341SAndroid Build Coastguard Worker vldrepl.w vr23, a6, 0 // 2896 3573*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3 3574*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 3575*c0909341SAndroid Build Coastguard Worker.endr 3576*c0909341SAndroid Build Coastguard Worker.endif 3577*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*1 3578*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*14 3579*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*9 3580*c0909341SAndroid Build Coastguard Worker vst vr31, a4, 128*6 3581*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3582*c0909341SAndroid Build Coastguard Worker 3583*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 3584*c0909341SAndroid Build Coastguard Worker addi.d t4, t5, 16*7 3585*c0909341SAndroid Build Coastguard Worker // t32a/t39/t40a/t47/t48/t55a/t56/t63a 3586*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3587*c0909341SAndroid Build Coastguard Worker 3588*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3589*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3590*c0909341SAndroid Build Coastguard Worker // t33/t38a/t41/t46a/t49a/t54/t57a/t62 3591*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3592*c0909341SAndroid Build Coastguard Worker 3593*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3594*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3595*c0909341SAndroid Build Coastguard Worker // t34a/t37/t42a/t45/t50/t53a/t58/t61a 3596*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3597*c0909341SAndroid Build Coastguard Worker 3598*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3599*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3600*c0909341SAndroid Build Coastguard Worker // t35/t36a/t43/t44a/t51a/t52/t59a/t60 3601*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3602*c0909341SAndroid Build Coastguard Worker 3603*c0909341SAndroid Build Coastguard Worker li.w t4, 64*32*2+64+512 3604*c0909341SAndroid Build Coastguard Worker add.d t5, t4, sp 3605*c0909341SAndroid Build Coastguard Worker addi.d t4, t5, 16*7 3606*c0909341SAndroid Build Coastguard Worker dct64_step4_lsx transpose8x8, \shift, 0, 128, 112, 128 3607*c0909341SAndroid Build Coastguard Worker 3608*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3609*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3610*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3611*c0909341SAndroid Build Coastguard Worker dct64_step4_lsx transpose8x8, \shift, 16, 128, 96, 128 3612*c0909341SAndroid Build Coastguard Worker 3613*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3614*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3615*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3616*c0909341SAndroid Build Coastguard Worker dct64_step4_lsx transpose8x8, \shift, 32, 128, 80, 128 3617*c0909341SAndroid Build Coastguard Worker 3618*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3619*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3620*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3621*c0909341SAndroid Build Coastguard Worker dct64_step4_lsx transpose8x8, \shift, 48, 128, 64, 128 3622*c0909341SAndroid Build Coastguard Worker.endm 3623*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 3624*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 3625*c0909341SAndroid Build Coastguard Worker addi.d t7, sp, 64 3626*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 0 3627*c0909341SAndroid Build Coastguard Worker addi.d a4, a2, 64 3628*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x64: 3629*c0909341SAndroid Build Coastguard Worker ld.h a5, t8, 0 3630*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, 2 3631*c0909341SAndroid Build Coastguard Worker dct64x64_core1_lsx 2, no_rect2 3632*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 3633*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 128*8 3634*c0909341SAndroid Build Coastguard Worker addi.d a4, a4, 16 3635*c0909341SAndroid Build Coastguard Worker bge a3, a5, .DCT_DCT_EOB_64x64 3636*c0909341SAndroid Build Coastguard Worker 3637*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 3638*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 3639*c0909341SAndroid Build Coastguard Worker 3640*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 4 3641*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x64_END 3642*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*3+64 3643*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3644*c0909341SAndroid Build Coastguard Worker.rept 4 3645*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3646*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3647*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3648*c0909341SAndroid Build Coastguard Worker.endr 3649*c0909341SAndroid Build Coastguard Worker 3650*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 2 3651*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x64_END 3652*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*2+64 3653*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3654*c0909341SAndroid Build Coastguard Worker.rept 4 3655*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3656*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3657*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3658*c0909341SAndroid Build Coastguard Worker.endr 3659*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 3660*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x64_END 3661*c0909341SAndroid Build Coastguard Worker 3662*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*1+64 3663*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3664*c0909341SAndroid Build Coastguard Worker.rept 4 3665*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3666*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3667*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3668*c0909341SAndroid Build Coastguard Worker.endr 3669*c0909341SAndroid Build Coastguard Worker 3670*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x64_END: 3671*c0909341SAndroid Build Coastguard Worker 3672*c0909341SAndroid Build Coastguard Worker.macro dct64x64_core2_lsx in0, in1, rect2 3673*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64+\in0 3674*c0909341SAndroid Build Coastguard Worker addi.d t7, sp, 64+\in0 3675*c0909341SAndroid Build Coastguard Worker li.w t4, 64*32*2+64 3676*c0909341SAndroid Build Coastguard Worker add.d t3, sp, t4 3677*c0909341SAndroid Build Coastguard Worker addi.d t6, t3, 512 3678*c0909341SAndroid Build Coastguard Worker add.d t5, t6, zero 3679*c0909341SAndroid Build Coastguard Worker 3680*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 1024 3681*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 1024 3682*c0909341SAndroid Build Coastguard Worker dct_8x32_tx64_new_lsx -2048, 512, 256-2048, 512, \rect2 3683*c0909341SAndroid Build Coastguard Worker 3684*c0909341SAndroid Build Coastguard Worker la.local t0, idct64_coeffs 3685*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64+64*2+\in0 3686*c0909341SAndroid Build Coastguard Worker addi.d t4, t2, 256*7 3687*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 256 3688*c0909341SAndroid Build Coastguard Worker 3689*c0909341SAndroid Build Coastguard Worker vld vr0, t2, 256*0 // in1 3690*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 256*7 // in31 3691*c0909341SAndroid Build Coastguard Worker vld vr2, t4, 256*0 // in17 3692*c0909341SAndroid Build Coastguard Worker vld vr3, t2, 256*7 // in15 3693*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3694*c0909341SAndroid Build Coastguard Worker 3695*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3696*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3697*c0909341SAndroid Build Coastguard Worker vld vr0, t2, 256*3 // in7 3698*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 256*4 // in25 3699*c0909341SAndroid Build Coastguard Worker vld vr2, t4, 256*3 // in23 3700*c0909341SAndroid Build Coastguard Worker vld vr3, t2, 256*4 // in9 3701*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3702*c0909341SAndroid Build Coastguard Worker 3703*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3704*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3705*c0909341SAndroid Build Coastguard Worker vld vr0, t2, 256*2 // in5 3706*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 256*5 // in27 3707*c0909341SAndroid Build Coastguard Worker vld vr2, t4, 256*2 // in21 3708*c0909341SAndroid Build Coastguard Worker vld vr3, t2, 256*5 // in11 3709*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3710*c0909341SAndroid Build Coastguard Worker 3711*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 48 3712*c0909341SAndroid Build Coastguard Worker addi.d t6, t6, 128 3713*c0909341SAndroid Build Coastguard Worker vld vr0, t2, 256*1 // in3 3714*c0909341SAndroid Build Coastguard Worker vld vr1, t4, 256*6 // in29 3715*c0909341SAndroid Build Coastguard Worker vld vr2, t4, 256*1 // in19 3716*c0909341SAndroid Build Coastguard Worker vld vr3, t2, 256*6 // in13 3717*c0909341SAndroid Build Coastguard Worker dct64_step1_lsx 3718*c0909341SAndroid Build Coastguard Worker 3719*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs 3720*c0909341SAndroid Build Coastguard Worker addi.d t4, t5, 16*7 3721*c0909341SAndroid Build Coastguard Worker // t32a/t39/t40a/t47/t48/t55a/t56/t63a 3722*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3723*c0909341SAndroid Build Coastguard Worker 3724*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3725*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3726*c0909341SAndroid Build Coastguard Worker // t33/t38a/t41/t46a/t49a/t54/t57a/t62 3727*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3728*c0909341SAndroid Build Coastguard Worker 3729*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3730*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3731*c0909341SAndroid Build Coastguard Worker // t34a/t37/t42a/t45/t50/t53a/t58/t61a 3732*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3733*c0909341SAndroid Build Coastguard Worker 3734*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3735*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16 3736*c0909341SAndroid Build Coastguard Worker // t35/t36a/t43/t44a/t51a/t52/t59a/t60 3737*c0909341SAndroid Build Coastguard Worker dct64_step2_lsx 3738*c0909341SAndroid Build Coastguard Worker 3739*c0909341SAndroid Build Coastguard Worker li.w t4, 64*32*2+64+512 3740*c0909341SAndroid Build Coastguard Worker add.d t5, t4, sp 3741*c0909341SAndroid Build Coastguard Worker addi.d t4, t5, 16*7 3742*c0909341SAndroid Build Coastguard Worker addi.d a0, a0, \in1 3743*c0909341SAndroid Build Coastguard Worker // 0 - 7, 56 -63 3744*c0909341SAndroid Build Coastguard Worker dct64_step3_lsx 3745*c0909341SAndroid Build Coastguard Worker li.w t8, 0 3746*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3747*c0909341SAndroid Build Coastguard Worker add.d t0, a0, t0 3748*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3749*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3750*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3751*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1 3752*c0909341SAndroid Build Coastguard Worker li.w t8, 56 3753*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3754*c0909341SAndroid Build Coastguard Worker add.d t0, a0, t0 3755*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3756*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3757*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3758*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3759*c0909341SAndroid Build Coastguard Worker 3760*c0909341SAndroid Build Coastguard Worker // 8 - 15, 48 - 55 3761*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3762*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3763*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3764*c0909341SAndroid Build Coastguard Worker dct64_step3_lsx 3765*c0909341SAndroid Build Coastguard Worker li.w t8, 8 3766*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3767*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3768*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3769*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3770*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3771*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1 3772*c0909341SAndroid Build Coastguard Worker li.w t8, 48 3773*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3774*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3775*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3776*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3777*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3778*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3779*c0909341SAndroid Build Coastguard Worker 3780*c0909341SAndroid Build Coastguard Worker // 16 - 23, 40 - 47 3781*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3782*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3783*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3784*c0909341SAndroid Build Coastguard Worker dct64_step3_lsx 3785*c0909341SAndroid Build Coastguard Worker li.w t8, 16 3786*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3787*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3788*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3789*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3790*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3791*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1 3792*c0909341SAndroid Build Coastguard Worker li.w t8, 40 3793*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3794*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3795*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3796*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3797*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3798*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3799*c0909341SAndroid Build Coastguard Worker 3800*c0909341SAndroid Build Coastguard Worker // 24 - 31, 32 - 39 3801*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 3802*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, -16*8 3803*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, -16*8 3804*c0909341SAndroid Build Coastguard Worker dct64_step3_lsx 3805*c0909341SAndroid Build Coastguard Worker li.w t8, 24 3806*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3807*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3808*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3809*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3810*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3811*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr20, vr22, vr24, vr26, vr28, vr30, vr2, vr1 3812*c0909341SAndroid Build Coastguard Worker li.w t8, 32 3813*c0909341SAndroid Build Coastguard Worker mul.w t0, t8, a1 3814*c0909341SAndroid Build Coastguard Worker add.d t0, t0, a0 3815*c0909341SAndroid Build Coastguard Worker alsl.d t6, a1, t0, 1 3816*c0909341SAndroid Build Coastguard Worker addi.d t1, t0, 0 3817*c0909341SAndroid Build Coastguard Worker add.d t2, t0, a1 3818*c0909341SAndroid Build Coastguard Worker dct64_step5_lsx vr3, vr15, vr31, vr29, vr27, vr25, vr23, vr21 3819*c0909341SAndroid Build Coastguard Worker.endm 3820*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*0, 0, no_rect2 3821*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*1, 8, no_rect2 3822*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*2, 8, no_rect2 3823*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*3, 8, no_rect2 3824*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*4, 8, no_rect2 3825*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*5, 8, no_rect2 3826*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*6, 8, no_rect2 3827*c0909341SAndroid Build Coastguard Worker dct64x64_core2_lsx 16*7, 8, no_rect2 3828*c0909341SAndroid Build Coastguard Worker 3829*c0909341SAndroid Build Coastguard Worker free_space 64*32*2+512+512 3830*c0909341SAndroid Build Coastguard Worker.DCT_DCT_64X64_END: 3831*c0909341SAndroid Build Coastguard Workerendfunc 3832*c0909341SAndroid Build Coastguard Worker 3833*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_64x32_8bpc_lsx 3834*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_64x32 3835*c0909341SAndroid Build Coastguard Worker 3836*c0909341SAndroid Build Coastguard Worker idct_dc_w64 64, 32, 1 3837*c0909341SAndroid Build Coastguard Worker 3838*c0909341SAndroid Build Coastguard Worker DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 3839*c0909341SAndroid Build Coastguard Worker 3840*c0909341SAndroid Build Coastguard Worker li.w t3, 31 3841*c0909341SAndroid Build Coastguard Worker.loop31: 3842*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 3843*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 3844*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 3845*c0909341SAndroid Build Coastguard Worker vld vr12, a0, 32 3846*c0909341SAndroid Build Coastguard Worker vld vr13, a0, 48 3847*c0909341SAndroid Build Coastguard Worker DST_ADD_W64 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 3848*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, -1 3849*c0909341SAndroid Build Coastguard Worker blt zero, t3, .loop31 3850*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_64X32_END 3851*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_64x32: 3852*c0909341SAndroid Build Coastguard Worker malloc_space 64*32*2+512+512 3853*c0909341SAndroid Build Coastguard Worker 3854*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 3855*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 3856*c0909341SAndroid Build Coastguard Worker addi.d t7, sp, 64 3857*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 0 3858*c0909341SAndroid Build Coastguard Worker addi.d a4, a2, 64 3859*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x32: 3860*c0909341SAndroid Build Coastguard Worker ld.h a5, t8, 0 3861*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, 2 3862*c0909341SAndroid Build Coastguard Worker dct64x64_core1_lsx 1, rect2_lsx 3863*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 3864*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 128*8 3865*c0909341SAndroid Build Coastguard Worker addi.d a4, a4, 16 3866*c0909341SAndroid Build Coastguard Worker bge a3, a5, .DCT_DCT_EOB_64x32 3867*c0909341SAndroid Build Coastguard Worker 3868*c0909341SAndroid Build Coastguard Worker la.local t8, eob_32x32 3869*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 3870*c0909341SAndroid Build Coastguard Worker 3871*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 4 3872*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x32_END 3873*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*3+64 3874*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3875*c0909341SAndroid Build Coastguard Worker.rept 4 3876*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3877*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3878*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3879*c0909341SAndroid Build Coastguard Worker.endr 3880*c0909341SAndroid Build Coastguard Worker 3881*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 2 3882*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x32_END 3883*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*2+64 3884*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3885*c0909341SAndroid Build Coastguard Worker.rept 4 3886*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3887*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3888*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3889*c0909341SAndroid Build Coastguard Worker.endr 3890*c0909341SAndroid Build Coastguard Worker 3891*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 3892*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_64x32_END 3893*c0909341SAndroid Build Coastguard Worker li.d t1, 1024*1+64 3894*c0909341SAndroid Build Coastguard Worker add.d t0, sp, t1 3895*c0909341SAndroid Build Coastguard Worker.rept 4 3896*c0909341SAndroid Build Coastguard Worker vst_x16 t0, 0, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31, \ 3897*c0909341SAndroid Build Coastguard Worker vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 3898*c0909341SAndroid Build Coastguard Worker addi.d t0, t0, 256 3899*c0909341SAndroid Build Coastguard Worker.endr 3900*c0909341SAndroid Build Coastguard Worker 3901*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_64x32_END: 3902*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 3903*c0909341SAndroid Build Coastguard Worker li.w t4, 64*32*2+64 3904*c0909341SAndroid Build Coastguard Worker add.d t3, sp, t4 3905*c0909341SAndroid Build Coastguard Worker addi.d t5, sp, 64 3906*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 1024 3907*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 1024 3908*c0909341SAndroid Build Coastguard Worker.rept 8 3909*c0909341SAndroid Build Coastguard Worker vld_x8 t2, 0, 256, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3910*c0909341SAndroid Build Coastguard Worker 3911*c0909341SAndroid Build Coastguard Worker addi.d t4, t2, 1024 3912*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1024 3913*c0909341SAndroid Build Coastguard Worker 3914*c0909341SAndroid Build Coastguard Worker vld_x8 t4, 0, 256, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 3915*c0909341SAndroid Build Coastguard Worker 3916*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx no_rect2 3917*c0909341SAndroid Build Coastguard Worker 3918*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 3919*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 3920*c0909341SAndroid Build Coastguard Worker 3921*c0909341SAndroid Build Coastguard Worker addi.d t4, t2, 128 3922*c0909341SAndroid Build Coastguard Worker vld_x8 t4, 0, 256, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3923*c0909341SAndroid Build Coastguard Worker 3924*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1024 3925*c0909341SAndroid Build Coastguard Worker addi.d t4, t4, 1024 3926*c0909341SAndroid Build Coastguard Worker 3927*c0909341SAndroid Build Coastguard Worker vld_x8 t4, 0, 256, vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 3928*c0909341SAndroid Build Coastguard Worker 3929*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t5, t3, 0, 128, 16, -2048, 1024, -1024, 0, 128, , 4 3930*c0909341SAndroid Build Coastguard Worker 3931*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 16 3932*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 16 3933*c0909341SAndroid Build Coastguard Worker addi.d t1, t1, 16 3934*c0909341SAndroid Build Coastguard Worker.endr 3935*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 3936*c0909341SAndroid Build Coastguard Worker li.w t3, 32 3937*c0909341SAndroid Build Coastguard Worker.loop32: 3938*c0909341SAndroid Build Coastguard Worker vld vr10, a0, 0 3939*c0909341SAndroid Build Coastguard Worker vld vr11, a0, 16 3940*c0909341SAndroid Build Coastguard Worker vld vr12, a0, 32 3941*c0909341SAndroid Build Coastguard Worker vld vr13, a0, 48 3942*c0909341SAndroid Build Coastguard Worker vld_x8 t2, 0, 16, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 3943*c0909341SAndroid Build Coastguard Worker DST_ADD_W64 vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 3944*c0909341SAndroid Build Coastguard Worker add.d a0, a0, a1 3945*c0909341SAndroid Build Coastguard Worker addi.d t2, t2, 128 3946*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, -1 3947*c0909341SAndroid Build Coastguard Worker blt zero, t3, .loop32 3948*c0909341SAndroid Build Coastguard Worker 3949*c0909341SAndroid Build Coastguard Worker free_space 64*32*2+512+512 3950*c0909341SAndroid Build Coastguard Worker.DCT_DCT_64X32_END: 3951*c0909341SAndroid Build Coastguard Workerendfunc 3952*c0909341SAndroid Build Coastguard Worker 3953*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W8_H32 in0 3954*c0909341SAndroid Build Coastguard Worker vld vr4, t3, 0 3955*c0909341SAndroid Build Coastguard Worker vld vr5, t3, 16 3956*c0909341SAndroid Build Coastguard Worker vld vr6, t3, 32 3957*c0909341SAndroid Build Coastguard Worker vld vr7, t3, 48 3958*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr4, vr5, vr6, vr7 3959*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 64 3960*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 3961*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 2 3962*c0909341SAndroid Build Coastguard Worker vld vr4, t3, 0 3963*c0909341SAndroid Build Coastguard Worker vld vr5, t3, 16 3964*c0909341SAndroid Build Coastguard Worker vld vr6, t3, 32 3965*c0909341SAndroid Build Coastguard Worker vld vr7, t3, 48 3966*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr4, vr5, vr6, vr7 3967*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, \in0 3968*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 3969*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 2 3970*c0909341SAndroid Build Coastguard Worker.endm 3971*c0909341SAndroid Build Coastguard Worker 3972*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_8x32_8bpc_lsx 3973*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_8x32 3974*c0909341SAndroid Build Coastguard Worker 3975*c0909341SAndroid Build Coastguard Worker idct_dc 8, 32, 2 3976*c0909341SAndroid Build Coastguard Worker 3977*c0909341SAndroid Build Coastguard Worker DST_ADD_W8 vr10, vr11, vr12, vr13, vr20, vr20, vr20, vr20 3978*c0909341SAndroid Build Coastguard Worker.rept 7 3979*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 3980*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 3981*c0909341SAndroid Build Coastguard Worker 3982*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr20, vr20, vr20, vr20 3983*c0909341SAndroid Build Coastguard Worker.endr 3984*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_8X32_END 3985*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_8x32: 3986*c0909341SAndroid Build Coastguard Worker malloc_space 512 3987*c0909341SAndroid Build Coastguard Worker 3988*c0909341SAndroid Build Coastguard Worker la.local t8, eob_8x32 3989*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 3990*c0909341SAndroid Build Coastguard Worker addi.d t2, a2, 0 3991*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_8x32: 3992*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 3993*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, 2 3994*c0909341SAndroid Build Coastguard Worker 3995*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 3996*c0909341SAndroid Build Coastguard Worker 3997*c0909341SAndroid Build Coastguard Worker inv_dct8_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, .8h 3998*c0909341SAndroid Build Coastguard Worker 3999*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 4000*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 2 4001*c0909341SAndroid Build Coastguard Worker.endr 4002*c0909341SAndroid Build Coastguard Worker 4003*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 4004*c0909341SAndroid Build Coastguard Worker vst_x8 a2, 0, 64, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4005*c0909341SAndroid Build Coastguard Worker 4006*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4007*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4008*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4009*c0909341SAndroid Build Coastguard Worker 4010*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 4011*c0909341SAndroid Build Coastguard Worker 4012*c0909341SAndroid Build Coastguard Worker addi.d a2, a2, 16 4013*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 4014*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_8x32 4015*c0909341SAndroid Build Coastguard Worker 4016*c0909341SAndroid Build Coastguard Worker la.local t8, eob_8x32 4017*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 4018*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 4 4019*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_8x32_END 4020*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+384, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4021*c0909341SAndroid Build Coastguard Worker 4022*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 2 4023*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_8x32_END 4024*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+256, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4025*c0909341SAndroid Build Coastguard Worker 4026*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 4027*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_8x32_END 4028*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+128, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4029*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_8x32_END: 4030*c0909341SAndroid Build Coastguard Worker addi.d t2, sp, 64 4031*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 4032*c0909341SAndroid Build Coastguard Worker 4033*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4034*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4035*c0909341SAndroid Build Coastguard Worker 4036*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 4037*c0909341SAndroid Build Coastguard Worker 4038*c0909341SAndroid Build Coastguard Worker vst_x16 t3, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4039*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4040*c0909341SAndroid Build Coastguard Worker 4041*c0909341SAndroid Build Coastguard Worker vld_x16 t2, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4042*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 4043*c0909341SAndroid Build Coastguard Worker 4044*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t2, t3, 0, 256, 32, 0, 128, 256, 384, 16, , 4 4045*c0909341SAndroid Build Coastguard Worker 4046*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4047*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 4048*c0909341SAndroid Build Coastguard Worker 4049*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8_H32 320 4050*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8_H32 448 4051*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8_H32 192 4052*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8_H32 0 4053*c0909341SAndroid Build Coastguard Worker 4054*c0909341SAndroid Build Coastguard Worker free_space 512 4055*c0909341SAndroid Build Coastguard Worker.DCT_DCT_8X32_END: 4056*c0909341SAndroid Build Coastguard Workerendfunc 4057*c0909341SAndroid Build Coastguard Worker 4058*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_identity_identity_8x32_8bpc_lsx 4059*c0909341SAndroid Build Coastguard Worker la.local t7, eob_8x32 4060*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4061*c0909341SAndroid Build Coastguard Worker 4062*c0909341SAndroid Build Coastguard Worker.IDENTITY_IDENTITY_EOB_8x32: 4063*c0909341SAndroid Build Coastguard Worker ld.h t6, t7, 0 4064*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 2 4065*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 4066*c0909341SAndroid Build Coastguard Worker 4067*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 4068*c0909341SAndroid Build Coastguard Worker vst_x8 a2, 0, 64, vr23, vr23, vr23, vr23, vr23, vr23, vr23, vr23 4069*c0909341SAndroid Build Coastguard Worker 4070*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7 4071*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 1 4072*c0909341SAndroid Build Coastguard Worker.endr 4073*c0909341SAndroid Build Coastguard Worker 4074*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4075*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23, \ 4076*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4077*c0909341SAndroid Build Coastguard Worker 4078*c0909341SAndroid Build Coastguard Worker.irp i, vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4079*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 2 4080*c0909341SAndroid Build Coastguard Worker.endr 4081*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr16, vr17, vr18, vr19 4082*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 4083*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4084*c0909341SAndroid Build Coastguard Worker 4085*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W8 vr20, vr21, vr22, vr23 4086*c0909341SAndroid Build Coastguard Worker add.d a0, a1, a0 4087*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4088*c0909341SAndroid Build Coastguard Worker 4089*c0909341SAndroid Build Coastguard Worker addi.d a2, a2, 16 4090*c0909341SAndroid Build Coastguard Worker bge a3, t6, .IDENTITY_IDENTITY_EOB_8x32 4091*c0909341SAndroid Build Coastguard Workerendfunc 4092*c0909341SAndroid Build Coastguard Worker 4093*c0909341SAndroid Build Coastguard Worker.macro def_fn_16x4_base txfm 4094*c0909341SAndroid Build Coastguard Workerfunctionl inv_txfm_\txfm\()add_16x4_lsx 4095*c0909341SAndroid Build Coastguard Worker vld_x8 a2, 0, 16, vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14 4096*c0909341SAndroid Build Coastguard Worker 4097*c0909341SAndroid Build Coastguard Worker.ifc \txfm, identity_ 4098*c0909341SAndroid Build Coastguard Worker li.w t0, 1697 4099*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr20, t0 4100*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr2, vr4, vr6, vr8, vr10, vr12, vr14 4101*c0909341SAndroid Build Coastguard Worker inv_identity16_lsx \i, vr20, \i, \i, .8h 4102*c0909341SAndroid Build Coastguard Worker.endr 4103*c0909341SAndroid Build Coastguard Worker 4104*c0909341SAndroid Build Coastguard Worker vilvh.d vr1, vr0, vr0 4105*c0909341SAndroid Build Coastguard Worker vilvh.d vr3, vr2, vr2 4106*c0909341SAndroid Build Coastguard Worker vilvh.d vr5, vr4, vr4 4107*c0909341SAndroid Build Coastguard Worker vilvh.d vr7, vr6, vr6 4108*c0909341SAndroid Build Coastguard Worker vilvh.d vr9, vr8, vr8 4109*c0909341SAndroid Build Coastguard Worker vilvh.d vr11, vr10, vr10 4110*c0909341SAndroid Build Coastguard Worker vilvh.d vr13, vr12, vr12 4111*c0909341SAndroid Build Coastguard Worker vilvh.d vr15, vr14, vr14 4112*c0909341SAndroid Build Coastguard Worker.else 4113*c0909341SAndroid Build Coastguard Worker vilvh.d vr1, vr0, vr0 4114*c0909341SAndroid Build Coastguard Worker vilvh.d vr3, vr2, vr2 4115*c0909341SAndroid Build Coastguard Worker vilvh.d vr5, vr4, vr4 4116*c0909341SAndroid Build Coastguard Worker vilvh.d vr7, vr6, vr6 4117*c0909341SAndroid Build Coastguard Worker vilvh.d vr9, vr8, vr8 4118*c0909341SAndroid Build Coastguard Worker vilvh.d vr11, vr10, vr10 4119*c0909341SAndroid Build Coastguard Worker vilvh.d vr13, vr12, vr12 4120*c0909341SAndroid Build Coastguard Worker vilvh.d vr15, vr14, vr14 4121*c0909341SAndroid Build Coastguard Worker 4122*c0909341SAndroid Build Coastguard Worker move t6, ra 4123*c0909341SAndroid Build Coastguard Worker jirl ra, t7, 0 4124*c0909341SAndroid Build Coastguard Worker move ra, t6 4125*c0909341SAndroid Build Coastguard Worker.endif 4126*c0909341SAndroid Build Coastguard Worker 4127*c0909341SAndroid Build Coastguard Worker vxor.v vr23, vr23, vr23 4128*c0909341SAndroid Build Coastguard Worker vst_x8 a2, 0, 16, vr23, vr23, vr23, vr23, vr23, vr23, vr23, vr23 4129*c0909341SAndroid Build Coastguard Worker 4130*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x4_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, vr0, vr1, \ 4131*c0909341SAndroid Build Coastguard Worker vr2, vr3, vr16, vr17, vr18, vr19, vr20, vr21 4132*c0909341SAndroid Build Coastguard Worker 4133*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x4_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, vr4, \ 4134*c0909341SAndroid Build Coastguard Worker vr5, vr6, vr7, vr16, vr17, vr18, vr19, vr20, vr21 4135*c0909341SAndroid Build Coastguard Worker 4136*c0909341SAndroid Build Coastguard Worker vsrari.h vr0, vr0, 1 4137*c0909341SAndroid Build Coastguard Worker vsrari.h vr1, vr1, 1 4138*c0909341SAndroid Build Coastguard Worker vsrari.h vr2, vr2, 1 4139*c0909341SAndroid Build Coastguard Worker vsrari.h vr3, vr3, 1 4140*c0909341SAndroid Build Coastguard Worker move t6, ra 4141*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 4142*c0909341SAndroid Build Coastguard Worker move ra, t6 4143*c0909341SAndroid Build Coastguard Worker 4144*c0909341SAndroid Build Coastguard Worker vsrari.h vr8, vr0, 4 4145*c0909341SAndroid Build Coastguard Worker vsrari.h vr9, vr1, 4 4146*c0909341SAndroid Build Coastguard Worker vsrari.h vr10, vr2, 4 4147*c0909341SAndroid Build Coastguard Worker vsrari.h vr11, vr3, 4 4148*c0909341SAndroid Build Coastguard Worker vsrari.h vr0, vr4, 1 4149*c0909341SAndroid Build Coastguard Worker vsrari.h vr1, vr5, 1 4150*c0909341SAndroid Build Coastguard Worker vsrari.h vr2, vr6, 1 4151*c0909341SAndroid Build Coastguard Worker vsrari.h vr3, vr7, 1 4152*c0909341SAndroid Build Coastguard Worker 4153*c0909341SAndroid Build Coastguard Worker move t6, ra 4154*c0909341SAndroid Build Coastguard Worker jirl ra, t8, 0 4155*c0909341SAndroid Build Coastguard Worker move ra, t6 4156*c0909341SAndroid Build Coastguard Worker 4157*c0909341SAndroid Build Coastguard Worker vsrari.h vr16, vr0, 4 4158*c0909341SAndroid Build Coastguard Worker vsrari.h vr17, vr1, 4 4159*c0909341SAndroid Build Coastguard Worker vsrari.h vr18, vr2, 4 4160*c0909341SAndroid Build Coastguard Worker vsrari.h vr19, vr3, 4 4161*c0909341SAndroid Build Coastguard Worker 4162*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4163*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr8, vr16, vr9, vr17, vr10, vr18, vr11, vr19 4164*c0909341SAndroid Build Coastguard Workerendfuncl 4165*c0909341SAndroid Build Coastguard Worker.endm 4166*c0909341SAndroid Build Coastguard Worker 4167*c0909341SAndroid Build Coastguard Workerdef_fn_16x4_base identity_ 4168*c0909341SAndroid Build Coastguard Workerdef_fn_16x4_base 4169*c0909341SAndroid Build Coastguard Worker 4170*c0909341SAndroid Build Coastguard Worker.macro fn_16x4 txfm1, txfm2 4171*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_\txfm1\()_\txfm2\()_16x4_8bpc_lsx 4172*c0909341SAndroid Build Coastguard Worker.ifc \txfm1\()_\txfm2, dct_dct 4173*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_16x4 4174*c0909341SAndroid Build Coastguard Worker 4175*c0909341SAndroid Build Coastguard Worker idct_dc 16, 4, 1 4176*c0909341SAndroid Build Coastguard Worker 4177*c0909341SAndroid Build Coastguard Worker DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \ 4178*c0909341SAndroid Build Coastguard Worker vr20, vr20, vr20, vr20, vr20 4179*c0909341SAndroid Build Coastguard Worker b .\txfm1\()_\txfm2\()_16x4_END 4180*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x4: 4181*c0909341SAndroid Build Coastguard Worker.endif 4182*c0909341SAndroid Build Coastguard Worker 4183*c0909341SAndroid Build Coastguard Worker.ifnc \txfm1, identity 4184*c0909341SAndroid Build Coastguard Worker la.local t7, inv_\txfm1\()_4h_x16_lsx 4185*c0909341SAndroid Build Coastguard Worker.endif 4186*c0909341SAndroid Build Coastguard Worker la.local t8, inv_\txfm2\()_8h_x4_lsx 4187*c0909341SAndroid Build Coastguard Worker 4188*c0909341SAndroid Build Coastguard Worker.ifc \txfm1, identity 4189*c0909341SAndroid Build Coastguard Worker b inv_txfm_identity_add_16x4_lsx 4190*c0909341SAndroid Build Coastguard Worker.else 4191*c0909341SAndroid Build Coastguard Worker b inv_txfm_add_16x4_lsx 4192*c0909341SAndroid Build Coastguard Worker.endif 4193*c0909341SAndroid Build Coastguard Worker.\txfm1\()_\txfm2\()_16x4_END: 4194*c0909341SAndroid Build Coastguard Workerendfunc 4195*c0909341SAndroid Build Coastguard Worker.endm 4196*c0909341SAndroid Build Coastguard Worker 4197*c0909341SAndroid Build Coastguard Workerfn_16x4 dct, dct 4198*c0909341SAndroid Build Coastguard Workerfn_16x4 identity, identity 4199*c0909341SAndroid Build Coastguard Workerfn_16x4 adst, dct 4200*c0909341SAndroid Build Coastguard Worker 4201*c0909341SAndroid Build Coastguard Worker.macro VLD_DST_ADD_W16_H32 in0 4202*c0909341SAndroid Build Coastguard Worker vld vr14, t3, 0 4203*c0909341SAndroid Build Coastguard Worker vld vr15, t3, 16 4204*c0909341SAndroid Build Coastguard Worker vld vr16, t3, 32 4205*c0909341SAndroid Build Coastguard Worker vld vr17, t3, 48 4206*c0909341SAndroid Build Coastguard Worker vld vr18, t5, 0 4207*c0909341SAndroid Build Coastguard Worker vld vr19, t5, 16 4208*c0909341SAndroid Build Coastguard Worker vld vr20, t5, 32 4209*c0909341SAndroid Build Coastguard Worker vld vr21, t5, 48 4210*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, \ 4211*c0909341SAndroid Build Coastguard Worker vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, 4 4212*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21 4213*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4214*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 2 4215*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 64 4216*c0909341SAndroid Build Coastguard Worker addi.d t5, t5, 64 4217*c0909341SAndroid Build Coastguard Worker vld vr14, t3, 0 4218*c0909341SAndroid Build Coastguard Worker vld vr15, t3, 16 4219*c0909341SAndroid Build Coastguard Worker vld vr16, t3, 32 4220*c0909341SAndroid Build Coastguard Worker vld vr17, t3, 48 4221*c0909341SAndroid Build Coastguard Worker vld vr18, t5, 0 4222*c0909341SAndroid Build Coastguard Worker vld vr19, t5, 16 4223*c0909341SAndroid Build Coastguard Worker vld vr20, t5, 32 4224*c0909341SAndroid Build Coastguard Worker vld vr21, t5, 48 4225*c0909341SAndroid Build Coastguard Worker vsrari_h_x8 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, \ 4226*c0909341SAndroid Build Coastguard Worker vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21, 4 4227*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr14, vr18, vr15, vr19, vr16, vr20, vr17, vr21 4228*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4229*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, t2, 2 4230*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, \in0 4231*c0909341SAndroid Build Coastguard Worker addi.d t5, sp, \in0+512 4232*c0909341SAndroid Build Coastguard Worker.endm 4233*c0909341SAndroid Build Coastguard Worker 4234*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_dct_dct_16x32_8bpc_lsx 4235*c0909341SAndroid Build Coastguard Worker bnez a3, .NO_HAS_DCONLY_16x32 4236*c0909341SAndroid Build Coastguard Worker 4237*c0909341SAndroid Build Coastguard Worker idct_dc 16, 32, 1 4238*c0909341SAndroid Build Coastguard Worker 4239*c0909341SAndroid Build Coastguard Worker DST_ADD_W16 vr10, vr11, vr12, vr13, vr20, vr20, vr20, \ 4240*c0909341SAndroid Build Coastguard Worker vr20, vr20, vr20, vr20, vr20 4241*c0909341SAndroid Build Coastguard Worker.rept 7 4242*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4243*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4244*c0909341SAndroid Build Coastguard Worker 4245*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16 vr20, vr20, vr20, vr20, vr20, vr20, vr20, vr20 4246*c0909341SAndroid Build Coastguard Worker.endr 4247*c0909341SAndroid Build Coastguard Worker b .DCT_DCT_16x32_END 4248*c0909341SAndroid Build Coastguard Worker.NO_HAS_DCONLY_16x32: 4249*c0909341SAndroid Build Coastguard Worker malloc_space 512+512 4250*c0909341SAndroid Build Coastguard Worker 4251*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 4252*c0909341SAndroid Build Coastguard Worker la.local t8, eob_16x32 4253*c0909341SAndroid Build Coastguard Worker 4254*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_16x32: 4255*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 4256*c0909341SAndroid Build Coastguard Worker addi.d t8, t8, 2 4257*c0909341SAndroid Build Coastguard Worker vld_x16 a2, 0, 64, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4258*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4259*c0909341SAndroid Build Coastguard Worker 4260*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 4261*c0909341SAndroid Build Coastguard Worker.irp i, 0, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960 4262*c0909341SAndroid Build Coastguard Worker vst vr31, a2, \i 4263*c0909341SAndroid Build Coastguard Worker.endr 4264*c0909341SAndroid Build Coastguard Worker 4265*c0909341SAndroid Build Coastguard Worker li.w t0, 2896 4266*c0909341SAndroid Build Coastguard Worker vreplgr2vr.w vr23, t0 4267*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4268*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4269*c0909341SAndroid Build Coastguard Worker rect2_lsx \i, vr23, \i 4270*c0909341SAndroid Build Coastguard Worker.endr 4271*c0909341SAndroid Build Coastguard Worker 4272*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 4273*c0909341SAndroid Build Coastguard Worker 4274*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4275*c0909341SAndroid Build Coastguard Worker vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4276*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4277*c0909341SAndroid Build Coastguard Worker 4278*c0909341SAndroid Build Coastguard Worker LSX_TRANSPOSE8x8_H vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 4279*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15, \ 4280*c0909341SAndroid Build Coastguard Worker vr16, vr17, vr18, vr19, vr20, vr21, vr22, vr23 4281*c0909341SAndroid Build Coastguard Worker 4282*c0909341SAndroid Build Coastguard Worker.irp i, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4283*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4284*c0909341SAndroid Build Coastguard Worker vsrari.h \i, \i, 1 4285*c0909341SAndroid Build Coastguard Worker.endr 4286*c0909341SAndroid Build Coastguard Worker 4287*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 0, 16, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, 4288*c0909341SAndroid Build Coastguard Worker vst_x8 t3, 512, 16, vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4289*c0909341SAndroid Build Coastguard Worker 4290*c0909341SAndroid Build Coastguard Worker addi.d a2, a2, 16 4291*c0909341SAndroid Build Coastguard Worker addi.d t3, t3, 128 4292*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_16x32 4293*c0909341SAndroid Build Coastguard Worker 4294*c0909341SAndroid Build Coastguard Worker la.local t8, eob_16x32 4295*c0909341SAndroid Build Coastguard Worker vxor.v vr31, vr31, vr31 4296*c0909341SAndroid Build Coastguard Worker 4297*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 4 4298*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_16x32_END 4299*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+384, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4300*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+896, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4301*c0909341SAndroid Build Coastguard Worker 4302*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 2 4303*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_16x32_END 4304*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+256, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4305*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+768, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4306*c0909341SAndroid Build Coastguard Worker 4307*c0909341SAndroid Build Coastguard Worker ld.h t7, t8, 0 4308*c0909341SAndroid Build Coastguard Worker bge a3, t7, .DCT_DCT_EOB_16x32_END 4309*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+128, 16, vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4310*c0909341SAndroid Build Coastguard Worker vst_x8 sp, 64+512+128, 16 vr31, vr31, vr31, vr31, vr31, vr31, vr31, vr31 4311*c0909341SAndroid Build Coastguard Worker 4312*c0909341SAndroid Build Coastguard Worker.DCT_DCT_EOB_16x32_END: 4313*c0909341SAndroid Build Coastguard Worker addi.d t7, sp, 64 4314*c0909341SAndroid Build Coastguard Worker.rept 2 4315*c0909341SAndroid Build Coastguard Worker vld_x16 t7, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4316*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4317*c0909341SAndroid Build Coastguard Worker 4318*c0909341SAndroid Build Coastguard Worker inv_dct16_lsx .8h 4319*c0909341SAndroid Build Coastguard Worker 4320*c0909341SAndroid Build Coastguard Worker vst_x16 t7, 0, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4321*c0909341SAndroid Build Coastguard Worker vr8, vr9, vr10, vr11, vr12, vr13, vr14, vr15 4322*c0909341SAndroid Build Coastguard Worker 4323*c0909341SAndroid Build Coastguard Worker vld_x16 t7, 16, 32, vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7, \ 4324*c0909341SAndroid Build Coastguard Worker vr19, vr24, vr25, vr26, vr27, vr28, vr29, vr30 4325*c0909341SAndroid Build Coastguard Worker 4326*c0909341SAndroid Build Coastguard Worker dct_8x32_core_lsx t7, t7, 0, 256, 32, 0, 128, 256, 384, 16, , 4327*c0909341SAndroid Build Coastguard Worker 4328*c0909341SAndroid Build Coastguard Worker addi.d t7, t7, 512 4329*c0909341SAndroid Build Coastguard Worker.endr 4330*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4331*c0909341SAndroid Build Coastguard Worker addi.d t3, sp, 64 4332*c0909341SAndroid Build Coastguard Worker addi.d t5, sp, 512+64 4333*c0909341SAndroid Build Coastguard Worker 4334*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16_H32 320 4335*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16_H32 448 4336*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16_H32 192 4337*c0909341SAndroid Build Coastguard Worker VLD_DST_ADD_W16_H32 0 4338*c0909341SAndroid Build Coastguard Worker 4339*c0909341SAndroid Build Coastguard Worker free_space 512+512 4340*c0909341SAndroid Build Coastguard Worker.DCT_DCT_16x32_END: 4341*c0909341SAndroid Build Coastguard Workerendfunc 4342*c0909341SAndroid Build Coastguard Worker 4343*c0909341SAndroid Build Coastguard Worker.macro xvmulev_xvmaddod_lasx in0, in1, in2, in3, out0, out1 4344*c0909341SAndroid Build Coastguard Worker xvmulwev.w.h \out0, \in0, \in2 4345*c0909341SAndroid Build Coastguard Worker xvmulwod.w.h \out1, \in0, \in2 4346*c0909341SAndroid Build Coastguard Worker xvmaddwev.w.h \out0, \in1, \in3 4347*c0909341SAndroid Build Coastguard Worker xvmaddwod.w.h \out1, \in1, \in3 4348*c0909341SAndroid Build Coastguard Worker.endm 4349*c0909341SAndroid Build Coastguard Worker 4350*c0909341SAndroid Build Coastguard Worker.macro xvsrari_h_x16 in0, in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, \ 4351*c0909341SAndroid Build Coastguard Worker in11, in12, in13, in14, in15, out0, out1, out2, out3, \ 4352*c0909341SAndroid Build Coastguard Worker out4, out5, out6, out7, out8, out9, out10, out11, out12, \ 4353*c0909341SAndroid Build Coastguard Worker out13, out14, out15, shift 4354*c0909341SAndroid Build Coastguard Worker xvsrari.h \out0, \in0, \shift 4355*c0909341SAndroid Build Coastguard Worker xvsrari.h \out1, \in1, \shift 4356*c0909341SAndroid Build Coastguard Worker xvsrari.h \out2, \in2, \shift 4357*c0909341SAndroid Build Coastguard Worker xvsrari.h \out3, \in3, \shift 4358*c0909341SAndroid Build Coastguard Worker xvsrari.h \out4, \in4, \shift 4359*c0909341SAndroid Build Coastguard Worker xvsrari.h \out5, \in5, \shift 4360*c0909341SAndroid Build Coastguard Worker xvsrari.h \out6, \in6, \shift 4361*c0909341SAndroid Build Coastguard Worker xvsrari.h \out7, \in7, \shift 4362*c0909341SAndroid Build Coastguard Worker xvsrari.h \out8, \in8, \shift 4363*c0909341SAndroid Build Coastguard Worker xvsrari.h \out9, \in9, \shift 4364*c0909341SAndroid Build Coastguard Worker xvsrari.h \out10, \in10, \shift 4365*c0909341SAndroid Build Coastguard Worker xvsrari.h \out11, \in11, \shift 4366*c0909341SAndroid Build Coastguard Worker xvsrari.h \out12, \in12, \shift 4367*c0909341SAndroid Build Coastguard Worker xvsrari.h \out13, \in13, \shift 4368*c0909341SAndroid Build Coastguard Worker xvsrari.h \out14, \in14, \shift 4369*c0909341SAndroid Build Coastguard Worker xvsrari.h \out15, \in15, \shift 4370*c0909341SAndroid Build Coastguard Worker.endm 4371*c0909341SAndroid Build Coastguard Worker 4372*c0909341SAndroid Build Coastguard Worker.macro xvpermi_q_x2 in0, in1, in2, in3, out0, out1, out2, out3, tmp0, tmp1 4373*c0909341SAndroid Build Coastguard Worker xvor.v \tmp0, \in0, \in0 4374*c0909341SAndroid Build Coastguard Worker xvor.v \tmp1, \in1, \in1 4375*c0909341SAndroid Build Coastguard Worker xvpermi.q \out0, \in2, 0x02 4376*c0909341SAndroid Build Coastguard Worker xvpermi.q \out1, \in3, 0x02 4377*c0909341SAndroid Build Coastguard Worker xvpermi.q \out2, \tmp0, 0x31 4378*c0909341SAndroid Build Coastguard Worker xvpermi.q \out3, \tmp1, 0x31 4379*c0909341SAndroid Build Coastguard Worker.endm 4380*c0909341SAndroid Build Coastguard Worker 4381*c0909341SAndroid Build Coastguard Worker.macro DST_ADD_W16_LASX in0, in1, in2, in3, in4, in5, in6, in7 4382*c0909341SAndroid Build Coastguard Worker vext2xv.hu.bu xr0, \in0 4383*c0909341SAndroid Build Coastguard Worker vext2xv.hu.bu xr1, \in1 4384*c0909341SAndroid Build Coastguard Worker vext2xv.hu.bu xr2, \in2 4385*c0909341SAndroid Build Coastguard Worker vext2xv.hu.bu xr3, \in3 4386*c0909341SAndroid Build Coastguard Worker xvadd.h xr0, xr0, \in4 4387*c0909341SAndroid Build Coastguard Worker xvadd.h xr1, xr1, \in5 4388*c0909341SAndroid Build Coastguard Worker xvadd.h xr2, xr2, \in6 4389*c0909341SAndroid Build Coastguard Worker xvadd.h xr3, xr3, \in7 4390*c0909341SAndroid Build Coastguard Worker xvssrani.bu.h xr1, xr0, 0 4391*c0909341SAndroid Build Coastguard Worker xvssrani.bu.h xr3, xr2, 0 4392*c0909341SAndroid Build Coastguard Worker xvpermi.d xr0, xr1, 0b11011000 4393*c0909341SAndroid Build Coastguard Worker xvpermi.d xr2, xr3, 0b11011000 4394*c0909341SAndroid Build Coastguard Worker xvpermi.d xr1, xr0, 0b00001110 4395*c0909341SAndroid Build Coastguard Worker xvpermi.d xr3, xr2, 0b00001110 4396*c0909341SAndroid Build Coastguard Worker vst vr0, a0, 0 4397*c0909341SAndroid Build Coastguard Worker vstx vr1, a0, a1 4398*c0909341SAndroid Build Coastguard Worker vst vr2, t2, 0 4399*c0909341SAndroid Build Coastguard Worker vstx vr3, t2, a1 4400*c0909341SAndroid Build Coastguard Worker.endm 4401*c0909341SAndroid Build Coastguard Worker 4402*c0909341SAndroid Build Coastguard Worker.macro XVLD_DST_ADD_W16 in0, in1, in2, in3 4403*c0909341SAndroid Build Coastguard Worker vld vr0, a0, 0 4404*c0909341SAndroid Build Coastguard Worker vldx vr1, a0, a1 4405*c0909341SAndroid Build Coastguard Worker vld vr2, t2, 0 4406*c0909341SAndroid Build Coastguard Worker vldx vr3, t2, a1 4407*c0909341SAndroid Build Coastguard Worker DST_ADD_W16_LASX xr0, xr1, xr2, xr3, \in0, \in1, \in2, \in3 4408*c0909341SAndroid Build Coastguard Worker.endm 4409*c0909341SAndroid Build Coastguard Worker 4410*c0909341SAndroid Build Coastguard Worker.macro inv_adst16_lasx 4411*c0909341SAndroid Build Coastguard Worker la.local t0, iadst16_coeffs_h 4412*c0909341SAndroid Build Coastguard Worker 4413*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 0 // 4091 4414*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 2 // 201 4415*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr15, xr0, xr20, xr21, xr16, xr18 4416*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4417*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr15, xr0, xr21, xr20, xr17, xr19 4418*c0909341SAndroid Build Coastguard Worker xvilvl.w xr15, xr18, xr16 4419*c0909341SAndroid Build Coastguard Worker xvilvl.w xr0, xr19, xr17 4420*c0909341SAndroid Build Coastguard Worker xvilvh.w xr18, xr18, xr16 4421*c0909341SAndroid Build Coastguard Worker xvilvh.w xr19, xr19, xr17 4422*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr18, xr15, 12 // t0 4423*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr19, xr0, 12 // t1 4424*c0909341SAndroid Build Coastguard Worker 4425*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 4 // 3973 4426*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 6 // 995 4427*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr2, xr20, xr21, xr16, xr0 4428*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4429*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr2, xr21, xr20, xr17, xr15 4430*c0909341SAndroid Build Coastguard Worker xvilvl.w xr13, xr0, xr16 4431*c0909341SAndroid Build Coastguard Worker xvilvl.w xr2, xr15, xr17 4432*c0909341SAndroid Build Coastguard Worker xvilvh.w xr0, xr0, xr16 4433*c0909341SAndroid Build Coastguard Worker xvilvh.w xr15, xr15, xr17 4434*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr0, xr13, 12 // t2 4435*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr15, xr2, 12 // t3 4436*c0909341SAndroid Build Coastguard Worker 4437*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 8 // 3703 4438*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 10 // 1751 4439*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr11, xr4, xr20, xr21, xr16, xr2 4440*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4441*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr11, xr4, xr21, xr20, xr17, xr13 4442*c0909341SAndroid Build Coastguard Worker xvilvl.w xr11, xr2, xr16 4443*c0909341SAndroid Build Coastguard Worker xvilvl.w xr4, xr13, xr17 4444*c0909341SAndroid Build Coastguard Worker xvilvh.w xr2, xr2, xr16 4445*c0909341SAndroid Build Coastguard Worker xvilvh.w xr13, xr13, xr17 4446*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr2, xr11, 12 // t4 4447*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr13, xr4, 12 // t5 4448*c0909341SAndroid Build Coastguard Worker 4449*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 12 // 3290 -> 1645 4450*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 14 // 2440 -> 1220 4451*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr9, xr6, xr20, xr21, xr16, xr4 4452*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4453*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr9, xr6, xr21, xr20, xr17, xr11 4454*c0909341SAndroid Build Coastguard Worker xvilvl.w xr9, xr4, xr16 4455*c0909341SAndroid Build Coastguard Worker xvilvl.w xr6, xr11, xr17 4456*c0909341SAndroid Build Coastguard Worker xvilvh.w xr4, xr4, xr16 4457*c0909341SAndroid Build Coastguard Worker xvilvh.w xr11, xr11, xr17 4458*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr4, xr9, 12 // t6 4459*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr11, xr6, 12 // t7 4460*c0909341SAndroid Build Coastguard Worker 4461*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 16 // 2751 4462*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 18 // 3035 4463*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr7, xr8, xr20, xr21, xr16, xr6 4464*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4465*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr7, xr8, xr21, xr20, xr17, xr9 4466*c0909341SAndroid Build Coastguard Worker xvilvl.w xr7, xr6, xr16 4467*c0909341SAndroid Build Coastguard Worker xvilvl.w xr8, xr9, xr17 4468*c0909341SAndroid Build Coastguard Worker xvilvh.w xr6, xr6, xr16 4469*c0909341SAndroid Build Coastguard Worker xvilvh.w xr9, xr9, xr17 4470*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr6, xr7, 12 // t8 4471*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr9, xr8, 12 // t9 4472*c0909341SAndroid Build Coastguard Worker 4473*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 20 // 2106 4474*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 22 // 3513 4475*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr5, xr10, xr20, xr21, xr16, xr7 4476*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4477*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr5, xr10, xr21, xr20, xr17, xr8 4478*c0909341SAndroid Build Coastguard Worker xvilvl.w xr5, xr7, xr16 4479*c0909341SAndroid Build Coastguard Worker xvilvl.w xr10, xr8, xr17 4480*c0909341SAndroid Build Coastguard Worker xvilvh.w xr7, xr7, xr16 4481*c0909341SAndroid Build Coastguard Worker xvilvh.w xr8, xr8, xr17 4482*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr7, xr5, 12 // t10 4483*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr8, xr10, 12 // t11 4484*c0909341SAndroid Build Coastguard Worker 4485*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 24 // 1380 4486*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 26 // 3857 4487*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr3, xr12, xr20, xr21, xr16, xr5 4488*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4489*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr3, xr12, xr21, xr20, xr17, xr10 4490*c0909341SAndroid Build Coastguard Worker xvilvl.w xr3, xr5, xr16 4491*c0909341SAndroid Build Coastguard Worker xvilvl.w xr12, xr10, xr17 4492*c0909341SAndroid Build Coastguard Worker xvilvh.w xr5, xr5, xr16 4493*c0909341SAndroid Build Coastguard Worker xvilvh.w xr10, xr10, xr17 4494*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr5, xr3, 12 // t12 4495*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr10, xr12, 12 // t13 4496*c0909341SAndroid Build Coastguard Worker 4497*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 28 // 601 4498*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 30 // 4052 4499*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr1, xr14, xr20, xr21, xr16, xr3 4500*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4501*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr1, xr14, xr21, xr20, xr17, xr12 4502*c0909341SAndroid Build Coastguard Worker xvilvl.w xr1, xr3, xr16 4503*c0909341SAndroid Build Coastguard Worker xvilvl.w xr14, xr12, xr17 4504*c0909341SAndroid Build Coastguard Worker xvilvh.w xr3, xr3, xr16 4505*c0909341SAndroid Build Coastguard Worker xvilvh.w xr12, xr12, xr17 4506*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr3, xr1, 12 // t14 4507*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr12, xr14, 12 // t15 4508*c0909341SAndroid Build Coastguard Worker 4509*c0909341SAndroid Build Coastguard Worker xvsadd.h xr1, xr18, xr6 // t0a 4510*c0909341SAndroid Build Coastguard Worker xvssub.h xr14, xr18, xr6 // t8a 4511*c0909341SAndroid Build Coastguard Worker xvsadd.h xr16, xr19, xr9 // t1a 4512*c0909341SAndroid Build Coastguard Worker xvssub.h xr17, xr19, xr9 // t9a 4513*c0909341SAndroid Build Coastguard Worker xvsadd.h xr6, xr0, xr7 // t2a 4514*c0909341SAndroid Build Coastguard Worker xvssub.h xr18, xr0, xr7 // t10a 4515*c0909341SAndroid Build Coastguard Worker xvsadd.h xr9, xr15, xr8 // t3a 4516*c0909341SAndroid Build Coastguard Worker xvssub.h xr19, xr15, xr8 // t11a 4517*c0909341SAndroid Build Coastguard Worker xvsadd.h xr0, xr2, xr5 // t4a 4518*c0909341SAndroid Build Coastguard Worker xvssub.h xr7, xr2, xr5 // t12a 4519*c0909341SAndroid Build Coastguard Worker xvsadd.h xr8, xr13, xr10 // t5a 4520*c0909341SAndroid Build Coastguard Worker xvssub.h xr15, xr13, xr10 // t13a 4521*c0909341SAndroid Build Coastguard Worker xvsadd.h xr2, xr4, xr3 // t6a 4522*c0909341SAndroid Build Coastguard Worker xvssub.h xr5, xr4, xr3 // t14a 4523*c0909341SAndroid Build Coastguard Worker xvsadd.h xr10, xr11, xr12 // t7a 4524*c0909341SAndroid Build Coastguard Worker xvssub.h xr13, xr11, xr12 // t15a 4525*c0909341SAndroid Build Coastguard Worker 4526*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 4527*c0909341SAndroid Build Coastguard Worker 4528*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 8 // 799 4529*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 10 // 4017 4530*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr14, xr17, xr21, xr20, xr3, xr11 4531*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4532*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr14, xr17, xr20, xr21, xr4, xr12 4533*c0909341SAndroid Build Coastguard Worker xvilvl.w xr14, xr11, xr3 4534*c0909341SAndroid Build Coastguard Worker xvilvl.w xr17, xr12, xr4 4535*c0909341SAndroid Build Coastguard Worker xvilvh.w xr11, xr11, xr3 4536*c0909341SAndroid Build Coastguard Worker xvilvh.w xr12, xr12, xr4 4537*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr11, xr14, 12 // t8 4538*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr12, xr17, 12 // t9 4539*c0909341SAndroid Build Coastguard Worker 4540*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4541*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr15, xr7, xr20, xr21, xr3, xr14 4542*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4543*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr15, xr7, xr21, xr20, xr4, xr17 4544*c0909341SAndroid Build Coastguard Worker xvilvl.w xr15, xr14, xr3 4545*c0909341SAndroid Build Coastguard Worker xvilvl.w xr7, xr17, xr4 4546*c0909341SAndroid Build Coastguard Worker xvilvh.w xr14, xr14, xr3 4547*c0909341SAndroid Build Coastguard Worker xvilvh.w xr17, xr17, xr4 4548*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr14, xr15, 12 // t13 4549*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr17, xr7, 12 // t12 4550*c0909341SAndroid Build Coastguard Worker 4551*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 12 // 3406 4552*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 14 // 2276 4553*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr18, xr19, xr21, xr20, xr3, xr7 4554*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4555*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr18, xr19, xr20, xr21, xr4, xr15 4556*c0909341SAndroid Build Coastguard Worker xvilvl.w xr18, xr7, xr3 4557*c0909341SAndroid Build Coastguard Worker xvilvl.w xr19, xr15, xr4 4558*c0909341SAndroid Build Coastguard Worker xvilvh.w xr7, xr7, xr3 4559*c0909341SAndroid Build Coastguard Worker xvilvh.w xr15, xr15, xr4 4560*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr7, xr18, 12 // t10 4561*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr15, xr19, 12 // t11 4562*c0909341SAndroid Build Coastguard Worker 4563*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4564*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr5, xr20, xr21, xr3, xr18 4565*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4566*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr5, xr21, xr20, xr4, xr19 4567*c0909341SAndroid Build Coastguard Worker xvilvl.w xr13, xr18, xr3 4568*c0909341SAndroid Build Coastguard Worker xvilvl.w xr5, xr19, xr4 4569*c0909341SAndroid Build Coastguard Worker xvilvh.w xr18, xr18, xr3 4570*c0909341SAndroid Build Coastguard Worker xvilvh.w xr19, xr19, xr4 4571*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr18, xr13, 12 // t15 4572*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr19, xr5, 12 // t14 4573*c0909341SAndroid Build Coastguard Worker 4574*c0909341SAndroid Build Coastguard Worker xvsadd.h xr5, xr1, xr0 // t0 4575*c0909341SAndroid Build Coastguard Worker xvssub.h xr13, xr1, xr0 // t4 4576*c0909341SAndroid Build Coastguard Worker xvsadd.h xr3, xr16, xr8 // t1 4577*c0909341SAndroid Build Coastguard Worker xvssub.h xr4, xr16, xr8 // t5 4578*c0909341SAndroid Build Coastguard Worker xvsadd.h xr0, xr6, xr2 // t2 4579*c0909341SAndroid Build Coastguard Worker xvssub.h xr1, xr6, xr2 // t6 4580*c0909341SAndroid Build Coastguard Worker xvsadd.h xr8, xr9, xr10 // t3 4581*c0909341SAndroid Build Coastguard Worker xvssub.h xr16, xr9, xr10 // t7 4582*c0909341SAndroid Build Coastguard Worker xvsadd.h xr2, xr11, xr17 // t8a 4583*c0909341SAndroid Build Coastguard Worker xvssub.h xr6, xr11, xr17 // t12a 4584*c0909341SAndroid Build Coastguard Worker xvsadd.h xr9, xr12, xr14 // t9a 4585*c0909341SAndroid Build Coastguard Worker xvssub.h xr10, xr12, xr14 // t13a 4586*c0909341SAndroid Build Coastguard Worker xvsadd.h xr11, xr7, xr19 // t10a 4587*c0909341SAndroid Build Coastguard Worker xvssub.h xr17, xr7, xr19 // t14a 4588*c0909341SAndroid Build Coastguard Worker xvsadd.h xr12, xr15, xr18 // t11a 4589*c0909341SAndroid Build Coastguard Worker xvssub.h xr14, xr15, xr18 // t15a 4590*c0909341SAndroid Build Coastguard Worker 4591*c0909341SAndroid Build Coastguard Worker la.local t0, idct_coeffs_h 4592*c0909341SAndroid Build Coastguard Worker 4593*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 4 // 1567 4594*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr21, t0, 6 // 3784 4595*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr4, xr21, xr20, xr7, xr18 4596*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4597*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr13, xr4, xr20, xr21, xr15, xr19 4598*c0909341SAndroid Build Coastguard Worker xvilvl.w xr13, xr18, xr7 4599*c0909341SAndroid Build Coastguard Worker xvilvl.w xr4, xr19, xr15 4600*c0909341SAndroid Build Coastguard Worker xvilvh.w xr18, xr18, xr7 4601*c0909341SAndroid Build Coastguard Worker xvilvh.w xr19, xr19, xr15 4602*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr18, xr13, 12 // t4a 4603*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr19, xr4, 12 // t5a 4604*c0909341SAndroid Build Coastguard Worker 4605*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4606*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr16, xr1, xr20, xr21, xr7, xr4 4607*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4608*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr16, xr1, xr21, xr20, xr15, xr13 4609*c0909341SAndroid Build Coastguard Worker xvilvl.w xr16, xr4, xr7 4610*c0909341SAndroid Build Coastguard Worker xvilvl.w xr1, xr13, xr15 4611*c0909341SAndroid Build Coastguard Worker xvilvh.w xr4, xr4, xr7 4612*c0909341SAndroid Build Coastguard Worker xvilvh.w xr13, xr13, xr15 4613*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr4, xr16, 12 // t7a 4614*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr13, xr1, 12 // t6a 4615*c0909341SAndroid Build Coastguard Worker 4616*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4617*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr6, xr10, xr21, xr20, xr7, xr1 4618*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4619*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr6, xr10, xr20, xr21, xr15, xr16 4620*c0909341SAndroid Build Coastguard Worker xvilvl.w xr6, xr1, xr7 4621*c0909341SAndroid Build Coastguard Worker xvilvl.w xr10, xr16, xr15 4622*c0909341SAndroid Build Coastguard Worker xvilvh.w xr1, xr1, xr7 4623*c0909341SAndroid Build Coastguard Worker xvilvh.w xr16, xr16, xr15 4624*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr1, xr6, 12 // t12 4625*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr16, xr10, 12 // t13 4626*c0909341SAndroid Build Coastguard Worker 4627*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr21 4628*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr14, xr17, xr20, xr21, xr7, xr6 4629*c0909341SAndroid Build Coastguard Worker xvneg.h xr20, xr20 4630*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr14, xr17, xr21, xr20, xr15, xr10 4631*c0909341SAndroid Build Coastguard Worker xvilvl.w xr14, xr6, xr7 4632*c0909341SAndroid Build Coastguard Worker xvilvl.w xr17, xr10, xr15 4633*c0909341SAndroid Build Coastguard Worker xvilvh.w xr6, xr6, xr7 4634*c0909341SAndroid Build Coastguard Worker xvilvh.w xr10, xr10, xr15 4635*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr6, xr14, 12 // t15 4636*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr10, xr17, 12 // t14 4637*c0909341SAndroid Build Coastguard Worker 4638*c0909341SAndroid Build Coastguard Worker xvsadd.h xr14, xr5, xr0 // out[0] 4639*c0909341SAndroid Build Coastguard Worker xvssub.h xr17, xr5, xr0 // t2a 4640*c0909341SAndroid Build Coastguard Worker xvssub.h xr7, xr3, xr8 // t3a 4641*c0909341SAndroid Build Coastguard Worker xvsadd.h xr15, xr3, xr8 // out[15] 4642*c0909341SAndroid Build Coastguard Worker xvsllwil.w.h xr22, xr15, 0 4643*c0909341SAndroid Build Coastguard Worker xvexth.w.h xr15, xr15 4644*c0909341SAndroid Build Coastguard Worker xvneg.w xr22, xr22 4645*c0909341SAndroid Build Coastguard Worker xvneg.w xr15, xr15 4646*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr15, xr22, 0 // out[15] 4647*c0909341SAndroid Build Coastguard Worker xvssub.h xr7, xr3, xr8 // t3a 4648*c0909341SAndroid Build Coastguard Worker 4649*c0909341SAndroid Build Coastguard Worker xvsadd.h xr3, xr19, xr4 // out[12] 4650*c0909341SAndroid Build Coastguard Worker xvssub.h xr8, xr19, xr4 // t7 4651*c0909341SAndroid Build Coastguard Worker xvssub.h xr0, xr18, xr13 // t6 4652*c0909341SAndroid Build Coastguard Worker xvsadd.h xr5, xr18, xr13 // out[3] 4653*c0909341SAndroid Build Coastguard Worker xvsllwil.w.h xr22, xr5, 0 4654*c0909341SAndroid Build Coastguard Worker xvexth.w.h xr5, xr5 4655*c0909341SAndroid Build Coastguard Worker xvneg.w xr22, xr22 4656*c0909341SAndroid Build Coastguard Worker xvneg.w xr5, xr5 4657*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr5, xr22, 0 // out[3] 4658*c0909341SAndroid Build Coastguard Worker 4659*c0909341SAndroid Build Coastguard Worker xvsadd.h xr13, xr9, xr12 // out[14] 4660*c0909341SAndroid Build Coastguard Worker xvssub.h xr19, xr9, xr12 // t11 4661*c0909341SAndroid Build Coastguard Worker xvssub.h xr4, xr2, xr11 // t10 4662*c0909341SAndroid Build Coastguard Worker xvsadd.h xr18, xr2, xr11 // out[1] 4663*c0909341SAndroid Build Coastguard Worker xvsllwil.w.h xr22, xr18, 0 4664*c0909341SAndroid Build Coastguard Worker xvexth.w.h xr18, xr18 4665*c0909341SAndroid Build Coastguard Worker xvneg.w xr22, xr22 4666*c0909341SAndroid Build Coastguard Worker xvneg.w xr18, xr18 4667*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr18, xr22, 0 // out[1] 4668*c0909341SAndroid Build Coastguard Worker 4669*c0909341SAndroid Build Coastguard Worker xvsadd.h xr2, xr1, xr10 // out[2] 4670*c0909341SAndroid Build Coastguard Worker xvssub.h xr11, xr1, xr10 // t14a 4671*c0909341SAndroid Build Coastguard Worker xvssub.h xr12, xr16, xr6 // t15a 4672*c0909341SAndroid Build Coastguard Worker xvsadd.h xr9, xr16, xr6 // out[13] 4673*c0909341SAndroid Build Coastguard Worker xvsllwil.w.h xr22, xr9, 0 4674*c0909341SAndroid Build Coastguard Worker xvexth.w.h xr9, xr9 4675*c0909341SAndroid Build Coastguard Worker xvneg.w xr22, xr22 4676*c0909341SAndroid Build Coastguard Worker xvneg.w xr9, xr9 4677*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr9, xr22, 0 // out[13] 4678*c0909341SAndroid Build Coastguard Worker 4679*c0909341SAndroid Build Coastguard Worker xvldrepl.h xr20, t0, 0 // 2896 4680*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr17, xr7, xr20, xr20, xr6, xr10 4681*c0909341SAndroid Build Coastguard Worker xvneg.h xr21, xr20 4682*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr17, xr7, xr20, xr21, xr16, xr1 4683*c0909341SAndroid Build Coastguard Worker xvilvl.w xr17, xr10, xr6 4684*c0909341SAndroid Build Coastguard Worker xvilvl.w xr7, xr1, xr16 4685*c0909341SAndroid Build Coastguard Worker xvilvh.w xr10, xr10, xr6 4686*c0909341SAndroid Build Coastguard Worker xvilvh.w xr1, xr1, xr16 4687*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr1, xr7, 12 // out[8] 4688*c0909341SAndroid Build Coastguard Worker xvsrari.w xr17, xr17, 12 4689*c0909341SAndroid Build Coastguard Worker xvsrari.w xr10, xr10, 12 4690*c0909341SAndroid Build Coastguard Worker xvneg.w xr17, xr17 4691*c0909341SAndroid Build Coastguard Worker xvneg.w xr10, xr10 4692*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr10, xr17, 0 // out[7] 4693*c0909341SAndroid Build Coastguard Worker 4694*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr0, xr8, xr20, xr21, xr16, xr17 4695*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr0, xr8, xr20, xr20, xr6, xr7 4696*c0909341SAndroid Build Coastguard Worker xvilvl.w xr0, xr17, xr16 4697*c0909341SAndroid Build Coastguard Worker xvilvl.w xr8, xr7, xr6 4698*c0909341SAndroid Build Coastguard Worker xvilvh.w xr17, xr17, xr16 4699*c0909341SAndroid Build Coastguard Worker xvilvh.w xr7, xr7, xr6 4700*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr7, xr8, 12 // out[4] 4701*c0909341SAndroid Build Coastguard Worker xvsrari.w xr0, xr0, 12 4702*c0909341SAndroid Build Coastguard Worker xvsrari.w xr17, xr17, 12 4703*c0909341SAndroid Build Coastguard Worker xvneg.w xr0, xr0 4704*c0909341SAndroid Build Coastguard Worker xvneg.w xr17, xr17 4705*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr17, xr0, 0 // out[11] 4706*c0909341SAndroid Build Coastguard Worker 4707*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr4, xr19, xr20, xr21, xr16, xr0 4708*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr4, xr19, xr20, xr20, xr6, xr8 4709*c0909341SAndroid Build Coastguard Worker xvilvl.w xr4, xr0, xr16 4710*c0909341SAndroid Build Coastguard Worker xvilvl.w xr19, xr8, xr6 4711*c0909341SAndroid Build Coastguard Worker xvilvh.w xr0, xr0, xr16 4712*c0909341SAndroid Build Coastguard Worker xvilvh.w xr8, xr8, xr6 4713*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr8, xr19, 12 // out[6] 4714*c0909341SAndroid Build Coastguard Worker xvsrari.w xr4, xr4, 12 4715*c0909341SAndroid Build Coastguard Worker xvsrari.w xr0, xr0, 12 4716*c0909341SAndroid Build Coastguard Worker xvneg.w xr4, xr4 4717*c0909341SAndroid Build Coastguard Worker xvneg.w xr0, xr0 4718*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr0, xr4, 0 // out[9] 4719*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr11, xr12, xr20, xr20, xr6, xr4 4720*c0909341SAndroid Build Coastguard Worker xvmulev_xvmaddod_lasx xr11, xr12, xr20, xr21, xr16, xr19 4721*c0909341SAndroid Build Coastguard Worker xvilvl.w xr11, xr4, xr6 4722*c0909341SAndroid Build Coastguard Worker xvilvl.w xr12, xr19, xr16 4723*c0909341SAndroid Build Coastguard Worker xvilvh.w xr4, xr4, xr6 4724*c0909341SAndroid Build Coastguard Worker xvilvh.w xr19, xr19, xr16 4725*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr19, xr12, 12 // out[10] 4726*c0909341SAndroid Build Coastguard Worker xvsrari.w xr11, xr11, 12 4727*c0909341SAndroid Build Coastguard Worker xvsrari.w xr4, xr4, 12 4728*c0909341SAndroid Build Coastguard Worker xvneg.w xr11, xr11 4729*c0909341SAndroid Build Coastguard Worker xvneg.w xr4, xr4 4730*c0909341SAndroid Build Coastguard Worker xvssrarni.h.w xr4, xr11, 0 // out[5] 4731*c0909341SAndroid Build Coastguard Worker.endm 4732*c0909341SAndroid Build Coastguard Worker 4733*c0909341SAndroid Build Coastguard Workerfunction inv_txfm_add_adst_adst_16x16_8bpc_lasx 4734*c0909341SAndroid Build Coastguard Worker PUSH_REG 4735*c0909341SAndroid Build Coastguard Worker xvld_x16 a2, 0, 32, xr0, xr1, xr2, xr3, xr4, xr5, xr6, xr7, \ 4736*c0909341SAndroid Build Coastguard Worker xr8, xr9, xr10, xr11, xr12, xr13, xr14, xr15 4737*c0909341SAndroid Build Coastguard Worker 4738*c0909341SAndroid Build Coastguard Worker inv_adst16_lasx 4739*c0909341SAndroid Build Coastguard Worker 4740*c0909341SAndroid Build Coastguard Worker LASX_TRANSPOSE8x8_H xr14, xr18, xr2, xr5, xr7, xr4, xr8, xr10, \ 4741*c0909341SAndroid Build Coastguard Worker xr14, xr18, xr2, xr5, xr7, xr28, xr6, xr10, \ 4742*c0909341SAndroid Build Coastguard Worker xr20, xr21, xr22, xr23, xr24, xr25, xr26, xr27 4743*c0909341SAndroid Build Coastguard Worker 4744*c0909341SAndroid Build Coastguard Worker LASX_TRANSPOSE8x8_H xr1, xr0, xr19, xr17, xr3, xr9, xr13, xr15, \ 4745*c0909341SAndroid Build Coastguard Worker xr29, xr30, xr11, xr17, xr31, xr19, xr16, xr15, \ 4746*c0909341SAndroid Build Coastguard Worker xr20, xr21, xr22, xr23, xr24, xr25, xr26, xr27 4747*c0909341SAndroid Build Coastguard Worker 4748*c0909341SAndroid Build Coastguard Worker xvsrari_h_x16 xr14, xr18, xr2, xr5, xr7, xr28, xr6, xr10, \ 4749*c0909341SAndroid Build Coastguard Worker xr29, xr30, xr11, xr17, xr31, xr19, xr16, xr15, \ 4750*c0909341SAndroid Build Coastguard Worker xr0, xr1, xr2, xr3, xr4, xr5, xr6, xr7, \ 4751*c0909341SAndroid Build Coastguard Worker xr8, xr9, xr10, xr11, xr12, xr13, xr14, xr15, 2 4752*c0909341SAndroid Build Coastguard Worker 4753*c0909341SAndroid Build Coastguard Worker xvpermi_q_x2 xr0, xr1, xr8, xr9, xr0, xr1, xr8, xr9, xr20, xr21 4754*c0909341SAndroid Build Coastguard Worker xvpermi_q_x2 xr2, xr3, xr10, xr11, xr2, xr3, xr10, xr11, xr20, xr21 4755*c0909341SAndroid Build Coastguard Worker xvpermi_q_x2 xr4, xr5, xr12, xr13, xr4, xr5, xr12, xr13, xr20, xr21 4756*c0909341SAndroid Build Coastguard Worker xvpermi_q_x2 xr6, xr7, xr14, xr15, xr6, xr7, xr14, xr15, xr20, xr21 4757*c0909341SAndroid Build Coastguard Worker 4758*c0909341SAndroid Build Coastguard Worker inv_adst16_lasx 4759*c0909341SAndroid Build Coastguard Worker 4760*c0909341SAndroid Build Coastguard Worker xvsrari_h_x16 xr14, xr18, xr2, xr5, xr7, xr4, xr8, xr10, \ 4761*c0909341SAndroid Build Coastguard Worker xr1, xr0, xr19, xr17, xr3, xr9, xr13, xr15, \ 4762*c0909341SAndroid Build Coastguard Worker xr14, xr18, xr11, xr5, xr7, xr4, xr8, xr10, \ 4763*c0909341SAndroid Build Coastguard Worker xr12, xr16, xr19, xr17, xr20, xr9, xr13, xr15, 4 4764*c0909341SAndroid Build Coastguard Worker 4765*c0909341SAndroid Build Coastguard Worker xvxor.v xr23, xr23, xr23 4766*c0909341SAndroid Build Coastguard Worker.irp i, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480 4767*c0909341SAndroid Build Coastguard Worker xvst xr23, a2, \i 4768*c0909341SAndroid Build Coastguard Worker.endr 4769*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4770*c0909341SAndroid Build Coastguard Worker XVLD_DST_ADD_W16 xr14, xr18, xr11, xr5 4771*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4772*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4773*c0909341SAndroid Build Coastguard Worker XVLD_DST_ADD_W16 xr7, xr4, xr8, xr10 4774*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4775*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4776*c0909341SAndroid Build Coastguard Worker XVLD_DST_ADD_W16 xr12, xr16, xr19, xr17 4777*c0909341SAndroid Build Coastguard Worker alsl.d a0, a1, a0, 2 4778*c0909341SAndroid Build Coastguard Worker alsl.d t2, a1, a0, 1 4779*c0909341SAndroid Build Coastguard Worker XVLD_DST_ADD_W16 xr20, xr9, xr13, xr15 4780*c0909341SAndroid Build Coastguard Worker POP_REG 4781*c0909341SAndroid Build Coastguard Workerendfunc 4782