xref: /aosp_15_r20/external/libdav1d/src/loongarch/mc.S (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
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
30*c0909341SAndroid Build Coastguard Worker/*
31*c0909341SAndroid Build Coastguard Workerstatic void warp_affine_8x8_c(pixel *dst, const ptrdiff_t dst_stride,
32*c0909341SAndroid Build Coastguard Worker                              const pixel *src, const ptrdiff_t src_stride,
33*c0909341SAndroid Build Coastguard Worker                              const int16_t *const abcd, int mx, int my
34*c0909341SAndroid Build Coastguard Worker                              HIGHBD_DECL_SUFFIX)
35*c0909341SAndroid Build Coastguard Worker*/
36*c0909341SAndroid Build Coastguard Worker.macro vld_filter_row dst, src, inc
37*c0909341SAndroid Build Coastguard Worker    addi.w          t3,       \src,     512
38*c0909341SAndroid Build Coastguard Worker    srai.w          t3,       t3,       10
39*c0909341SAndroid Build Coastguard Worker    add.w           \src,     \src,     \inc
40*c0909341SAndroid Build Coastguard Worker    addi.w          t3,       t3,       64
41*c0909341SAndroid Build Coastguard Worker    slli.w          t3,       t3,       3
42*c0909341SAndroid Build Coastguard Worker    fldx.d          \dst,     t4,       t3
43*c0909341SAndroid Build Coastguard Worker.endm
44*c0909341SAndroid Build Coastguard Worker
45*c0909341SAndroid Build Coastguard Worker.macro warp_filter_horz_lsx
46*c0909341SAndroid Build Coastguard Worker    addi.w          t5,       a5,       0
47*c0909341SAndroid Build Coastguard Worker    vld             vr10,     a2,       0
48*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,       a3
49*c0909341SAndroid Build Coastguard Worker
50*c0909341SAndroid Build Coastguard Worker    vld_filter_row f0, t5, t0
51*c0909341SAndroid Build Coastguard Worker    vld_filter_row f1, t5, t0
52*c0909341SAndroid Build Coastguard Worker    vld_filter_row f2, t5, t0
53*c0909341SAndroid Build Coastguard Worker    vld_filter_row f3, t5, t0
54*c0909341SAndroid Build Coastguard Worker    vld_filter_row f4, t5, t0
55*c0909341SAndroid Build Coastguard Worker    vld_filter_row f5, t5, t0
56*c0909341SAndroid Build Coastguard Worker    vld_filter_row f6, t5, t0
57*c0909341SAndroid Build Coastguard Worker    vld_filter_row f7, t5, t0
58*c0909341SAndroid Build Coastguard Worker
59*c0909341SAndroid Build Coastguard Worker    vxor.v          vr10,     vr10,     vr20
60*c0909341SAndroid Build Coastguard Worker
61*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr8,      vr10,     1
62*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr9,      vr10,     2
63*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr8,      vr8,      vr10
64*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr0,      vr1,      vr0
65*c0909341SAndroid Build Coastguard Worker    vmulwev.h.b     vr11,     vr8,      vr0
66*c0909341SAndroid Build Coastguard Worker    vmulwod.h.b     vr12,     vr8,      vr0
67*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr8,      vr10,     3
68*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr19,     vr10,     4
69*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr8,      vr8,      vr9
70*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr2,      vr3,      vr2
71*c0909341SAndroid Build Coastguard Worker    vmulwev.h.b     vr13,     vr8,      vr2
72*c0909341SAndroid Build Coastguard Worker    vmulwod.h.b     vr14,     vr8,      vr2
73*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr8,      vr10,     5
74*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr9,      vr10,     6
75*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr8,      vr8,      vr19
76*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr4,      vr5,      vr4
77*c0909341SAndroid Build Coastguard Worker    vmulwev.h.b     vr15,     vr8,      vr4
78*c0909341SAndroid Build Coastguard Worker    vmulwod.h.b     vr16,     vr8,      vr4
79*c0909341SAndroid Build Coastguard Worker    vbsrl.v         vr8,      vr10,     7
80*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr8,      vr8,      vr9
81*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr6,      vr7,      vr6
82*c0909341SAndroid Build Coastguard Worker    vmulwev.h.b     vr17,     vr8,      vr6
83*c0909341SAndroid Build Coastguard Worker    vmulwod.h.b     vr18,     vr8,      vr6
84*c0909341SAndroid Build Coastguard Worker
85*c0909341SAndroid Build Coastguard Worker    vadd.h          vr11,     vr11,     vr12
86*c0909341SAndroid Build Coastguard Worker    vadd.h          vr13,     vr13,     vr14
87*c0909341SAndroid Build Coastguard Worker    vadd.h          vr15,     vr15,     vr16
88*c0909341SAndroid Build Coastguard Worker    vadd.h          vr17,     vr17,     vr18
89*c0909341SAndroid Build Coastguard Worker    vpickev.h       vr12,     vr13,     vr11
90*c0909341SAndroid Build Coastguard Worker    vpickod.h       vr14,     vr13,     vr11
91*c0909341SAndroid Build Coastguard Worker    vpickev.h       vr16,     vr17,     vr15
92*c0909341SAndroid Build Coastguard Worker    vpickod.h       vr18,     vr17,     vr15
93*c0909341SAndroid Build Coastguard Worker    vadd.h          vr11,     vr12,     vr14
94*c0909341SAndroid Build Coastguard Worker    vadd.h          vr15,     vr16,     vr18
95*c0909341SAndroid Build Coastguard Worker    vpickev.h       vr12,     vr15,     vr11
96*c0909341SAndroid Build Coastguard Worker    vpickod.h       vr14,     vr15,     vr11
97*c0909341SAndroid Build Coastguard Worker    vadd.h          vr11,     vr12,     vr14
98*c0909341SAndroid Build Coastguard Worker
99*c0909341SAndroid Build Coastguard Worker    add.d           a5,       a5,       t1
100*c0909341SAndroid Build Coastguard Worker.endm
101*c0909341SAndroid Build Coastguard Worker
102*c0909341SAndroid Build Coastguard Worker.macro transpose_8x8b_extend_lsx in0, in1, in2, in3, in4, in5, in6, in7
103*c0909341SAndroid Build Coastguard Worker    vilvl.b         \in0,     \in1,     \in0
104*c0909341SAndroid Build Coastguard Worker    vilvl.b         \in2,     \in3,     \in2
105*c0909341SAndroid Build Coastguard Worker    vilvl.b         \in4,     \in5,     \in4
106*c0909341SAndroid Build Coastguard Worker    vilvl.b         \in6,     \in7,     \in6
107*c0909341SAndroid Build Coastguard Worker
108*c0909341SAndroid Build Coastguard Worker    vpackev.h       \in1,     \in2,     \in0
109*c0909341SAndroid Build Coastguard Worker    vpackod.h       \in3,     \in2,     \in0
110*c0909341SAndroid Build Coastguard Worker    vpackev.h       \in5,     \in6,     \in4
111*c0909341SAndroid Build Coastguard Worker    vpackod.h       \in7,     \in6,     \in4
112*c0909341SAndroid Build Coastguard Worker
113*c0909341SAndroid Build Coastguard Worker    vpackev.w       \in0,     \in5,     \in1
114*c0909341SAndroid Build Coastguard Worker    vpackod.w       \in2,     \in5,     \in1
115*c0909341SAndroid Build Coastguard Worker    vpackev.w       \in1,     \in7,     \in3
116*c0909341SAndroid Build Coastguard Worker    vpackod.w       \in3,     \in7,     \in3
117*c0909341SAndroid Build Coastguard Worker
118*c0909341SAndroid Build Coastguard Worker    vexth.h.b       \in4,     \in0
119*c0909341SAndroid Build Coastguard Worker    vsllwil.h.b     \in0,     \in0,     0
120*c0909341SAndroid Build Coastguard Worker    vexth.h.b       \in5,     \in1
121*c0909341SAndroid Build Coastguard Worker    vsllwil.h.b     \in1,     \in1,     0
122*c0909341SAndroid Build Coastguard Worker    vexth.h.b       \in6,     \in2
123*c0909341SAndroid Build Coastguard Worker    vsllwil.h.b     \in2,     \in2,     0
124*c0909341SAndroid Build Coastguard Worker    vexth.h.b       \in7,     \in3
125*c0909341SAndroid Build Coastguard Worker    vsllwil.h.b     \in3,     \in3,     0
126*c0909341SAndroid Build Coastguard Worker.endm
127*c0909341SAndroid Build Coastguard Worker
128*c0909341SAndroid Build Coastguard Worker.macro warp t, shift
129*c0909341SAndroid Build Coastguard Workerfunction warp_affine_8x8\t\()_8bpc_lsx
130*c0909341SAndroid Build Coastguard Worker    addi.d          sp,       sp,      -64
131*c0909341SAndroid Build Coastguard Worker    fst.d           f24,      sp,      0
132*c0909341SAndroid Build Coastguard Worker    fst.d           f25,      sp,      8
133*c0909341SAndroid Build Coastguard Worker    fst.d           f26,      sp,      16
134*c0909341SAndroid Build Coastguard Worker    fst.d           f27,      sp,      24
135*c0909341SAndroid Build Coastguard Worker    fst.d           f28,      sp,      32
136*c0909341SAndroid Build Coastguard Worker    fst.d           f29,      sp,      40
137*c0909341SAndroid Build Coastguard Worker    fst.d           f30,      sp,      48
138*c0909341SAndroid Build Coastguard Worker    fst.d           f31,      sp,      56
139*c0909341SAndroid Build Coastguard Worker
140*c0909341SAndroid Build Coastguard Worker    ld.h            t0,       a4,      0
141*c0909341SAndroid Build Coastguard Worker    ld.h            t1,       a4,      2
142*c0909341SAndroid Build Coastguard Worker    ld.h            t2,       a4,      4
143*c0909341SAndroid Build Coastguard Worker    ld.h            a4,       a4,      6
144*c0909341SAndroid Build Coastguard Worker
145*c0909341SAndroid Build Coastguard Worker    li.d            t7,       8
146*c0909341SAndroid Build Coastguard Worker    alsl.w          t3,       a3,      a3,     1
147*c0909341SAndroid Build Coastguard Worker    sub.d           a2,       a2,      t3
148*c0909341SAndroid Build Coastguard Worker    addi.d          a2,       a2,      -3
149*c0909341SAndroid Build Coastguard Worker    la.local        t4,       dav1d_mc_warp_filter
150*c0909341SAndroid Build Coastguard Worker
151*c0909341SAndroid Build Coastguard Worker.ifnb \t
152*c0909341SAndroid Build Coastguard Worker    slli.d          a1,       a1,      1
153*c0909341SAndroid Build Coastguard Worker.endif
154*c0909341SAndroid Build Coastguard Worker
155*c0909341SAndroid Build Coastguard Worker    li.w            t3,       128
156*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.b    vr20,     t3
157*c0909341SAndroid Build Coastguard Worker.ifb \t
158*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h    vr21,     t3
159*c0909341SAndroid Build Coastguard Worker.else
160*c0909341SAndroid Build Coastguard Worker    li.w            t3,       2048
161*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h    vr21,     t3
162*c0909341SAndroid Build Coastguard Worker.endif
163*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
164*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr24,     vr11,    3
165*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
166*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr25,     vr11,    3
167*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
168*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr26,     vr11,    3
169*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
170*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr27,     vr11,    3
171*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
172*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr28,     vr11,    3
173*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
174*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr29,     vr11,    3
175*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
176*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr30,     vr11,    3
177*c0909341SAndroid Build Coastguard Worker
178*c0909341SAndroid Build Coastguard Worker1:
179*c0909341SAndroid Build Coastguard Worker    addi.d          t6,       a6,      0
180*c0909341SAndroid Build Coastguard Worker    warp_filter_horz_lsx
181*c0909341SAndroid Build Coastguard Worker    vsrari.h        vr31,     vr11,    3
182*c0909341SAndroid Build Coastguard Worker
183*c0909341SAndroid Build Coastguard Worker    vld_filter_row f0, t6, t2
184*c0909341SAndroid Build Coastguard Worker    vld_filter_row f1, t6, t2
185*c0909341SAndroid Build Coastguard Worker    vld_filter_row f2, t6, t2
186*c0909341SAndroid Build Coastguard Worker    vld_filter_row f3, t6, t2
187*c0909341SAndroid Build Coastguard Worker    vld_filter_row f4, t6, t2
188*c0909341SAndroid Build Coastguard Worker    vld_filter_row f5, t6, t2
189*c0909341SAndroid Build Coastguard Worker    vld_filter_row f6, t6, t2
190*c0909341SAndroid Build Coastguard Worker    vld_filter_row f7, t6, t2
191*c0909341SAndroid Build Coastguard Worker
192*c0909341SAndroid Build Coastguard Worker    transpose_8x8b_extend_lsx vr0, vr1, vr2, vr3, vr4, vr5, vr6, vr7
193*c0909341SAndroid Build Coastguard Worker
194*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,     vr24,    vr0
195*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h     vr17,     vr24,    vr0
196*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr25,    vr1
197*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr25,    vr1
198*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr26,    vr2
199*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr26,    vr2
200*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr27,    vr3
201*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr27,    vr3
202*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr28,    vr4
203*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr28,    vr4
204*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr29,    vr5
205*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr29,    vr5
206*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr30,    vr6
207*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr30,    vr6
208*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h    vr16,     vr31,    vr7
209*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,     vr31,    vr7
210*c0909341SAndroid Build Coastguard Worker
211*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w    vr16,     vr16,    \shift
212*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w    vr17,     vr17,    \shift
213*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr16,     vr17,    vr16
214*c0909341SAndroid Build Coastguard Worker    vadd.h          vr16,     vr16,    vr21
215*c0909341SAndroid Build Coastguard Worker
216*c0909341SAndroid Build Coastguard Worker    vor.v           vr24,     vr25,    vr25
217*c0909341SAndroid Build Coastguard Worker    vor.v           vr25,     vr26,    vr26
218*c0909341SAndroid Build Coastguard Worker    vor.v           vr26,     vr27,    vr27
219*c0909341SAndroid Build Coastguard Worker    vor.v           vr27,     vr28,    vr28
220*c0909341SAndroid Build Coastguard Worker    vor.v           vr28,     vr29,    vr29
221*c0909341SAndroid Build Coastguard Worker    vor.v           vr29,     vr30,    vr30
222*c0909341SAndroid Build Coastguard Worker    vor.v           vr30,     vr31,    vr31
223*c0909341SAndroid Build Coastguard Worker
224*c0909341SAndroid Build Coastguard Worker.ifb \t
225*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr16,     vr16,    0
226*c0909341SAndroid Build Coastguard Worker.endif
227*c0909341SAndroid Build Coastguard Worker
228*c0909341SAndroid Build Coastguard Worker    addi.d          t7,       t7,      -1
229*c0909341SAndroid Build Coastguard Worker.ifnb \t
230*c0909341SAndroid Build Coastguard Worker    vst             vr16,     a0,      0
231*c0909341SAndroid Build Coastguard Worker.else
232*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr16,     a0,      0,   0
233*c0909341SAndroid Build Coastguard Worker.endif
234*c0909341SAndroid Build Coastguard Worker    add.d           a0,       a1,      a0
235*c0909341SAndroid Build Coastguard Worker
236*c0909341SAndroid Build Coastguard Worker    add.d           a6,       a6,      a4
237*c0909341SAndroid Build Coastguard Worker    blt             zero,     t7,      1b
238*c0909341SAndroid Build Coastguard Worker
239*c0909341SAndroid Build Coastguard Worker    fld.d           f24,      sp,      0
240*c0909341SAndroid Build Coastguard Worker    fld.d           f25,      sp,      8
241*c0909341SAndroid Build Coastguard Worker    fld.d           f26,      sp,      16
242*c0909341SAndroid Build Coastguard Worker    fld.d           f27,      sp,      24
243*c0909341SAndroid Build Coastguard Worker    fld.d           f28,      sp,      32
244*c0909341SAndroid Build Coastguard Worker    fld.d           f29,      sp,      40
245*c0909341SAndroid Build Coastguard Worker    fld.d           f30,      sp,      48
246*c0909341SAndroid Build Coastguard Worker    fld.d           f31,      sp,      56
247*c0909341SAndroid Build Coastguard Worker    addi.d          sp,       sp,      64
248*c0909341SAndroid Build Coastguard Workerendfunc
249*c0909341SAndroid Build Coastguard Worker.endm
250*c0909341SAndroid Build Coastguard Worker
251*c0909341SAndroid Build Coastguard Workerwarp  , 11
252*c0909341SAndroid Build Coastguard Workerwarp t, 7
253*c0909341SAndroid Build Coastguard Worker
254*c0909341SAndroid Build Coastguard Worker.macro FILTER_WARP_RND_P_LASX in0, in1, in2, out0, out1, out2, out3
255*c0909341SAndroid Build Coastguard Worker    xvshuf.b        xr2,    \in0,     \in0,     \in2
256*c0909341SAndroid Build Coastguard Worker
257*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     \in1,     512
258*c0909341SAndroid Build Coastguard Worker    srai.w          t4,     t4,       10
259*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t4,       64
260*c0909341SAndroid Build Coastguard Worker    slli.w          t4,     t4,       3
261*c0909341SAndroid Build Coastguard Worker    vldx            vr3,    t5,       t4
262*c0909341SAndroid Build Coastguard Worker    add.w           t3,     t3,       t0   // tmx += abcd[0]
263*c0909341SAndroid Build Coastguard Worker
264*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t3,       512
265*c0909341SAndroid Build Coastguard Worker    srai.w          t4,     t4,       10
266*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t4,       64
267*c0909341SAndroid Build Coastguard Worker    slli.w          t4,     t4,       3
268*c0909341SAndroid Build Coastguard Worker    vldx            vr4,    t5,       t4
269*c0909341SAndroid Build Coastguard Worker    add.w           t3,     t3,       t0   // tmx += abcd[0]
270*c0909341SAndroid Build Coastguard Worker
271*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t3,       512
272*c0909341SAndroid Build Coastguard Worker    srai.w          t4,     t4,       10
273*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t4,       64
274*c0909341SAndroid Build Coastguard Worker    slli.w          t4,     t4,       3
275*c0909341SAndroid Build Coastguard Worker    vldx            vr5,    t5,       t4
276*c0909341SAndroid Build Coastguard Worker    add.w           t3,     t3,       t0   // tmx += abcd[0]
277*c0909341SAndroid Build Coastguard Worker
278*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t3,       512
279*c0909341SAndroid Build Coastguard Worker    srai.w          t4,     t4,       10
280*c0909341SAndroid Build Coastguard Worker    addi.w          t4,     t4,       64
281*c0909341SAndroid Build Coastguard Worker    slli.w          t4,     t4,       3
282*c0909341SAndroid Build Coastguard Worker    vldx            vr6,    t5,       t4
283*c0909341SAndroid Build Coastguard Worker    add.w           t3,     t3,       t0   // tmx += abcd[0]
284*c0909341SAndroid Build Coastguard Worker
285*c0909341SAndroid Build Coastguard Worker    xvinsve0.d      xr3,    xr5,      1
286*c0909341SAndroid Build Coastguard Worker    xvinsve0.d      xr3,    xr4,      2
287*c0909341SAndroid Build Coastguard Worker    xvinsve0.d      xr3,    xr6,      3
288*c0909341SAndroid Build Coastguard Worker
289*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b xr4,    xr2,      xr3
290*c0909341SAndroid Build Coastguard Worker    xvmulwod.h.bu.b xr5,    xr2,      xr3
291*c0909341SAndroid Build Coastguard Worker    xvilvl.d        xr2,    xr5,      xr4
292*c0909341SAndroid Build Coastguard Worker    xvilvh.d        xr3,    xr5,      xr4
293*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h     xr2,    xr2,      xr2
294*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h     xr3,    xr3,      xr3
295*c0909341SAndroid Build Coastguard Worker    xvhaddw.d.w     xr2,    xr2,      xr2
296*c0909341SAndroid Build Coastguard Worker    xvhaddw.d.w     xr3,    xr3,      xr3
297*c0909341SAndroid Build Coastguard Worker    xvhaddw.q.d     xr2,    xr2,      xr2
298*c0909341SAndroid Build Coastguard Worker    xvhaddw.q.d     xr3,    xr3,      xr3
299*c0909341SAndroid Build Coastguard Worker
300*c0909341SAndroid Build Coastguard Worker    xvextrins.w     \out0,  xr2,      \out1
301*c0909341SAndroid Build Coastguard Worker    xvextrins.w     \out2,  xr3,      \out3
302*c0909341SAndroid Build Coastguard Worker.endm
303*c0909341SAndroid Build Coastguard Worker
304*c0909341SAndroid Build Coastguard Worker.macro FILTER_WARP_CLIP_LASX in0, in1, in2, out0, out1
305*c0909341SAndroid Build Coastguard Worker    add.w           \in0,     \in0,    \in1
306*c0909341SAndroid Build Coastguard Worker    addi.w          t6,       \in0,    512
307*c0909341SAndroid Build Coastguard Worker    srai.w          t6,       t6,      10
308*c0909341SAndroid Build Coastguard Worker    addi.w          t6,       t6,      64
309*c0909341SAndroid Build Coastguard Worker    slli.w          t6,       t6,      3
310*c0909341SAndroid Build Coastguard Worker    fldx.d          f1,       t5,      t6
311*c0909341SAndroid Build Coastguard Worker
312*c0909341SAndroid Build Coastguard Worker    add.w           t2,       t2,      t7
313*c0909341SAndroid Build Coastguard Worker    addi.w          t6,       t2,      512
314*c0909341SAndroid Build Coastguard Worker    srai.w          t6,       t6,      10
315*c0909341SAndroid Build Coastguard Worker    addi.w          t6,       t6,      64
316*c0909341SAndroid Build Coastguard Worker    slli.w          t6,       t6,      3
317*c0909341SAndroid Build Coastguard Worker    fldx.d          f2,       t5,      t6
318*c0909341SAndroid Build Coastguard Worker
319*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr0,      vr2,     vr1
320*c0909341SAndroid Build Coastguard Worker    vext2xv.h.b     xr0,      xr0
321*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h    xr3,      \in2,    xr0
322*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h   xr3,      \in2,    xr0
323*c0909341SAndroid Build Coastguard Worker    xvhaddw.d.w     xr3,      xr3,     xr3
324*c0909341SAndroid Build Coastguard Worker    xvhaddw.q.d     xr3,      xr3,     xr3
325*c0909341SAndroid Build Coastguard Worker    xvextrins.w     \out0,    xr3,     \out1
326*c0909341SAndroid Build Coastguard Worker.endm
327*c0909341SAndroid Build Coastguard Worker
328*c0909341SAndroid Build Coastguard Workerconst shuf0
329*c0909341SAndroid Build Coastguard Worker.byte  0, 1, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 8, 9
330*c0909341SAndroid Build Coastguard Worker.byte  1, 2, 3, 4, 5, 6, 7, 8, 3, 4, 5, 6, 7, 8, 9, 10
331*c0909341SAndroid Build Coastguard Workerendconst
332*c0909341SAndroid Build Coastguard Worker
333*c0909341SAndroid Build Coastguard Workerconst warp_sh
334*c0909341SAndroid Build Coastguard Worker.rept 2
335*c0909341SAndroid Build Coastguard Worker.byte 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
336*c0909341SAndroid Build Coastguard Worker.endr
337*c0909341SAndroid Build Coastguard Worker.rept 2
338*c0909341SAndroid Build Coastguard Worker.byte 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
339*c0909341SAndroid Build Coastguard Worker.endr
340*c0909341SAndroid Build Coastguard Workerendconst
341*c0909341SAndroid Build Coastguard Worker
342*c0909341SAndroid Build Coastguard Worker.macro warp_lasx t, shift
343*c0909341SAndroid Build Coastguard Workerfunction warp_affine_8x8\t\()_8bpc_lasx
344*c0909341SAndroid Build Coastguard Worker    addi.d          sp,       sp,      -16
345*c0909341SAndroid Build Coastguard Worker    ld.h            t0,       a4,      0   // abcd[0]
346*c0909341SAndroid Build Coastguard Worker    ld.h            t1,       a4,      2   // abcd[1]
347*c0909341SAndroid Build Coastguard Worker    fst.d           f24,      sp,      0
348*c0909341SAndroid Build Coastguard Worker    fst.d           f25,      sp,      8
349*c0909341SAndroid Build Coastguard Worker
350*c0909341SAndroid Build Coastguard Worker    alsl.w          t2,       a3,      a3,     1
351*c0909341SAndroid Build Coastguard Worker    addi.w          t3,       a5,      0
352*c0909341SAndroid Build Coastguard Worker    la.local        t4,       warp_sh
353*c0909341SAndroid Build Coastguard Worker    la.local        t5,       dav1d_mc_warp_filter
354*c0909341SAndroid Build Coastguard Worker    sub.d           a2,       a2,      t2
355*c0909341SAndroid Build Coastguard Worker    addi.d          a2,       a2,      -3
356*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
357*c0909341SAndroid Build Coastguard Worker    xvld            xr24,     t4,      0
358*c0909341SAndroid Build Coastguard Worker    xvld            xr25,     t4,      32
359*c0909341SAndroid Build Coastguard Worker    la.local        t2,       shuf0
360*c0909341SAndroid Build Coastguard Worker    xvld            xr1,      t2,      0
361*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
362*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr9,    xr1,      4
363*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x00, xr8, 0x00
364*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x00, xr11, 0x00
365*c0909341SAndroid Build Coastguard Worker
366*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
367*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
368*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
369*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
370*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
371*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x10, xr8, 0x10
372*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x10, xr11, 0x10
373*c0909341SAndroid Build Coastguard Worker
374*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
375*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
376*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
377*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
378*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
379*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x20, xr8, 0x20
380*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x20, xr11, 0x20
381*c0909341SAndroid Build Coastguard Worker
382*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
383*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
384*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
385*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
386*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
387*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x30, xr8, 0x30
388*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x30, xr11, 0x30
389*c0909341SAndroid Build Coastguard Worker
390*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
391*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
392*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
393*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
394*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
395*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr12, 0x00, xr13, 0x00
396*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr14, 0x00, xr15, 0x00
397*c0909341SAndroid Build Coastguard Worker
398*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
399*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
400*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
401*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
402*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
403*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr12, 0x10, xr13, 0x10
404*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr14, 0x10, xr15, 0x10
405*c0909341SAndroid Build Coastguard Worker
406*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
407*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
408*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
409*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
410*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
411*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr12, 0x20, xr13, 0x20
412*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr14, 0x20, xr15, 0x20
413*c0909341SAndroid Build Coastguard Worker
414*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
415*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
416*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
417*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
418*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
419*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr12, 0x30, xr13, 0x30
420*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr14, 0x30, xr15, 0x30
421*c0909341SAndroid Build Coastguard Worker
422*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr12,     xr7,     3
423*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr13,     xr8,     3
424*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr14,     xr10,    3
425*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr15,     xr11,    3
426*c0909341SAndroid Build Coastguard Worker
427*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
428*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
429*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
430*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
431*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
432*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x00, xr8, 0x00
433*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x00, xr11, 0x00
434*c0909341SAndroid Build Coastguard Worker
435*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
436*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
437*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
438*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
439*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
440*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x10, xr8, 0x10
441*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x10, xr11, 0x10
442*c0909341SAndroid Build Coastguard Worker
443*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
444*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
445*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
446*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
447*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
448*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x20, xr8, 0x20
449*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x20, xr11, 0x20
450*c0909341SAndroid Build Coastguard Worker
451*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
452*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
453*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
454*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
455*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
456*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr7, 0x30, xr8, 0x30
457*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr10, 0x30, xr11, 0x30
458*c0909341SAndroid Build Coastguard Worker
459*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
460*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
461*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
462*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
463*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
464*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr16, 0x00, xr17, 0x00
465*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr18, 0x00, xr19, 0x00
466*c0909341SAndroid Build Coastguard Worker
467*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
468*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
469*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
470*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
471*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
472*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr16, 0x10, xr17, 0x10
473*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr18, 0x10, xr19, 0x10
474*c0909341SAndroid Build Coastguard Worker
475*c0909341SAndroid Build Coastguard Worker    add.w           a5,       a5,      t1
476*c0909341SAndroid Build Coastguard Worker    or              t3,       a5,      a5
477*c0909341SAndroid Build Coastguard Worker    add.d           a2,       a2,      a3
478*c0909341SAndroid Build Coastguard Worker    vld             vr0,      a2,      0
479*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr0,      xr0,     0x00
480*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, a5, xr1, xr16, 0x20, xr17, 0x20
481*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_RND_P_LASX xr0, t3, xr9, xr18, 0x20, xr19, 0x20
482*c0909341SAndroid Build Coastguard Worker
483*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr16,     xr7,     3
484*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr17,     xr8,     3
485*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr18,     xr10,    3
486*c0909341SAndroid Build Coastguard Worker    xvsrarni.h.w    xr19,     xr11,    3
487*c0909341SAndroid Build Coastguard Worker
488*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0   // my
489*c0909341SAndroid Build Coastguard Worker    ld.h            t7,       a4,      4   // abcd[2]
490*c0909341SAndroid Build Coastguard Worker    ld.h            t8,       a4,      6   // abcd[3]
491*c0909341SAndroid Build Coastguard Worker
492*c0909341SAndroid Build Coastguard Worker.ifnb \t
493*c0909341SAndroid Build Coastguard Worker    slli.d          a1,       a1,      1
494*c0909341SAndroid Build Coastguard Worker.endif
495*c0909341SAndroid Build Coastguard Worker
496*c0909341SAndroid Build Coastguard Worker    // y = 0
497*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr20, 0x00
498*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr20, 0x10
499*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr20, 0x20
500*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr20, 0x30
501*c0909341SAndroid Build Coastguard Worker
502*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
503*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
504*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
505*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
506*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
507*c0909341SAndroid Build Coastguard Worker
508*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
509*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
510*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr21, 0x00
511*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr21, 0x10
512*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr21, 0x20
513*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr21, 0x30
514*c0909341SAndroid Build Coastguard Worker
515*c0909341SAndroid Build Coastguard Worker.ifnb \t
516*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w   xr21,     xr20,     \shift
517*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr22,     xr21,     0x01
518*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,     vr22,     vr21
519*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr21,     vr22,     vr21
520*c0909341SAndroid Build Coastguard Worker    vst             vr23,     a0,       0
521*c0909341SAndroid Build Coastguard Worker    vstx            vr21,     a0,       a1
522*c0909341SAndroid Build Coastguard Worker.else
523*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w   xr21,    xr20,     \shift
524*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h    xr22,    xr21,     0
525*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr23,    xr22,     0x01
526*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr21,    vr23,     vr22
527*c0909341SAndroid Build Coastguard Worker    fst.d            f21,     a0,       0
528*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
529*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr21,    a0,       0,     1
530*c0909341SAndroid Build Coastguard Worker.endif
531*c0909341SAndroid Build Coastguard Worker
532*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr25,     xr25,    2
533*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
534*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
535*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
536*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
537*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
538*c0909341SAndroid Build Coastguard Worker
539*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
540*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
541*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr20, 0x00
542*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr20, 0x10
543*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr20, 0x20
544*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr20, 0x30
545*c0909341SAndroid Build Coastguard Worker
546*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr25,     xr25,    2
547*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
548*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
549*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
550*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
551*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
552*c0909341SAndroid Build Coastguard Worker
553*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
554*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
555*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr21, 0x00
556*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr21, 0x10
557*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr21, 0x20
558*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr21, 0x30
559*c0909341SAndroid Build Coastguard Worker
560*c0909341SAndroid Build Coastguard Worker.ifnb \t
561*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w   xr21,     xr20,     \shift
562*c0909341SAndroid Build Coastguard Worker    alsl.d          a0,       a1,       a0,     1
563*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr22,     xr21,     0x01
564*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,     vr22,     vr21
565*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr21,     vr22,     vr21
566*c0909341SAndroid Build Coastguard Worker    vst             vr23,     a0,       0
567*c0909341SAndroid Build Coastguard Worker    vstx            vr21,     a0,       a1
568*c0909341SAndroid Build Coastguard Worker.else
569*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w   xr21,    xr20,     11
570*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h    xr22,    xr21,     0
571*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr23,    xr22,     0x01
572*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr21,    vr23,     vr22
573*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
574*c0909341SAndroid Build Coastguard Worker    fst.d            f21,     a0,       0
575*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
576*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr21,    a0,       0,     1
577*c0909341SAndroid Build Coastguard Worker.endif
578*c0909341SAndroid Build Coastguard Worker
579*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr25,     xr25,    2
580*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
581*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
582*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
583*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
584*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
585*c0909341SAndroid Build Coastguard Worker
586*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
587*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
588*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr20, 0x00
589*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr20, 0x10
590*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr20, 0x20
591*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr20, 0x30
592*c0909341SAndroid Build Coastguard Worker
593*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr25,     xr25,    2
594*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
595*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
596*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
597*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
598*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
599*c0909341SAndroid Build Coastguard Worker
600*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
601*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
602*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr21, 0x00
603*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr21, 0x10
604*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr21, 0x20
605*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr21, 0x30
606*c0909341SAndroid Build Coastguard Worker
607*c0909341SAndroid Build Coastguard Worker.ifnb \t
608*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w   xr21,     xr20,     \shift
609*c0909341SAndroid Build Coastguard Worker    alsl.d          a0,       a1,       a0,     1
610*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr22,     xr21,     0x01
611*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,     vr22,     vr21
612*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr21,     vr22,     vr21
613*c0909341SAndroid Build Coastguard Worker    vst             vr23,     a0,       0
614*c0909341SAndroid Build Coastguard Worker    vstx            vr21,     a0,       a1
615*c0909341SAndroid Build Coastguard Worker.else
616*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w   xr21,    xr20,     11
617*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h    xr22,    xr21,     0
618*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr23,    xr22,     0x01
619*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr21,    vr23,     vr22
620*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
621*c0909341SAndroid Build Coastguard Worker    fst.d            f21,     a0,       0
622*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
623*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr21,    a0,       0,     1
624*c0909341SAndroid Build Coastguard Worker.endif
625*c0909341SAndroid Build Coastguard Worker
626*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr25,     xr25,    2
627*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
628*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
629*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
630*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
631*c0909341SAndroid Build Coastguard Worker    xvextrins.h      xr24,     xr25,    0x70
632*c0909341SAndroid Build Coastguard Worker
633*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
634*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
635*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr20, 0x00
636*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr20, 0x10
637*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr20, 0x20
638*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr20, 0x30
639*c0909341SAndroid Build Coastguard Worker
640*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr12,     xr16,    xr12,   xr24
641*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr13,     xr17,    xr13,   xr24
642*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr14,     xr18,    xr14,   xr24
643*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr15,     xr19,    xr15,   xr24
644*c0909341SAndroid Build Coastguard Worker
645*c0909341SAndroid Build Coastguard Worker    add.w           a6,       a6,      t8
646*c0909341SAndroid Build Coastguard Worker    addi.w          t2,       a6,      0
647*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, zero, xr12,  xr21, 0x00
648*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr13,  xr21, 0x10
649*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr14,  xr21, 0x20
650*c0909341SAndroid Build Coastguard Worker    FILTER_WARP_CLIP_LASX  t2, t7,   xr15,  xr21, 0x30
651*c0909341SAndroid Build Coastguard Worker
652*c0909341SAndroid Build Coastguard Worker.ifnb \t
653*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w   xr21,     xr20,     \shift
654*c0909341SAndroid Build Coastguard Worker    alsl.d          a0,       a1,       a0,     1
655*c0909341SAndroid Build Coastguard Worker    xvpermi.q       xr22,     xr21,     0x01
656*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,     vr22,     vr21
657*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr21,     vr22,     vr21
658*c0909341SAndroid Build Coastguard Worker    vst             vr23,     a0,       0
659*c0909341SAndroid Build Coastguard Worker    vstx            vr21,     a0,       a1
660*c0909341SAndroid Build Coastguard Worker.else
661*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w   xr21,    xr20,     11
662*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h    xr22,    xr21,     0
663*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr23,    xr22,     0x01
664*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr21,    vr23,     vr22
665*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
666*c0909341SAndroid Build Coastguard Worker    fst.d            f21,     a0,       0
667*c0909341SAndroid Build Coastguard Worker    add.d            a0,      a0,       a1
668*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr21,    a0,       0,     1
669*c0909341SAndroid Build Coastguard Worker.endif
670*c0909341SAndroid Build Coastguard Worker    fld.d            f24,     sp,       0
671*c0909341SAndroid Build Coastguard Worker    fld.d            f25,     sp,       8
672*c0909341SAndroid Build Coastguard Worker    addi.d           sp,      sp,       16
673*c0909341SAndroid Build Coastguard Workerendfunc
674*c0909341SAndroid Build Coastguard Worker.endm
675*c0909341SAndroid Build Coastguard Worker
676*c0909341SAndroid Build Coastguard Workerwarp_lasx , 11
677*c0909341SAndroid Build Coastguard Workerwarp_lasx t, 7
678*c0909341SAndroid Build Coastguard Worker
679*c0909341SAndroid Build Coastguard Worker/*
680*c0909341SAndroid Build Coastguard Workerstatic void w_avg_c(pixel *dst, const ptrdiff_t dst_stride,
681*c0909341SAndroid Build Coastguard Worker                    const int16_t *tmp1, const int16_t *tmp2,
682*c0909341SAndroid Build Coastguard Worker                    const int w, int h,
683*c0909341SAndroid Build Coastguard Worker                    const int weight HIGHBD_DECL_SUFFIX)
684*c0909341SAndroid Build Coastguard Worker*/
685*c0909341SAndroid Build Coastguard Worker
686*c0909341SAndroid Build Coastguard Worker#define bpc8_sh     5     // sh = intermediate_bits + 1
687*c0909341SAndroid Build Coastguard Worker#define bpcw8_sh    8     // sh = intermediate_bits + 4
688*c0909341SAndroid Build Coastguard Worker
689*c0909341SAndroid Build Coastguard Worker#define bpc_sh   bpc8_sh
690*c0909341SAndroid Build Coastguard Worker#define bpcw_sh  bpcw8_sh
691*c0909341SAndroid Build Coastguard Worker
692*c0909341SAndroid Build Coastguard Workerfunction avg_8bpc_lsx
693*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     a0,     0
694*c0909341SAndroid Build Coastguard Worker
695*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
696*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
697*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
698*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .AVG_LSX_JRTABLE
699*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
700*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0  // The jump addresses are relative to AVG_LSX_JRTABLE
701*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2 // Get absolute address
702*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
703*c0909341SAndroid Build Coastguard Worker
704*c0909341SAndroid Build Coastguard Worker    .align   3
705*c0909341SAndroid Build Coastguard Worker.AVG_LSX_JRTABLE:
706*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W128_LSX - .AVG_LSX_JRTABLE
707*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W64_LSX  - .AVG_LSX_JRTABLE
708*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W32_LSX  - .AVG_LSX_JRTABLE
709*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W16_LSX  - .AVG_LSX_JRTABLE
710*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W8_LSX   - .AVG_LSX_JRTABLE
711*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W4_LSX   - .AVG_LSX_JRTABLE
712*c0909341SAndroid Build Coastguard Worker
713*c0909341SAndroid Build Coastguard Worker.AVG_W4_LSX:
714*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
715*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
716*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,    vr0,    vr1
717*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr3,    vr2,    bpc_sh
718*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,    a0,     0,    0
719*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
720*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,    a0,     0,    1
721*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -2
722*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     16
723*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     16
724*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
725*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W4_LSX
726*c0909341SAndroid Build Coastguard Worker    b             .AVG_END_LSX
727*c0909341SAndroid Build Coastguard Worker
728*c0909341SAndroid Build Coastguard Worker.AVG_W8_LSX:
729*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
730*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
731*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
732*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
733*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,    vr0,    vr1
734*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,    vr2,    vr3
735*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr5,    vr4,    bpc_sh
736*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -2
737*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
738*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr5,    a0,     0,    0
739*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
740*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr5,    a0,     0,    1
741*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
742*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
743*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W8_LSX
744*c0909341SAndroid Build Coastguard Worker    b             .AVG_END_LSX
745*c0909341SAndroid Build Coastguard Worker
746*c0909341SAndroid Build Coastguard Worker.AVG_W16_LSX:
747*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
748*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
749*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
750*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
751*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,    vr0,    vr1
752*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,    vr2,    vr3
753*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr5,    vr4,    bpc_sh
754*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
755*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
756*c0909341SAndroid Build Coastguard Worker    vst           vr5,    a0,     0
757*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
758*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
759*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W16_LSX
760*c0909341SAndroid Build Coastguard Worker    b             .AVG_END_LSX
761*c0909341SAndroid Build Coastguard Worker
762*c0909341SAndroid Build Coastguard Worker.AVG_W32_LSX:
763*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
764*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
765*c0909341SAndroid Build Coastguard Worker    vld           vr4,    a2,     32
766*c0909341SAndroid Build Coastguard Worker    vld           vr6,    a2,     48
767*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
768*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
769*c0909341SAndroid Build Coastguard Worker    vld           vr5,    a3,     32
770*c0909341SAndroid Build Coastguard Worker    vld           vr7,    a3,     48
771*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,    vr0,    vr1
772*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,    vr2,    vr3
773*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,    vr4,    vr5
774*c0909341SAndroid Build Coastguard Worker    vadd.h        vr6,    vr6,    vr7
775*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr2,    vr0,    bpc_sh
776*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr6,    vr4,    bpc_sh
777*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
778*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     64
779*c0909341SAndroid Build Coastguard Worker    vst           vr2,    a0,     0
780*c0909341SAndroid Build Coastguard Worker    vst           vr6,    a0,     16
781*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     64
782*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
783*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W32_LSX
784*c0909341SAndroid Build Coastguard Worker    b             .AVG_END_LSX
785*c0909341SAndroid Build Coastguard Worker
786*c0909341SAndroid Build Coastguard Worker.AVG_W64_LSX:
787*c0909341SAndroid Build Coastguard Worker.rept 4
788*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
789*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
790*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
791*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
792*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,    vr0,    vr1
793*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,    vr2,    vr3
794*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr2,    vr0,    bpc_sh
795*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
796*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
797*c0909341SAndroid Build Coastguard Worker    vst           vr2,    a0,     0
798*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
799*c0909341SAndroid Build Coastguard Worker.endr
800*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
801*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
802*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
803*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W64_LSX
804*c0909341SAndroid Build Coastguard Worker    b             .AVG_END_LSX
805*c0909341SAndroid Build Coastguard Worker
806*c0909341SAndroid Build Coastguard Worker.AVG_W128_LSX:
807*c0909341SAndroid Build Coastguard Worker.rept 8
808*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
809*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
810*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
811*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
812*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,    vr0,    vr1
813*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,    vr2,    vr3
814*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr2,    vr0,    bpc_sh
815*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
816*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
817*c0909341SAndroid Build Coastguard Worker    vst           vr2,    a0,     0
818*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
819*c0909341SAndroid Build Coastguard Worker.endr
820*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
821*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
822*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
823*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .AVG_W128_LSX
824*c0909341SAndroid Build Coastguard Worker.AVG_END_LSX:
825*c0909341SAndroid Build Coastguard Workerendfunc
826*c0909341SAndroid Build Coastguard Worker
827*c0909341SAndroid Build Coastguard Workerfunction avg_8bpc_lasx
828*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
829*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
830*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
831*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .AVG_LASX_JRTABLE
832*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
833*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0
834*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2
835*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
836*c0909341SAndroid Build Coastguard Worker
837*c0909341SAndroid Build Coastguard Worker    .align   3
838*c0909341SAndroid Build Coastguard Worker.AVG_LASX_JRTABLE:
839*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W128_LASX - .AVG_LASX_JRTABLE
840*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W64_LASX  - .AVG_LASX_JRTABLE
841*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W32_LASX  - .AVG_LASX_JRTABLE
842*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W16_LASX  - .AVG_LASX_JRTABLE
843*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W8_LASX   - .AVG_LASX_JRTABLE
844*c0909341SAndroid Build Coastguard Worker    .hword .AVG_W4_LASX   - .AVG_LASX_JRTABLE
845*c0909341SAndroid Build Coastguard Worker
846*c0909341SAndroid Build Coastguard Worker.AVG_W4_LASX:
847*c0909341SAndroid Build Coastguard Worker    vld            vr0,    a2,     0
848*c0909341SAndroid Build Coastguard Worker    vld            vr1,    a3,     0
849*c0909341SAndroid Build Coastguard Worker    vadd.h         vr0,    vr0,    vr1
850*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h  vr1,    vr0,    bpc_sh
851*c0909341SAndroid Build Coastguard Worker    vstelm.w       vr1,    a0,     0,    0
852*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
853*c0909341SAndroid Build Coastguard Worker    vstelm.w       vr1,    a0,     0,    1
854*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
855*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     16
856*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     16
857*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
858*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W4_LASX
859*c0909341SAndroid Build Coastguard Worker    b              .AVG_END_LASX
860*c0909341SAndroid Build Coastguard Worker.AVG_W8_LASX:
861*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
862*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
863*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr2,    xr0,    xr1
864*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr1,    xr2,    bpc_sh
865*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr1,    a0,     0,    0
866*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
867*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr1,    a0,     0,    2
868*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
869*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     32
870*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     32
871*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a1,     a0
872*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W8_LASX
873*c0909341SAndroid Build Coastguard Worker    b              .AVG_END_LASX
874*c0909341SAndroid Build Coastguard Worker.AVG_W16_LASX:
875*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
876*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
877*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
878*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
879*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,    xr0,    xr1
880*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr5,    xr2,    xr3
881*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr5,    xr4,    bpc_sh
882*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr2,    xr5,    0xd8
883*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr3,    xr5,    0x8d
884*c0909341SAndroid Build Coastguard Worker    vst            vr2,    a0,     0
885*c0909341SAndroid Build Coastguard Worker    vstx           vr3,    a0,     a1
886*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
887*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     64
888*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     64
889*c0909341SAndroid Build Coastguard Worker    alsl.d         a0,     a1,     a0,   1
890*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W16_LASX
891*c0909341SAndroid Build Coastguard Worker    b              .AVG_END_LASX
892*c0909341SAndroid Build Coastguard Worker.AVG_W32_LASX:
893*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
894*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
895*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
896*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
897*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,    xr0,    xr1
898*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr5,    xr2,    xr3
899*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr5,    xr4,    bpc_sh
900*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr6,    xr5,    0xd8
901*c0909341SAndroid Build Coastguard Worker    xvst           xr6,    a0,     0
902*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
903*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     64
904*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     64
905*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
906*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W32_LASX
907*c0909341SAndroid Build Coastguard Worker    b              .AVG_END_LASX
908*c0909341SAndroid Build Coastguard Worker.AVG_W64_LASX:
909*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
910*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
911*c0909341SAndroid Build Coastguard Worker    xvld           xr4,    a2,     64
912*c0909341SAndroid Build Coastguard Worker    xvld           xr6,    a2,     96
913*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
914*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
915*c0909341SAndroid Build Coastguard Worker    xvld           xr5,    a3,     64
916*c0909341SAndroid Build Coastguard Worker    xvld           xr7,    a3,     96
917*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr0,    xr0,    xr1
918*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr2,    xr2,    xr3
919*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,    xr4,    xr5
920*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr6,    xr6,    xr7
921*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr2,    xr0,    bpc_sh
922*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr6,    xr4,    bpc_sh
923*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr1,    xr2,    0xd8
924*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr3,    xr6,    0xd8
925*c0909341SAndroid Build Coastguard Worker    xvst           xr1,    a0,     0
926*c0909341SAndroid Build Coastguard Worker    xvst           xr3,    a0,     32
927*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
928*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     128
929*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     128
930*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
931*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W64_LASX
932*c0909341SAndroid Build Coastguard Worker    b              .AVG_END_LASX
933*c0909341SAndroid Build Coastguard Worker.AVG_W128_LASX:
934*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
935*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
936*c0909341SAndroid Build Coastguard Worker    xvld           xr4,    a2,     64
937*c0909341SAndroid Build Coastguard Worker    xvld           xr6,    a2,     96
938*c0909341SAndroid Build Coastguard Worker    xvld           xr8,    a2,     128
939*c0909341SAndroid Build Coastguard Worker    xvld           xr10,   a2,     160
940*c0909341SAndroid Build Coastguard Worker    xvld           xr12,   a2,     192
941*c0909341SAndroid Build Coastguard Worker    xvld           xr14,   a2,     224
942*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
943*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
944*c0909341SAndroid Build Coastguard Worker    xvld           xr5,    a3,     64
945*c0909341SAndroid Build Coastguard Worker    xvld           xr7,    a3,     96
946*c0909341SAndroid Build Coastguard Worker    xvld           xr9,    a3,     128
947*c0909341SAndroid Build Coastguard Worker    xvld           xr11,   a3,     160
948*c0909341SAndroid Build Coastguard Worker    xvld           xr13,   a3,     192
949*c0909341SAndroid Build Coastguard Worker    xvld           xr15,   a3,     224
950*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr0,    xr0,    xr1
951*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr2,    xr2,    xr3
952*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,    xr4,    xr5
953*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr6,    xr6,    xr7
954*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr8,    xr8,    xr9
955*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr10,   xr10,   xr11
956*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr12,   xr12,   xr13
957*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr14,   xr14,   xr15
958*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr2,    xr0,    bpc_sh
959*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr6,    xr4,    bpc_sh
960*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr10,   xr8,    bpc_sh
961*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr14,   xr12,   bpc_sh
962*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr1,    xr2,    0xd8
963*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr3,    xr6,    0xd8
964*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr5,    xr10,   0xd8
965*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr7,    xr14,   0xd8
966*c0909341SAndroid Build Coastguard Worker    xvst           xr1,    a0,     0
967*c0909341SAndroid Build Coastguard Worker    xvst           xr3,    a0,     32
968*c0909341SAndroid Build Coastguard Worker    xvst           xr5,    a0,     64
969*c0909341SAndroid Build Coastguard Worker    xvst           xr7,    a0,     96
970*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
971*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     256
972*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     256
973*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
974*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .AVG_W128_LASX
975*c0909341SAndroid Build Coastguard Worker.AVG_END_LASX:
976*c0909341SAndroid Build Coastguard Workerendfunc
977*c0909341SAndroid Build Coastguard Worker
978*c0909341SAndroid Build Coastguard Workerfunction w_avg_8bpc_lsx
979*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     a0,     0
980*c0909341SAndroid Build Coastguard Worker    li.w          t2,     16
981*c0909341SAndroid Build Coastguard Worker    sub.w         t2,     t2,     a6  // 16 - weight
982*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h  vr21,   a6
983*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h  vr22,   t2
984*c0909341SAndroid Build Coastguard Worker
985*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
986*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
987*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
988*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .W_AVG_LSX_JRTABLE
989*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
990*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0
991*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2
992*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
993*c0909341SAndroid Build Coastguard Worker
994*c0909341SAndroid Build Coastguard Worker    .align   3
995*c0909341SAndroid Build Coastguard Worker.W_AVG_LSX_JRTABLE:
996*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W128_LSX - .W_AVG_LSX_JRTABLE
997*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W64_LSX  - .W_AVG_LSX_JRTABLE
998*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W32_LSX  - .W_AVG_LSX_JRTABLE
999*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W16_LSX  - .W_AVG_LSX_JRTABLE
1000*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W8_LSX   - .W_AVG_LSX_JRTABLE
1001*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W4_LSX   - .W_AVG_LSX_JRTABLE
1002*c0909341SAndroid Build Coastguard Worker
1003*c0909341SAndroid Build Coastguard Worker.W_AVG_W4_LSX:
1004*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1005*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1006*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr2,    vr0,    vr21
1007*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr3,    vr0,    vr21
1008*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr2,    vr1,    vr22
1009*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr3,    vr1,    vr22
1010*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr3,    vr2,    bpcw_sh
1011*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr1,    vr3,    0
1012*c0909341SAndroid Build Coastguard Worker    vpickod.w     vr4,    vr2,    vr1
1013*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr4,    vr1
1014*c0909341SAndroid Build Coastguard Worker    fst.s         f0,     a0,     0
1015*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1016*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr0,    a0,     0,   1
1017*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -2
1018*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     16
1019*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     16
1020*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a1,     a0
1021*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W4_LSX
1022*c0909341SAndroid Build Coastguard Worker    b             .W_AVG_END_LSX
1023*c0909341SAndroid Build Coastguard Worker.W_AVG_W8_LSX:
1024*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1025*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1026*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr2,    vr0,    vr21
1027*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr3,    vr0,    vr21
1028*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr2,    vr1,    vr22
1029*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr3,    vr1,    vr22
1030*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr3,    vr2,    bpcw_sh
1031*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr1,    vr3,    0
1032*c0909341SAndroid Build Coastguard Worker    vpickod.w     vr4,    vr2,    vr1
1033*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr4,    vr1
1034*c0909341SAndroid Build Coastguard Worker    fst.d         f0,     a0,     0
1035*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1036*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     16
1037*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     16
1038*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1039*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W8_LSX
1040*c0909341SAndroid Build Coastguard Worker    b             .W_AVG_END_LSX
1041*c0909341SAndroid Build Coastguard Worker.W_AVG_W16_LSX:
1042*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1043*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
1044*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1045*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
1046*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr21
1047*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr21
1048*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr6,    vr2,    vr21
1049*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr7,    vr2,    vr21
1050*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr22
1051*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr22
1052*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr6,    vr3,    vr22
1053*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr7,    vr3,    vr22
1054*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr6,    vr4,    bpcw_sh
1055*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr7,    vr5,    bpcw_sh
1056*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr7,    vr6,    0
1057*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr8,    vr7,    0x4E
1058*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr8,    vr7
1059*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1060*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1061*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1062*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1063*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1064*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W16_LSX
1065*c0909341SAndroid Build Coastguard Worker    b             .W_AVG_END_LSX
1066*c0909341SAndroid Build Coastguard Worker.W_AVG_W32_LSX:
1067*c0909341SAndroid Build Coastguard Worker.rept 2
1068*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1069*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
1070*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1071*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
1072*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr21
1073*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr21
1074*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr6,    vr2,    vr21
1075*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr7,    vr2,    vr21
1076*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr22
1077*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr22
1078*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr6,    vr3,    vr22
1079*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr7,    vr3,    vr22
1080*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr6,    vr4,    bpcw_sh
1081*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr7,    vr5,    bpcw_sh
1082*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr7,    vr6,    0
1083*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr8,    vr7,    0x4E
1084*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr8,    vr7
1085*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1086*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1087*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1088*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1089*c0909341SAndroid Build Coastguard Worker.endr
1090*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1091*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1092*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1093*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W32_LSX
1094*c0909341SAndroid Build Coastguard Worker    b             .W_AVG_END_LSX
1095*c0909341SAndroid Build Coastguard Worker
1096*c0909341SAndroid Build Coastguard Worker.W_AVG_W64_LSX:
1097*c0909341SAndroid Build Coastguard Worker.rept 4
1098*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1099*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
1100*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1101*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
1102*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr21
1103*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr21
1104*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr6,    vr2,    vr21
1105*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr7,    vr2,    vr21
1106*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr22
1107*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr22
1108*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr6,    vr3,    vr22
1109*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr7,    vr3,    vr22
1110*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr6,    vr4,    bpcw_sh
1111*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr7,    vr5,    bpcw_sh
1112*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr7,    vr6,    0
1113*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr8,    vr7,    0x4E
1114*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr8,    vr7
1115*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1116*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1117*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1118*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1119*c0909341SAndroid Build Coastguard Worker.endr
1120*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1121*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1122*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1123*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W64_LSX
1124*c0909341SAndroid Build Coastguard Worker    b             .W_AVG_END_LSX
1125*c0909341SAndroid Build Coastguard Worker
1126*c0909341SAndroid Build Coastguard Worker.W_AVG_W128_LSX:
1127*c0909341SAndroid Build Coastguard Worker.rept 8
1128*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1129*c0909341SAndroid Build Coastguard Worker    vld           vr2,    a2,     16
1130*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1131*c0909341SAndroid Build Coastguard Worker    vld           vr3,    a3,     16
1132*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr21
1133*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr21
1134*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr6,    vr2,    vr21
1135*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr7,    vr2,    vr21
1136*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr22
1137*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr22
1138*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr6,    vr3,    vr22
1139*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr7,    vr3,    vr22
1140*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr6,    vr4,    bpcw_sh
1141*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr7,    vr5,    bpcw_sh
1142*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr7,    vr6,    0
1143*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr8,    vr7,    0x4E
1144*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr8,    vr7
1145*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1146*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1147*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1148*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1149*c0909341SAndroid Build Coastguard Worker.endr
1150*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1151*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1152*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1153*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .W_AVG_W128_LSX
1154*c0909341SAndroid Build Coastguard Worker.W_AVG_END_LSX:
1155*c0909341SAndroid Build Coastguard Workerendfunc
1156*c0909341SAndroid Build Coastguard Worker
1157*c0909341SAndroid Build Coastguard Workerfunction w_avg_8bpc_lasx
1158*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     a0,     0
1159*c0909341SAndroid Build Coastguard Worker    li.w          t2,     16
1160*c0909341SAndroid Build Coastguard Worker    sub.w         t2,     t2,     a6  // 16 - weight
1161*c0909341SAndroid Build Coastguard Worker    xvreplgr2vr.h xr21,   a6
1162*c0909341SAndroid Build Coastguard Worker    xvreplgr2vr.h xr22,   t2
1163*c0909341SAndroid Build Coastguard Worker
1164*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
1165*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
1166*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
1167*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .W_AVG_LASX_JRTABLE
1168*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
1169*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0
1170*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2
1171*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
1172*c0909341SAndroid Build Coastguard Worker
1173*c0909341SAndroid Build Coastguard Worker    .align   3
1174*c0909341SAndroid Build Coastguard Worker.W_AVG_LASX_JRTABLE:
1175*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W128_LASX - .W_AVG_LASX_JRTABLE
1176*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W64_LASX  - .W_AVG_LASX_JRTABLE
1177*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W32_LASX  - .W_AVG_LASX_JRTABLE
1178*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W16_LASX  - .W_AVG_LASX_JRTABLE
1179*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W8_LASX   - .W_AVG_LASX_JRTABLE
1180*c0909341SAndroid Build Coastguard Worker    .hword .W_AVG_W4_LASX   - .W_AVG_LASX_JRTABLE
1181*c0909341SAndroid Build Coastguard Worker
1182*c0909341SAndroid Build Coastguard Worker.W_AVG_W4_LASX:
1183*c0909341SAndroid Build Coastguard Worker    vld            vr0,    a2,     0
1184*c0909341SAndroid Build Coastguard Worker    vld            vr1,    a3,     0
1185*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr2,    xr0,    0xD8
1186*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr3,    xr1,    0xD8
1187*c0909341SAndroid Build Coastguard Worker    xvilvl.h       xr4,    xr3,    xr2
1188*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr0,    xr4,    xr21
1189*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr0,    xr4,    xr22
1190*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr1,    xr0,    bpcw_sh
1191*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr0,    xr1,    0
1192*c0909341SAndroid Build Coastguard Worker    fst.s          f0,     a0,     0
1193*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1194*c0909341SAndroid Build Coastguard Worker    xvstelm.w      xr0,    a0,     0,     4
1195*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
1196*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     16
1197*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     16
1198*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a1,     a0
1199*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W4_LASX
1200*c0909341SAndroid Build Coastguard Worker    b              .W_AVG_END_LASX
1201*c0909341SAndroid Build Coastguard Worker
1202*c0909341SAndroid Build Coastguard Worker.W_AVG_W8_LASX:
1203*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
1204*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
1205*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr2,    xr0,    xr21
1206*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr3,    xr0,    xr21
1207*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr2,    xr1,    xr22
1208*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr3,    xr1,    xr22
1209*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr3,    xr2,    bpcw_sh
1210*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr1,    xr3,    0
1211*c0909341SAndroid Build Coastguard Worker    xvpickod.w     xr4,    xr2,    xr1
1212*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr0,    xr4,    xr1
1213*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr0,    a0,     0,     0
1214*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1215*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr0,    a0,     0,     2
1216*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
1217*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     32
1218*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     32
1219*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1220*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W8_LASX
1221*c0909341SAndroid Build Coastguard Worker    b              .W_AVG_END_LASX
1222*c0909341SAndroid Build Coastguard Worker
1223*c0909341SAndroid Build Coastguard Worker.W_AVG_W16_LASX:
1224*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
1225*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
1226*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr2,    xr0,    xr21
1227*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr3,    xr0,    xr21
1228*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr2,    xr1,    xr22
1229*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr3,    xr1,    xr22
1230*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr3,    xr2,    bpcw_sh
1231*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr1,    xr3,    0
1232*c0909341SAndroid Build Coastguard Worker    xvpickod.w     xr4,    xr2,    xr1
1233*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr0,    xr4,    xr1
1234*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr1,    xr0,    0xD8
1235*c0909341SAndroid Build Coastguard Worker    vst            vr1,    a0,     0
1236*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
1237*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     32
1238*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     32
1239*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1240*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W16_LASX
1241*c0909341SAndroid Build Coastguard Worker    b              .W_AVG_END_LSX
1242*c0909341SAndroid Build Coastguard Worker
1243*c0909341SAndroid Build Coastguard Worker.W_AVG_W32_LASX:
1244*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
1245*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
1246*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
1247*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
1248*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,    xr21
1249*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,    xr21
1250*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr6,    xr2,    xr21
1251*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr7,    xr2,    xr21
1252*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,    xr22
1253*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,    xr22
1254*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr6,    xr3,    xr22
1255*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr7,    xr3,    xr22
1256*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr6,    xr4,    bpcw_sh
1257*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr7,    xr5,    bpcw_sh
1258*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr7,    xr6,    0
1259*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr8,    xr7,    0x4E
1260*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr9,    xr8,    xr7
1261*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr9,    0xD8
1262*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,     0
1263*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
1264*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     64
1265*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     64
1266*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1267*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W32_LASX
1268*c0909341SAndroid Build Coastguard Worker    b              .W_AVG_END_LASX
1269*c0909341SAndroid Build Coastguard Worker
1270*c0909341SAndroid Build Coastguard Worker.W_AVG_W64_LASX:
1271*c0909341SAndroid Build Coastguard Worker.rept 2
1272*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
1273*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
1274*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
1275*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
1276*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,    xr21
1277*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,    xr21
1278*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr6,    xr2,    xr21
1279*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr7,    xr2,    xr21
1280*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,    xr22
1281*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,    xr22
1282*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr6,    xr3,    xr22
1283*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr7,    xr3,    xr22
1284*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr6,    xr4,    bpcw_sh
1285*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr7,    xr5,    bpcw_sh
1286*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr7,    xr6,    0
1287*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr8,    xr7,    0x4E
1288*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr9,    xr8,    xr7
1289*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr9,    0xD8
1290*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,     0
1291*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     64
1292*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     64
1293*c0909341SAndroid Build Coastguard Worker    addi.d         a0,     a0,     32
1294*c0909341SAndroid Build Coastguard Worker.endr
1295*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
1296*c0909341SAndroid Build Coastguard Worker    add.d          t8,     t8,     a1
1297*c0909341SAndroid Build Coastguard Worker    add.d          a0,     t8,     zero
1298*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W64_LASX
1299*c0909341SAndroid Build Coastguard Worker    b              .W_AVG_END_LASX
1300*c0909341SAndroid Build Coastguard Worker
1301*c0909341SAndroid Build Coastguard Worker.W_AVG_W128_LASX:
1302*c0909341SAndroid Build Coastguard Worker.rept 4
1303*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,     0
1304*c0909341SAndroid Build Coastguard Worker    xvld           xr2,    a2,     32
1305*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,     0
1306*c0909341SAndroid Build Coastguard Worker    xvld           xr3,    a3,     32
1307*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,    xr21
1308*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,    xr21
1309*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr6,    xr2,    xr21
1310*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr7,    xr2,    xr21
1311*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,    xr22
1312*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,    xr22
1313*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr6,    xr3,    xr22
1314*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr7,    xr3,    xr22
1315*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr6,    xr4,    bpcw_sh
1316*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr7,    xr5,    bpcw_sh
1317*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr7,    xr6,    0
1318*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr8,    xr7,    0x4E
1319*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr9,    xr8,    xr7
1320*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr9,    0xD8
1321*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,     0
1322*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     64
1323*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     64
1324*c0909341SAndroid Build Coastguard Worker    addi.d         a0,     a0,     32
1325*c0909341SAndroid Build Coastguard Worker.endr
1326*c0909341SAndroid Build Coastguard Worker
1327*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -1
1328*c0909341SAndroid Build Coastguard Worker    add.d          t8,     t8,     a1
1329*c0909341SAndroid Build Coastguard Worker    add.d          a0,     t8,     zero
1330*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .W_AVG_W128_LASX
1331*c0909341SAndroid Build Coastguard Worker.W_AVG_END_LASX:
1332*c0909341SAndroid Build Coastguard Workerendfunc
1333*c0909341SAndroid Build Coastguard Worker
1334*c0909341SAndroid Build Coastguard Worker#undef bpc_sh
1335*c0909341SAndroid Build Coastguard Worker#undef bpcw_sh
1336*c0909341SAndroid Build Coastguard Worker
1337*c0909341SAndroid Build Coastguard Worker#define mask_sh         10
1338*c0909341SAndroid Build Coastguard Worker/*
1339*c0909341SAndroid Build Coastguard Workerstatic void mask_c(pixel *dst, const ptrdiff_t dst_stride,
1340*c0909341SAndroid Build Coastguard Worker                   const int16_t *tmp1, const int16_t *tmp2, const int w, int h,
1341*c0909341SAndroid Build Coastguard Worker                   const uint8_t *mask HIGHBD_DECL_SUFFIX)
1342*c0909341SAndroid Build Coastguard Worker*/
1343*c0909341SAndroid Build Coastguard Workerfunction mask_8bpc_lsx
1344*c0909341SAndroid Build Coastguard Worker    vldi          vr21,   0x440   // 64
1345*c0909341SAndroid Build Coastguard Worker    vxor.v        vr19,   vr19,   vr19
1346*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     a0,     0
1347*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
1348*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
1349*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
1350*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .MASK_LSX_JRTABLE
1351*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
1352*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0
1353*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2
1354*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
1355*c0909341SAndroid Build Coastguard Worker
1356*c0909341SAndroid Build Coastguard Worker    .align   3
1357*c0909341SAndroid Build Coastguard Worker.MASK_LSX_JRTABLE:
1358*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W128_LSX - .MASK_LSX_JRTABLE
1359*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W64_LSX  - .MASK_LSX_JRTABLE
1360*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W32_LSX  - .MASK_LSX_JRTABLE
1361*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W16_LSX  - .MASK_LSX_JRTABLE
1362*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W8_LSX   - .MASK_LSX_JRTABLE
1363*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W4_LSX   - .MASK_LSX_JRTABLE
1364*c0909341SAndroid Build Coastguard Worker
1365*c0909341SAndroid Build Coastguard Worker.MASK_W4_LSX:
1366*c0909341SAndroid Build Coastguard Worker    vld           vr0,     a2,     0
1367*c0909341SAndroid Build Coastguard Worker    vld           vr1,     a3,     0
1368*c0909341SAndroid Build Coastguard Worker    fld.d         f22,     a6,     0
1369*c0909341SAndroid Build Coastguard Worker
1370*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1371*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1372*c0909341SAndroid Build Coastguard Worker
1373*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1374*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1375*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1376*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1377*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr5,    vr4,    mask_sh
1378*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr1,    vr5,    0
1379*c0909341SAndroid Build Coastguard Worker    vpickod.w     vr4,    vr2,    vr1
1380*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr4,    vr1
1381*c0909341SAndroid Build Coastguard Worker    fst.s         f0,     a0,     0
1382*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1383*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr0,    a0,     0,    1
1384*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     16
1385*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     16
1386*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     8
1387*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1388*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -2
1389*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W4_LSX
1390*c0909341SAndroid Build Coastguard Worker    b             .MASK_END_LSX
1391*c0909341SAndroid Build Coastguard Worker.MASK_W8_LSX:
1392*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1393*c0909341SAndroid Build Coastguard Worker    vld           vr10,   a2,     16
1394*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1395*c0909341SAndroid Build Coastguard Worker    vld           vr11,   a3,     16
1396*c0909341SAndroid Build Coastguard Worker    vld           vr22,   a6,     0
1397*c0909341SAndroid Build Coastguard Worker
1398*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1399*c0909341SAndroid Build Coastguard Worker    vilvh.b       vr12,   vr19,   vr22
1400*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1401*c0909341SAndroid Build Coastguard Worker    vsub.h        vr13,   vr21,   vr12
1402*c0909341SAndroid Build Coastguard Worker
1403*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1404*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1405*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr14,   vr10,   vr12
1406*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr15,   vr10,   vr12
1407*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1408*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1409*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr14,   vr11,   vr13
1410*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr15,   vr11,   vr13
1411*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr14,   vr4,    mask_sh
1412*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr15,   vr5,    mask_sh
1413*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr15,   vr14,   0
1414*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr6,    vr15,   0x4E
1415*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr6,    vr15
1416*c0909341SAndroid Build Coastguard Worker    fst.d         f0,     a0,     0
1417*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1418*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr0,    a0,     0,   1
1419*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1420*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1421*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     16
1422*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1423*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -2
1424*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W8_LSX
1425*c0909341SAndroid Build Coastguard Worker    b             .MASK_END_LSX
1426*c0909341SAndroid Build Coastguard Worker
1427*c0909341SAndroid Build Coastguard Worker.MASK_W16_LSX:
1428*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1429*c0909341SAndroid Build Coastguard Worker    vld           vr10,   a2,     16
1430*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1431*c0909341SAndroid Build Coastguard Worker    vld           vr11,   a3,     16
1432*c0909341SAndroid Build Coastguard Worker    vld           vr22,   a6,     0
1433*c0909341SAndroid Build Coastguard Worker
1434*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1435*c0909341SAndroid Build Coastguard Worker    vilvh.b       vr12,   vr19,   vr22
1436*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1437*c0909341SAndroid Build Coastguard Worker    vsub.h        vr13,   vr21,   vr12
1438*c0909341SAndroid Build Coastguard Worker
1439*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1440*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1441*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr14,   vr10,   vr12
1442*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr15,   vr10,   vr12
1443*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1444*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1445*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr14,   vr11,   vr13
1446*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr15,   vr11,   vr13
1447*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr14,   vr4,    mask_sh
1448*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr15,   vr5,    mask_sh
1449*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr15,   vr14,   0
1450*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr6,    vr15,   0x4E
1451*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr6,    vr15
1452*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1453*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1454*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1455*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     16
1456*c0909341SAndroid Build Coastguard Worker    add.d         a0,     a0,     a1
1457*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1458*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W16_LSX
1459*c0909341SAndroid Build Coastguard Worker    b             .MASK_END_LSX
1460*c0909341SAndroid Build Coastguard Worker.MASK_W32_LSX:
1461*c0909341SAndroid Build Coastguard Worker.rept 2
1462*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1463*c0909341SAndroid Build Coastguard Worker    vld           vr10,   a2,     16
1464*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1465*c0909341SAndroid Build Coastguard Worker    vld           vr11,   a3,     16
1466*c0909341SAndroid Build Coastguard Worker    vld           vr22,   a6,     0
1467*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1468*c0909341SAndroid Build Coastguard Worker    vilvh.b       vr12,   vr19,   vr22
1469*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1470*c0909341SAndroid Build Coastguard Worker    vsub.h        vr13,   vr21,   vr12
1471*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1472*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1473*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr14,   vr10,   vr12
1474*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr15,   vr10,   vr12
1475*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1476*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1477*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr14,   vr11,   vr13
1478*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr15,   vr11,   vr13
1479*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr14,   vr4,    mask_sh
1480*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr15,   vr5,    mask_sh
1481*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr15,   vr14,   0
1482*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr6,    vr15,   0x4E
1483*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr6,    vr15
1484*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1485*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1486*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1487*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     16
1488*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1489*c0909341SAndroid Build Coastguard Worker.endr
1490*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1491*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1492*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1493*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W32_LSX
1494*c0909341SAndroid Build Coastguard Worker    b             .MASK_END_LSX
1495*c0909341SAndroid Build Coastguard Worker.MASK_W64_LSX:
1496*c0909341SAndroid Build Coastguard Worker.rept 4
1497*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1498*c0909341SAndroid Build Coastguard Worker    vld           vr10,   a2,     16
1499*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1500*c0909341SAndroid Build Coastguard Worker    vld           vr11,   a3,     16
1501*c0909341SAndroid Build Coastguard Worker    vld           vr22,   a6,     0
1502*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1503*c0909341SAndroid Build Coastguard Worker    vilvh.b       vr12,   vr19,   vr22
1504*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1505*c0909341SAndroid Build Coastguard Worker    vsub.h        vr13,   vr21,   vr12
1506*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1507*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1508*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr14,   vr10,   vr12
1509*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr15,   vr10,   vr12
1510*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1511*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1512*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr14,   vr11,   vr13
1513*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr15,   vr11,   vr13
1514*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr14,   vr4,    mask_sh
1515*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr15,   vr5,    mask_sh
1516*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr15,   vr14,   0
1517*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr6,    vr15,   0x4E
1518*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr6,    vr15
1519*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1520*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1521*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1522*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     16
1523*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1524*c0909341SAndroid Build Coastguard Worker.endr
1525*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1526*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1527*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1528*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W64_LSX
1529*c0909341SAndroid Build Coastguard Worker    b             .MASK_END_LSX
1530*c0909341SAndroid Build Coastguard Worker.MASK_W128_LSX:
1531*c0909341SAndroid Build Coastguard Worker.rept 8
1532*c0909341SAndroid Build Coastguard Worker    vld           vr0,    a2,     0
1533*c0909341SAndroid Build Coastguard Worker    vld           vr10,   a2,     16
1534*c0909341SAndroid Build Coastguard Worker    vld           vr1,    a3,     0
1535*c0909341SAndroid Build Coastguard Worker    vld           vr11,   a3,     16
1536*c0909341SAndroid Build Coastguard Worker    vld           vr22,   a6,     0
1537*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr2,    vr19,   vr22
1538*c0909341SAndroid Build Coastguard Worker    vilvh.b       vr12,   vr19,   vr22
1539*c0909341SAndroid Build Coastguard Worker    vsub.h        vr3,    vr21,   vr2
1540*c0909341SAndroid Build Coastguard Worker    vsub.h        vr13,   vr21,   vr12
1541*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,    vr0,    vr2
1542*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,    vr0,    vr2
1543*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr14,   vr10,   vr12
1544*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr15,   vr10,   vr12
1545*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,    vr1,    vr3
1546*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,    vr1,    vr3
1547*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr14,   vr11,   vr13
1548*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr15,   vr11,   vr13
1549*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr14,   vr4,    mask_sh
1550*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr15,   vr5,    mask_sh
1551*c0909341SAndroid Build Coastguard Worker    vssrlrni.bu.h vr15,   vr14,   0
1552*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr6,    vr15,   0x4E
1553*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr0,    vr6,    vr15
1554*c0909341SAndroid Build Coastguard Worker    vst           vr0,    a0,     0
1555*c0909341SAndroid Build Coastguard Worker    addi.d        a2,     a2,     32
1556*c0909341SAndroid Build Coastguard Worker    addi.d        a3,     a3,     32
1557*c0909341SAndroid Build Coastguard Worker    addi.d        a6,     a6,     16
1558*c0909341SAndroid Build Coastguard Worker    addi.d        a0,     a0,     16
1559*c0909341SAndroid Build Coastguard Worker.endr
1560*c0909341SAndroid Build Coastguard Worker    add.d         t8,     t8,     a1
1561*c0909341SAndroid Build Coastguard Worker    add.d         a0,     t8,     zero
1562*c0909341SAndroid Build Coastguard Worker    addi.w        a5,     a5,     -1
1563*c0909341SAndroid Build Coastguard Worker    blt           zero,   a5,     .MASK_W128_LSX
1564*c0909341SAndroid Build Coastguard Worker.MASK_END_LSX:
1565*c0909341SAndroid Build Coastguard Workerendfunc
1566*c0909341SAndroid Build Coastguard Worker
1567*c0909341SAndroid Build Coastguard Workerfunction mask_8bpc_lasx
1568*c0909341SAndroid Build Coastguard Worker    xvldi         xr21,   0x440   // 64
1569*c0909341SAndroid Build Coastguard Worker    xvxor.v       xr19,   xr19,   xr19
1570*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     a0,     0
1571*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a4
1572*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
1573*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
1574*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .MASK_LASX_JRTABLE
1575*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
1576*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0
1577*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2
1578*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
1579*c0909341SAndroid Build Coastguard Worker
1580*c0909341SAndroid Build Coastguard Worker    .align   3
1581*c0909341SAndroid Build Coastguard Worker.MASK_LASX_JRTABLE:
1582*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W128_LASX - .MASK_LASX_JRTABLE
1583*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W64_LASX  - .MASK_LASX_JRTABLE
1584*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W32_LASX  - .MASK_LASX_JRTABLE
1585*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W16_LASX  - .MASK_LASX_JRTABLE
1586*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W8_LASX   - .MASK_LASX_JRTABLE
1587*c0909341SAndroid Build Coastguard Worker    .hword .MASK_W4_LASX   - .MASK_LASX_JRTABLE
1588*c0909341SAndroid Build Coastguard Worker
1589*c0909341SAndroid Build Coastguard Worker.MASK_W4_LASX:
1590*c0909341SAndroid Build Coastguard Worker    vld            vr0,    a2,     0
1591*c0909341SAndroid Build Coastguard Worker    vld            vr1,    a3,     0
1592*c0909341SAndroid Build Coastguard Worker    fld.d          f22,    a6,     0
1593*c0909341SAndroid Build Coastguard Worker
1594*c0909341SAndroid Build Coastguard Worker    vilvl.h        vr4,    vr1,    vr0
1595*c0909341SAndroid Build Coastguard Worker    vilvh.h        vr14,   vr1,    vr0
1596*c0909341SAndroid Build Coastguard Worker    vilvl.b        vr2,    vr19,   vr22
1597*c0909341SAndroid Build Coastguard Worker    vsub.h         vr3,    vr21,   vr2
1598*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr14,   xr4,    0x20
1599*c0909341SAndroid Build Coastguard Worker    vilvl.h        vr5,    vr3,    vr2
1600*c0909341SAndroid Build Coastguard Worker    vilvh.h        vr15,   vr3,    vr2
1601*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr15,   xr5,    0x20
1602*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr0,    xr14,   xr15
1603*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr0,    xr14,   xr15
1604*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr1,    xr0,    mask_sh
1605*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr2,    xr1,    0
1606*c0909341SAndroid Build Coastguard Worker    fst.s          f2,     a0,     0
1607*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1608*c0909341SAndroid Build Coastguard Worker    xvstelm.w      xr2,    a0,     0,    4
1609*c0909341SAndroid Build Coastguard Worker
1610*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,     16
1611*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,     16
1612*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,     8
1613*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,     a1
1614*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,     -2
1615*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,     .MASK_W4_LASX
1616*c0909341SAndroid Build Coastguard Worker    b              .MASK_END_LASX
1617*c0909341SAndroid Build Coastguard Worker
1618*c0909341SAndroid Build Coastguard Worker.MASK_W8_LASX:
1619*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,      0
1620*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,      0
1621*c0909341SAndroid Build Coastguard Worker    vld            vr22,   a6,      0
1622*c0909341SAndroid Build Coastguard Worker
1623*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr2,    xr22
1624*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,    xr21,    xr2
1625*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,     xr2
1626*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,     xr2
1627*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,     xr3
1628*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,     xr3
1629*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr5,    xr4,     mask_sh
1630*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr1,    xr5,     0
1631*c0909341SAndroid Build Coastguard Worker    xvpickod.w     xr4,    xr2,     xr1
1632*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr0,    xr4,     xr1
1633*c0909341SAndroid Build Coastguard Worker    fst.d          f0,     a0,      0
1634*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,      a1
1635*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr0,    a0,      0,    2
1636*c0909341SAndroid Build Coastguard Worker
1637*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      32
1638*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      32
1639*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      16
1640*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,      a1
1641*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,      -2
1642*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .MASK_W8_LASX
1643*c0909341SAndroid Build Coastguard Worker    b              .MASK_END_LASX
1644*c0909341SAndroid Build Coastguard Worker
1645*c0909341SAndroid Build Coastguard Worker.MASK_W16_LASX:
1646*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,      0
1647*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,      0
1648*c0909341SAndroid Build Coastguard Worker    vld            vr22,   a6,      0
1649*c0909341SAndroid Build Coastguard Worker
1650*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr2,    xr22
1651*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,    xr21,    xr2
1652*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,     xr2
1653*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,     xr2
1654*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,     xr3
1655*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,     xr3
1656*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr5,    xr4,     mask_sh
1657*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr1,    xr5,     0
1658*c0909341SAndroid Build Coastguard Worker    xvpickod.w     xr4,    xr2,    xr1
1659*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr0,    xr4,    xr1
1660*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr1,    xr0,     0xD8
1661*c0909341SAndroid Build Coastguard Worker    vst            vr1,    a0,      0
1662*c0909341SAndroid Build Coastguard Worker
1663*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      32
1664*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      32
1665*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      16
1666*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,      a1
1667*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,      -1
1668*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .MASK_W16_LASX
1669*c0909341SAndroid Build Coastguard Worker    b              .MASK_END_LASX
1670*c0909341SAndroid Build Coastguard Worker.MASK_W32_LASX:
1671*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,      0
1672*c0909341SAndroid Build Coastguard Worker    xvld           xr10,   a2,      32
1673*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,      0
1674*c0909341SAndroid Build Coastguard Worker    xvld           xr11,   a3,      32
1675*c0909341SAndroid Build Coastguard Worker    xvld           xr22,   a6,      0
1676*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr2,    xr22
1677*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr4,    xr22,    0x01
1678*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr12,   xr4
1679*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,    xr21,    xr2
1680*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr13,   xr21,    xr12
1681*c0909341SAndroid Build Coastguard Worker
1682*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,     xr2
1683*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,     xr2
1684*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr14,   xr10,    xr12
1685*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr15,   xr10,    xr12
1686*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,     xr3
1687*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,     xr3
1688*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr14,   xr11,    xr13
1689*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr15,   xr11,    xr13
1690*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr14,   xr4,     mask_sh
1691*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr15,   xr5,     mask_sh
1692*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr15,   xr14,    0
1693*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr6,    xr15,    0x4E
1694*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr1,    xr6,     xr15
1695*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr1,     0xD8
1696*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,      0
1697*c0909341SAndroid Build Coastguard Worker
1698*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      64
1699*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      64
1700*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      32
1701*c0909341SAndroid Build Coastguard Worker    add.d          a0,     a0,      a1
1702*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,      -1
1703*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .MASK_W32_LASX
1704*c0909341SAndroid Build Coastguard Worker    b              .MASK_END_LASX
1705*c0909341SAndroid Build Coastguard Worker
1706*c0909341SAndroid Build Coastguard Worker.MASK_W64_LASX:
1707*c0909341SAndroid Build Coastguard Worker.rept 2
1708*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,      0
1709*c0909341SAndroid Build Coastguard Worker    xvld           xr10,   a2,      32
1710*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,      0
1711*c0909341SAndroid Build Coastguard Worker    xvld           xr11,   a3,      32
1712*c0909341SAndroid Build Coastguard Worker    xvld           xr22,   a6,      0
1713*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr2,    xr22
1714*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr4,    xr22,    0x01
1715*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr12,   xr4
1716*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,    xr21,    xr2
1717*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr13,   xr21,    xr12
1718*c0909341SAndroid Build Coastguard Worker
1719*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,     xr2
1720*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,     xr2
1721*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr14,   xr10,    xr12
1722*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr15,   xr10,    xr12
1723*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,     xr3
1724*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,     xr3
1725*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr14,   xr11,    xr13
1726*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr15,   xr11,    xr13
1727*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr14,   xr4,     mask_sh
1728*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr15,   xr5,     mask_sh
1729*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr15,   xr14,    0
1730*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr6,    xr15,    0x4E
1731*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr1,    xr6,     xr15
1732*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr1,     0xD8
1733*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,      0
1734*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      64
1735*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      64
1736*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      32
1737*c0909341SAndroid Build Coastguard Worker    addi.d         a0,     a0,      32
1738*c0909341SAndroid Build Coastguard Worker.endr
1739*c0909341SAndroid Build Coastguard Worker    add.d          t8,     t8,     a1
1740*c0909341SAndroid Build Coastguard Worker    add.d          a0,     t8,     zero
1741*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,      -1
1742*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .MASK_W64_LASX
1743*c0909341SAndroid Build Coastguard Worker    b              .MASK_END_LASX
1744*c0909341SAndroid Build Coastguard Worker
1745*c0909341SAndroid Build Coastguard Worker.MASK_W128_LASX:
1746*c0909341SAndroid Build Coastguard Worker.rept 4
1747*c0909341SAndroid Build Coastguard Worker    xvld           xr0,    a2,      0
1748*c0909341SAndroid Build Coastguard Worker    xvld           xr10,   a2,      32
1749*c0909341SAndroid Build Coastguard Worker    xvld           xr1,    a3,      0
1750*c0909341SAndroid Build Coastguard Worker    xvld           xr11,   a3,      32
1751*c0909341SAndroid Build Coastguard Worker    xvld           xr22,   a6,      0
1752*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr2,    xr22
1753*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr4,    xr22,    0x01
1754*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu  xr12,   xr4
1755*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,    xr21,    xr2
1756*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr13,   xr21,    xr12
1757*c0909341SAndroid Build Coastguard Worker
1758*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr4,    xr0,     xr2
1759*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr5,    xr0,     xr2
1760*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr14,   xr10,    xr12
1761*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr15,   xr10,    xr12
1762*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr4,    xr1,     xr3
1763*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr5,    xr1,     xr3
1764*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr14,   xr11,    xr13
1765*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr15,   xr11,    xr13
1766*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr14,   xr4,     mask_sh
1767*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr15,   xr5,     mask_sh
1768*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr15,   xr14,    0
1769*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr6,    xr15,    0x4E
1770*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr1,    xr6,     xr15
1771*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr0,    xr1,     0xD8
1772*c0909341SAndroid Build Coastguard Worker    xvst           xr0,    a0,      0
1773*c0909341SAndroid Build Coastguard Worker
1774*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      64
1775*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      64
1776*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      32
1777*c0909341SAndroid Build Coastguard Worker    addi.d         a0,     a0,      32
1778*c0909341SAndroid Build Coastguard Worker.endr
1779*c0909341SAndroid Build Coastguard Worker    add.d          t8,     t8,     a1
1780*c0909341SAndroid Build Coastguard Worker    add.d          a0,     t8,     zero
1781*c0909341SAndroid Build Coastguard Worker    addi.w         a5,     a5,      -1
1782*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .MASK_W128_LASX
1783*c0909341SAndroid Build Coastguard Worker.MASK_END_LASX:
1784*c0909341SAndroid Build Coastguard Workerendfunc
1785*c0909341SAndroid Build Coastguard Worker
1786*c0909341SAndroid Build Coastguard Worker/*
1787*c0909341SAndroid Build Coastguard Workerstatic void w_mask_c(pixel *dst, const ptrdiff_t dst_stride,
1788*c0909341SAndroid Build Coastguard Worker                     const int16_t *tmp1, const int16_t *tmp2, const int w, int h,
1789*c0909341SAndroid Build Coastguard Worker                     uint8_t *mask, const int sign,
1790*c0909341SAndroid Build Coastguard Worker                     const int ss_hor, const int ss_ver HIGHBD_DECL_SUFFIX)
1791*c0909341SAndroid Build Coastguard Worker*/
1792*c0909341SAndroid Build Coastguard Workerfunction w_mask_420_8bpc_lsx
1793*c0909341SAndroid Build Coastguard Worker    addi.d        sp,      sp,    -24
1794*c0909341SAndroid Build Coastguard Worker    fst.d         f24,     sp,    0
1795*c0909341SAndroid Build Coastguard Worker    fst.d         f25,     sp,    8
1796*c0909341SAndroid Build Coastguard Worker    fst.d         f26,     sp,    16
1797*c0909341SAndroid Build Coastguard Worker    vldi          vr20,    0x440
1798*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h  vr21,    a7
1799*c0909341SAndroid Build Coastguard Worker    vldi          vr22,    0x426
1800*c0909341SAndroid Build Coastguard Worker
1801*c0909341SAndroid Build Coastguard Worker    clz.w         t0,      a4
1802*c0909341SAndroid Build Coastguard Worker    li.w          t1,      24
1803*c0909341SAndroid Build Coastguard Worker    sub.w         t0,      t0,      t1
1804*c0909341SAndroid Build Coastguard Worker    la.local      t1,      .WMASK420_LSX_JRTABLE
1805*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,      t0,      t1,    1
1806*c0909341SAndroid Build Coastguard Worker    ld.h          t8,      t0,      0
1807*c0909341SAndroid Build Coastguard Worker    add.d         t1,      t1,      t8
1808*c0909341SAndroid Build Coastguard Worker    jirl          $r0,     t1,      0
1809*c0909341SAndroid Build Coastguard Worker
1810*c0909341SAndroid Build Coastguard Worker    .align   3
1811*c0909341SAndroid Build Coastguard Worker.WMASK420_LSX_JRTABLE:
1812*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W128_LSX - .WMASK420_LSX_JRTABLE
1813*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W64_LSX  - .WMASK420_LSX_JRTABLE
1814*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W32_LSX  - .WMASK420_LSX_JRTABLE
1815*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W16_LSX  - .WMASK420_LSX_JRTABLE
1816*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W8_LSX   - .WMASK420_LSX_JRTABLE
1817*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W4_LSX   - .WMASK420_LSX_JRTABLE
1818*c0909341SAndroid Build Coastguard Worker
1819*c0909341SAndroid Build Coastguard Worker.WMASK420_W4_LSX:
1820*c0909341SAndroid Build Coastguard Worker    vld           vr0,     a2,       0
1821*c0909341SAndroid Build Coastguard Worker    vld           vr1,     a2,       16
1822*c0909341SAndroid Build Coastguard Worker    vld           vr2,     a3,       0
1823*c0909341SAndroid Build Coastguard Worker    vld           vr3,     a3,       16
1824*c0909341SAndroid Build Coastguard Worker    addi.w        a5,      a5,       -4
1825*c0909341SAndroid Build Coastguard Worker
1826*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr4,     vr0,      vr2
1827*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr5,     vr1,      vr3
1828*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr4,     vr4,      8
1829*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr5,     vr5,      8
1830*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr4,     vr4,      8
1831*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr5,     vr5,      8
1832*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,     vr4,      vr22
1833*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,     vr5,      vr22
1834*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr6,     vr4,      vr20
1835*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr7,     vr5,      vr20
1836*c0909341SAndroid Build Coastguard Worker    vsub.h        vr8,     vr20,     vr6
1837*c0909341SAndroid Build Coastguard Worker    vsub.h        vr9,     vr20,     vr7
1838*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,     vr6,      vr0
1839*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,     vr6,      vr0
1840*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr10,    vr7,      vr1
1841*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr11,    vr7,      vr1
1842*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,     vr8,      vr2
1843*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,     vr8,      vr2
1844*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr10,    vr9,      vr3
1845*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr11,    vr9,      vr3
1846*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr0,     vr5,      vr4
1847*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr1,     vr5,      vr4
1848*c0909341SAndroid Build Coastguard Worker    vilvl.w       vr2,     vr11,     vr10
1849*c0909341SAndroid Build Coastguard Worker    vilvh.w       vr3,     vr11,     vr10
1850*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr1,     vr0,      10
1851*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr3,     vr2,      10
1852*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr3,     vr1,      0
1853*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,     a0,       0,    0
1854*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1855*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,     a0,       0,    1
1856*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1857*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,     a0,       0,    2
1858*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1859*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr3,     a0,       0,    3
1860*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1861*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr0,     vr7,      vr6
1862*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr1,     vr7,      vr6
1863*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,     vr0,      vr1
1864*c0909341SAndroid Build Coastguard Worker    vshuf4i.h     vr0,     vr0,      0xd8
1865*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h    vr2,     vr0,      vr0
1866*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr2,     vr2,      vr2
1867*c0909341SAndroid Build Coastguard Worker    vsub.h        vr2,     vr2,      vr21
1868*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr2,     vr2,      2
1869*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr2,     vr2,      2
1870*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr2,     a6,       0,    0
1871*c0909341SAndroid Build Coastguard Worker
1872*c0909341SAndroid Build Coastguard Worker    addi.d        a2,      a2,       32
1873*c0909341SAndroid Build Coastguard Worker    addi.d        a3,      a3,       32
1874*c0909341SAndroid Build Coastguard Worker    addi.d        a6,      a6,       4
1875*c0909341SAndroid Build Coastguard Worker    blt           zero,    a5,       .WMASK420_W4_LSX
1876*c0909341SAndroid Build Coastguard Worker    b             .END_W420
1877*c0909341SAndroid Build Coastguard Worker
1878*c0909341SAndroid Build Coastguard Worker.WMASK420_W8_LSX:
1879*c0909341SAndroid Build Coastguard Worker    vld           vr0,     a2,       0
1880*c0909341SAndroid Build Coastguard Worker    vld           vr1,     a2,       16
1881*c0909341SAndroid Build Coastguard Worker    vld           vr2,     a3,       0
1882*c0909341SAndroid Build Coastguard Worker    vld           vr3,     a3,       16
1883*c0909341SAndroid Build Coastguard Worker    addi.w        a5,      a5,       -2
1884*c0909341SAndroid Build Coastguard Worker
1885*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr4,     vr0,      vr2
1886*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr5,     vr1,      vr3
1887*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr4,     vr4,      8
1888*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr5,     vr5,      8
1889*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr4,     vr4,      8
1890*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr5,     vr5,      8
1891*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,     vr4,      vr22
1892*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,     vr5,      vr22
1893*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr6,     vr4,      vr20
1894*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr7,     vr5,      vr20
1895*c0909341SAndroid Build Coastguard Worker    vsub.h        vr8,     vr20,     vr6
1896*c0909341SAndroid Build Coastguard Worker    vsub.h        vr9,     vr20,     vr7
1897*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr4,     vr6,      vr0
1898*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr5,     vr6,      vr0
1899*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr10,    vr7,      vr1
1900*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr11,    vr7,      vr1
1901*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr4,     vr8,      vr2
1902*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr5,     vr8,      vr2
1903*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr10,    vr9,      vr3
1904*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr11,    vr9,      vr3
1905*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr10,    vr4,      10
1906*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr11,    vr5,      10
1907*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr11,    vr10,     0
1908*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr0,     vr11,     0x4E
1909*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr3,     vr0,      vr11
1910*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr3,     a0,       0,     0
1911*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1912*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr3,     a0,       0,     1
1913*c0909341SAndroid Build Coastguard Worker    add.d         a0,      a0,       a1
1914*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr0,     vr7,      vr6
1915*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr1,     vr7,      vr6
1916*c0909341SAndroid Build Coastguard Worker    vadd.h        vr0,     vr0,      vr1
1917*c0909341SAndroid Build Coastguard Worker    vilvh.d       vr2,     vr0,      vr0
1918*c0909341SAndroid Build Coastguard Worker    vadd.h        vr2,     vr2,      vr0
1919*c0909341SAndroid Build Coastguard Worker    vsub.h        vr2,     vr2,      vr21
1920*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr2,     vr2,      2
1921*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h  vr2,     vr2,      2
1922*c0909341SAndroid Build Coastguard Worker    vstelm.w      vr2,     a6,       0,     0
1923*c0909341SAndroid Build Coastguard Worker
1924*c0909341SAndroid Build Coastguard Worker    addi.d        a2,      a2,       32
1925*c0909341SAndroid Build Coastguard Worker    addi.d        a3,      a3,       32
1926*c0909341SAndroid Build Coastguard Worker    addi.d        a6,      a6,       4
1927*c0909341SAndroid Build Coastguard Worker    blt           zero,    a5,       .WMASK420_W8_LSX
1928*c0909341SAndroid Build Coastguard Worker    b             .END_W420
1929*c0909341SAndroid Build Coastguard Worker
1930*c0909341SAndroid Build Coastguard Worker.WMASK420_W16_LSX:
1931*c0909341SAndroid Build Coastguard Worker    vld           vr0,     a2,       0
1932*c0909341SAndroid Build Coastguard Worker    vld           vr1,     a2,       16
1933*c0909341SAndroid Build Coastguard Worker    alsl.d        a2,      a4,       a2,    1
1934*c0909341SAndroid Build Coastguard Worker    vld           vr2,     a2,       0
1935*c0909341SAndroid Build Coastguard Worker    vld           vr3,     a2,       16
1936*c0909341SAndroid Build Coastguard Worker    vld           vr4,     a3,       0
1937*c0909341SAndroid Build Coastguard Worker    vld           vr5,     a3,       16
1938*c0909341SAndroid Build Coastguard Worker    alsl.d        a3,      a4,       a3,    1
1939*c0909341SAndroid Build Coastguard Worker    vld           vr6,     a3,       0
1940*c0909341SAndroid Build Coastguard Worker    vld           vr7,     a3,       16
1941*c0909341SAndroid Build Coastguard Worker
1942*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr8,     vr0,      vr4
1943*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr9,     vr1,      vr5
1944*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr10,    vr2,      vr6
1945*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr11,    vr3,      vr7
1946*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr8,     vr8,      8
1947*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr9,     vr9,      8
1948*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr10,    vr10,     8
1949*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr11,    vr11,     8
1950*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr8,     vr8,      8
1951*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr9,     vr9,      8
1952*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr10,    vr10,     8
1953*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr11,    vr11,     8
1954*c0909341SAndroid Build Coastguard Worker    vadd.h        vr8,     vr8,      vr22
1955*c0909341SAndroid Build Coastguard Worker    vadd.h        vr9,     vr9,      vr22
1956*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,    vr10,     vr22
1957*c0909341SAndroid Build Coastguard Worker    vadd.h        vr11,    vr11,     vr22
1958*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr12,    vr8,      vr20
1959*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr13,    vr9,      vr20
1960*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr14,    vr10,     vr20
1961*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr15,    vr11,     vr20
1962*c0909341SAndroid Build Coastguard Worker    vsub.h        vr16,    vr20,     vr12
1963*c0909341SAndroid Build Coastguard Worker    vsub.h        vr17,    vr20,     vr13
1964*c0909341SAndroid Build Coastguard Worker    vsub.h        vr18,    vr20,     vr14
1965*c0909341SAndroid Build Coastguard Worker    vsub.h        vr19,    vr20,     vr15
1966*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr8,     vr12,     vr0
1967*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr9,     vr12,     vr0
1968*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr10,    vr13,     vr1
1969*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr11,    vr13,     vr1
1970*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr23,    vr14,     vr2
1971*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr24,    vr14,     vr2
1972*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr25,    vr15,     vr3
1973*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr26,    vr15,     vr3
1974*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr8,     vr16,     vr4
1975*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr9,     vr16,     vr4
1976*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr10,    vr17,     vr5
1977*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr11,    vr17,     vr5
1978*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr23,    vr18,     vr6
1979*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr24,    vr18,     vr6
1980*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr25,    vr19,     vr7
1981*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr26,    vr19,     vr7
1982*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr10,    vr8,      10
1983*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr11,    vr9,      10
1984*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr25,    vr23,     10
1985*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr26,    vr24,     10
1986*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr11,    vr10,     0
1987*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr26,    vr25,     0
1988*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr0,     vr11,     0x4E
1989*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr1,     vr26,     0x4E
1990*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr3,     vr0,      vr11
1991*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr7,     vr1,      vr26
1992*c0909341SAndroid Build Coastguard Worker    vst           vr3,     a0,       0
1993*c0909341SAndroid Build Coastguard Worker    vstx          vr7,     a0,       a1
1994*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr0,     vr13,     vr12
1995*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr1,     vr13,     vr12
1996*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr2,     vr15,     vr14
1997*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr3,     vr15,     vr14
1998*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,     vr0,      vr1
1999*c0909341SAndroid Build Coastguard Worker    vadd.h        vr5,     vr2,      vr3
2000*c0909341SAndroid Build Coastguard Worker    vadd.h        vr4,     vr4,      vr5
2001*c0909341SAndroid Build Coastguard Worker    vsub.h        vr4,     vr4,      vr21
2002*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr4,     vr4,      2
2003*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr4,     a6,       0,    0
2004*c0909341SAndroid Build Coastguard Worker
2005*c0909341SAndroid Build Coastguard Worker    alsl.d        a2,      a4,       a2,   1
2006*c0909341SAndroid Build Coastguard Worker    alsl.d        a3,      a4,       a3,   1
2007*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,      a1,       a0,   1
2008*c0909341SAndroid Build Coastguard Worker    addi.d        a6,      a6,       8
2009*c0909341SAndroid Build Coastguard Worker    addi.w        a5,      a5,       -2
2010*c0909341SAndroid Build Coastguard Worker    blt           zero,    a5,       .WMASK420_W16_LSX
2011*c0909341SAndroid Build Coastguard Worker    b    .END_W420
2012*c0909341SAndroid Build Coastguard Worker
2013*c0909341SAndroid Build Coastguard Worker.WMASK420_W32_LSX:
2014*c0909341SAndroid Build Coastguard Worker.WMASK420_W64_LSX:
2015*c0909341SAndroid Build Coastguard Worker.WMASK420_W128_LSX:
2016*c0909341SAndroid Build Coastguard Worker
2017*c0909341SAndroid Build Coastguard Worker.LOOP_W32_420_LSX:
2018*c0909341SAndroid Build Coastguard Worker    add.d         t1,       a2,       zero
2019*c0909341SAndroid Build Coastguard Worker    add.d         t2,       a3,       zero
2020*c0909341SAndroid Build Coastguard Worker    add.d         t3,       a0,       zero
2021*c0909341SAndroid Build Coastguard Worker    add.d         t4,       a6,       zero
2022*c0909341SAndroid Build Coastguard Worker    alsl.d        t5,       a4,       t1,     1
2023*c0909341SAndroid Build Coastguard Worker    alsl.d        t6,       a4,       t2,     1
2024*c0909341SAndroid Build Coastguard Worker    or            t7,       a4,       a4
2025*c0909341SAndroid Build Coastguard Worker
2026*c0909341SAndroid Build Coastguard Worker.W32_420_LSX:
2027*c0909341SAndroid Build Coastguard Worker    vld           vr0,      t1,       0
2028*c0909341SAndroid Build Coastguard Worker    vld           vr1,      t1,       16
2029*c0909341SAndroid Build Coastguard Worker    vld           vr2,      t2,       0
2030*c0909341SAndroid Build Coastguard Worker    vld           vr3,      t2,       16
2031*c0909341SAndroid Build Coastguard Worker    vld           vr4,      t5,       0
2032*c0909341SAndroid Build Coastguard Worker    vld           vr5,      t5,       16
2033*c0909341SAndroid Build Coastguard Worker    vld           vr6,      t6,       0
2034*c0909341SAndroid Build Coastguard Worker    vld           vr7,      t6,       16
2035*c0909341SAndroid Build Coastguard Worker    addi.d        t1,       t1,       32
2036*c0909341SAndroid Build Coastguard Worker    addi.d        t2,       t2,       32
2037*c0909341SAndroid Build Coastguard Worker    addi.d        t5,       t5,       32
2038*c0909341SAndroid Build Coastguard Worker    addi.d        t6,       t6,       32
2039*c0909341SAndroid Build Coastguard Worker    addi.w        t7,       t7,       -16
2040*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr8,      vr0,      vr2
2041*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr9,      vr1,      vr3
2042*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr10,     vr4,      vr6
2043*c0909341SAndroid Build Coastguard Worker    vabsd.h       vr11,     vr5,      vr7
2044*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr8,      vr8,      8
2045*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr9,      vr9,      8
2046*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr10,     vr10,     8
2047*c0909341SAndroid Build Coastguard Worker    vaddi.hu      vr11,     vr11,     8
2048*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr8,      vr8,      8
2049*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr9,      vr9,      8
2050*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr10,     vr10,     8
2051*c0909341SAndroid Build Coastguard Worker    vsrli.h       vr11,     vr11,     8
2052*c0909341SAndroid Build Coastguard Worker    vadd.h        vr8,      vr8,      vr22
2053*c0909341SAndroid Build Coastguard Worker    vadd.h        vr9,      vr9,      vr22
2054*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,     vr10,     vr22
2055*c0909341SAndroid Build Coastguard Worker    vadd.h        vr11,     vr11,     vr22
2056*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr12,     vr8,      vr20
2057*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr13,     vr9,      vr20
2058*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr14,     vr10,     vr20
2059*c0909341SAndroid Build Coastguard Worker    vmin.hu       vr15,     vr11,     vr20
2060*c0909341SAndroid Build Coastguard Worker    vsub.h        vr16,     vr20,     vr12
2061*c0909341SAndroid Build Coastguard Worker    vsub.h        vr17,     vr20,     vr13
2062*c0909341SAndroid Build Coastguard Worker    vsub.h        vr18,     vr20,     vr14
2063*c0909341SAndroid Build Coastguard Worker    vsub.h        vr19,     vr20,     vr15
2064*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr8,      vr12,     vr0
2065*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr9,      vr12,     vr0
2066*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr10,     vr13,     vr1
2067*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr11,     vr13,     vr1
2068*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr23,     vr14,     vr4
2069*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr24,     vr14,     vr4
2070*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h   vr25,     vr15,     vr5
2071*c0909341SAndroid Build Coastguard Worker    vmulwod.w.h   vr26,     vr15,     vr5
2072*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr8,      vr16,     vr2
2073*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr9,      vr16,     vr2
2074*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr10,     vr17,     vr3
2075*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr11,     vr17,     vr3
2076*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr23,     vr18,     vr6
2077*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr24,     vr18,     vr6
2078*c0909341SAndroid Build Coastguard Worker    vmaddwev.w.h  vr25,     vr19,     vr7
2079*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h  vr26,     vr19,     vr7
2080*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr10,     vr8,      10
2081*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr11,     vr9,      10
2082*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr25,     vr23,     10
2083*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w vr26,     vr24,     10
2084*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr11,     vr10,     0
2085*c0909341SAndroid Build Coastguard Worker    vssrlni.bu.h  vr26,     vr25,     0
2086*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr8,      vr11,     0x4E
2087*c0909341SAndroid Build Coastguard Worker    vshuf4i.w     vr9,      vr26,     0x4E
2088*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr3,      vr8,      vr11
2089*c0909341SAndroid Build Coastguard Worker    vilvl.b       vr7,      vr9,      vr26
2090*c0909341SAndroid Build Coastguard Worker    vst           vr3,      t3,       0
2091*c0909341SAndroid Build Coastguard Worker    vstx          vr7,      a1,       t3
2092*c0909341SAndroid Build Coastguard Worker    addi.d        t3,       t3,       16
2093*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr8,      vr13,     vr12
2094*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr9,      vr13,     vr12
2095*c0909341SAndroid Build Coastguard Worker    vpickev.h     vr10,     vr15,     vr14
2096*c0909341SAndroid Build Coastguard Worker    vpickod.h     vr11,     vr15,     vr14
2097*c0909341SAndroid Build Coastguard Worker    vadd.h        vr8,      vr8,      vr9
2098*c0909341SAndroid Build Coastguard Worker    vadd.h        vr10,     vr10,     vr11
2099*c0909341SAndroid Build Coastguard Worker    vadd.h        vr12,     vr8,      vr10
2100*c0909341SAndroid Build Coastguard Worker    vsub.h        vr12,     vr12,     vr21
2101*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h vr12,     vr12,     2
2102*c0909341SAndroid Build Coastguard Worker    vstelm.d      vr12,     t4,       0,     0
2103*c0909341SAndroid Build Coastguard Worker    addi.d        t4,       t4,       8
2104*c0909341SAndroid Build Coastguard Worker    bne           t7,       zero,     .W32_420_LSX
2105*c0909341SAndroid Build Coastguard Worker
2106*c0909341SAndroid Build Coastguard Worker    alsl.d        a2,       a4,       a2,     2
2107*c0909341SAndroid Build Coastguard Worker    alsl.d        a3,       a4,       a3,     2
2108*c0909341SAndroid Build Coastguard Worker    alsl.d        a0,       a1,       a0,     1
2109*c0909341SAndroid Build Coastguard Worker    srai.w        t8,       a4,       1
2110*c0909341SAndroid Build Coastguard Worker    add.d         a6,       a6,       t8
2111*c0909341SAndroid Build Coastguard Worker    addi.w        a5,       a5,       -2
2112*c0909341SAndroid Build Coastguard Worker    blt           zero,     a5,       .LOOP_W32_420_LSX
2113*c0909341SAndroid Build Coastguard Worker
2114*c0909341SAndroid Build Coastguard Worker.END_W420:
2115*c0909341SAndroid Build Coastguard Worker    fld.d            f24,     sp,    0
2116*c0909341SAndroid Build Coastguard Worker    fld.d            f25,     sp,    8
2117*c0909341SAndroid Build Coastguard Worker    fld.d            f26,     sp,    16
2118*c0909341SAndroid Build Coastguard Worker    addi.d           sp,      sp,    24
2119*c0909341SAndroid Build Coastguard Workerendfunc
2120*c0909341SAndroid Build Coastguard Worker
2121*c0909341SAndroid Build Coastguard Workerfunction w_mask_420_8bpc_lasx
2122*c0909341SAndroid Build Coastguard Worker    xvldi          xr20,    0x440
2123*c0909341SAndroid Build Coastguard Worker    xvreplgr2vr.h  xr21,    a7
2124*c0909341SAndroid Build Coastguard Worker    xvldi          xr22,    0x426
2125*c0909341SAndroid Build Coastguard Worker
2126*c0909341SAndroid Build Coastguard Worker    clz.w          t0,      a4
2127*c0909341SAndroid Build Coastguard Worker    li.w           t1,      24
2128*c0909341SAndroid Build Coastguard Worker    sub.w          t0,      t0,      t1
2129*c0909341SAndroid Build Coastguard Worker    la.local       t1,      .WMASK420_LASX_JRTABLE
2130*c0909341SAndroid Build Coastguard Worker    alsl.d         t0,      t0,      t1,    1
2131*c0909341SAndroid Build Coastguard Worker    ld.h           t8,      t0,      0
2132*c0909341SAndroid Build Coastguard Worker    add.d          t1,      t1,      t8
2133*c0909341SAndroid Build Coastguard Worker    jirl           $r0,     t1,      0
2134*c0909341SAndroid Build Coastguard Worker
2135*c0909341SAndroid Build Coastguard Worker    .align   3
2136*c0909341SAndroid Build Coastguard Worker.WMASK420_LASX_JRTABLE:
2137*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W128_LASX - .WMASK420_LASX_JRTABLE
2138*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W64_LASX  - .WMASK420_LASX_JRTABLE
2139*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W32_LASX  - .WMASK420_LASX_JRTABLE
2140*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W16_LASX  - .WMASK420_LASX_JRTABLE
2141*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W8_LASX   - .WMASK420_LASX_JRTABLE
2142*c0909341SAndroid Build Coastguard Worker    .hword .WMASK420_W4_LASX   - .WMASK420_LASX_JRTABLE
2143*c0909341SAndroid Build Coastguard Worker
2144*c0909341SAndroid Build Coastguard Worker.WMASK420_W4_LASX:
2145*c0909341SAndroid Build Coastguard Worker    xvld           xr0,     a2,     0
2146*c0909341SAndroid Build Coastguard Worker    xvld           xr1,     a3,     0
2147*c0909341SAndroid Build Coastguard Worker    addi.w         a5,      a5,     -4
2148*c0909341SAndroid Build Coastguard Worker
2149*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr2,     xr0,    xr1
2150*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr2,     xr2,    8
2151*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr2,     xr2,    8
2152*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr2,     xr2,    xr22
2153*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr3,     xr2,    xr20
2154*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr4,     xr20,   xr3
2155*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr5,     xr3,    xr0
2156*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr6,     xr3,    xr0
2157*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr5,     xr4,    xr1
2158*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr6,     xr4,    xr1
2159*c0909341SAndroid Build Coastguard Worker    xvilvl.w       xr7,     xr6,    xr5
2160*c0909341SAndroid Build Coastguard Worker    xvilvh.w       xr8,     xr6,    xr5
2161*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr8,     xr7,    10
2162*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr9,     xr8,    0
2163*c0909341SAndroid Build Coastguard Worker    vstelm.w       vr9,     a0,     0,     0
2164*c0909341SAndroid Build Coastguard Worker    add.d          a0,      a0,     a1
2165*c0909341SAndroid Build Coastguard Worker    vstelm.w       vr9,     a0,     0,     1
2166*c0909341SAndroid Build Coastguard Worker    add.d          a0,      a0,     a1
2167*c0909341SAndroid Build Coastguard Worker    xvstelm.w      xr9,     a0,     0,     4
2168*c0909341SAndroid Build Coastguard Worker    add.d          a0,      a0,     a1
2169*c0909341SAndroid Build Coastguard Worker    xvstelm.w      xr9,     a0,     0,     5
2170*c0909341SAndroid Build Coastguard Worker    add.d          a0,      a0,     a1
2171*c0909341SAndroid Build Coastguard Worker
2172*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr3,     xr3,    xr3
2173*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr4,     xr3,    0xb1
2174*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr3,     xr3,    xr4
2175*c0909341SAndroid Build Coastguard Worker    xvpickev.h     xr3,     xr3,    xr3
2176*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr3,     xr3,    xr21
2177*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h xr3,     xr3,    2
2178*c0909341SAndroid Build Coastguard Worker    vstelm.h       vr3,     a6,     0,     0
2179*c0909341SAndroid Build Coastguard Worker    xvstelm.h      xr3,     a6,     2,     8
2180*c0909341SAndroid Build Coastguard Worker
2181*c0909341SAndroid Build Coastguard Worker    addi.d         a2,     a2,      32
2182*c0909341SAndroid Build Coastguard Worker    addi.d         a3,     a3,      32
2183*c0909341SAndroid Build Coastguard Worker    addi.d         a6,     a6,      4
2184*c0909341SAndroid Build Coastguard Worker    blt            zero,   a5,      .WMASK420_W4_LASX
2185*c0909341SAndroid Build Coastguard Worker    b              .END_W420_LASX
2186*c0909341SAndroid Build Coastguard Worker
2187*c0909341SAndroid Build Coastguard Worker.WMASK420_W8_LASX:
2188*c0909341SAndroid Build Coastguard Worker    xvld           xr0,      a2,     0
2189*c0909341SAndroid Build Coastguard Worker    xvld           xr1,      a2,     32
2190*c0909341SAndroid Build Coastguard Worker    xvld           xr2,      a3,     0
2191*c0909341SAndroid Build Coastguard Worker    xvld           xr3,      a3,     32
2192*c0909341SAndroid Build Coastguard Worker    addi.w         a5,       a5,     -4
2193*c0909341SAndroid Build Coastguard Worker
2194*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr4,      xr0,    xr2
2195*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr5,      xr1,    xr3
2196*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr4,      xr4,    8
2197*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr5,      xr5,    8
2198*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr4,      xr4,    8
2199*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr5,      xr5,    8
2200*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,      xr4,    xr22
2201*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr5,      xr5,    xr22
2202*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr6,      xr4,    xr20
2203*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr7,      xr5,    xr20
2204*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr8,      xr20,   xr6
2205*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr9,      xr20,   xr7
2206*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr10,     xr6,    xr0
2207*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr11,     xr6,    xr0
2208*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr12,     xr7,    xr1
2209*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr13,     xr7,    xr1
2210*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr10,     xr8,    xr2
2211*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr11,     xr8,    xr2
2212*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr12,     xr9,    xr3
2213*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr13,     xr9,    xr3
2214*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr12,     xr10,   10
2215*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr13,     xr11,   10
2216*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr13,     xr12,   0
2217*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr1,      xr13,   0x4E
2218*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr17,     xr1,    xr13
2219*c0909341SAndroid Build Coastguard Worker    vstelm.d       vr17,     a0,     0,     0
2220*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2221*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr17,     a0,     0,     2
2222*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2223*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr17,     a0,     0,     1
2224*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2225*c0909341SAndroid Build Coastguard Worker    xvstelm.d      xr17,     a0,     0,     3
2226*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2227*c0909341SAndroid Build Coastguard Worker
2228*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr6,      xr6,    xr6
2229*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr7,      xr7,    xr7
2230*c0909341SAndroid Build Coastguard Worker    xvpickev.h     xr8,      xr7,    xr6
2231*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr9,      xr8,    0x01
2232*c0909341SAndroid Build Coastguard Worker    vadd.h         vr8,      vr8,    vr9
2233*c0909341SAndroid Build Coastguard Worker    vsub.h         vr8,      vr8,    vr21
2234*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h  vr8,      vr8,    2
2235*c0909341SAndroid Build Coastguard Worker    vstelm.d       vr8,      a6,     0,    0
2236*c0909341SAndroid Build Coastguard Worker    addi.d         a2,       a2,     64
2237*c0909341SAndroid Build Coastguard Worker    addi.d         a3,       a3,     64
2238*c0909341SAndroid Build Coastguard Worker    addi.d         a6,       a6,     8
2239*c0909341SAndroid Build Coastguard Worker    blt            zero,     a5,     .WMASK420_W8_LASX
2240*c0909341SAndroid Build Coastguard Worker    b              .END_W420_LASX
2241*c0909341SAndroid Build Coastguard Worker
2242*c0909341SAndroid Build Coastguard Worker.WMASK420_W16_LASX:
2243*c0909341SAndroid Build Coastguard Worker    xvld           xr0,      a2,     0
2244*c0909341SAndroid Build Coastguard Worker    xvld           xr1,      a2,     32
2245*c0909341SAndroid Build Coastguard Worker    xvld           xr2,      a3,     0
2246*c0909341SAndroid Build Coastguard Worker    xvld           xr3,      a3,     32
2247*c0909341SAndroid Build Coastguard Worker    addi.w         a5,       a5,     -2
2248*c0909341SAndroid Build Coastguard Worker
2249*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr4,      xr0,    xr2
2250*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr5,      xr1,    xr3
2251*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr4,      xr4,    8
2252*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr5,      xr5,    8
2253*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr4,      xr4,    8
2254*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr5,      xr5,    8
2255*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,      xr4,    xr22
2256*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr5,      xr5,    xr22
2257*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr4,      xr4,    xr20
2258*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr5,      xr5,    xr20
2259*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr6,      xr20,   xr4
2260*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr7,      xr20,   xr5
2261*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr8,      xr4,    xr0
2262*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr9,      xr4,    xr0
2263*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr10,     xr5,    xr1
2264*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr11,     xr5,    xr1
2265*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr8,      xr6,    xr2
2266*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr9,      xr6,    xr2
2267*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr10,     xr7,    xr3
2268*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr11,     xr7,    xr3
2269*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr10,     xr8,    10
2270*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr11,     xr9,    10
2271*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr11,     xr10,   0
2272*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr8,      xr11,   0x4E
2273*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr15,     xr8,    xr11
2274*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr16,     xr15,   0xd8
2275*c0909341SAndroid Build Coastguard Worker    vst            vr16,     a0,     0
2276*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2277*c0909341SAndroid Build Coastguard Worker    xvpermi.q      xr16,     xr16,   0x01
2278*c0909341SAndroid Build Coastguard Worker    vst            vr16,     a0,     0
2279*c0909341SAndroid Build Coastguard Worker    add.d          a0,       a0,     a1
2280*c0909341SAndroid Build Coastguard Worker
2281*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr4,      xr4,    xr4
2282*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr5,      xr5,    xr5
2283*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,      xr5,    xr4
2284*c0909341SAndroid Build Coastguard Worker    xvpickev.h     xr6,      xr4,    xr4
2285*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr7,      xr6,    0x08
2286*c0909341SAndroid Build Coastguard Worker    vsub.h         vr7,      vr7,    vr21
2287*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h  vr7,      vr7,    2
2288*c0909341SAndroid Build Coastguard Worker    vstelm.d       vr7,      a6,     0,    0
2289*c0909341SAndroid Build Coastguard Worker
2290*c0909341SAndroid Build Coastguard Worker    addi.d         a2,       a2,     64
2291*c0909341SAndroid Build Coastguard Worker    addi.d         a3,       a3,     64
2292*c0909341SAndroid Build Coastguard Worker    addi.d         a6,       a6,     8
2293*c0909341SAndroid Build Coastguard Worker    blt            zero,     a5,     .WMASK420_W16_LASX
2294*c0909341SAndroid Build Coastguard Worker    b              .END_W420_LASX
2295*c0909341SAndroid Build Coastguard Worker
2296*c0909341SAndroid Build Coastguard Worker.WMASK420_W32_LASX:
2297*c0909341SAndroid Build Coastguard Worker.WMASK420_W64_LASX:
2298*c0909341SAndroid Build Coastguard Worker.WMASK420_W128_LASX:
2299*c0909341SAndroid Build Coastguard Worker
2300*c0909341SAndroid Build Coastguard Worker.LOOP_W32_420_LASX:
2301*c0909341SAndroid Build Coastguard Worker    add.d          t1,       a2,       zero
2302*c0909341SAndroid Build Coastguard Worker    add.d          t2,       a3,       zero
2303*c0909341SAndroid Build Coastguard Worker    add.d          t3,       a0,       zero
2304*c0909341SAndroid Build Coastguard Worker    add.d          t4,       a6,       zero
2305*c0909341SAndroid Build Coastguard Worker    alsl.d         t5,       a4,       t1,     1
2306*c0909341SAndroid Build Coastguard Worker    alsl.d         t6,       a4,       t2,     1
2307*c0909341SAndroid Build Coastguard Worker    or             t7,       a4,       a4
2308*c0909341SAndroid Build Coastguard Worker.W32_420_LASX:
2309*c0909341SAndroid Build Coastguard Worker    xvld           xr0,      t1,       0
2310*c0909341SAndroid Build Coastguard Worker    xvld           xr1,      t2,       0
2311*c0909341SAndroid Build Coastguard Worker    xvld           xr2,      t5,       0
2312*c0909341SAndroid Build Coastguard Worker    xvld           xr3,      t6,       0
2313*c0909341SAndroid Build Coastguard Worker    addi.d         t1,       t1,       32
2314*c0909341SAndroid Build Coastguard Worker    addi.d         t2,       t2,       32
2315*c0909341SAndroid Build Coastguard Worker    addi.d         t5,       t5,       32
2316*c0909341SAndroid Build Coastguard Worker    addi.d         t6,       t6,       32
2317*c0909341SAndroid Build Coastguard Worker    addi.w         t7,       t7,       -16
2318*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr4,      xr0,      xr1
2319*c0909341SAndroid Build Coastguard Worker    xvabsd.h       xr5,      xr2,      xr3
2320*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr4,      xr4,      8
2321*c0909341SAndroid Build Coastguard Worker    xvaddi.hu      xr5,      xr5,      8
2322*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr4,      xr4,      8
2323*c0909341SAndroid Build Coastguard Worker    xvsrli.h       xr5,      xr5,      8
2324*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr4,      xr4,      xr22
2325*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr5,      xr5,      xr22
2326*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr6,      xr4,      xr20
2327*c0909341SAndroid Build Coastguard Worker    xvmin.hu       xr7,      xr5,      xr20
2328*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr8,      xr20,     xr6
2329*c0909341SAndroid Build Coastguard Worker    xvsub.h        xr9,      xr20,     xr7
2330*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr10,     xr6,      xr0
2331*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr11,     xr6,      xr0
2332*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h   xr12,     xr7,      xr2
2333*c0909341SAndroid Build Coastguard Worker    xvmulwod.w.h   xr13,     xr7,      xr2
2334*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr10,     xr8,      xr1
2335*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr11,     xr8,      xr1
2336*c0909341SAndroid Build Coastguard Worker    xvmaddwev.w.h  xr12,     xr9,      xr3
2337*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h  xr13,     xr9,      xr3
2338*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr12,     xr10,     10
2339*c0909341SAndroid Build Coastguard Worker    xvssrarni.hu.w xr13,     xr11,     10
2340*c0909341SAndroid Build Coastguard Worker    xvssrlni.bu.h  xr13,     xr12,     0
2341*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w     xr10,     xr13,     0x4E
2342*c0909341SAndroid Build Coastguard Worker    xvilvl.b       xr17,     xr10,     xr13
2343*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr18,     xr17,     0x08
2344*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr19,     xr17,     0x0d
2345*c0909341SAndroid Build Coastguard Worker    vst            vr18,     t3,       0
2346*c0909341SAndroid Build Coastguard Worker    vstx           vr19,     t3,       a1
2347*c0909341SAndroid Build Coastguard Worker    addi.d         t3,       t3,       16
2348*c0909341SAndroid Build Coastguard Worker
2349*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr6,      xr6,      xr6
2350*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h    xr7,      xr7,      xr7
2351*c0909341SAndroid Build Coastguard Worker    xvadd.h        xr6,      xr7,      xr6
2352*c0909341SAndroid Build Coastguard Worker    xvpickev.h     xr7,      xr6,      xr6
2353*c0909341SAndroid Build Coastguard Worker    xvpermi.d      xr8,      xr7,      0x08
2354*c0909341SAndroid Build Coastguard Worker    vsub.h         vr9,      vr8,      vr21
2355*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h  vr9,      vr9,      2
2356*c0909341SAndroid Build Coastguard Worker    vstelm.d       vr9,      t4,       0,      0
2357*c0909341SAndroid Build Coastguard Worker    addi.d         t4,       t4,       8
2358*c0909341SAndroid Build Coastguard Worker    bne            t7,       zero,     .W32_420_LASX
2359*c0909341SAndroid Build Coastguard Worker
2360*c0909341SAndroid Build Coastguard Worker    alsl.d         a2,       a4,       a2,     2
2361*c0909341SAndroid Build Coastguard Worker    alsl.d         a3,       a4,       a3,     2
2362*c0909341SAndroid Build Coastguard Worker    alsl.d         a0,       a1,       a0,     1
2363*c0909341SAndroid Build Coastguard Worker    srai.w         t8,       a4,       1
2364*c0909341SAndroid Build Coastguard Worker    add.d          a6,       a6,       t8
2365*c0909341SAndroid Build Coastguard Worker    addi.w         a5,       a5,       -2
2366*c0909341SAndroid Build Coastguard Worker    blt            zero,     a5,       .LOOP_W32_420_LASX
2367*c0909341SAndroid Build Coastguard Worker
2368*c0909341SAndroid Build Coastguard Worker.END_W420_LASX:
2369*c0909341SAndroid Build Coastguard Workerendfunc
2370*c0909341SAndroid Build Coastguard Worker
2371*c0909341SAndroid Build Coastguard Worker#undef bpc_sh
2372*c0909341SAndroid Build Coastguard Worker#undef bpcw_sh
2373*c0909341SAndroid Build Coastguard Worker
2374*c0909341SAndroid Build Coastguard Worker.macro  vhaddw.d.h  in0
2375*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h  \in0,  \in0,  \in0
2376*c0909341SAndroid Build Coastguard Worker    vhaddw.d.w  \in0,  \in0,  \in0
2377*c0909341SAndroid Build Coastguard Worker.endm
2378*c0909341SAndroid Build Coastguard Worker.macro  vhaddw.q.w  in0
2379*c0909341SAndroid Build Coastguard Worker    vhaddw.d.w  \in0,  \in0,  \in0
2380*c0909341SAndroid Build Coastguard Worker    vhaddw.q.d  \in0,  \in0,  \in0
2381*c0909341SAndroid Build Coastguard Worker.endm
2382*c0909341SAndroid Build Coastguard Worker.macro PUT_H_8W in0
2383*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr2,    \in0,  \in0,   vr6
2384*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr3,    \in0,  \in0,   vr7
2385*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr4,    \in0,  \in0,   vr8
2386*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr2,   vr10
2387*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr3,   vr11
2388*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr3,   vr10
2389*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr4,   vr11
2390*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr2,   vr10
2391*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr3,   vr11
2392*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr3,   vr10
2393*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr4,   vr11
2394*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr13
2395*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr15
2396*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
2397*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr14,   vr14,  vr14
2398*c0909341SAndroid Build Coastguard Worker    vpickev.h        \in0,   vr14,  vr12
2399*c0909341SAndroid Build Coastguard Worker    vadd.h           \in0,   \in0,  vr9
2400*c0909341SAndroid Build Coastguard Worker.endm
2401*c0909341SAndroid Build Coastguard Worker
2402*c0909341SAndroid Build Coastguard Workerconst subpel_h_shuf0
2403*c0909341SAndroid Build Coastguard Worker.byte 0, 1, 2, 3, 1, 2, 3, 4, 16, 17, 18, 19, 17, 18, 19, 20
2404*c0909341SAndroid Build Coastguard Workerendconst
2405*c0909341SAndroid Build Coastguard Workerconst subpel_h_shuf1
2406*c0909341SAndroid Build Coastguard Worker.byte 0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5, 3, 4, 5, 6
2407*c0909341SAndroid Build Coastguard Workerendconst
2408*c0909341SAndroid Build Coastguard Workerconst subpel_h_shuf2
2409*c0909341SAndroid Build Coastguard Worker.byte 0, 1, 2, 3, 1, 2, 3, 4,  8,  9, 10, 11,  9, 10, 11, 12
2410*c0909341SAndroid Build Coastguard Worker.byte 2, 3, 4, 5, 3, 4, 5, 6, 10, 11, 12, 13, 11, 12, 13, 14
2411*c0909341SAndroid Build Coastguard Workerendconst
2412*c0909341SAndroid Build Coastguard Workerconst subpel_h_shuf3
2413*c0909341SAndroid Build Coastguard Worker.byte 0, 4, 1, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 7, 11
2414*c0909341SAndroid Build Coastguard Worker.byte 0, 4, 1, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 7, 11
2415*c0909341SAndroid Build Coastguard Workerendconst
2416*c0909341SAndroid Build Coastguard Worker
2417*c0909341SAndroid Build Coastguard Worker.macro FILTER_8TAP_8W in0
2418*c0909341SAndroid Build Coastguard Worker    vshuf.b         vr13,    \in0,  \in0,  vr7
2419*c0909341SAndroid Build Coastguard Worker    vshuf.b         vr14,    \in0,  \in0,  vr11
2420*c0909341SAndroid Build Coastguard Worker    vshuf.b         vr15,    \in0,  \in0,  vr12
2421*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b  vr16,    vr13,  vr8
2422*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b  vr17,    vr14,  vr10
2423*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b  vr18,    vr14,  vr8
2424*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b  vr19,    vr15,  vr10
2425*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b vr16,    vr13,  vr8
2426*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b vr17,    vr14,  vr10
2427*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b vr18,    vr14,  vr8
2428*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b vr19,    vr15,  vr10
2429*c0909341SAndroid Build Coastguard Worker    vadd.h          vr16,    vr16,  vr17
2430*c0909341SAndroid Build Coastguard Worker    vadd.h          vr18,    vr18,  vr19
2431*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h      vr16,    vr16,  vr16
2432*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h      \in0,    vr18,  vr18
2433*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w    \in0,    vr16,  2
2434*c0909341SAndroid Build Coastguard Worker.endm
2435*c0909341SAndroid Build Coastguard Worker
2436*c0909341SAndroid Build Coastguard Worker.macro PUT_8TAP_8BPC_LSX lable
2437*c0909341SAndroid Build Coastguard Worker    li.w             t0,     4
2438*c0909341SAndroid Build Coastguard Worker    la.local         t6,     dav1d_mc_subpel_filters
2439*c0909341SAndroid Build Coastguard Worker    slli.d           t2,     a3,    1  //src_stride*2
2440*c0909341SAndroid Build Coastguard Worker    add.d            t3,     t2,    a3 //src_stride*3
2441*c0909341SAndroid Build Coastguard Worker    slli.d           t4,     t2,    1  //src_stride*4
2442*c0909341SAndroid Build Coastguard Worker
2443*c0909341SAndroid Build Coastguard Worker    bnez             a6,     .l_\lable\()put_h //mx
2444*c0909341SAndroid Build Coastguard Worker    bnez             a7,     .l_\lable\()put_v //my
2445*c0909341SAndroid Build Coastguard Worker
2446*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a4
2447*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
2448*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
2449*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()put_hv0_jtable
2450*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   3
2451*c0909341SAndroid Build Coastguard Worker    ld.d             t6,     t1,    0
2452*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t6
2453*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
2454*c0909341SAndroid Build Coastguard Worker
2455*c0909341SAndroid Build Coastguard Worker    .align   3
2456*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_jtable:
2457*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_128w - .l_\lable\()put_hv0_jtable
2458*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_64w  - .l_\lable\()put_hv0_jtable
2459*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_32w  - .l_\lable\()put_hv0_jtable
2460*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_16w  - .l_\lable\()put_hv0_jtable
2461*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_8w   - .l_\lable\()put_hv0_jtable
2462*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_4w   - .l_\lable\()put_hv0_jtable
2463*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv0_2w   - .l_\lable\()put_hv0_jtable
2464*c0909341SAndroid Build Coastguard Worker
2465*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_2w:
2466*c0909341SAndroid Build Coastguard Worker    vldrepl.h        vr0,    a2,    0
2467*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2468*c0909341SAndroid Build Coastguard Worker    vldrepl.h        vr1,    a2,    0
2469*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr0,    a0,    0,     0
2470*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2471*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr1,    a0,    0,     0
2472*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2473*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2474*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2475*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_2w
2476*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2477*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_4w:
2478*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a2,    0
2479*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a2,    a3
2480*c0909341SAndroid Build Coastguard Worker    fst.s            f0,     a0,    0
2481*c0909341SAndroid Build Coastguard Worker    fstx.s           f1,     a0,    a1
2482*c0909341SAndroid Build Coastguard Worker    alsl.d           a2,     a3,    a2,    1
2483*c0909341SAndroid Build Coastguard Worker    alsl.d           a0,     a1,    a0,    1
2484*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2485*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_4w
2486*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2487*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_8w:
2488*c0909341SAndroid Build Coastguard Worker    fld.d            f0,     a2,    0
2489*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,     a2,    a3
2490*c0909341SAndroid Build Coastguard Worker    fst.d            f0,     a0,    0
2491*c0909341SAndroid Build Coastguard Worker    fstx.d           f1,     a0,    a1
2492*c0909341SAndroid Build Coastguard Worker    alsl.d           a2,     a3,    a2,    1
2493*c0909341SAndroid Build Coastguard Worker    alsl.d           a0,     a1,    a0,    1
2494*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2495*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_8w
2496*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2497*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_16w:
2498*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2499*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
2500*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
2501*c0909341SAndroid Build Coastguard Worker    vstx             vr1,    a0,    a1
2502*c0909341SAndroid Build Coastguard Worker    alsl.d           a2,     a3,    a2,    1
2503*c0909341SAndroid Build Coastguard Worker    alsl.d           a0,     a1,    a0,    1
2504*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2505*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_16w
2506*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2507*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_32w:
2508*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2509*c0909341SAndroid Build Coastguard Worker    vld              vr1,    a2,    16
2510*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2511*c0909341SAndroid Build Coastguard Worker    vld              vr2,    a2,    0
2512*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a2,    16
2513*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
2514*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
2515*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2516*c0909341SAndroid Build Coastguard Worker    vst              vr2,    a0,    0
2517*c0909341SAndroid Build Coastguard Worker    vst              vr3,    a0,    16
2518*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2519*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2520*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2521*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_32w
2522*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2523*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_64w:
2524*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2525*c0909341SAndroid Build Coastguard Worker    vld              vr1,    a2,    16
2526*c0909341SAndroid Build Coastguard Worker    vld              vr2,    a2,    32
2527*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a2,    48
2528*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2529*c0909341SAndroid Build Coastguard Worker    vld              vr4,    a2,    0
2530*c0909341SAndroid Build Coastguard Worker    vld              vr5,    a2,    16
2531*c0909341SAndroid Build Coastguard Worker    vld              vr6,    a2,    32
2532*c0909341SAndroid Build Coastguard Worker    vld              vr7,    a2,    48
2533*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2534*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
2535*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
2536*c0909341SAndroid Build Coastguard Worker    vst              vr2,    a0,    32
2537*c0909341SAndroid Build Coastguard Worker    vst              vr3,    a0,    48
2538*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2539*c0909341SAndroid Build Coastguard Worker    vst              vr4,    a0,    0
2540*c0909341SAndroid Build Coastguard Worker    vst              vr5,    a0,    16
2541*c0909341SAndroid Build Coastguard Worker    vst              vr6,    a0,    32
2542*c0909341SAndroid Build Coastguard Worker    vst              vr7,    a0,    48
2543*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2544*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2545*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_64w
2546*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2547*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv0_128w:
2548*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2549*c0909341SAndroid Build Coastguard Worker    vld              vr1,    a2,    16
2550*c0909341SAndroid Build Coastguard Worker    vld              vr2,    a2,    32
2551*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a2,    48
2552*c0909341SAndroid Build Coastguard Worker    vld              vr4,    a2,    64
2553*c0909341SAndroid Build Coastguard Worker    vld              vr5,    a2,    80
2554*c0909341SAndroid Build Coastguard Worker    vld              vr6,    a2,    96
2555*c0909341SAndroid Build Coastguard Worker    vld              vr7,    a2,    112
2556*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2557*c0909341SAndroid Build Coastguard Worker    vld              vr8,    a2,    0
2558*c0909341SAndroid Build Coastguard Worker    vld              vr9,    a2,    16
2559*c0909341SAndroid Build Coastguard Worker    vld              vr10,   a2,    32
2560*c0909341SAndroid Build Coastguard Worker    vld              vr11,   a2,    48
2561*c0909341SAndroid Build Coastguard Worker    vld              vr12,   a2,    64
2562*c0909341SAndroid Build Coastguard Worker    vld              vr13,   a2,    80
2563*c0909341SAndroid Build Coastguard Worker    vld              vr14,   a2,    96
2564*c0909341SAndroid Build Coastguard Worker    vld              vr15,   a2,    112
2565*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2566*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
2567*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
2568*c0909341SAndroid Build Coastguard Worker    vst              vr2,    a0,    32
2569*c0909341SAndroid Build Coastguard Worker    vst              vr3,    a0,    48
2570*c0909341SAndroid Build Coastguard Worker    vst              vr4,    a0,    64
2571*c0909341SAndroid Build Coastguard Worker    vst              vr5,    a0,    80
2572*c0909341SAndroid Build Coastguard Worker    vst              vr6,    a0,    96
2573*c0909341SAndroid Build Coastguard Worker    vst              vr7,    a0,    112
2574*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2575*c0909341SAndroid Build Coastguard Worker    vst              vr8,    a0,    0
2576*c0909341SAndroid Build Coastguard Worker    vst              vr9,    a0,    16
2577*c0909341SAndroid Build Coastguard Worker    vst              vr10,   a0,    32
2578*c0909341SAndroid Build Coastguard Worker    vst              vr11,   a0,    48
2579*c0909341SAndroid Build Coastguard Worker    vst              vr12,   a0,    64
2580*c0909341SAndroid Build Coastguard Worker    vst              vr13,   a0,    80
2581*c0909341SAndroid Build Coastguard Worker    vst              vr14,   a0,    96
2582*c0909341SAndroid Build Coastguard Worker    vst              vr15,   a0,    112
2583*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2584*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2585*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv0_128w
2586*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2587*c0909341SAndroid Build Coastguard Worker
2588*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h:
2589*c0909341SAndroid Build Coastguard Worker    bnez             a7,     .l_\lable\()put_hv //if(fh) && if (fv)
2590*c0909341SAndroid Build Coastguard Worker    ld.d             t5,     sp,    0  //filter_type
2591*c0909341SAndroid Build Coastguard Worker    andi             t1,     t5,    3
2592*c0909341SAndroid Build Coastguard Worker    blt              t0,     a4,    .l_\lable\()put_h_idx_fh
2593*c0909341SAndroid Build Coastguard Worker    andi             t1,     t5,    1
2594*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
2595*c0909341SAndroid Build Coastguard Worker
2596*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_idx_fh:
2597*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
2598*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
2599*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a6,    -1
2600*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
2601*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
2602*c0909341SAndroid Build Coastguard Worker    add.d            t7,     t6,    t1 //fh's offset
2603*c0909341SAndroid Build Coastguard Worker    li.w             t1,     34
2604*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.h     vr9,    t1
2605*c0909341SAndroid Build Coastguard Worker
2606*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a4
2607*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
2608*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
2609*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()put_h_jtable
2610*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   3
2611*c0909341SAndroid Build Coastguard Worker    ld.d             t6,     t1,    0
2612*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t6
2613*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
2614*c0909341SAndroid Build Coastguard Worker
2615*c0909341SAndroid Build Coastguard Worker    .align   3
2616*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_jtable:
2617*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_128w - .l_\lable\()put_h_jtable
2618*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_64w  - .l_\lable\()put_h_jtable
2619*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_32w  - .l_\lable\()put_h_jtable
2620*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_16w  - .l_\lable\()put_h_jtable
2621*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_8w   - .l_\lable\()put_h_jtable
2622*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_4w   - .l_\lable\()put_h_jtable
2623*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_h_2w   - .l_\lable\()put_h_jtable
2624*c0909341SAndroid Build Coastguard Worker
2625*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_2w:
2626*c0909341SAndroid Build Coastguard Worker    addi.d           t7,     t7,    2
2627*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    -1
2628*c0909341SAndroid Build Coastguard Worker    vldrepl.w        vr8,    t7,    0
2629*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf0
2630*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t7,    0
2631*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_2w_loop:
2632*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2633*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
2634*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2635*c0909341SAndroid Build Coastguard Worker
2636*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr1,   vr0,   vr7
2637*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu.b      vr1,    vr0,   vr8
2638*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr0,    vr1,   vr1
2639*c0909341SAndroid Build Coastguard Worker    vpickev.h        vr0,    vr0,   vr0
2640*c0909341SAndroid Build Coastguard Worker    vadd.h           vr0,    vr0,   vr9
2641*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr0,    vr0,   6
2642*c0909341SAndroid Build Coastguard Worker
2643*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr0,    a0,    0,     0
2644*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2645*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr0,    a0,    0,     1
2646*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2647*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2648*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_h_2w_loop
2649*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2650*c0909341SAndroid Build Coastguard Worker
2651*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_4w:
2652*c0909341SAndroid Build Coastguard Worker    addi.d           t7,     t7,    2
2653*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    -1
2654*c0909341SAndroid Build Coastguard Worker    vldrepl.w        vr8,    t7,    0
2655*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
2656*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t7,    0
2657*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_4w_loop:
2658*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2659*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
2660*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2661*c0909341SAndroid Build Coastguard Worker
2662*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr0,   vr0,   vr7
2663*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr1,    vr1,   vr1,   vr7
2664*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr2,    vr0,   vr8
2665*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr3,    vr1,   vr8
2666*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr2,    vr0,   vr8
2667*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr3,    vr1,   vr8
2668*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr0,    vr2,   vr2
2669*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr1,    vr3,   vr3
2670*c0909341SAndroid Build Coastguard Worker    vpickev.h        vr0,    vr1,   vr0
2671*c0909341SAndroid Build Coastguard Worker    vadd.h           vr0,    vr0,   vr9
2672*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr0,    vr0,   6
2673*c0909341SAndroid Build Coastguard Worker
2674*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr0,    a0,    0,     0
2675*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2676*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr0,    a0,    0,     1
2677*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2678*c0909341SAndroid Build Coastguard Worker    addi.d           a5,     a5,    -2
2679*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_h_4w_loop
2680*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2681*c0909341SAndroid Build Coastguard Worker
2682*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_8w:
2683*c0909341SAndroid Build Coastguard Worker    fld.d            f10,    t7,    0
2684*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr11,   vr10,  1
2685*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr10,   vr10,  0
2686*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
2687*c0909341SAndroid Build Coastguard Worker    vld              vr6,    t7,    0
2688*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr7,    vr6,   4
2689*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr8,    vr6,   8
2690*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    -3
2691*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_8w_loop:
2692*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2693*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
2694*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2695*c0909341SAndroid Build Coastguard Worker    PUT_H_8W         vr0
2696*c0909341SAndroid Build Coastguard Worker    PUT_H_8W         vr1
2697*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr1,    vr0,   6
2698*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr1,    a0,    0,    0
2699*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2700*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr1,    a0,    0,    1
2701*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2702*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2703*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_h_8w_loop
2704*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2705*c0909341SAndroid Build Coastguard Worker
2706*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_16w:
2707*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_32w:
2708*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_64w:
2709*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_128w:
2710*c0909341SAndroid Build Coastguard Worker    fld.d            f10,    t7,    0
2711*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr11,   vr10,  1
2712*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr10,   vr10,  0
2713*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
2714*c0909341SAndroid Build Coastguard Worker    vld              vr6,    t7,    0
2715*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr7,    vr6,   4
2716*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr8,    vr6,   8
2717*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    -3
2718*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a2,    0 //src
2719*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a5,    0 //h
2720*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0 //dst
2721*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_h_16w_loop:
2722*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
2723*c0909341SAndroid Build Coastguard Worker    vld              vr1,    a2,    8
2724*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    a3
2725*c0909341SAndroid Build Coastguard Worker    PUT_H_8W         vr0
2726*c0909341SAndroid Build Coastguard Worker    PUT_H_8W         vr1
2727*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr1,    vr0,   6
2728*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    0
2729*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2730*c0909341SAndroid Build Coastguard Worker    addi.d           a5,     a5,    -1
2731*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_h_16w_loop
2732*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     t0,    16
2733*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     t0,    16
2734*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    16
2735*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     t8,    16
2736*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     t5,    0
2737*c0909341SAndroid Build Coastguard Worker    addi.w           a4,     a4,    -16
2738*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()put_h_16w_loop
2739*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2740*c0909341SAndroid Build Coastguard Worker
2741*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v:
2742*c0909341SAndroid Build Coastguard Worker    ld.d             t1,     sp,    0  //filter_type
2743*c0909341SAndroid Build Coastguard Worker    srli.w           t1,     t1,    2
2744*c0909341SAndroid Build Coastguard Worker    blt              t0,     a5,    .l_\lable\()put_v_idx_fv
2745*c0909341SAndroid Build Coastguard Worker    andi             t1,     t1,    1
2746*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
2747*c0909341SAndroid Build Coastguard Worker
2748*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_idx_fv:
2749*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
2750*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
2751*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a7,    -1
2752*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
2753*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
2754*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t6,    t1 //fv's offset
2755*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr8,    t1,    0
2756*c0909341SAndroid Build Coastguard Worker    sub.d            a2,     a2,    t3
2757*c0909341SAndroid Build Coastguard Worker
2758*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr8,    vr8,   vr8
2759*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr9,    vr8,   1
2760*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr10,   vr8,   2
2761*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr11,   vr8,   3
2762*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr8,    vr8,   0
2763*c0909341SAndroid Build Coastguard Worker
2764*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a4
2765*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
2766*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
2767*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()put_v_jtable
2768*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   3
2769*c0909341SAndroid Build Coastguard Worker    ld.d             t6,     t1,    0
2770*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t6
2771*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
2772*c0909341SAndroid Build Coastguard Worker
2773*c0909341SAndroid Build Coastguard Worker    .align   3
2774*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_jtable:
2775*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_128w - .l_\lable\()put_v_jtable
2776*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_64w  - .l_\lable\()put_v_jtable
2777*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_32w  - .l_\lable\()put_v_jtable
2778*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_16w  - .l_\lable\()put_v_jtable
2779*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_8w   - .l_\lable\()put_v_jtable
2780*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_4w   - .l_\lable\()put_v_jtable
2781*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_v_2w   - .l_\lable\()put_v_jtable
2782*c0909341SAndroid Build Coastguard Worker
2783*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_2w:
2784*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a2,    0
2785*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a2,    a3
2786*c0909341SAndroid Build Coastguard Worker    fldx.s           f2,     a2,    t2
2787*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t3
2788*c0909341SAndroid Build Coastguard Worker    fld.s            f3,     a2,    0
2789*c0909341SAndroid Build Coastguard Worker    fldx.s           f4,     a2,    a3
2790*c0909341SAndroid Build Coastguard Worker    fldx.s           f5,     a2,    t2
2791*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a2,    t3
2792*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t4
2793*c0909341SAndroid Build Coastguard Worker
2794*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr0,    vr1,   vr0 //0 1
2795*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr1,    vr2,   vr1 //1 2
2796*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr0,    vr1,   vr0 //01 12
2797*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr2,    vr3,   vr2 //2 3
2798*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr4,   vr3 //3 4
2799*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr1,    vr3,   vr2 //23 34
2800*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr2,    vr5,   vr4 //4 5
2801*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr6,   vr5 //5 6
2802*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr2,    vr3,   vr2 //45 56
2803*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_2w_loop:
2804*c0909341SAndroid Build Coastguard Worker    fld.s            f7,     a2,    0
2805*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr7,   vr6 //6 7
2806*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a2,    a3
2807*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2808*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr4,    vr6,   vr7 //7 8
2809*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr3,    vr4,   vr3 //67 78
2810*c0909341SAndroid Build Coastguard Worker
2811*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr0,   vr8
2812*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr1,   vr9
2813*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr2,   vr10
2814*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr3,   vr11
2815*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr0,   vr8
2816*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr1,   vr9
2817*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr2,   vr10
2818*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr3,   vr11
2819*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr1,   0
2820*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr2,   0
2821*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr3,   0
2822*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr13
2823*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr14
2824*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr15
2825*c0909341SAndroid Build Coastguard Worker
2826*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h    vr12,   vr12,  6
2827*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr12,   a0,    0,   0
2828*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2829*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr12,   a0,    0,   1
2830*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2831*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2832*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_v_2w_loop
2833*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2834*c0909341SAndroid Build Coastguard Worker
2835*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_4w:
2836*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a2,    0
2837*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a2,    a3
2838*c0909341SAndroid Build Coastguard Worker    fldx.s           f2,     a2,    t2
2839*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t3
2840*c0909341SAndroid Build Coastguard Worker    fld.s            f3,     a2,    0
2841*c0909341SAndroid Build Coastguard Worker    fldx.s           f4,     a2,    a3
2842*c0909341SAndroid Build Coastguard Worker    fldx.s           f5,     a2,    t2
2843*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a2,    t3
2844*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t4
2845*c0909341SAndroid Build Coastguard Worker
2846*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr0,    vr1,   vr0
2847*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr1,    vr2,   vr1
2848*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr0,    vr1,   vr0
2849*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr1,    vr3,   vr2
2850*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr2,    vr4,   vr3
2851*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr1,    vr2,   vr1
2852*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr2,    vr5,   vr4
2853*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr3,    vr6,   vr5
2854*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr2,    vr3,   vr2
2855*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_4w_loop:
2856*c0909341SAndroid Build Coastguard Worker    fld.s            f7,     a2,    0
2857*c0909341SAndroid Build Coastguard Worker
2858*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr3,    vr7,   vr6
2859*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a2,    a3
2860*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2861*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr4,    vr6,   vr7
2862*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr3,    vr4,   vr3
2863*c0909341SAndroid Build Coastguard Worker
2864*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr0,   vr8
2865*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr1,   vr9
2866*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr2,   vr10
2867*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr3,   vr11
2868*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr0,   vr8
2869*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr1,   vr9
2870*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr2,   vr10
2871*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr3,   vr11
2872*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr1,   0
2873*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr2,   0
2874*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr3,   0
2875*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr13
2876*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr14
2877*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr15
2878*c0909341SAndroid Build Coastguard Worker
2879*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h    vr12,   vr12,  6
2880*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr12,   a0,    0,   0
2881*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2882*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr12,   a0,    0,   1
2883*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2884*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2885*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_v_4w_loop
2886*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2887*c0909341SAndroid Build Coastguard Worker
2888*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_8w:
2889*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_16w:
2890*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_32w:
2891*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_64w:
2892*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_128w:
2893*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a2,    0 //src
2894*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     a5,    0 //h
2895*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0 //dst
2896*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_8w_loop0:
2897*c0909341SAndroid Build Coastguard Worker    fld.d            f0,     a2,    0
2898*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,     a2,    a3
2899*c0909341SAndroid Build Coastguard Worker    fldx.d           f2,     a2,    t2
2900*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t3
2901*c0909341SAndroid Build Coastguard Worker    fld.d            f3,     a2,    0
2902*c0909341SAndroid Build Coastguard Worker    fldx.d           f4,     a2,    a3
2903*c0909341SAndroid Build Coastguard Worker    fldx.d           f5,     a2,    t2
2904*c0909341SAndroid Build Coastguard Worker    fldx.d           f6,     a2,    t3
2905*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t4
2906*c0909341SAndroid Build Coastguard Worker
2907*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr0,    vr1,   vr0 //0 1
2908*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr1,    vr2,   vr1 //1 2
2909*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr2,    vr3,   vr2 //2 3
2910*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr3,    vr4,   vr3 //3 4
2911*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr4,    vr5,   vr4 //4 5
2912*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr5,    vr6,   vr5 //5 6
2913*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_v_8w_loop:
2914*c0909341SAndroid Build Coastguard Worker    fld.d            f7,     a2,    0
2915*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr12,   vr7,   vr6 //6 7
2916*c0909341SAndroid Build Coastguard Worker    fldx.d           f6,     a2,    a3
2917*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
2918*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr13,   vr6,   vr7 //7 8
2919*c0909341SAndroid Build Coastguard Worker
2920*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr0,   vr8
2921*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr1,   vr8
2922*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr16,   vr2,   vr9
2923*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr17,   vr3,   vr9
2924*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr18,   vr4,   vr10
2925*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr19,   vr5,   vr10
2926*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr20,   vr12,  vr11
2927*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr21,   vr13,  vr11
2928*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr0,   vr8
2929*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr1,   vr8
2930*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr16,   vr2,   vr9
2931*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr17,   vr3,   vr9
2932*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr18,   vr4,   vr10
2933*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr19,   vr5,   vr10
2934*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr20,   vr12,  vr11
2935*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr21,   vr13,  vr11
2936*c0909341SAndroid Build Coastguard Worker
2937*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr2,   0
2938*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr3,   0
2939*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr4,   0
2940*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr3,    vr5,   0
2941*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr4,    vr12,  0
2942*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr5,    vr13,  0
2943*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr16
2944*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr18
2945*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr20
2946*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr17
2947*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr19
2948*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr21
2949*c0909341SAndroid Build Coastguard Worker
2950*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h    vr15,   vr14,  6
2951*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr15,   a0,    0,   0
2952*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2953*c0909341SAndroid Build Coastguard Worker    vstelm.d         vr15,   a0,    0,   1
2954*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
2955*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
2956*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_v_8w_loop
2957*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     t0,    8
2958*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     t0,    8
2959*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    8
2960*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     t8,    8
2961*c0909341SAndroid Build Coastguard Worker    addi.d           a5,     t5,    0
2962*c0909341SAndroid Build Coastguard Worker    addi.w           a4,     a4,    -8
2963*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()put_v_8w_loop0
2964*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
2965*c0909341SAndroid Build Coastguard Worker
2966*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv:
2967*c0909341SAndroid Build Coastguard Worker    ld.d             t5,     sp,    0  //filter_type
2968*c0909341SAndroid Build Coastguard Worker    andi             t1,     t5,    3
2969*c0909341SAndroid Build Coastguard Worker    blt              t0,     a4,    .l_\lable\()put_hv_idx_fh
2970*c0909341SAndroid Build Coastguard Worker    andi             t1,     t5,    1
2971*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
2972*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_idx_fh:
2973*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
2974*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
2975*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a6,    -1
2976*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
2977*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
2978*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t6,    t1 //fh's offset
2979*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr8,    t1,    0
2980*c0909341SAndroid Build Coastguard Worker    ld.d             t1,     sp,    0  //filter_type
2981*c0909341SAndroid Build Coastguard Worker    srli.w           t1,     t1,    2
2982*c0909341SAndroid Build Coastguard Worker    blt              t0,     a5,    .l_\lable\()put_hv_idx_fv
2983*c0909341SAndroid Build Coastguard Worker    andi             t1,     t1,    1
2984*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
2985*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_idx_fv:
2986*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
2987*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
2988*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a7,    -1
2989*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
2990*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
2991*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t6,    t1 //fv's offset
2992*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr9,    t1,    0
2993*c0909341SAndroid Build Coastguard Worker    vexth.h.b        vr9,    vr9
2994*c0909341SAndroid Build Coastguard Worker
2995*c0909341SAndroid Build Coastguard Worker    sub.d            a2,     a2,    t3
2996*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    -3
2997*c0909341SAndroid Build Coastguard Worker
2998*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a4
2999*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
3000*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
3001*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()put_hv_jtable
3002*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   3
3003*c0909341SAndroid Build Coastguard Worker    ld.d             t6,     t1,    0
3004*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t6
3005*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
3006*c0909341SAndroid Build Coastguard Worker
3007*c0909341SAndroid Build Coastguard Worker    .align   3
3008*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_jtable:
3009*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_128w - .l_\lable\()put_hv_jtable
3010*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_64w  - .l_\lable\()put_hv_jtable
3011*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_32w  - .l_\lable\()put_hv_jtable
3012*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_16w  - .l_\lable\()put_hv_jtable
3013*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_8w   - .l_\lable\()put_hv_jtable
3014*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_4w   - .l_\lable\()put_hv_jtable
3015*c0909341SAndroid Build Coastguard Worker    .dword .l_\lable\()put_hv_2w   - .l_\lable\()put_hv_jtable
3016*c0909341SAndroid Build Coastguard Worker
3017*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_2w:
3018*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    2
3019*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
3020*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
3021*c0909341SAndroid Build Coastguard Worker    vldx             vr2,    a2,    t2
3022*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t3
3023*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a2,    0
3024*c0909341SAndroid Build Coastguard Worker    vldx             vr4,    a2,    a3
3025*c0909341SAndroid Build Coastguard Worker    vldx             vr5,    a2,    t2
3026*c0909341SAndroid Build Coastguard Worker    vldx             vr6,    a2,    t3
3027*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t4
3028*c0909341SAndroid Build Coastguard Worker
3029*c0909341SAndroid Build Coastguard Worker    la.local         t1,     subpel_h_shuf0
3030*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t1,    0
3031*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr8,    vr8,   2
3032*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr8,    vr8,   0
3033*c0909341SAndroid Build Coastguard Worker
3034*c0909341SAndroid Build Coastguard Worker    //fv
3035*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr14,   vr9,   1
3036*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr15,   vr9,   2
3037*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr16,   vr9,   3
3038*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr9,    vr9,   0
3039*c0909341SAndroid Build Coastguard Worker
3040*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr1,   vr0,  vr7
3041*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr1,    vr3,   vr2,  vr7
3042*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr2,    vr5,   vr4,  vr7
3043*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr3,    vr6,   vr6,  vr7
3044*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr10,   vr0,   vr8
3045*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr11,   vr1,   vr8
3046*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr2,   vr8
3047*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr3,   vr8
3048*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr10,   vr0,   vr8
3049*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr11,   vr1,   vr8
3050*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr2,   vr8
3051*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr3,   vr8
3052*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr0,    vr10,  vr10
3053*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr1,    vr11,  vr11
3054*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr1,    vr0,   2 //h0 h1 h2 h3
3055*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr2,    vr12,  vr12
3056*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr3,    vr13,  vr13
3057*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr3,    vr2,   2 //h4 h5 h6 ~
3058*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr2,    vr1,   4
3059*c0909341SAndroid Build Coastguard Worker    vextrins.w       vr2,    vr3,   0x30 //h1 h2 h3 h4
3060*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr4,    vr2,   vr1 //h0 h1 h1 h2 --
3061*c0909341SAndroid Build Coastguard Worker    vilvh.h          vr5,    vr2,   vr1 //h2 h3 h3 h4 --
3062*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr6,    vr3,   4
3063*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr6,    vr6,   vr3 //h4 h5 h5 h6 --
3064*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr3,    vr3,   8  //h6 ~
3065*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_2w_loop:
3066*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
3067*c0909341SAndroid Build Coastguard Worker    vldx             vr2,    a2,    a3
3068*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
3069*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr2,   vr0,  vr7
3070*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu.b      vr17,   vr0,   vr8
3071*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr17,   vr17,  vr17
3072*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr17,   vr17,  2 //h7 h8
3073*c0909341SAndroid Build Coastguard Worker    vextrins.w       vr3,    vr17,  0x10 //h6 h7
3074*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr17,  vr3  //h6 h7 h7 h8 --
3075*c0909341SAndroid Build Coastguard Worker
3076*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr18,   vr4,   vr9
3077*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr19,   vr5,   vr14
3078*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr20,   vr6,   vr15
3079*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr21,   vr3,   vr16
3080*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr18,   vr4,   vr9
3081*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr19,   vr5,   vr14
3082*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr20,   vr6,   vr15
3083*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr21,   vr3,   vr16
3084*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr4,    vr5,   0
3085*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr5,    vr6,   0
3086*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr6,    vr3,   0
3087*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr3,    vr17,  4 //h8 ~
3088*c0909341SAndroid Build Coastguard Worker    vadd.w           vr18,   vr18,  vr19
3089*c0909341SAndroid Build Coastguard Worker    vadd.w           vr18,   vr18,  vr20
3090*c0909341SAndroid Build Coastguard Worker    vadd.w           vr18,   vr18,  vr21
3091*c0909341SAndroid Build Coastguard Worker
3092*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w    vr0,    vr18,  10
3093*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr0,    vr0,   0
3094*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr0,    a0,    0,   0
3095*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
3096*c0909341SAndroid Build Coastguard Worker    vstelm.h         vr0,    a0,    0,   1
3097*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
3098*c0909341SAndroid Build Coastguard Worker    addi.d           a5,     a5,    -2
3099*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv_2w_loop
3100*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
3101*c0909341SAndroid Build Coastguard Worker
3102*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_4w:
3103*c0909341SAndroid Build Coastguard Worker    addi.d           a2,     a2,    2 //ignore leading 0
3104*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a2,    0
3105*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a2,    a3
3106*c0909341SAndroid Build Coastguard Worker    vldx             vr2,    a2,    t2
3107*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t3
3108*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a2,    0
3109*c0909341SAndroid Build Coastguard Worker    vldx             vr4,    a2,    a3
3110*c0909341SAndroid Build Coastguard Worker    vldx             vr5,    a2,    t2
3111*c0909341SAndroid Build Coastguard Worker    vldx             vr6,    a2,    t3
3112*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t4
3113*c0909341SAndroid Build Coastguard Worker
3114*c0909341SAndroid Build Coastguard Worker    la.local         t1,     subpel_h_shuf1
3115*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t1,    0
3116*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr8,    vr8,   2
3117*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr8,    vr8,   0
3118*c0909341SAndroid Build Coastguard Worker
3119*c0909341SAndroid Build Coastguard Worker    //fv
3120*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr17,   vr9,   0
3121*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr18,   vr9,   1
3122*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr19,   vr9,   2
3123*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr20,   vr9,   3
3124*c0909341SAndroid Build Coastguard Worker
3125*c0909341SAndroid Build Coastguard Worker    //DAV1D_FILTER_8TAP_RND
3126*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr0,   vr0,  vr7
3127*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr1,    vr1,   vr1,  vr7
3128*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr2,    vr2,   vr2,  vr7
3129*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr3,    vr3,   vr3,  vr7
3130*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr4,    vr4,   vr4,  vr7
3131*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr5,    vr5,   vr5,  vr7
3132*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr6,    vr6,   vr6,  vr7
3133*c0909341SAndroid Build Coastguard Worker
3134*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr10,   vr0,   vr8
3135*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr11,   vr1,   vr8
3136*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr2,   vr8
3137*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr3,   vr8
3138*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr4,   vr8
3139*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr5,   vr8
3140*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr16,   vr6,   vr8
3141*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr10,   vr0,   vr8
3142*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr11,   vr1,   vr8
3143*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr2,   vr8
3144*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr3,   vr8
3145*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr4,   vr8
3146*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr5,   vr8
3147*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr16,   vr6,   vr8
3148*c0909341SAndroid Build Coastguard Worker
3149*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr10,   vr10,  vr10
3150*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr11,   vr11,  vr11
3151*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
3152*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr13,   vr13,  vr13
3153*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr14,   vr14,  vr14
3154*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr15,   vr15,  vr15
3155*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr16,   vr16,  vr16
3156*c0909341SAndroid Build Coastguard Worker
3157*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr10,   vr10,  2 //h0
3158*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr11,   vr11,  2 //h1
3159*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr12,   vr12,  2 //h2
3160*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr13,   vr13,  2 //h3
3161*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr14,   vr14,  2 //h4
3162*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr15,   vr15,  2 //h5
3163*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr16,   vr16,  2 //h6
3164*c0909341SAndroid Build Coastguard Worker
3165*c0909341SAndroid Build Coastguard Worker    //h0
3166*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr0,    vr11,  vr10 //01
3167*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr1,    vr13,  vr12 //23
3168*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr2,    vr15,  vr14 //45
3169*c0909341SAndroid Build Coastguard Worker    //h1
3170*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr4,    vr12,  vr11 //12
3171*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr5,    vr14,  vr13 //34
3172*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr6,    vr16,  vr15 //56
3173*c0909341SAndroid Build Coastguard Worker
3174*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_4w_loop:
3175*c0909341SAndroid Build Coastguard Worker    vld              vr9,    a2,    0
3176*c0909341SAndroid Build Coastguard Worker    vldx             vr10,   a2,    a3
3177*c0909341SAndroid Build Coastguard Worker    add.d            a2,     a2,    t2
3178*c0909341SAndroid Build Coastguard Worker
3179*c0909341SAndroid Build Coastguard Worker    //DAV1D_FILTER_8TAP_CLIP
3180*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr9,    vr9,   vr9,  vr7
3181*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr10,   vr10,  vr10, vr7
3182*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr11,   vr9,   vr8
3183*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr10,  vr8
3184*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr11,   vr9,   vr8
3185*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr10,  vr8
3186*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr11,   vr11,  vr11
3187*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
3188*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr11,   vr11,  2 //h7
3189*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr12,   vr12,  2 //h8
3190*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr11,  vr16 //67
3191*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr13,   vr12,  vr11 //78
3192*c0909341SAndroid Build Coastguard Worker
3193*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr9,    vr0,   vr17
3194*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr10,   vr1,   vr18
3195*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr14,   vr2,   vr19
3196*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr15,   vr3,   vr20
3197*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr9,    vr0,   vr17
3198*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr10,   vr1,   vr18
3199*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr14,   vr2,   vr19
3200*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr15,   vr3,   vr20
3201*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr9,   vr10
3202*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr16,  vr14
3203*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr16,  vr15
3204*c0909341SAndroid Build Coastguard Worker
3205*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr9,    vr4,   vr17
3206*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr10,   vr5,   vr18
3207*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr14,   vr6,   vr19
3208*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr15,   vr13,  vr20
3209*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr9,    vr4,   vr17
3210*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr10,   vr5,   vr18
3211*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr14,   vr6,   vr19
3212*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr15,   vr13,  vr20
3213*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr9,   vr10
3214*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr21,  vr14
3215*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr21,  vr15
3216*c0909341SAndroid Build Coastguard Worker
3217*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w    vr21,   vr16,  10
3218*c0909341SAndroid Build Coastguard Worker    vssrani.bu.h     vr21,   vr21,  0
3219*c0909341SAndroid Build Coastguard Worker    //cache
3220*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr1,   0
3221*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr2,   0
3222*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr3,   0
3223*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr4,    vr5,   0
3224*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr5,    vr6,   0
3225*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr6,    vr13,  0
3226*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr16,   vr12,  0
3227*c0909341SAndroid Build Coastguard Worker
3228*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr21,   a0,    0,    0
3229*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
3230*c0909341SAndroid Build Coastguard Worker    vstelm.w         vr21,   a0,    0,    1
3231*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    a1
3232*c0909341SAndroid Build Coastguard Worker    addi.w           a5,     a5,    -2
3233*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()put_hv_4w_loop
3234*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_put_8tap
3235*c0909341SAndroid Build Coastguard Worker
3236*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_8w:
3237*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_16w:
3238*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_32w:
3239*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_64w:
3240*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_128w:
3241*c0909341SAndroid Build Coastguard Worker    addi.d          sp,      sp,    -8*8
3242*c0909341SAndroid Build Coastguard Worker    fst.d           f24,     sp,    0
3243*c0909341SAndroid Build Coastguard Worker    fst.d           f25,     sp,    8
3244*c0909341SAndroid Build Coastguard Worker    fst.d           f26,     sp,    16
3245*c0909341SAndroid Build Coastguard Worker    fst.d           f27,     sp,    24
3246*c0909341SAndroid Build Coastguard Worker    fst.d           f28,     sp,    32
3247*c0909341SAndroid Build Coastguard Worker    fst.d           f29,     sp,    40
3248*c0909341SAndroid Build Coastguard Worker    fst.d           f30,     sp,    48
3249*c0909341SAndroid Build Coastguard Worker    fst.d           f31,     sp,    56
3250*c0909341SAndroid Build Coastguard Worker    addi.d          t0,      a2,    0 //src
3251*c0909341SAndroid Build Coastguard Worker    addi.d          t5,      a5,    0 //h
3252*c0909341SAndroid Build Coastguard Worker    addi.d          t8,      a0,    0 //dst
3253*c0909341SAndroid Build Coastguard Worker    la.local        t1,      subpel_h_shuf1
3254*c0909341SAndroid Build Coastguard Worker    vld             vr7,     t1,    0
3255*c0909341SAndroid Build Coastguard Worker    vaddi.bu        vr11,    vr7,   4
3256*c0909341SAndroid Build Coastguard Worker    vaddi.bu        vr12,    vr7,   8
3257*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr10,    vr8,   1
3258*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr8,     vr8,   0
3259*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr20,    vr9,   1
3260*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr21,    vr9,   2
3261*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr22,    vr9,   3
3262*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr9,     vr9,   0
3263*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_8w_loop0:
3264*c0909341SAndroid Build Coastguard Worker    vld             vr0,     a2,    0
3265*c0909341SAndroid Build Coastguard Worker    vldx            vr1,     a2,    a3
3266*c0909341SAndroid Build Coastguard Worker    vldx            vr2,     a2,    t2
3267*c0909341SAndroid Build Coastguard Worker    add.d           a2,      a2,    t3
3268*c0909341SAndroid Build Coastguard Worker    vld             vr3,     a2,    0
3269*c0909341SAndroid Build Coastguard Worker    vldx            vr4,     a2,    a3
3270*c0909341SAndroid Build Coastguard Worker    vldx            vr5,     a2,    t2
3271*c0909341SAndroid Build Coastguard Worker    vldx            vr6,     a2,    t3
3272*c0909341SAndroid Build Coastguard Worker    add.d           a2,      a2,    t4
3273*c0909341SAndroid Build Coastguard Worker
3274*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr0 //h0
3275*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr1 //h1
3276*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr2 //h2
3277*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr3 //h3
3278*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr4 //h4
3279*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr5 //h5
3280*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr6 //h6
3281*c0909341SAndroid Build Coastguard Worker
3282*c0909341SAndroid Build Coastguard Worker    //h0' low part
3283*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,    vr1,   vr0 //01
3284*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr24,    vr3,   vr2 //23
3285*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr25,    vr5,   vr4 //45
3286*c0909341SAndroid Build Coastguard Worker    //h0' high part
3287*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr26,    vr1,   vr0 //01
3288*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr27,    vr3,   vr2 //23
3289*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr28,    vr5,   vr4 //45
3290*c0909341SAndroid Build Coastguard Worker
3291*c0909341SAndroid Build Coastguard Worker    //h1' low part
3292*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr29,    vr2,   vr1 //12
3293*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr30,    vr4,   vr3 //34
3294*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr31,    vr6,   vr5 //56
3295*c0909341SAndroid Build Coastguard Worker    //h1' high part
3296*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr0,     vr2,   vr1 //12
3297*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr1,     vr4,   vr3 //34
3298*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr2,     vr6,   vr5 //56
3299*c0909341SAndroid Build Coastguard Worker
3300*c0909341SAndroid Build Coastguard Worker.l_\lable\()put_hv_8w_loop:
3301*c0909341SAndroid Build Coastguard Worker    vld             vr3,     a2,    0
3302*c0909341SAndroid Build Coastguard Worker    vldx            vr4,     a2,    a3
3303*c0909341SAndroid Build Coastguard Worker    add.d           a2,      a2,    t2
3304*c0909341SAndroid Build Coastguard Worker
3305*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr3 //h7
3306*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr4 //h8
3307*c0909341SAndroid Build Coastguard Worker
3308*c0909341SAndroid Build Coastguard Worker    //h0' low part
3309*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr16,    vr3,   vr6 //67 ~low
3310*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr13,    vr23,  vr9
3311*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr24,  vr20
3312*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr25,  vr21
3313*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr17,    vr16,  vr22
3314*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr13,    vr23,  vr9
3315*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr24,  vr20
3316*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr25,  vr21
3317*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,    vr16,  vr22
3318*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr14
3319*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr15
3320*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr17
3321*c0909341SAndroid Build Coastguard Worker    //cache
3322*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr23,    vr24,  0
3323*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr24,    vr25,  0
3324*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr25,    vr16,  0
3325*c0909341SAndroid Build Coastguard Worker
3326*c0909341SAndroid Build Coastguard Worker    //h0' high part
3327*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr17,    vr3,   vr6 //67 ~high
3328*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr26,  vr9
3329*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr27,  vr20
3330*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr28,  vr21
3331*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr18,    vr17,  vr22
3332*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr26,  vr9
3333*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr27,  vr20
3334*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr28,  vr21
3335*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr18,    vr17,  vr22
3336*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr15
3337*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr16
3338*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr18
3339*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w   vr14,    vr13,  10
3340*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,     vr14,  0
3341*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr5,     a0,    0,   0
3342*c0909341SAndroid Build Coastguard Worker    add.d           a0,      a0,    a1
3343*c0909341SAndroid Build Coastguard Worker    //cache
3344*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr26,    vr27,  0
3345*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr27,    vr28,  0
3346*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr28,    vr17,  0
3347*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr6,     vr4,   0
3348*c0909341SAndroid Build Coastguard Worker
3349*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr5,     vr4,   vr3 //78 ~low
3350*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr4,     vr4,   vr3 //78 ~high
3351*c0909341SAndroid Build Coastguard Worker
3352*c0909341SAndroid Build Coastguard Worker    //h1' low part
3353*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr13,    vr29,  vr9
3354*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr30,  vr20
3355*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr31,  vr21
3356*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr5,   vr22
3357*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr13,    vr29,  vr9
3358*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr30,  vr20
3359*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr31,  vr21
3360*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr5,   vr22
3361*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr14
3362*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr15
3363*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr16
3364*c0909341SAndroid Build Coastguard Worker    //cache
3365*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr29,    vr30,  0
3366*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr30,    vr31,  0
3367*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr31,    vr5,   0
3368*c0909341SAndroid Build Coastguard Worker
3369*c0909341SAndroid Build Coastguard Worker    //h1' high part
3370*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr0,   vr9
3371*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr1,   vr20
3372*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr2,   vr21
3373*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr17,    vr4,   vr22
3374*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr0,   vr9
3375*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr1,   vr20
3376*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr2,   vr21
3377*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,    vr4,   vr22
3378*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr15
3379*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr16
3380*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr17
3381*c0909341SAndroid Build Coastguard Worker    vssrarni.hu.w   vr14,    vr13,  10
3382*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,     vr14,  0
3383*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr5,     a0,    0,   0
3384*c0909341SAndroid Build Coastguard Worker    add.d           a0,      a0,    a1
3385*c0909341SAndroid Build Coastguard Worker    //cache
3386*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr0,     vr1,   0
3387*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr1,     vr2,   0
3388*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr2,     vr4,   0
3389*c0909341SAndroid Build Coastguard Worker
3390*c0909341SAndroid Build Coastguard Worker    addi.w          a5,      a5,    -2
3391*c0909341SAndroid Build Coastguard Worker    bnez            a5,      .l_\lable\()put_hv_8w_loop
3392*c0909341SAndroid Build Coastguard Worker    addi.d          a2,      t0,    8
3393*c0909341SAndroid Build Coastguard Worker    addi.d          t0,      t0,    8
3394*c0909341SAndroid Build Coastguard Worker    addi.d          a0,      t8,    8
3395*c0909341SAndroid Build Coastguard Worker    addi.d          t8,      t8,    8
3396*c0909341SAndroid Build Coastguard Worker    addi.d          a5,      t5,    0
3397*c0909341SAndroid Build Coastguard Worker    addi.w          a4,      a4,    -8
3398*c0909341SAndroid Build Coastguard Worker    bnez            a4,      .l_\lable\()put_hv_8w_loop0
3399*c0909341SAndroid Build Coastguard Worker    fld.d           f24,     sp,    0
3400*c0909341SAndroid Build Coastguard Worker    fld.d           f25,     sp,    8
3401*c0909341SAndroid Build Coastguard Worker    fld.d           f26,     sp,    16
3402*c0909341SAndroid Build Coastguard Worker    fld.d           f27,     sp,    24
3403*c0909341SAndroid Build Coastguard Worker    fld.d           f28,     sp,    32
3404*c0909341SAndroid Build Coastguard Worker    fld.d           f29,     sp,    40
3405*c0909341SAndroid Build Coastguard Worker    fld.d           f30,     sp,    48
3406*c0909341SAndroid Build Coastguard Worker    fld.d           f31,     sp,    56
3407*c0909341SAndroid Build Coastguard Worker    addi.d          sp,      sp,    8*8
3408*c0909341SAndroid Build Coastguard Worker.l_\lable\()end_put_8tap:
3409*c0909341SAndroid Build Coastguard Worker.endm
3410*c0909341SAndroid Build Coastguard Worker
3411*c0909341SAndroid Build Coastguard Workerfunction put_8tap_regular_8bpc_lsx
3412*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3413*c0909341SAndroid Build Coastguard Worker    st.d   zero, sp,  0
3414*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 0
3415*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3416*c0909341SAndroid Build Coastguard Workerendfunc
3417*c0909341SAndroid Build Coastguard Worker
3418*c0909341SAndroid Build Coastguard Workerfunction put_8tap_smooth_regular_8bpc_lsx
3419*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3420*c0909341SAndroid Build Coastguard Worker    li.w     t0, 1
3421*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3422*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 1
3423*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3424*c0909341SAndroid Build Coastguard Workerendfunc
3425*c0909341SAndroid Build Coastguard Worker
3426*c0909341SAndroid Build Coastguard Workerfunction put_8tap_sharp_regular_8bpc_lsx
3427*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3428*c0909341SAndroid Build Coastguard Worker    li.w     t0, 2
3429*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3430*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 2
3431*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3432*c0909341SAndroid Build Coastguard Workerendfunc
3433*c0909341SAndroid Build Coastguard Worker
3434*c0909341SAndroid Build Coastguard Workerfunction put_8tap_regular_smooth_8bpc_lsx
3435*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3436*c0909341SAndroid Build Coastguard Worker    li.w     t0, 4
3437*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3438*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 4
3439*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3440*c0909341SAndroid Build Coastguard Workerendfunc
3441*c0909341SAndroid Build Coastguard Worker
3442*c0909341SAndroid Build Coastguard Workerfunction put_8tap_smooth_8bpc_lsx
3443*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3444*c0909341SAndroid Build Coastguard Worker    li.w     t0, 5
3445*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3446*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 5
3447*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3448*c0909341SAndroid Build Coastguard Workerendfunc
3449*c0909341SAndroid Build Coastguard Worker
3450*c0909341SAndroid Build Coastguard Workerfunction put_8tap_sharp_smooth_8bpc_lsx
3451*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3452*c0909341SAndroid Build Coastguard Worker    li.w     t0, 6
3453*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3454*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 6
3455*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3456*c0909341SAndroid Build Coastguard Workerendfunc
3457*c0909341SAndroid Build Coastguard Worker
3458*c0909341SAndroid Build Coastguard Workerfunction put_8tap_regular_sharp_8bpc_lsx
3459*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3460*c0909341SAndroid Build Coastguard Worker    li.w     t0, 8
3461*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3462*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 8
3463*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3464*c0909341SAndroid Build Coastguard Workerendfunc
3465*c0909341SAndroid Build Coastguard Worker
3466*c0909341SAndroid Build Coastguard Workerfunction put_8tap_smooth_sharp_8bpc_lsx
3467*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3468*c0909341SAndroid Build Coastguard Worker    li.w     t0, 9
3469*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3470*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 9
3471*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3472*c0909341SAndroid Build Coastguard Workerendfunc
3473*c0909341SAndroid Build Coastguard Worker
3474*c0909341SAndroid Build Coastguard Workerfunction put_8tap_sharp_8bpc_lsx
3475*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  -16
3476*c0909341SAndroid Build Coastguard Worker    li.w     t0, 10
3477*c0909341SAndroid Build Coastguard Worker    st.d     t0, sp,  0
3478*c0909341SAndroid Build Coastguard Worker    PUT_8TAP_8BPC_LSX 10
3479*c0909341SAndroid Build Coastguard Worker    addi.d   sp, sp,  16
3480*c0909341SAndroid Build Coastguard Workerendfunc
3481*c0909341SAndroid Build Coastguard Worker
3482*c0909341SAndroid Build Coastguard Workerconst shufb1
3483*c0909341SAndroid Build Coastguard Worker.byte 0,1,2,3,4,5,6,7,1,2,3,4,5,6,7,8
3484*c0909341SAndroid Build Coastguard Workerendconst
3485*c0909341SAndroid Build Coastguard Worker
3486*c0909341SAndroid Build Coastguard Worker.macro PREP_H_8W in0
3487*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr2,    \in0,  \in0,   vr6
3488*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr3,    \in0,  \in0,   vr7
3489*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr4,    \in0,  \in0,   vr8
3490*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr2,   vr22
3491*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr3,   vr23
3492*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr3,   vr22
3493*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr4,   vr23
3494*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr2,   vr22
3495*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr3,   vr23
3496*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr3,   vr22
3497*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr4,   vr23
3498*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr13
3499*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr15
3500*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
3501*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       \in0,   vr14,  vr14
3502*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     \in0,   vr12,  2
3503*c0909341SAndroid Build Coastguard Worker.endm
3504*c0909341SAndroid Build Coastguard Worker
3505*c0909341SAndroid Build Coastguard Worker.macro PREP_HV_8W_LASX in0
3506*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr4,   \in0,  \in0,   xr19
3507*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr5,   \in0,  \in0,   xr20
3508*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr6,   \in0,  \in0,   xr21
3509*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr7,   xr4,   xr22
3510*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr9,   xr5,   xr23
3511*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr10,  xr5,   xr22
3512*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr11,  xr6,   xr23
3513*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr7,   xr4,   xr22
3514*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr9,   xr5,   xr23
3515*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr10,  xr5,   xr22
3516*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr11,  xr6,   xr23
3517*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr7,   xr7,   xr9
3518*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr10,  xr11
3519*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr7,   xr7,   xr7
3520*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      \in0,  xr9,   xr9
3521*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    \in0,  xr7,   2
3522*c0909341SAndroid Build Coastguard Worker.endm
3523*c0909341SAndroid Build Coastguard Worker
3524*c0909341SAndroid Build Coastguard Worker.macro PREP_8TAP_8BPC_LASX lable
3525*c0909341SAndroid Build Coastguard Worker    li.w             t0,     4
3526*c0909341SAndroid Build Coastguard Worker    la.local         t6,     dav1d_mc_subpel_filters
3527*c0909341SAndroid Build Coastguard Worker    slli.d           t2,     a2,    1  //src_stride*2
3528*c0909341SAndroid Build Coastguard Worker    add.d            t3,     t2,    a2 //src_stride*3
3529*c0909341SAndroid Build Coastguard Worker    slli.d           t4,     t2,    1
3530*c0909341SAndroid Build Coastguard Worker
3531*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()h_lasx //mx
3532*c0909341SAndroid Build Coastguard Worker    bnez             a6,     .l_\lable\()v_lasx
3533*c0909341SAndroid Build Coastguard Worker
3534*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a3
3535*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
3536*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
3537*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()prep_hv0_jtable_lasx
3538*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   1
3539*c0909341SAndroid Build Coastguard Worker    ld.h             t8,     t1,    0
3540*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t8
3541*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
3542*c0909341SAndroid Build Coastguard Worker
3543*c0909341SAndroid Build Coastguard Worker    .align   3
3544*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_hv0_jtable_lasx:
3545*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_128w_lasx - .l_\lable\()prep_hv0_jtable_lasx
3546*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_64w_lasx  - .l_\lable\()prep_hv0_jtable_lasx
3547*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_32w_lasx  - .l_\lable\()prep_hv0_jtable_lasx
3548*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_16w_lasx  - .l_\lable\()prep_hv0_jtable_lasx
3549*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_8w_lasx   - .l_\lable\()prep_hv0_jtable_lasx
3550*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_4w_lasx   - .l_\lable\()prep_hv0_jtable_lasx
3551*c0909341SAndroid Build Coastguard Worker
3552*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_4w_lasx:
3553*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a1,    0
3554*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a1,    a2
3555*c0909341SAndroid Build Coastguard Worker    fldx.s           f2,     a1,    t2
3556*c0909341SAndroid Build Coastguard Worker    fldx.s           f3,     a1,    t3
3557*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
3558*c0909341SAndroid Build Coastguard Worker    xvpackev.w       xr0,    xr1,   xr0
3559*c0909341SAndroid Build Coastguard Worker    xvpackev.w       xr1,    xr3,   xr2
3560*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,    xr1,   0x02
3561*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr0,    xr0,   4
3562*c0909341SAndroid Build Coastguard Worker    xvst             xr0,    a0,    0
3563*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    32
3564*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -4
3565*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_4w_lasx
3566*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3567*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_8w_lasx:
3568*c0909341SAndroid Build Coastguard Worker    fld.d            f0,     a1,    0
3569*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,     a1,    a2
3570*c0909341SAndroid Build Coastguard Worker    fldx.d           f2,     a1,    t2
3571*c0909341SAndroid Build Coastguard Worker    fldx.d           f3,     a1,    t3
3572*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
3573*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,    xr1,   0x02
3574*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr2,    xr3,   0x02
3575*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr0,    xr0,   4
3576*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr2,    xr2,   4
3577*c0909341SAndroid Build Coastguard Worker    xvst             xr0,    a0,    0
3578*c0909341SAndroid Build Coastguard Worker    xvst             xr2,    a0,    32
3579*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    64
3580*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -4
3581*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_8w_lasx
3582*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3583*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_16w_lasx:
3584*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
3585*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
3586*c0909341SAndroid Build Coastguard Worker    vldx             vr2,    a1,    t2
3587*c0909341SAndroid Build Coastguard Worker    vldx             vr3,    a1,    t3
3588*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
3589*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu    xr0,    xr0
3590*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu    xr1,    xr1
3591*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu    xr2,    xr2
3592*c0909341SAndroid Build Coastguard Worker    vext2xv.hu.bu    xr3,    xr3
3593*c0909341SAndroid Build Coastguard Worker    xvslli.h         xr0,    xr0,   4
3594*c0909341SAndroid Build Coastguard Worker    xvslli.h         xr1,    xr1,   4
3595*c0909341SAndroid Build Coastguard Worker    xvslli.h         xr2,    xr2,   4
3596*c0909341SAndroid Build Coastguard Worker    xvslli.h         xr3,    xr3,   4
3597*c0909341SAndroid Build Coastguard Worker    xvst             xr0,    a0,    0
3598*c0909341SAndroid Build Coastguard Worker    xvst             xr1,    a0,    32
3599*c0909341SAndroid Build Coastguard Worker    xvst             xr2,    a0,    64
3600*c0909341SAndroid Build Coastguard Worker    xvst             xr3,    a0,    96
3601*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    128
3602*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -4
3603*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_16w_lasx
3604*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3605*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_32w_lasx:
3606*c0909341SAndroid Build Coastguard Worker    xvld             xr0,    a1,    0
3607*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,    a1,    a2
3608*c0909341SAndroid Build Coastguard Worker    xvldx            xr2,    a1,    t2
3609*c0909341SAndroid Build Coastguard Worker    xvldx            xr3,    a1,    t3
3610*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
3611*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr4,    xr0,   0xD8
3612*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr5,    xr1,   0xD8
3613*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr6,    xr2,   0xD8
3614*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr7,    xr3,   0xD8
3615*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr10,   xr0,   0x32
3616*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr11,   xr1,   0x32
3617*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr12,   xr2,   0x32
3618*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr13,   xr3,   0x32
3619*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr0,    xr4,   4
3620*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr1,    xr5,   4
3621*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr2,    xr6,   4
3622*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr3,    xr7,   4
3623*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr4,    xr10,  4
3624*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr5,    xr11,  4
3625*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr6,    xr12,  4
3626*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr7,    xr13,  4
3627*c0909341SAndroid Build Coastguard Worker    xvst             xr0,    a0,    0
3628*c0909341SAndroid Build Coastguard Worker    xvst             xr4,    a0,    32
3629*c0909341SAndroid Build Coastguard Worker    xvst             xr1,    a0,    64
3630*c0909341SAndroid Build Coastguard Worker    xvst             xr5,    a0,    96
3631*c0909341SAndroid Build Coastguard Worker    xvst             xr2,    a0,    128
3632*c0909341SAndroid Build Coastguard Worker    xvst             xr6,    a0,    160
3633*c0909341SAndroid Build Coastguard Worker    xvst             xr3,    a0,    192
3634*c0909341SAndroid Build Coastguard Worker    xvst             xr7,    a0,    224
3635*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    256
3636*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -4
3637*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_32w_lasx
3638*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3639*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_64w_lasx:
3640*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_128w_lasx:
3641*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a1,    0
3642*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     a4,    0
3643*c0909341SAndroid Build Coastguard Worker    srli.w           t7,     a3,    5
3644*c0909341SAndroid Build Coastguard Worker    slli.w           t7,     t7,    6
3645*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0
3646*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_32_loop_lasx:
3647*c0909341SAndroid Build Coastguard Worker    xvld             xr0,    a1,    0
3648*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,    a1,    a2
3649*c0909341SAndroid Build Coastguard Worker    xvldx            xr2,    a1,    t2
3650*c0909341SAndroid Build Coastguard Worker    xvldx            xr3,    a1,    t3
3651*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
3652*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr4,    xr0,   0xD8
3653*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr5,    xr1,   0xD8
3654*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr6,    xr2,   0xD8
3655*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr7,    xr3,   0xD8
3656*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr10,   xr0,   0x32
3657*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr11,   xr1,   0x32
3658*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr12,   xr2,   0x32
3659*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr13,   xr3,   0x32
3660*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr0,    xr4,   4
3661*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr1,    xr5,   4
3662*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr2,    xr6,   4
3663*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr3,    xr7,   4
3664*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr4,    xr10,  4
3665*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr5,    xr11,  4
3666*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr6,    xr12,  4
3667*c0909341SAndroid Build Coastguard Worker    xvsllwil.hu.bu   xr7,    xr13,  4
3668*c0909341SAndroid Build Coastguard Worker    xvst             xr0,    a0,    0
3669*c0909341SAndroid Build Coastguard Worker    xvst             xr4,    a0,    32
3670*c0909341SAndroid Build Coastguard Worker    add.d            t1,     a0,    t7
3671*c0909341SAndroid Build Coastguard Worker    xvst             xr1,    t1,    0
3672*c0909341SAndroid Build Coastguard Worker    xvst             xr5,    t1,    32
3673*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t1,    t7
3674*c0909341SAndroid Build Coastguard Worker    xvst             xr2,    t1,    0
3675*c0909341SAndroid Build Coastguard Worker    xvst             xr6,    t1,    32
3676*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t1,    t7
3677*c0909341SAndroid Build Coastguard Worker    xvst             xr3,    t1,    0
3678*c0909341SAndroid Build Coastguard Worker    xvst             xr7,    t1,    32
3679*c0909341SAndroid Build Coastguard Worker    add.d            a0,     t1,    t7
3680*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,   -4
3681*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_32_loop_lasx
3682*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     t0,    32
3683*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     t0,    32
3684*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    64
3685*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     t8,    64
3686*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     t5,    0
3687*c0909341SAndroid Build Coastguard Worker    addi.d           a3,     a3,   -32
3688*c0909341SAndroid Build Coastguard Worker    bnez             a3,     .l_\lable\()hv0_32_loop_lasx
3689*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3690*c0909341SAndroid Build Coastguard Worker
3691*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_lasx:
3692*c0909341SAndroid Build Coastguard Worker    bnez             a6,     .l_\lable\()hv_lasx //if(fh) && if (fv)
3693*c0909341SAndroid Build Coastguard Worker
3694*c0909341SAndroid Build Coastguard Worker    andi             t1,    a7,    3
3695*c0909341SAndroid Build Coastguard Worker    blt              t0,    a3,    .l_\lable\()h_idx_fh_lasx
3696*c0909341SAndroid Build Coastguard Worker    andi             t1,    a7,    1
3697*c0909341SAndroid Build Coastguard Worker    addi.w           t1,    t1,    3
3698*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_idx_fh_lasx:
3699*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    zero,  120
3700*c0909341SAndroid Build Coastguard Worker    mul.w            t1,    t1,    t5
3701*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    a5,    -1
3702*c0909341SAndroid Build Coastguard Worker    slli.w           t5,    t5,    3
3703*c0909341SAndroid Build Coastguard Worker    add.w            t1,    t1,    t5
3704*c0909341SAndroid Build Coastguard Worker    add.d            t1,    t6,    t1 //fh's offset
3705*c0909341SAndroid Build Coastguard Worker    xvldrepl.d       xr22,  t1,    0
3706*c0909341SAndroid Build Coastguard Worker
3707*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    a1,    -3
3708*c0909341SAndroid Build Coastguard Worker    clz.w            t1,    a3
3709*c0909341SAndroid Build Coastguard Worker    li.w             t5,    24
3710*c0909341SAndroid Build Coastguard Worker    sub.w            t1,    t1,    t5
3711*c0909341SAndroid Build Coastguard Worker    la.local         t5,    .l_\lable\()prep_h_jtable_lasx
3712*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,    t1,    t5,   1
3713*c0909341SAndroid Build Coastguard Worker    ld.h             t8,    t1,    0
3714*c0909341SAndroid Build Coastguard Worker    add.d            t5,    t5,    t8
3715*c0909341SAndroid Build Coastguard Worker    jirl             $r0,   t5,    0
3716*c0909341SAndroid Build Coastguard Worker
3717*c0909341SAndroid Build Coastguard Worker    .align   3
3718*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_h_jtable_lasx:
3719*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_128w_lasx - .l_\lable\()prep_h_jtable_lasx
3720*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_64w_lasx  - .l_\lable\()prep_h_jtable_lasx
3721*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_32w_lasx  - .l_\lable\()prep_h_jtable_lasx
3722*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_16w_lasx  - .l_\lable\()prep_h_jtable_lasx
3723*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_8w_lasx   - .l_\lable\()prep_h_jtable_lasx
3724*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_4w_lasx   - .l_\lable\()prep_h_jtable_lasx
3725*c0909341SAndroid Build Coastguard Worker
3726*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_4w_lasx:
3727*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    a1,    2
3728*c0909341SAndroid Build Coastguard Worker    la.local         t7,    subpel_h_shuf1
3729*c0909341SAndroid Build Coastguard Worker    vld              vr7,   t7,    0
3730*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr7,   xr7
3731*c0909341SAndroid Build Coastguard Worker    xvbsrl.v         xr22,  xr22,  2
3732*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22
3733*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_4w_loop_lasx:
3734*c0909341SAndroid Build Coastguard Worker    vld              vr0,   a1,    0
3735*c0909341SAndroid Build Coastguard Worker    vldx             vr1,   a1,    a2
3736*c0909341SAndroid Build Coastguard Worker    vldx             vr2,   a1,    t2
3737*c0909341SAndroid Build Coastguard Worker    vldx             vr3,   a1,    t3
3738*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
3739*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr1,   xr0,   0x20
3740*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr3,   xr2,   0x20
3741*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr1,   xr1,   xr1,   xr7
3742*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr3,   xr3,   xr3,   xr7
3743*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr0,   xr1,   xr22
3744*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr2,   xr3,   xr22
3745*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr0,   xr1,   xr22
3746*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr2,   xr3,   xr22
3747*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr0,   xr0,   xr0
3748*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr2,   xr2,   xr2
3749*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr2,   xr0,   2
3750*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr2,   xr2,   0xd8
3751*c0909341SAndroid Build Coastguard Worker    xvst             xr2,   a0,    0
3752*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    32
3753*c0909341SAndroid Build Coastguard Worker    addi.w           a4,    a4,    -4
3754*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()h_4w_loop_lasx
3755*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3756*c0909341SAndroid Build Coastguard Worker
3757*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_8w_lasx:
3758*c0909341SAndroid Build Coastguard Worker    la.local         t7,    subpel_h_shuf1
3759*c0909341SAndroid Build Coastguard Worker    vld              vr6,   t7,    0
3760*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr23,  vr22,  4 //fh
3761*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr23,  xr23
3762*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22
3763*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr19,  xr6
3764*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr20,  xr19,  4
3765*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr21,  xr19,  8
3766*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_8w_loop_lasx:
3767*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
3768*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,   a1,    a2
3769*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t2
3770*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
3771*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0
3772*c0909341SAndroid Build Coastguard Worker    xvst             xr0,   a0,    0
3773*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    32
3774*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    a4,   -2
3775*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()h_8w_loop_lasx
3776*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3777*c0909341SAndroid Build Coastguard Worker
3778*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16w_lasx:
3779*c0909341SAndroid Build Coastguard Worker    la.local         t7,    subpel_h_shuf1
3780*c0909341SAndroid Build Coastguard Worker    vld              vr6,   t7,    0
3781*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr23,  vr22,  4 //fh
3782*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr23,  xr23
3783*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22
3784*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr19,  xr6
3785*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr20,  xr19,  4
3786*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr21,  xr19,  8
3787*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16w_loop_lasx:
3788*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
3789*c0909341SAndroid Build Coastguard Worker    xvld             xr1,   a1,    8
3790*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    a2
3791*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
3792*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0
3793*c0909341SAndroid Build Coastguard Worker    xvst             xr0,   a0,    0
3794*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
3795*c0909341SAndroid Build Coastguard Worker    xvld             xr1,   a1,    8
3796*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    a2
3797*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
3798*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0
3799*c0909341SAndroid Build Coastguard Worker    xvst             xr0,   a0,    32
3800*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    64
3801*c0909341SAndroid Build Coastguard Worker    addi.w           a4,    a4,    -2
3802*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()h_16w_loop_lasx
3803*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3804*c0909341SAndroid Build Coastguard Worker
3805*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_32w_lasx:
3806*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_64w_lasx:
3807*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_128w_lasx:
3808*c0909341SAndroid Build Coastguard Worker    la.local         t7,    subpel_h_shuf1
3809*c0909341SAndroid Build Coastguard Worker    vld              vr6,   t7,    0
3810*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr23,  vr22,  4 //fh
3811*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr23,  xr23
3812*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22
3813*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr19,  xr6
3814*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr20,  xr19,  4
3815*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr21,  xr19,  8
3816*c0909341SAndroid Build Coastguard Worker    addi.d           t5,    a1,    0 //src
3817*c0909341SAndroid Build Coastguard Worker    addi.d           t6,    a3,    0 //w
3818*c0909341SAndroid Build Coastguard Worker    slli.w           t7,    a3,    1 //store offset
3819*c0909341SAndroid Build Coastguard Worker    addi.d           t8,    a0,    0 //dst
3820*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16_loop_lasx:
3821*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
3822*c0909341SAndroid Build Coastguard Worker    xvld             xr1,   a1,    8
3823*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
3824*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0
3825*c0909341SAndroid Build Coastguard Worker    xvst             xr0,   a0,    0
3826*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    16
3827*c0909341SAndroid Build Coastguard Worker    xvld             xr1,   a1,    24
3828*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
3829*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0
3830*c0909341SAndroid Build Coastguard Worker    xvst             xr0,   a0,    32
3831*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    64
3832*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    a1,    32
3833*c0909341SAndroid Build Coastguard Worker    addi.d           a3,    a3,   -32
3834*c0909341SAndroid Build Coastguard Worker    bnez             a3,    .l_\lable\()h_16_loop_lasx
3835*c0909341SAndroid Build Coastguard Worker    add.d            a1,    t5,    a2
3836*c0909341SAndroid Build Coastguard Worker    add.d            t5,    t5,    a2
3837*c0909341SAndroid Build Coastguard Worker    add.d            a0,    t8,    t7
3838*c0909341SAndroid Build Coastguard Worker    add.d            t8,    t8,    t7
3839*c0909341SAndroid Build Coastguard Worker    addi.d           a3,    t6,    0
3840*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    a4,    -1
3841*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()h_16_loop_lasx
3842*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3843*c0909341SAndroid Build Coastguard Worker
3844*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_lasx:
3845*c0909341SAndroid Build Coastguard Worker    andi             t1,    a7,    3
3846*c0909341SAndroid Build Coastguard Worker    blt              t0,    a3,    .l_\lable\()hv_idx_fh_lasx
3847*c0909341SAndroid Build Coastguard Worker    andi             t1,    a7,    1
3848*c0909341SAndroid Build Coastguard Worker    addi.w           t1,    t1,    3
3849*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_idx_fh_lasx:
3850*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    zero,  120
3851*c0909341SAndroid Build Coastguard Worker    mul.w            t1,    t1,    t5
3852*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    a5,    -1
3853*c0909341SAndroid Build Coastguard Worker    slli.w           t5,    t5,    3
3854*c0909341SAndroid Build Coastguard Worker    add.w            t1,    t1,    t5
3855*c0909341SAndroid Build Coastguard Worker    add.d            t1,    t6,    t1 //fh's offset
3856*c0909341SAndroid Build Coastguard Worker    xvldrepl.d       xr22,  t1,    0
3857*c0909341SAndroid Build Coastguard Worker    srli.w           a7,    a7,    2
3858*c0909341SAndroid Build Coastguard Worker    blt              t0,    a4,    .l_\lable\()hv_idx_fv_lasx
3859*c0909341SAndroid Build Coastguard Worker    andi             a7,    a7,    1
3860*c0909341SAndroid Build Coastguard Worker    addi.w           a7,    a7,    3
3861*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_idx_fv_lasx:
3862*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    zero,  120
3863*c0909341SAndroid Build Coastguard Worker    mul.w            a7,    a7,    t5
3864*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    a6,    -1
3865*c0909341SAndroid Build Coastguard Worker    slli.w           t5,    t5,    3
3866*c0909341SAndroid Build Coastguard Worker    add.w            a7,    a7,    t5
3867*c0909341SAndroid Build Coastguard Worker    add.d            a7,    t6,    a7 //fv's offset
3868*c0909341SAndroid Build Coastguard Worker    xvldrepl.d       xr8,   a7,    0
3869*c0909341SAndroid Build Coastguard Worker    xvsllwil.h.b     xr8,   xr8,   0
3870*c0909341SAndroid Build Coastguard Worker    sub.d            a1,    a1,    t3
3871*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    a1,    -1 //ignore leading 0s
3872*c0909341SAndroid Build Coastguard Worker    beq              a3,    t0,    .l_\lable\()hv_4w_lasx
3873*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    a1,    -2
3874*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()hv_8w_lasx
3875*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_4w_lasx:
3876*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
3877*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,   a1,    a2
3878*c0909341SAndroid Build Coastguard Worker    xvldx            xr2,   a1,    t2
3879*c0909341SAndroid Build Coastguard Worker    xvldx            xr3,   a1,    t3
3880*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
3881*c0909341SAndroid Build Coastguard Worker    xvld             xr4,   a1,    0
3882*c0909341SAndroid Build Coastguard Worker    xvldx            xr5,   a1,    a2
3883*c0909341SAndroid Build Coastguard Worker    xvldx            xr6,   a1,    t2
3884*c0909341SAndroid Build Coastguard Worker    la.local         t1,    subpel_h_shuf2
3885*c0909341SAndroid Build Coastguard Worker    xvld             xr7,   t1,    0
3886*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr22,  vr22,  2
3887*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22
3888*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr8,   xr8
3889*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr12,  xr8,   0
3890*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr13,  xr8,   1
3891*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr14,  xr8,   2
3892*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr15,  xr8,   3
3893*c0909341SAndroid Build Coastguard Worker    xvilvl.d         xr0,   xr1,   xr0
3894*c0909341SAndroid Build Coastguard Worker    xvilvl.d         xr2,   xr3,   xr2
3895*c0909341SAndroid Build Coastguard Worker    xvilvl.d         xr4,   xr5,   xr4
3896*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr0,   xr0
3897*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr2,   xr2
3898*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr4,   xr4
3899*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr6,   xr6
3900*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr0,   xr0,   xr0,   xr7
3901*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr2,   xr2,   xr2,   xr7
3902*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr4,   xr4,   xr4,   xr7
3903*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr6,   xr6,   xr6,   xr7
3904*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr1,   xr0,   xr22
3905*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr3,   xr2,   xr22
3906*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr5,   xr4,   xr22
3907*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr9,   xr6,   xr22
3908*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr1,   xr0,   xr22
3909*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr3,   xr2,   xr22
3910*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr5,   xr4,   xr22
3911*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr9,   xr6,   xr22
3912*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr1,   xr1,   xr1  // a0 b0 a1 b1  c0 d0 c1 d1
3913*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr3,   xr3,   xr3  // a2 b2 a3 b3  c2 d2 c3 d3
3914*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr5,   xr5,   xr5  // a4 b4 a5 b5  c4 d4 c5 d5
3915*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr9,   xr9,   xr9  // a6 b6 -  -   c6 d6 -  -
3916*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr3,   xr1,   2    // a0 b0 a1 b1  a2 b2 a3 b3  c0 d0 c1 d1  c2 d2 c3 d3
3917*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr9,   xr5,   2    // a4 b4 a5 b5  a6 b6 -  -   c4 d4 c5 d5  c6 d6 -  -
3918*c0909341SAndroid Build Coastguard Worker    xvbsrl.v         xr4,   xr3,   4
3919*c0909341SAndroid Build Coastguard Worker    xvextrins.w      xr4,   xr9,   0x30 // a1 b1 a2 b2  a3 b3 a4 b4  c1 d1 c2 d2  c3 d3 c4 d4
3920*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr5,   xr4,   xr3  // a0 a1 b0 b1  a1 a2 b1 b2  c0 c1 d0 d1  c1 c2 d1 d2
3921*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr6,   xr4,   xr3  // a2 a3 b2 b3  a3 a4 b3 b4  c2 c3 d2 d3  c3 c4 d3 d4
3922*c0909341SAndroid Build Coastguard Worker    xvbsrl.v         xr10,  xr9,   4    // a5 b5 a6 b6  -  -  -  -   c5 d5 c6 d6  -  -  -  -
3923*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr11,  xr10,  xr9  // a4 a5 b4 b5  a5 a6 b5 b6  c4 c5 d4 d5  c5 c6 d5 d6
3924*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_w4_loop_lasx:
3925*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr16,  xr5,   xr12 //a0 a1 (h0)
3926*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr17,  xr6,   xr12 //a2 a3 (h1)
3927*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr18,  xr6,   xr13 //a2 a3 (h0)
3928*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr19,  xr11,  xr13 //a4 a5 (h1)
3929*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr20,  xr11,  xr14 //a4 a5 (h0)
3930*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr16,  xr5,   xr12 //
3931*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr17,  xr6,   xr12 //
3932*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr18,  xr6,   xr13 //
3933*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr19,  xr11,  xr13 //
3934*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr20,  xr11,  xr14 //
3935*c0909341SAndroid Build Coastguard Worker    xvaddi.wu        xr5,   xr11,   0
3936*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr16,  xr16,  xr18 //a0 a1 + a2 a3
3937*c0909341SAndroid Build Coastguard Worker    xvldx            xr18,  a1,    t3   //a7 b7 c7 d7
3938*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
3939*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr17,  xr17,  xr19 //a2 a3 + a4 a5
3940*c0909341SAndroid Build Coastguard Worker    xvld             xr19,  a1,    0    //a8 b8 c8 d8
3941*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr16,  xr16,  xr20 //a0 a1 + a2 a3 + a4 a5
3942*c0909341SAndroid Build Coastguard Worker    xvldx            xr20,  a1,    a2   //a9 b9 c9 d9
3943*c0909341SAndroid Build Coastguard Worker    xvilvl.d         xr18,  xr19,  xr18
3944*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr18,  xr18
3945*c0909341SAndroid Build Coastguard Worker    xvldx            xr19,  a1,    t2   //aa ba ca da
3946*c0909341SAndroid Build Coastguard Worker    xvilvl.d         xr20,  xr19,  xr20
3947*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr20,  xr20
3948*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr18,  xr18,  xr18,  xr7
3949*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr20,  xr20,  xr20,  xr7
3950*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr21,  xr18,  xr22
3951*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr23,  xr20,  xr22
3952*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr21,  xr18,  xr22
3953*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr23,  xr20,  xr22
3954*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr21,  xr21,  xr21 //a7 b7 a8 b8 c7 d7 c8 d8
3955*c0909341SAndroid Build Coastguard Worker    xvhaddw.w.h      xr23,  xr23,  xr23 //a9 b9 aa ba c9 d9 ca da
3956*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr23,  xr21,  2    //a7 b7 a8 b8  a9 b9 aa ba  c7 d7 c8 d8  c9 d9 ca da
3957*c0909341SAndroid Build Coastguard Worker    xvbsll.v         xr0,   xr23,  4
3958*c0909341SAndroid Build Coastguard Worker    xvextrins.w      xr0,   xr9,   0x02 //a6 b6 a7 b7  a8 b8 a9 b9  c6 d6 c7 d7  c8 d8 c9 d9
3959*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr6,   xr23,  xr0  //a6 a7 b6 b7  a7 a8 b7 b8  c6 c7 d6 d7  c7 c8 d7 d8
3960*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr11,  xr23,  xr0  //a8 a9 b8 b9  a9 aa b9 ba  c8 c9 d8 d9  c9 ca d9 da
3961*c0909341SAndroid Build Coastguard Worker    xvbsrl.v         xr9,   xr23,  4
3962*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr1 ,  xr6,   xr14 //a6 a7 (h0)
3963*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr2 ,  xr6,   xr15 //a6 a7 (h1)
3964*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr3 ,  xr11,  xr15 //a8 a9 (h1)
3965*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr1 ,  xr6,   xr14
3966*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr2 ,  xr6,   xr15
3967*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr3 ,  xr11,  xr15
3968*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr17,  xr17,  xr1  //a2 a3 + a4 a5 + a6 a7
3969*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr16,  xr16,  xr2  //a0 a1 + a2 a3 + a4 a5 + a6 a7
3970*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr17,  xr17,  xr3  //a2 a3 + a4 a5 + a6 a7 + a8 a9
3971*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr17,  xr16,  6    //a01 b01 a12 b12  a23 b23 a34 b34  c01 d01 c12 d12  c23 d23 c34 d34
3972*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr17,  xr17,  0xd8 //a01 b01 a12 b12  c01 d01 c12 d12  a23 b23 a34 b34  c23 d23 c34 d34
3973*c0909341SAndroid Build Coastguard Worker    xvshuf4i.w       xr17,  xr17,  0xd8
3974*c0909341SAndroid Build Coastguard Worker    xvst             xr17,  a0,    0
3975*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    32
3976*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    a4,    -4
3977*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()hv_w4_loop_lasx
3978*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
3979*c0909341SAndroid Build Coastguard Worker
3980*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_8w_lasx:
3981*c0909341SAndroid Build Coastguard Worker    addi.d           sp,    sp,   -4*8
3982*c0909341SAndroid Build Coastguard Worker    fst.d            f24,   sp,    0
3983*c0909341SAndroid Build Coastguard Worker    fst.d            f25,   sp,    8
3984*c0909341SAndroid Build Coastguard Worker    fst.d            f26,   sp,    16
3985*c0909341SAndroid Build Coastguard Worker    fst.d            f27,   sp,    24
3986*c0909341SAndroid Build Coastguard Worker    la.local         t1,    subpel_h_shuf1
3987*c0909341SAndroid Build Coastguard Worker    vld              vr19,  t1,    0
3988*c0909341SAndroid Build Coastguard Worker    addi.d           t0,    a1,    0
3989*c0909341SAndroid Build Coastguard Worker    addi.d           t5,    a4,    0
3990*c0909341SAndroid Build Coastguard Worker    slli.w           t7,    a3,    1 // store offset
3991*c0909341SAndroid Build Coastguard Worker    addi.d           t8,    a0,    0
3992*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr19,  xr19
3993*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr20,  xr19,  4
3994*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr21,  xr19,  8
3995*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr23,  vr22,  4
3996*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr22,  xr22 //f0f1f2f3
3997*c0909341SAndroid Build Coastguard Worker    xvreplve0.w      xr23,  xr23 //f4f5f6f7
3998*c0909341SAndroid Build Coastguard Worker    xvreplve0.q      xr8,   xr8
3999*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr24,  xr8,   0
4000*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr25,  xr8,   1
4001*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr26,  xr8,   2
4002*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.w   xr27,  xr8,   3
4003*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_8w_loop0_lasx:
4004*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
4005*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,   a1,    a2
4006*c0909341SAndroid Build Coastguard Worker    xvldx            xr2,   a1,    t2
4007*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t3
4008*c0909341SAndroid Build Coastguard Worker    xvld             xr3,   a1,    0
4009*c0909341SAndroid Build Coastguard Worker    xvldx            xr4,   a1,    a2
4010*c0909341SAndroid Build Coastguard Worker    xvldx            xr5,   a1,    t2
4011*c0909341SAndroid Build Coastguard Worker    xvldx            xr6,   a1,    t3
4012*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
4013*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr3,   0x02 //0 3
4014*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr1,   xr4,   0x02 //1 4
4015*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr2,   xr5,   0x02 //2 5
4016*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr3,   xr6,   0x02 //3 6
4017*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0 //a0b0c0d0 e0f0g0h0 a3b3c3d3 e3f3g3h3
4018*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr1 //a1b1c1d1 e1f1g1h1 a4b4c4d4 e4f4g4h4
4019*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr2 //a2b2c2d2 e2f2g2h2 a5b5c5d5 e5f5g5h5
4020*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr3 //a3b3c3d3 e3f3g3h3 a6b6c6d6 e6f6g6h6
4021*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr0,   xr0,   0xd8
4022*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr1,   xr1,   0xd8
4023*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr2,   xr2,   0xd8
4024*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr18,  xr3,   0xd8
4025*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr12,  xr1,   xr0 //a0a1b0b1c0c1d0d1 e0e1f0f1g0g1h0h1
4026*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr13,  xr1,   xr0 //a3a4b3b4c3c4d3d4 e3e4f3f4g3g4h3h4
4027*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr14,  xr2,   xr1 //a1a2b1b2c1c2d1d2 e1e2f1f2g1g2h1h2
4028*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr15,  xr2,   xr1 //a4a5b4b5c4c5d4d5 e4e5f4f5g4g5h4h5
4029*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr16,  xr18,  xr2 //a2a3b2b3c2c3d2d3 e2e3f2f3g2g3h2h3
4030*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr17,  xr18,  xr2 //a5a6b5b6c5c6d5d6 e5e6f5f6g5g6h5h6
4031*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_8w_loop_lasx:
4032*c0909341SAndroid Build Coastguard Worker    xvld             xr0,   a1,    0
4033*c0909341SAndroid Build Coastguard Worker    xvldx            xr1,   a1,    a2
4034*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t2
4035*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02 //7 8
4036*c0909341SAndroid Build Coastguard Worker    PREP_HV_8W_LASX  xr0                //a7b7c7d7e7f7g7h7 a8b8c8d8e8f8g8h8
4037*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr3,   xr0,   0x03 //a6b6c6d6e6f6g6h6 a7b7c7d7e7f7g7h7
4038*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr3,   xr3,   0xd8 //a6b6c6d6a7b7c7d7 e6f6g6h6e7f7g7h7
4039*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr1,   xr0,   0xd8 //a7b7c7d7a8b8c8d8 e7f7g7h7e8f8g8h8
4040*c0909341SAndroid Build Coastguard Worker    xvilvl.h         xr18,  xr1,   xr3  //a6a7b6b7c6c7d6d7 e6e7f6f7g6g7h6h7
4041*c0909341SAndroid Build Coastguard Worker    xvilvh.h         xr2,   xr1,   xr3  //a7a8b7b8c7c8d7d8 e7e8f7f8g7g8h7h8
4042*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr3,   xr0,   0
4043*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr4,   xr12,  xr24 //01
4044*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr5,   xr14,  xr24 //12
4045*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr6,   xr16,  xr25 //23
4046*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr7,   xr13,  xr25 //34
4047*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr8,   xr15,  xr26 //45
4048*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr9,   xr17,  xr26 //56
4049*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr10,  xr18,  xr27 //67
4050*c0909341SAndroid Build Coastguard Worker    xvmulwev.w.h     xr11,  xr2,   xr27 //78
4051*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr4,   xr12,  xr24 //01
4052*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr5,   xr14,  xr24 //12
4053*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr6,   xr16,  xr25 //23
4054*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr7,   xr13,  xr25 //34
4055*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr8,   xr15,  xr26 //45
4056*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr9,   xr17,  xr26 //56
4057*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr10,  xr18,  xr27 //67
4058*c0909341SAndroid Build Coastguard Worker    xvmaddwod.w.h    xr11,  xr2,   xr27 //78
4059*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr4,   xr4,   xr6
4060*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr5,   xr5,   xr7
4061*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr4,   xr4,   xr8
4062*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr5,   xr5,   xr9
4063*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr4,   xr4,   xr10
4064*c0909341SAndroid Build Coastguard Worker    xvadd.w          xr5,   xr5,   xr11
4065*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr12,  xr16,  0 //01 <-- 23
4066*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr14,  xr13,  0 //12 <-- 34
4067*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr16,  xr15,  0 //23 <-- 45
4068*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr13,  xr17,  0 //34 <-- 56
4069*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr15,  xr18,  0 //45 <-- 67
4070*c0909341SAndroid Build Coastguard Worker    xvaddi.hu        xr17,  xr2,   0 //56 <-- 78
4071*c0909341SAndroid Build Coastguard Worker    xvssrarni.h.w    xr5,   xr4,   6
4072*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr5,   xr5,   0xd8
4073*c0909341SAndroid Build Coastguard Worker    vst              vr5,   a0,    0
4074*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr5,   xr5,   0x11
4075*c0909341SAndroid Build Coastguard Worker    vstx             vr5,   a0,    t7
4076*c0909341SAndroid Build Coastguard Worker    alsl.d           a0,    t7,    a0,  1
4077*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    a4,   -2
4078*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()hv_8w_loop_lasx
4079*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    t0,    8
4080*c0909341SAndroid Build Coastguard Worker    addi.d           t0,    t0,    8
4081*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    t8,    16
4082*c0909341SAndroid Build Coastguard Worker    addi.d           t8,    t8,    16
4083*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    t5,    0
4084*c0909341SAndroid Build Coastguard Worker    addi.d           a3,    a3,   -8
4085*c0909341SAndroid Build Coastguard Worker    bnez             a3,    .l_\lable\()hv_8w_loop0_lasx
4086*c0909341SAndroid Build Coastguard Worker    fld.d            f24,   sp,    0
4087*c0909341SAndroid Build Coastguard Worker    fld.d            f25,   sp,    8
4088*c0909341SAndroid Build Coastguard Worker    fld.d            f26,   sp,    16
4089*c0909341SAndroid Build Coastguard Worker    fld.d            f27,   sp,    24
4090*c0909341SAndroid Build Coastguard Worker    addi.d           sp,    sp,    4*8
4091*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
4092*c0909341SAndroid Build Coastguard Worker
4093*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_lasx:
4094*c0909341SAndroid Build Coastguard Worker    srli.w           a7,    a7,    2
4095*c0909341SAndroid Build Coastguard Worker    blt              t0,    a4,    .l_\lable\()v_idx_fv_lasx
4096*c0909341SAndroid Build Coastguard Worker    andi             a7,    a7,    1
4097*c0909341SAndroid Build Coastguard Worker    addi.w           a7,    a7,    3
4098*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_idx_fv_lasx:
4099*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    zero,  120
4100*c0909341SAndroid Build Coastguard Worker    mul.w            a7,    a7,    t5
4101*c0909341SAndroid Build Coastguard Worker    addi.w           t5,    a6,    -1
4102*c0909341SAndroid Build Coastguard Worker    slli.w           t5,    t5,    3
4103*c0909341SAndroid Build Coastguard Worker    add.w            a7,    a7,    t5
4104*c0909341SAndroid Build Coastguard Worker    add.d            a7,    t6,    a7 //fv's offset
4105*c0909341SAndroid Build Coastguard Worker    xvldrepl.d       xr8,   a7,    0
4106*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.h   xr12,  xr8,   0
4107*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.h   xr13,  xr8,   1
4108*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.h   xr14,  xr8,   2
4109*c0909341SAndroid Build Coastguard Worker    xvrepl128vei.h   xr15,  xr8,   3
4110*c0909341SAndroid Build Coastguard Worker    sub.d            a1,    a1,    t3
4111*c0909341SAndroid Build Coastguard Worker    beq              a3,    t0,    .l_\lable\()v_4w_lasx
4112*c0909341SAndroid Build Coastguard Worker    addi.w           t0,    t0,    4
4113*c0909341SAndroid Build Coastguard Worker    beq              a3,    t0,    .l_\lable\()v_8w_lasx
4114*c0909341SAndroid Build Coastguard Worker    blt              t0,    a3,    .l_\lable\()v_16w_lasx
4115*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_4w_lasx:
4116*c0909341SAndroid Build Coastguard Worker    la.local         t6,    subpel_h_shuf3
4117*c0909341SAndroid Build Coastguard Worker    xvld             xr11,  t6,    0
4118*c0909341SAndroid Build Coastguard Worker    fld.s            f0,    a1,    0   //a0b0c0d0
4119*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,    a1,    a2  //a1b1c1d1
4120*c0909341SAndroid Build Coastguard Worker    fldx.s           f2,    a1,    t2  //a2b2c2d2
4121*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t3
4122*c0909341SAndroid Build Coastguard Worker    fld.s            f3,    a1,    0   //a3b3c3d3
4123*c0909341SAndroid Build Coastguard Worker    fldx.s           f4,    a1,    a2  //a4b4c4d4
4124*c0909341SAndroid Build Coastguard Worker    fldx.s           f5,    a1,    t2  //a5b5c5d5
4125*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,    a1,    t3  //a6b6c6d6
4126*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr0,   vr1,   vr0 //01
4127*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr1,   vr3,   vr2 //23
4128*c0909341SAndroid Build Coastguard Worker    vilvl.d          vr0,   vr1,   vr0 //0123
4129*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr2,   vr5,   vr4 //45
4130*c0909341SAndroid Build Coastguard Worker    vilvl.d          vr1,   vr2,   vr1 //2345
4131*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02 //0123 2345
4132*c0909341SAndroid Build Coastguard Worker    xvbsrl.v         xr1,   xr0,   4    //123- 345-
4133*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr4,   xr6,   0x02
4134*c0909341SAndroid Build Coastguard Worker    xvextrins.w      xr1,   xr4,   0x30 //1234 3456
4135*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr2,   xr1,   xr0  //0112 2334         //a0a1b0b1c0c1d0d1 a1a2b1b2c1c2d1d2 a2a3b2b3c2c3d2d3 a3a4b3b4c3c4d3d4
4136*c0909341SAndroid Build Coastguard Worker    xvilvh.b         xr3,   xr1,   xr0  //2334 4556         //a2a3b2b3c2c3d2d3 a3a4b3b4c3c4d3d4 a4a5b4b5c4c5d4d5 a5a6b5b6c5c6d5d6
4137*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_4w_loop_lasx:
4138*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
4139*c0909341SAndroid Build Coastguard Worker    fld.s            f0,    a1,    0  //a7b7c7d7
4140*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,    a1,    a2 //a8b8c8d8
4141*c0909341SAndroid Build Coastguard Worker    fldx.s           f4,    a1,    t2 //a9b9c9d9
4142*c0909341SAndroid Build Coastguard Worker    fldx.s           f5,    a1,    t3 //aabacada
4143*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr7,   vr0,   vr6 //67
4144*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr10,  vr4,   vr1 //89
4145*c0909341SAndroid Build Coastguard Worker    vextrins.w       vr7,   vr1,   0x20//678-
4146*c0909341SAndroid Build Coastguard Worker    vextrins.w       vr10,  vr5,   0x20//89a-
4147*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr7,   xr10,  0x02//678- 89a-
4148*c0909341SAndroid Build Coastguard Worker    xvshuf.b         xr4,   xr7,   xr7,  xr11 //67 78 89 9a //a6a7b6b7c6c7d6d7 a7a8b7b8c7c8d7d8 a8a9b8b9c8c9d8d9 a9aab9bac9cad9da
4149*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr7,   xr3,   0x11 //4556
4150*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr7,   xr4,   0x02 //45 56 67 78       //a4a5b4b5c4c5d4d5 a5a6b5b6c5c6d5d6 a6a7b6b7c6c7d6d7 a7a8b7b8c7c8d7d8
4151*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr16,  xr2,   xr12
4152*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr17,  xr3,   xr13
4153*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr18,  xr7,   xr14
4154*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr19,  xr4,   xr15
4155*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr16,  xr2,   xr12
4156*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr17,  xr3,   xr13
4157*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr18,  xr7,   xr14
4158*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr19,  xr4,   xr15
4159*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr16,  xr16,  xr17
4160*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr16,  xr16,  xr18
4161*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr16,  xr16,  xr19
4162*c0909341SAndroid Build Coastguard Worker    xvsrari.h        xr16,  xr16,  2
4163*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr2,   xr7,   0
4164*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr3,   xr4,   0
4165*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr6,   xr5,   0
4166*c0909341SAndroid Build Coastguard Worker    xvst             xr16,  a0,    0
4167*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    32
4168*c0909341SAndroid Build Coastguard Worker    addi.w           a4,    a4,   -4
4169*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()v_4w_loop_lasx
4170*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
4171*c0909341SAndroid Build Coastguard Worker
4172*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_8w_lasx:
4173*c0909341SAndroid Build Coastguard Worker    fld.d            f0,    a1,    0
4174*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,    a1,    a2
4175*c0909341SAndroid Build Coastguard Worker    fldx.d           f2,    a1,    t2
4176*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t3
4177*c0909341SAndroid Build Coastguard Worker    fld.d            f3,    a1,    0
4178*c0909341SAndroid Build Coastguard Worker    fldx.d           f4,    a1,    a2
4179*c0909341SAndroid Build Coastguard Worker    fldx.d           f5,    a1,    t2
4180*c0909341SAndroid Build Coastguard Worker    fldx.d           f6,    a1,    t3
4181*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr0,   xr1,   0x02
4182*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr1,   xr2,   0x02
4183*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr0,   xr1,   xr0 //01 12
4184*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr2,   xr3,   0x02
4185*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr3,   xr4,   0x02
4186*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr2,   xr3,   xr2 //23 34
4187*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr4,   xr5,   0x02
4188*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr5,   xr6,   0x02
4189*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr4,   xr5,   xr4 //45 56
4190*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_8w_loop_lasx:
4191*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
4192*c0909341SAndroid Build Coastguard Worker    fld.d            f7,    a1,    0   //7
4193*c0909341SAndroid Build Coastguard Worker    fldx.d           f10,   a1,    a2  //8
4194*c0909341SAndroid Build Coastguard Worker    fldx.d           f11,   a1,    t2  //9
4195*c0909341SAndroid Build Coastguard Worker    fldx.d           f18,   a1,    t3  //a
4196*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr6,   xr7,   0x02
4197*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr7,   xr10,  0x02
4198*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr6,   xr7,   xr6  //67 78
4199*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr10,  xr11,  0x02
4200*c0909341SAndroid Build Coastguard Worker    xvpermi.q        xr11,  xr18,  0x02
4201*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr10,  xr11,  xr10 //89 9a
4202*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr1,   xr0,   xr12
4203*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr3,   xr2,   xr13
4204*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr5,   xr4,   xr14
4205*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr7,   xr6,   xr15
4206*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr9,   xr2,   xr12
4207*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr11,  xr4,   xr13
4208*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr16,  xr6,   xr14
4209*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr17,  xr10,  xr15
4210*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr1,   xr0,   xr12
4211*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr3,   xr2,   xr13
4212*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr5,   xr4,   xr14
4213*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr7,   xr6,   xr15
4214*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr9,   xr2,   xr12
4215*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr11,  xr4,   xr13
4216*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr16,  xr6,   xr14
4217*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr17,  xr10,  xr15
4218*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr1,   xr1,   xr3
4219*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr1,   xr1,   xr5
4220*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr1,   xr1,   xr7
4221*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr11
4222*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr16
4223*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr17
4224*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr0,   xr4,   0
4225*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr2,   xr6,   0
4226*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr4,   xr10,  0
4227*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr6,   xr18,  0
4228*c0909341SAndroid Build Coastguard Worker    xvsrari.h        xr1,   xr1,   2
4229*c0909341SAndroid Build Coastguard Worker    xvsrari.h        xr9,   xr9,   2
4230*c0909341SAndroid Build Coastguard Worker    xvst             xr1,   a0,    0
4231*c0909341SAndroid Build Coastguard Worker    xvst             xr9,   a0,    32
4232*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    a0,    64
4233*c0909341SAndroid Build Coastguard Worker    addi.w           a4,    a4,   -4
4234*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()v_8w_loop_lasx
4235*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lasx
4236*c0909341SAndroid Build Coastguard Worker
4237*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_16w_lasx:
4238*c0909341SAndroid Build Coastguard Worker    addi.d           t0,    a0,    0 //dst
4239*c0909341SAndroid Build Coastguard Worker    addi.d           t5,    a1,    0 //src
4240*c0909341SAndroid Build Coastguard Worker    slli.w           t7,    a3,    1 //w
4241*c0909341SAndroid Build Coastguard Worker    addi.d           t8,    a4,    0 //h
4242*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_16w_loop0_lasx:
4243*c0909341SAndroid Build Coastguard Worker    vld              vr0,   a1,    0
4244*c0909341SAndroid Build Coastguard Worker    vldx             vr1,   a1,    a2
4245*c0909341SAndroid Build Coastguard Worker    vldx             vr2,   a1,    t2
4246*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t3
4247*c0909341SAndroid Build Coastguard Worker    vld              vr3,   a1,    0
4248*c0909341SAndroid Build Coastguard Worker    vldx             vr4,   a1,    a2
4249*c0909341SAndroid Build Coastguard Worker    vldx             vr5,   a1,    t2
4250*c0909341SAndroid Build Coastguard Worker    vldx             vr6,   a1,    t3
4251*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t4
4252*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr0,   xr0,   0xd8
4253*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr1,   xr1,   0xd8
4254*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr2,   xr2,   0xd8
4255*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr3,   xr3,   0xd8
4256*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr4,   xr4,   0xd8
4257*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr5,   xr5,   0xd8
4258*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr6,   xr6,   0xd8
4259*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr0,   xr1,   xr0 //01
4260*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr1,   xr2,   xr1 //12
4261*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr2,   xr3,   xr2 //23
4262*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr3,   xr4,   xr3 //34
4263*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr4,   xr5,   xr4 //45
4264*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr5,   xr6,   xr5 //56
4265*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_16w_loop_lasx:
4266*c0909341SAndroid Build Coastguard Worker    vld              vr7,   a1,    0   //7
4267*c0909341SAndroid Build Coastguard Worker    vldx             vr10,  a1,    a2  //8
4268*c0909341SAndroid Build Coastguard Worker    add.d            a1,    a1,    t2
4269*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr7,   xr7,   0xd8
4270*c0909341SAndroid Build Coastguard Worker    xvpermi.d        xr10,  xr10,  0xd8
4271*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr6,   xr7,   xr6 //67
4272*c0909341SAndroid Build Coastguard Worker    xvilvl.b         xr7,   xr10,  xr7 //78
4273*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr9,   xr0,   xr12
4274*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr11,  xr2,   xr13
4275*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr16,  xr4,   xr14
4276*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr17,  xr6,   xr15
4277*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr18,  xr1,   xr12
4278*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr19,  xr3,   xr13
4279*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr20,  xr5,   xr14
4280*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu.b  xr21,  xr7,   xr15
4281*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr9,   xr0,   xr12
4282*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr11,  xr2,   xr13
4283*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr16,  xr4,   xr14
4284*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr17,  xr6,   xr15
4285*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr18,  xr1,   xr12
4286*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr19,  xr3,   xr13
4287*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr20,  xr5,   xr14
4288*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu.b xr21,  xr7,   xr15
4289*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr11
4290*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr16
4291*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr9,   xr9,   xr17
4292*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr11,  xr18,  xr19
4293*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr11,  xr11,  xr20
4294*c0909341SAndroid Build Coastguard Worker    xvadd.h          xr11,  xr11,  xr21
4295*c0909341SAndroid Build Coastguard Worker    xvsrari.h        xr9,   xr9,   2
4296*c0909341SAndroid Build Coastguard Worker    xvsrari.h        xr11,  xr11,  2
4297*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr0,   xr2,   0
4298*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr1,   xr3,   0
4299*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr2,   xr4,   0
4300*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr3,   xr5,   0
4301*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr4,   xr6,   0
4302*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr5,   xr7,   0
4303*c0909341SAndroid Build Coastguard Worker    xvaddi.bu        xr6,   xr10,  0
4304*c0909341SAndroid Build Coastguard Worker    xvst             xr9,   a0,    0
4305*c0909341SAndroid Build Coastguard Worker    xvstx            xr11,  a0,    t7
4306*c0909341SAndroid Build Coastguard Worker    alsl.d           a0,    t7,    a0,  1
4307*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    a4,   -2
4308*c0909341SAndroid Build Coastguard Worker    bnez             a4,    .l_\lable\()v_16w_loop_lasx
4309*c0909341SAndroid Build Coastguard Worker    addi.d           a3,    a3,   -16
4310*c0909341SAndroid Build Coastguard Worker    addi.d           a0,    t0,    32
4311*c0909341SAndroid Build Coastguard Worker    addi.d           t0,    t0,    32
4312*c0909341SAndroid Build Coastguard Worker    addi.d           a1,    t5,    16
4313*c0909341SAndroid Build Coastguard Worker    addi.d           t5,    t5,    16
4314*c0909341SAndroid Build Coastguard Worker    addi.d           a4,    t8,    0
4315*c0909341SAndroid Build Coastguard Worker    bnez             a3,    .l_\lable\()v_16w_loop0_lasx
4316*c0909341SAndroid Build Coastguard Worker.l_\lable\()end_pre_8tap_lasx:
4317*c0909341SAndroid Build Coastguard Worker.endm
4318*c0909341SAndroid Build Coastguard Worker
4319*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_8bpc_lasx
4320*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 0
4321*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 0
4322*c0909341SAndroid Build Coastguard Workerendfunc
4323*c0909341SAndroid Build Coastguard Worker
4324*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_regular_8bpc_lasx
4325*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 1
4326*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 1
4327*c0909341SAndroid Build Coastguard Workerendfunc
4328*c0909341SAndroid Build Coastguard Worker
4329*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_regular_8bpc_lasx
4330*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 2
4331*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 2
4332*c0909341SAndroid Build Coastguard Workerendfunc
4333*c0909341SAndroid Build Coastguard Worker
4334*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_smooth_8bpc_lasx
4335*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 4
4336*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 4
4337*c0909341SAndroid Build Coastguard Workerendfunc
4338*c0909341SAndroid Build Coastguard Worker
4339*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_8bpc_lasx
4340*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 5
4341*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 5
4342*c0909341SAndroid Build Coastguard Workerendfunc
4343*c0909341SAndroid Build Coastguard Worker
4344*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_smooth_8bpc_lasx
4345*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 6
4346*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 6
4347*c0909341SAndroid Build Coastguard Workerendfunc
4348*c0909341SAndroid Build Coastguard Worker
4349*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_sharp_8bpc_lasx
4350*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 8
4351*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 8
4352*c0909341SAndroid Build Coastguard Workerendfunc
4353*c0909341SAndroid Build Coastguard Worker
4354*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_sharp_8bpc_lasx
4355*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 9
4356*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 9
4357*c0909341SAndroid Build Coastguard Workerendfunc
4358*c0909341SAndroid Build Coastguard Worker
4359*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_8bpc_lasx
4360*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 10
4361*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LASX 10
4362*c0909341SAndroid Build Coastguard Workerendfunc
4363*c0909341SAndroid Build Coastguard Worker
4364*c0909341SAndroid Build Coastguard Worker.macro PREP_8TAP_8BPC_LSX lable
4365*c0909341SAndroid Build Coastguard Worker    li.w             t0,     4
4366*c0909341SAndroid Build Coastguard Worker    la.local         t6,     dav1d_mc_subpel_filters
4367*c0909341SAndroid Build Coastguard Worker    la.local         t7,     shufb1
4368*c0909341SAndroid Build Coastguard Worker    vld              vr23,   t7,    0
4369*c0909341SAndroid Build Coastguard Worker    slli.d           t2,     a2,    1  //src_stride*2
4370*c0909341SAndroid Build Coastguard Worker    add.d            t3,     t2,    a2 //src_stride*3
4371*c0909341SAndroid Build Coastguard Worker    slli.d           t4,     t2,    1
4372*c0909341SAndroid Build Coastguard Worker
4373*c0909341SAndroid Build Coastguard Worker    bnez             a5,     .l_\lable\()h_lsx //mx
4374*c0909341SAndroid Build Coastguard Worker    bnez             a6,     .l_\lable\()v_lsx
4375*c0909341SAndroid Build Coastguard Worker
4376*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a3
4377*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
4378*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
4379*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()prep_hv0_jtable_lsx
4380*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   1
4381*c0909341SAndroid Build Coastguard Worker    ld.h             t8,     t1,    0
4382*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t8
4383*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
4384*c0909341SAndroid Build Coastguard Worker    .align   3
4385*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_hv0_jtable_lsx:
4386*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_128w_lsx - .l_\lable\()prep_hv0_jtable_lsx
4387*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_64w_lsx  - .l_\lable\()prep_hv0_jtable_lsx
4388*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_32w_lsx  - .l_\lable\()prep_hv0_jtable_lsx
4389*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_16w_lsx  - .l_\lable\()prep_hv0_jtable_lsx
4390*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_8w_lsx   - .l_\lable\()prep_hv0_jtable_lsx
4391*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()hv0_4w_lsx   - .l_\lable\()prep_hv0_jtable_lsx
4392*c0909341SAndroid Build Coastguard Worker
4393*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_4w_lsx:
4394*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a1,    0
4395*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a1,    a2
4396*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4397*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr0,    vr1,   vr0
4398*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr0,    vr0,   4
4399*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
4400*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    16
4401*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4402*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_4w_lsx
4403*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4404*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_8w_lsx:
4405*c0909341SAndroid Build Coastguard Worker    fld.d            f0,     a1,    0
4406*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,     a1,    a2
4407*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4408*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr0,    vr0,   4
4409*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr1,    vr1,   4
4410*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
4411*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
4412*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    32
4413*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4414*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_8w_lsx
4415*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4416*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_16w_lsx:
4417*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4418*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
4419*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4420*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr2,    vr0,   4
4421*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr4,    vr1,   4
4422*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu      vr3,    vr0
4423*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu      vr5,    vr1
4424*c0909341SAndroid Build Coastguard Worker    vslli.h          vr3,    vr3,   4
4425*c0909341SAndroid Build Coastguard Worker    vslli.h          vr5,    vr5,   4
4426*c0909341SAndroid Build Coastguard Worker    vst              vr2,    a0,    0
4427*c0909341SAndroid Build Coastguard Worker    vst              vr3,    a0,    16
4428*c0909341SAndroid Build Coastguard Worker    vst              vr4,    a0,    32
4429*c0909341SAndroid Build Coastguard Worker    vst              vr5,    a0,    48
4430*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    64
4431*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4432*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_16w_lsx
4433*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4434*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_32w_lsx:
4435*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_64w_lsx:
4436*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_128w_lsx:
4437*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a1,    0
4438*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     a4,    0
4439*c0909341SAndroid Build Coastguard Worker    srli.w           t7,     a3,    4
4440*c0909341SAndroid Build Coastguard Worker    slli.w           t7,     t7,    5
4441*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0
4442*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv0_16_loop_lsx:
4443*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4444*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
4445*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4446*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr2,    vr0,   4
4447*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu    vr3,    vr1,   4
4448*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu      vr0,    vr0
4449*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu      vr1,    vr1
4450*c0909341SAndroid Build Coastguard Worker    vslli.h          vr0,    vr0,   4
4451*c0909341SAndroid Build Coastguard Worker    vslli.h          vr1,    vr1,   4
4452*c0909341SAndroid Build Coastguard Worker    vst              vr2,    a0,    0
4453*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    16
4454*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    t7
4455*c0909341SAndroid Build Coastguard Worker    vst              vr3,    a0,    0
4456*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
4457*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    t7
4458*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4459*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv0_16_loop_lsx
4460*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     t0,    16
4461*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     t0,    16
4462*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    32
4463*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     t8,    32
4464*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     t5,    0
4465*c0909341SAndroid Build Coastguard Worker    addi.d           a3,     a3,    -16
4466*c0909341SAndroid Build Coastguard Worker    bnez             a3,     .l_\lable\()hv0_16_loop_lsx
4467*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4468*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_lsx:
4469*c0909341SAndroid Build Coastguard Worker    bnez             a6,     .l_\lable\()hv_lsx //if(fh) && if (fv)
4470*c0909341SAndroid Build Coastguard Worker
4471*c0909341SAndroid Build Coastguard Worker    andi             t1,     a7,    3
4472*c0909341SAndroid Build Coastguard Worker    blt              t0,     a3,    .l_\lable\()h_idx_fh_lsx
4473*c0909341SAndroid Build Coastguard Worker    andi             t1,     a7,    1
4474*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
4475*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_idx_fh_lsx:
4476*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
4477*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
4478*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a5,    -1
4479*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
4480*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
4481*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t6,    t1 //fh's offset
4482*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr23,   t1,    0
4483*c0909341SAndroid Build Coastguard Worker
4484*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     a1,    -3
4485*c0909341SAndroid Build Coastguard Worker    clz.w            t1,     a3
4486*c0909341SAndroid Build Coastguard Worker    li.w             t5,     24
4487*c0909341SAndroid Build Coastguard Worker    sub.w            t1,     t1,    t5
4488*c0909341SAndroid Build Coastguard Worker    la.local         t5,     .l_\lable\()prep_h_jtable_lsx
4489*c0909341SAndroid Build Coastguard Worker    alsl.d           t1,     t1,    t5,   1
4490*c0909341SAndroid Build Coastguard Worker    ld.h             t8,     t1,    0
4491*c0909341SAndroid Build Coastguard Worker    add.d            t5,     t5,    t8
4492*c0909341SAndroid Build Coastguard Worker    jirl             $r0,    t5,    0
4493*c0909341SAndroid Build Coastguard Worker
4494*c0909341SAndroid Build Coastguard Worker    .align   3
4495*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_h_jtable_lsx:
4496*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_128w_lsx - .l_\lable\()prep_h_jtable_lsx
4497*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_64w_lsx  - .l_\lable\()prep_h_jtable_lsx
4498*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_32w_lsx  - .l_\lable\()prep_h_jtable_lsx
4499*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_16w_lsx  - .l_\lable\()prep_h_jtable_lsx
4500*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_8w_lsx   - .l_\lable\()prep_h_jtable_lsx
4501*c0909341SAndroid Build Coastguard Worker    .hword .l_\lable\()h_4w_lsx   - .l_\lable\()prep_h_jtable_lsx
4502*c0909341SAndroid Build Coastguard Worker
4503*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_4w_lsx:
4504*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     a1,    2
4505*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
4506*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t7,    0
4507*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr23,   vr23,  2
4508*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr23,   vr23,  0
4509*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_4w_loop_lsx:
4510*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4511*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
4512*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4513*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr0,   vr0,   vr7
4514*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr1,    vr1,   vr1,   vr7
4515*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr2,    vr0,   vr23
4516*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr3,    vr1,   vr23
4517*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr2,    vr0,   vr23
4518*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr3,    vr1,   vr23
4519*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr0,    vr2,   vr2
4520*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr1,    vr3,   vr3
4521*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr1,    vr0,   2
4522*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    0
4523*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    16
4524*c0909341SAndroid Build Coastguard Worker    addi.w           a4,     a4,    -2
4525*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()h_4w_loop_lsx
4526*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4527*c0909341SAndroid Build Coastguard Worker
4528*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_8w_lsx:
4529*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr22,   vr23,  0 //fh
4530*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr23,   vr23,  1
4531*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
4532*c0909341SAndroid Build Coastguard Worker    vld              vr6,    t7,    0
4533*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr7,    vr6,   4
4534*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr8,    vr6,   8
4535*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_8w_loop_lsx:
4536*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4537*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
4538*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4539*c0909341SAndroid Build Coastguard Worker    PREP_H_8W        vr0
4540*c0909341SAndroid Build Coastguard Worker    PREP_H_8W        vr1
4541*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
4542*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
4543*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    32
4544*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4545*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()h_8w_loop_lsx
4546*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4547*c0909341SAndroid Build Coastguard Worker
4548*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16w_lsx:
4549*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_32w_lsx:
4550*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_64w_lsx:
4551*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_128w_lsx:
4552*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr22,   vr23,  0 //fh
4553*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr23,   vr23,  1
4554*c0909341SAndroid Build Coastguard Worker    la.local         t7,     subpel_h_shuf1
4555*c0909341SAndroid Build Coastguard Worker    vld              vr6,    t7,    0
4556*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr7,    vr6,   4
4557*c0909341SAndroid Build Coastguard Worker    vaddi.bu         vr8,    vr6,   8
4558*c0909341SAndroid Build Coastguard Worker    srli.w           t7,     a3,    4
4559*c0909341SAndroid Build Coastguard Worker    slli.w           t6,     t7,    5
4560*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16w_loop0_lsx:
4561*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a1,    0 //src
4562*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     a4,    0 //h
4563*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0 //dst
4564*c0909341SAndroid Build Coastguard Worker.l_\lable\()h_16w_loop_lsx:
4565*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4566*c0909341SAndroid Build Coastguard Worker    vld              vr1,    a1,    8
4567*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    a2
4568*c0909341SAndroid Build Coastguard Worker    PREP_H_8W        vr0
4569*c0909341SAndroid Build Coastguard Worker    PREP_H_8W        vr1
4570*c0909341SAndroid Build Coastguard Worker    vst              vr0,    a0,    0
4571*c0909341SAndroid Build Coastguard Worker    vst              vr1,    a0,    16
4572*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    t6
4573*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     t5,    -1
4574*c0909341SAndroid Build Coastguard Worker    bnez             t5,     .l_\lable\()h_16w_loop_lsx
4575*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     t0,    16
4576*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    32
4577*c0909341SAndroid Build Coastguard Worker    addi.w           t7,     t7,    -1
4578*c0909341SAndroid Build Coastguard Worker    bnez             t7,     .l_\lable\()h_16w_loop0_lsx
4579*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4580*c0909341SAndroid Build Coastguard Worker
4581*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_lsx:
4582*c0909341SAndroid Build Coastguard Worker    andi             t1,     a7,    3
4583*c0909341SAndroid Build Coastguard Worker    blt              t0,     a3,    .l_\lable\()hv_idx_fh_lsx
4584*c0909341SAndroid Build Coastguard Worker    andi             t1,     a7,    1
4585*c0909341SAndroid Build Coastguard Worker    addi.w           t1,     t1,    3
4586*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_idx_fh_lsx:
4587*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
4588*c0909341SAndroid Build Coastguard Worker    mul.w            t1,     t1,    t5
4589*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a5,    -1
4590*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
4591*c0909341SAndroid Build Coastguard Worker    add.w            t1,     t1,    t5
4592*c0909341SAndroid Build Coastguard Worker    add.d            t1,     t6,    t1 //fh's offset
4593*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr8,    t1,    0
4594*c0909341SAndroid Build Coastguard Worker    srli.w           a7,     a7,    2
4595*c0909341SAndroid Build Coastguard Worker    blt              t0,     a4,    .l_\lable\()hv_idx_fv_lsx
4596*c0909341SAndroid Build Coastguard Worker    andi             a7,     a7,    1
4597*c0909341SAndroid Build Coastguard Worker    addi.w           a7,     a7,    3
4598*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_idx_fv_lsx:
4599*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
4600*c0909341SAndroid Build Coastguard Worker    mul.w            a7,     a7,    t5
4601*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a6,    -1
4602*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
4603*c0909341SAndroid Build Coastguard Worker    add.w            a7,     a7,    t5
4604*c0909341SAndroid Build Coastguard Worker    add.d            a7,     t6,    a7 //fv's offset
4605*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr9,    a7,    0
4606*c0909341SAndroid Build Coastguard Worker    vsllwil.h.b      vr9,    vr9,   0
4607*c0909341SAndroid Build Coastguard Worker
4608*c0909341SAndroid Build Coastguard Worker    sub.d            a1,     a1,    t3
4609*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     a1,    -3
4610*c0909341SAndroid Build Coastguard Worker    beq              a3,     t0,    .l_\lable\()hv_4w_lsx
4611*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()hv_8w_lsx
4612*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_4w_lsx:
4613*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     a1,    2 //ignore leading 0s
4614*c0909341SAndroid Build Coastguard Worker    vld              vr0,    a1,    0
4615*c0909341SAndroid Build Coastguard Worker    vldx             vr1,    a1,    a2
4616*c0909341SAndroid Build Coastguard Worker    vldx             vr2,    a1,    t2
4617*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t3
4618*c0909341SAndroid Build Coastguard Worker    vld              vr3,    a1,    0
4619*c0909341SAndroid Build Coastguard Worker    vldx             vr4,    a1,    a2
4620*c0909341SAndroid Build Coastguard Worker    vldx             vr5,    a1,    t2
4621*c0909341SAndroid Build Coastguard Worker    vldx             vr6,    a1,    t3
4622*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
4623*c0909341SAndroid Build Coastguard Worker
4624*c0909341SAndroid Build Coastguard Worker    la.local         t1,     subpel_h_shuf1
4625*c0909341SAndroid Build Coastguard Worker    vld              vr7,    t1,    0
4626*c0909341SAndroid Build Coastguard Worker    vbsrl.v          vr8,    vr8,   2
4627*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr8,    vr8,   0
4628*c0909341SAndroid Build Coastguard Worker
4629*c0909341SAndroid Build Coastguard Worker    //fv
4630*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr17,   vr9,   0
4631*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr18,   vr9,   1
4632*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr19,   vr9,   2
4633*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr20,   vr9,   3
4634*c0909341SAndroid Build Coastguard Worker
4635*c0909341SAndroid Build Coastguard Worker    //DAV1D_FILTER_8TAP_RND
4636*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr0,    vr0,   vr0,  vr7
4637*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr1,    vr1,   vr1,  vr7
4638*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr2,    vr2,   vr2,  vr7
4639*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr3,    vr3,   vr3,  vr7
4640*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr4,    vr4,   vr4,  vr7
4641*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr5,    vr5,   vr5,  vr7
4642*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr6,    vr6,   vr6,  vr7
4643*c0909341SAndroid Build Coastguard Worker
4644*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr10,   vr0,   vr8
4645*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr11,   vr1,   vr8
4646*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr2,   vr8
4647*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr3,   vr8
4648*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr4,   vr8
4649*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr5,   vr8
4650*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr16,   vr6,   vr8
4651*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr10,   vr0,   vr8
4652*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr11,   vr1,   vr8
4653*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr2,   vr8
4654*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr3,   vr8
4655*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr4,   vr8
4656*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr5,   vr8
4657*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr16,   vr6,   vr8
4658*c0909341SAndroid Build Coastguard Worker
4659*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr10,   vr10,  vr10
4660*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr11,   vr11,  vr11
4661*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
4662*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr13,   vr13,  vr13
4663*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr14,   vr14,  vr14
4664*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr15,   vr15,  vr15
4665*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr16,   vr16,  vr16
4666*c0909341SAndroid Build Coastguard Worker
4667*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr10,   vr10,  2 //h0
4668*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr11,   vr11,  2 //h1
4669*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr12,   vr12,  2 //h2
4670*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr13,   vr13,  2 //h3
4671*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr14,   vr14,  2 //h4
4672*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr15,   vr15,  2 //h5
4673*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr16,   vr16,  2 //h6
4674*c0909341SAndroid Build Coastguard Worker
4675*c0909341SAndroid Build Coastguard Worker    //h0
4676*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr0,    vr11,  vr10 //01
4677*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr1,    vr13,  vr12 //23
4678*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr2,    vr15,  vr14 //45
4679*c0909341SAndroid Build Coastguard Worker    //h1
4680*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr4,    vr12,  vr11 //12
4681*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr5,    vr14,  vr13 //34
4682*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr6,    vr16,  vr15 //56
4683*c0909341SAndroid Build Coastguard Worker
4684*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_w4_loop_lsx:
4685*c0909341SAndroid Build Coastguard Worker    vld              vr9,    a1,    0
4686*c0909341SAndroid Build Coastguard Worker    vldx             vr10,   a1,    a2
4687*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4688*c0909341SAndroid Build Coastguard Worker
4689*c0909341SAndroid Build Coastguard Worker    //DAV1D_FILTER_8TAP_CLIP
4690*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr9,    vr9,   vr9,  vr7
4691*c0909341SAndroid Build Coastguard Worker    vshuf.b          vr10,   vr10,  vr10, vr7
4692*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr11,   vr9,   vr8
4693*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr10,  vr8
4694*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr11,   vr9,   vr8
4695*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr10,  vr8
4696*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr11,   vr11,  vr11
4697*c0909341SAndroid Build Coastguard Worker    vhaddw.w.h       vr12,   vr12,  vr12
4698*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr11,   vr11,  2 //7h
4699*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr12,   vr12,  2 //h8
4700*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr3,    vr11,  vr16 //67
4701*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr13,   vr12,  vr11 //78
4702*c0909341SAndroid Build Coastguard Worker
4703*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr9,    vr0,   vr17
4704*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr10,   vr1,   vr18
4705*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr14,   vr2,   vr19
4706*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr15,   vr3,   vr20
4707*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr9,    vr0,   vr17
4708*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr10,   vr1,   vr18
4709*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr14,   vr2,   vr19
4710*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr15,   vr3,   vr20
4711*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr9,   vr10
4712*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr16,  vr14
4713*c0909341SAndroid Build Coastguard Worker    vadd.w           vr16,   vr16,  vr15
4714*c0909341SAndroid Build Coastguard Worker
4715*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr9,    vr4,   vr17
4716*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr10,   vr5,   vr18
4717*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr14,   vr6,   vr19
4718*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h      vr15,   vr13,  vr20
4719*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr9,    vr4,   vr17
4720*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr10,   vr5,   vr18
4721*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr14,   vr6,   vr19
4722*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h     vr15,   vr13,  vr20
4723*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr9,   vr10
4724*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr21,  vr14
4725*c0909341SAndroid Build Coastguard Worker    vadd.w           vr21,   vr21,  vr15
4726*c0909341SAndroid Build Coastguard Worker
4727*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w     vr21,   vr16,  6
4728*c0909341SAndroid Build Coastguard Worker    //cache
4729*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr1,   0
4730*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr2,   0
4731*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr3,   0
4732*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr4,    vr5,   0
4733*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr5,    vr6,   0
4734*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr6,    vr13,  0
4735*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr16,   vr12,  0
4736*c0909341SAndroid Build Coastguard Worker
4737*c0909341SAndroid Build Coastguard Worker    vst              vr21,   a0,    0
4738*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    16
4739*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     a4,    -2
4740*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()hv_w4_loop_lsx
4741*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4742*c0909341SAndroid Build Coastguard Worker
4743*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_8w_lsx:
4744*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_16w_lsx:
4745*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_32w_lsx:
4746*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_64w_lsx:
4747*c0909341SAndroid Build Coastguard Worker.l_\lable\()hv_128w_lsx:
4748*c0909341SAndroid Build Coastguard Worker    addi.d          sp,      sp,    -8*8
4749*c0909341SAndroid Build Coastguard Worker    fst.d           f24,     sp,    0
4750*c0909341SAndroid Build Coastguard Worker    fst.d           f25,     sp,    8
4751*c0909341SAndroid Build Coastguard Worker    fst.d           f26,     sp,    16
4752*c0909341SAndroid Build Coastguard Worker    fst.d           f27,     sp,    24
4753*c0909341SAndroid Build Coastguard Worker    fst.d           f28,     sp,    32
4754*c0909341SAndroid Build Coastguard Worker    fst.d           f29,     sp,    40
4755*c0909341SAndroid Build Coastguard Worker    fst.d           f30,     sp,    48
4756*c0909341SAndroid Build Coastguard Worker    fst.d           f31,     sp,    56
4757*c0909341SAndroid Build Coastguard Worker    addi.d          t0,      a1,    0 //src
4758*c0909341SAndroid Build Coastguard Worker    addi.d          t5,      a4,    0 //h
4759*c0909341SAndroid Build Coastguard Worker    addi.d          t8,      a0,    0 //dst
4760*c0909341SAndroid Build Coastguard Worker    slli.w          t6,      a3,    1
4761*c0909341SAndroid Build Coastguard Worker    la.local        t1,      subpel_h_shuf1
4762*c0909341SAndroid Build Coastguard Worker    vld             vr7,     t1,    0
4763*c0909341SAndroid Build Coastguard Worker    vaddi.bu        vr11,    vr7,   4
4764*c0909341SAndroid Build Coastguard Worker    vaddi.bu        vr12,    vr7,   8
4765*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr10,    vr8,   1
4766*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr8,     vr8,   0
4767*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr20,    vr9,   1
4768*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr21,    vr9,   2
4769*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr22,    vr9,   3
4770*c0909341SAndroid Build Coastguard Worker    vreplvei.w      vr9,     vr9,   0
4771*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_hv_8w_loop0_lsx:
4772*c0909341SAndroid Build Coastguard Worker    vld             vr0,     a1,    0
4773*c0909341SAndroid Build Coastguard Worker    vldx            vr1,     a1,    a2
4774*c0909341SAndroid Build Coastguard Worker    vldx            vr2,     a1,    t2
4775*c0909341SAndroid Build Coastguard Worker    add.d           a1,      a1,    t3
4776*c0909341SAndroid Build Coastguard Worker    vld             vr3,     a1,    0
4777*c0909341SAndroid Build Coastguard Worker    vldx            vr4,     a1,    a2
4778*c0909341SAndroid Build Coastguard Worker    vldx            vr5,     a1,    t2
4779*c0909341SAndroid Build Coastguard Worker    vldx            vr6,     a1,    t3
4780*c0909341SAndroid Build Coastguard Worker    add.d           a1,      a1,    t4
4781*c0909341SAndroid Build Coastguard Worker
4782*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr0 //h0
4783*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr1 //h1
4784*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr2 //h2
4785*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr3 //h3
4786*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr4 //h4
4787*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr5 //h5
4788*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr6 //h6
4789*c0909341SAndroid Build Coastguard Worker
4790*c0909341SAndroid Build Coastguard Worker    //h0' low part
4791*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr23,    vr1,   vr0 //01
4792*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr24,    vr3,   vr2 //23
4793*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr25,    vr5,   vr4 //45
4794*c0909341SAndroid Build Coastguard Worker    //h0' high part
4795*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr26,    vr1,   vr0 //01
4796*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr27,    vr3,   vr2 //23
4797*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr28,    vr5,   vr4 //45
4798*c0909341SAndroid Build Coastguard Worker
4799*c0909341SAndroid Build Coastguard Worker    //h1' low part
4800*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr29,    vr2,   vr1 //12
4801*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr30,    vr4,   vr3 //34
4802*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr31,    vr6,   vr5 //56
4803*c0909341SAndroid Build Coastguard Worker    //h1' high part
4804*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr0,     vr2,   vr1 //12
4805*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr1,     vr4,   vr3 //34
4806*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr2,     vr6,   vr5 //56
4807*c0909341SAndroid Build Coastguard Worker
4808*c0909341SAndroid Build Coastguard Worker.l_\lable\()prep_hv_8w_loop_lsx:
4809*c0909341SAndroid Build Coastguard Worker    vld             vr3,     a1,    0
4810*c0909341SAndroid Build Coastguard Worker    vldx            vr4,     a1,    a2
4811*c0909341SAndroid Build Coastguard Worker    add.d           a1,      a1,    t2
4812*c0909341SAndroid Build Coastguard Worker
4813*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr3 //h7
4814*c0909341SAndroid Build Coastguard Worker    FILTER_8TAP_8W  vr4 //h8
4815*c0909341SAndroid Build Coastguard Worker
4816*c0909341SAndroid Build Coastguard Worker    //h0' low part
4817*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr16,    vr3,   vr6 //67 ~low
4818*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr13,    vr23,  vr9
4819*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr24,  vr20
4820*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr25,  vr21
4821*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr17,    vr16,  vr22
4822*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr13,    vr23,  vr9
4823*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr24,  vr20
4824*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr25,  vr21
4825*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,    vr16,  vr22
4826*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr14
4827*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr15
4828*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr17
4829*c0909341SAndroid Build Coastguard Worker    //cache
4830*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr23,    vr24,  0
4831*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr24,    vr25,  0
4832*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr25,    vr16,  0
4833*c0909341SAndroid Build Coastguard Worker
4834*c0909341SAndroid Build Coastguard Worker    //h0' high part
4835*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr17,    vr3,   vr6 //67 ~high
4836*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr26,  vr9
4837*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr27,  vr20
4838*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr28,  vr21
4839*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr18,    vr17,  vr22
4840*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr26,  vr9
4841*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr27,  vr20
4842*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr28,  vr21
4843*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr18,    vr17,  vr22
4844*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr15
4845*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr16
4846*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr18
4847*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w    vr14,    vr13,  6
4848*c0909341SAndroid Build Coastguard Worker    vst             vr14,    a0,    0
4849*c0909341SAndroid Build Coastguard Worker    add.d           a0,      a0,    t6
4850*c0909341SAndroid Build Coastguard Worker    //cache
4851*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr26,    vr27,  0
4852*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr27,    vr28,  0
4853*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr28,    vr17,  0
4854*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr6,     vr4,   0
4855*c0909341SAndroid Build Coastguard Worker
4856*c0909341SAndroid Build Coastguard Worker    vilvl.h         vr5,     vr4,   vr3 //78 ~low
4857*c0909341SAndroid Build Coastguard Worker    vilvh.h         vr4,     vr4,   vr3 //78 ~high
4858*c0909341SAndroid Build Coastguard Worker
4859*c0909341SAndroid Build Coastguard Worker    //h1' low part
4860*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr13,    vr29,  vr9
4861*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr30,  vr20
4862*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr31,  vr21
4863*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr5,   vr22
4864*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr13,    vr29,  vr9
4865*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr30,  vr20
4866*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr31,  vr21
4867*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr5,   vr22
4868*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr14
4869*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr15
4870*c0909341SAndroid Build Coastguard Worker    vadd.w          vr13,    vr13,  vr16
4871*c0909341SAndroid Build Coastguard Worker    //cache
4872*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr29,    vr30,  0
4873*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr30,    vr31,  0
4874*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr31,    vr5,   0
4875*c0909341SAndroid Build Coastguard Worker
4876*c0909341SAndroid Build Coastguard Worker    //h1' high part
4877*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr14,    vr0,   vr9
4878*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr15,    vr1,   vr20
4879*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr16,    vr2,   vr21
4880*c0909341SAndroid Build Coastguard Worker    vmulwev.w.h     vr17,    vr4,   vr22
4881*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr14,    vr0,   vr9
4882*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr15,    vr1,   vr20
4883*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr16,    vr2,   vr21
4884*c0909341SAndroid Build Coastguard Worker    vmaddwod.w.h    vr17,    vr4,   vr22
4885*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr15
4886*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr16
4887*c0909341SAndroid Build Coastguard Worker    vadd.w          vr14,    vr14,  vr17
4888*c0909341SAndroid Build Coastguard Worker    vssrarni.h.w    vr14,    vr13,  6
4889*c0909341SAndroid Build Coastguard Worker    vst             vr14,    a0,    0
4890*c0909341SAndroid Build Coastguard Worker    add.d           a0,      a0,    t6
4891*c0909341SAndroid Build Coastguard Worker    //cache
4892*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr0,     vr1,   0
4893*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr1,     vr2,   0
4894*c0909341SAndroid Build Coastguard Worker    vaddi.hu        vr2,     vr4,   0
4895*c0909341SAndroid Build Coastguard Worker    addi.w          a4,      a4,    -2
4896*c0909341SAndroid Build Coastguard Worker    bnez            a4,      .l_\lable\()prep_hv_8w_loop_lsx
4897*c0909341SAndroid Build Coastguard Worker    addi.d          a1,      t0,    8
4898*c0909341SAndroid Build Coastguard Worker    addi.d          t0,      t0,    8
4899*c0909341SAndroid Build Coastguard Worker    addi.d          a0,      t8,    16
4900*c0909341SAndroid Build Coastguard Worker    addi.d          t8,      t8,    16
4901*c0909341SAndroid Build Coastguard Worker    addi.d          a4,      t5,    0
4902*c0909341SAndroid Build Coastguard Worker    addi.w          a3,      a3,    -8
4903*c0909341SAndroid Build Coastguard Worker    bnez            a3,      .l_\lable\()prep_hv_8w_loop0_lsx
4904*c0909341SAndroid Build Coastguard Worker    fld.d           f24,     sp,    0
4905*c0909341SAndroid Build Coastguard Worker    fld.d           f25,     sp,    8
4906*c0909341SAndroid Build Coastguard Worker    fld.d           f26,     sp,    16
4907*c0909341SAndroid Build Coastguard Worker    fld.d           f27,     sp,    24
4908*c0909341SAndroid Build Coastguard Worker    fld.d           f28,     sp,    32
4909*c0909341SAndroid Build Coastguard Worker    fld.d           f29,     sp,    40
4910*c0909341SAndroid Build Coastguard Worker    fld.d           f30,     sp,    48
4911*c0909341SAndroid Build Coastguard Worker    fld.d           f31,     sp,    56
4912*c0909341SAndroid Build Coastguard Worker    addi.d          sp,      sp,    8*8
4913*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4914*c0909341SAndroid Build Coastguard Worker
4915*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_lsx:
4916*c0909341SAndroid Build Coastguard Worker    srli.w           a7,    a7,     2
4917*c0909341SAndroid Build Coastguard Worker    blt              t0,    a4,     .l_\lable\()v_idx_fv_lsx
4918*c0909341SAndroid Build Coastguard Worker    andi             a7,    a7,     1
4919*c0909341SAndroid Build Coastguard Worker    addi.w           a7,    a7,     3
4920*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_idx_fv_lsx:
4921*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     zero,  120
4922*c0909341SAndroid Build Coastguard Worker    mul.w            a7,     a7,    t5
4923*c0909341SAndroid Build Coastguard Worker    addi.w           t5,     a6,    -1
4924*c0909341SAndroid Build Coastguard Worker    slli.w           t5,     t5,    3
4925*c0909341SAndroid Build Coastguard Worker    add.w            a7,     a7,    t5
4926*c0909341SAndroid Build Coastguard Worker    add.d            a7,     t6,    a7 //fv's offset
4927*c0909341SAndroid Build Coastguard Worker    vldrepl.d        vr8,    a7,    0
4928*c0909341SAndroid Build Coastguard Worker
4929*c0909341SAndroid Build Coastguard Worker    vilvl.h          vr8,    vr8,   vr8
4930*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr9,    vr8,   1
4931*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr10,   vr8,   2
4932*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr11,   vr8,   3
4933*c0909341SAndroid Build Coastguard Worker    vreplvei.w       vr8,    vr8,   0
4934*c0909341SAndroid Build Coastguard Worker
4935*c0909341SAndroid Build Coastguard Worker    sub.d            a1,     a1,    t3
4936*c0909341SAndroid Build Coastguard Worker    beq              a3,     t0,    .l_\lable\()v_4w_lsx
4937*c0909341SAndroid Build Coastguard Worker    blt              t0,     a3,    .l_\lable\()v_8w_lsx
4938*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_4w_lsx:
4939*c0909341SAndroid Build Coastguard Worker    fld.s            f0,     a1,    0
4940*c0909341SAndroid Build Coastguard Worker    fldx.s           f1,     a1,    a2
4941*c0909341SAndroid Build Coastguard Worker    fldx.s           f2,     a1,    t2
4942*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t3
4943*c0909341SAndroid Build Coastguard Worker    fld.s            f3,     a1,    0
4944*c0909341SAndroid Build Coastguard Worker    fldx.s           f4,     a1,    a2
4945*c0909341SAndroid Build Coastguard Worker    fldx.s           f5,     a1,    t2
4946*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a1,    t3
4947*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
4948*c0909341SAndroid Build Coastguard Worker
4949*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr0,    vr1,   vr0
4950*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr1,    vr2,   vr1
4951*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr0,    vr1,   vr0 //0 1 1 2
4952*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr1,    vr3,   vr2
4953*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr2,    vr4,   vr3
4954*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr1,    vr2,   vr1 //2 3 3 4
4955*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr2,    vr5,   vr4
4956*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr3,    vr6,   vr5
4957*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr2,    vr3,   vr2 //4 5 5 6
4958*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_4w_loop_lsx:
4959*c0909341SAndroid Build Coastguard Worker    fld.s            f7,     a1,     0
4960*c0909341SAndroid Build Coastguard Worker
4961*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr3,    vr7,   vr6
4962*c0909341SAndroid Build Coastguard Worker    fldx.s           f6,     a1,    a2
4963*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
4964*c0909341SAndroid Build Coastguard Worker    vilvl.w          vr4,    vr6,   vr7
4965*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr3,    vr4,   vr3 //6 7 7 8
4966*c0909341SAndroid Build Coastguard Worker
4967*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr12,   vr0,   vr8
4968*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr13,   vr1,   vr9
4969*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr2,   vr10
4970*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr3,   vr11
4971*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr12,   vr0,   vr8
4972*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr13,   vr1,   vr9
4973*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr2,   vr10
4974*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr3,   vr11
4975*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr1,   0
4976*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr2,   0
4977*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr3,   0
4978*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr13
4979*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr14
4980*c0909341SAndroid Build Coastguard Worker    vadd.h           vr12,   vr12,  vr15
4981*c0909341SAndroid Build Coastguard Worker
4982*c0909341SAndroid Build Coastguard Worker    vsrari.h         vr12,   vr12,  2
4983*c0909341SAndroid Build Coastguard Worker    vst              vr12,   a0,    0
4984*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     a0,    16
4985*c0909341SAndroid Build Coastguard Worker    addi.w           a4,     a4,    -2
4986*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()v_4w_loop_lsx
4987*c0909341SAndroid Build Coastguard Worker    b                .l_\lable\()end_pre_8tap_lsx
4988*c0909341SAndroid Build Coastguard Worker
4989*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_8w_lsx:
4990*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     a1,    0
4991*c0909341SAndroid Build Coastguard Worker    addi.d           t5,     a4,    0
4992*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     a0,    0
4993*c0909341SAndroid Build Coastguard Worker    slli.w           t6,     a3,    1
4994*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_8w_loop0_lsx:
4995*c0909341SAndroid Build Coastguard Worker    fld.d            f0,     a1,    0
4996*c0909341SAndroid Build Coastguard Worker    fldx.d           f1,     a1,    a2
4997*c0909341SAndroid Build Coastguard Worker    fldx.d           f2,     a1,    t2
4998*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t3
4999*c0909341SAndroid Build Coastguard Worker    fld.d            f3,     a1,    0
5000*c0909341SAndroid Build Coastguard Worker    fldx.d           f4,     a1,    a2
5001*c0909341SAndroid Build Coastguard Worker    fldx.d           f5,     a1,    t2
5002*c0909341SAndroid Build Coastguard Worker    fldx.d           f6,     a1,    t3
5003*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t4
5004*c0909341SAndroid Build Coastguard Worker
5005*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr0,    vr1,   vr0 //0 1
5006*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr1,    vr2,   vr1 //1 2
5007*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr2,    vr3,   vr2 //2 3
5008*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr3,    vr4,   vr3 //3 4
5009*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr4,    vr5,   vr4 //4 5
5010*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr5,    vr6,   vr5 //5 6
5011*c0909341SAndroid Build Coastguard Worker.l_\lable\()v_8w_loop_lsx:
5012*c0909341SAndroid Build Coastguard Worker    fld.d            f7,     a1,    0
5013*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr12,   vr7,   vr6 //6 7
5014*c0909341SAndroid Build Coastguard Worker    fldx.d           f6,     a1,    a2
5015*c0909341SAndroid Build Coastguard Worker    add.d            a1,     a1,    t2
5016*c0909341SAndroid Build Coastguard Worker    vilvl.b          vr13,   vr6,   vr7 //7 8
5017*c0909341SAndroid Build Coastguard Worker
5018*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr14,   vr0,   vr8
5019*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr15,   vr1,   vr8
5020*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr16,   vr2,   vr9
5021*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr17,   vr3,   vr9
5022*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr18,   vr4,   vr10
5023*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr19,   vr5,   vr10
5024*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr20,   vr12,  vr11
5025*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu.b   vr21,   vr13,  vr11
5026*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr14,   vr0,   vr8
5027*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr15,   vr1,   vr8
5028*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr16,   vr2,   vr9
5029*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr17,   vr3,   vr9
5030*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr18,   vr4,   vr10
5031*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr19,   vr5,   vr10
5032*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr20,   vr12,  vr11
5033*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu.b  vr21,   vr13,  vr11
5034*c0909341SAndroid Build Coastguard Worker
5035*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr0,    vr2,   0
5036*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr1,    vr3,   0
5037*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr2,    vr4,   0
5038*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr3,    vr5,   0
5039*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr4,    vr12,  0
5040*c0909341SAndroid Build Coastguard Worker    vaddi.hu         vr5,    vr13,  0
5041*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr16
5042*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr18
5043*c0909341SAndroid Build Coastguard Worker    vadd.h           vr14,   vr14,  vr20
5044*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr17
5045*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr19
5046*c0909341SAndroid Build Coastguard Worker    vadd.h           vr15,   vr15,  vr21
5047*c0909341SAndroid Build Coastguard Worker
5048*c0909341SAndroid Build Coastguard Worker    vsrari.h         vr14,   vr14,  2
5049*c0909341SAndroid Build Coastguard Worker    vsrari.h         vr15,   vr15,  2
5050*c0909341SAndroid Build Coastguard Worker    vst              vr14,   a0,    0
5051*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    t6
5052*c0909341SAndroid Build Coastguard Worker    vst              vr15,   a0,    0
5053*c0909341SAndroid Build Coastguard Worker    add.d            a0,     a0,    t6
5054*c0909341SAndroid Build Coastguard Worker    addi.w           a4,     a4,    -2
5055*c0909341SAndroid Build Coastguard Worker    bnez             a4,     .l_\lable\()v_8w_loop_lsx
5056*c0909341SAndroid Build Coastguard Worker    addi.d           a1,     t0,    8
5057*c0909341SAndroid Build Coastguard Worker    addi.d           t0,     t0,    8
5058*c0909341SAndroid Build Coastguard Worker    addi.d           a0,     t8,    16
5059*c0909341SAndroid Build Coastguard Worker    addi.d           t8,     t8,    16
5060*c0909341SAndroid Build Coastguard Worker    addi.d           a4,     t5,    0
5061*c0909341SAndroid Build Coastguard Worker    addi.d           a3,     a3,    -8
5062*c0909341SAndroid Build Coastguard Worker    bnez             a3,     .l_\lable\()v_8w_loop0_lsx
5063*c0909341SAndroid Build Coastguard Worker.l_\lable\()end_pre_8tap_lsx:
5064*c0909341SAndroid Build Coastguard Worker.endm
5065*c0909341SAndroid Build Coastguard Worker
5066*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_8bpc_lsx
5067*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 0
5068*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 0
5069*c0909341SAndroid Build Coastguard Workerendfunc
5070*c0909341SAndroid Build Coastguard Worker
5071*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_regular_8bpc_lsx
5072*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 1
5073*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 1
5074*c0909341SAndroid Build Coastguard Workerendfunc
5075*c0909341SAndroid Build Coastguard Worker
5076*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_regular_8bpc_lsx
5077*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 2
5078*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 2
5079*c0909341SAndroid Build Coastguard Workerendfunc
5080*c0909341SAndroid Build Coastguard Worker
5081*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_smooth_8bpc_lsx
5082*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 4
5083*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 4
5084*c0909341SAndroid Build Coastguard Workerendfunc
5085*c0909341SAndroid Build Coastguard Worker
5086*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_8bpc_lsx
5087*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 5
5088*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 5
5089*c0909341SAndroid Build Coastguard Workerendfunc
5090*c0909341SAndroid Build Coastguard Worker
5091*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_smooth_8bpc_lsx
5092*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 6
5093*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 6
5094*c0909341SAndroid Build Coastguard Workerendfunc
5095*c0909341SAndroid Build Coastguard Worker
5096*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_regular_sharp_8bpc_lsx
5097*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 8
5098*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 8
5099*c0909341SAndroid Build Coastguard Workerendfunc
5100*c0909341SAndroid Build Coastguard Worker
5101*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_smooth_sharp_8bpc_lsx
5102*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 9
5103*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 9
5104*c0909341SAndroid Build Coastguard Workerendfunc
5105*c0909341SAndroid Build Coastguard Worker
5106*c0909341SAndroid Build Coastguard Workerfunction prep_8tap_sharp_8bpc_lsx
5107*c0909341SAndroid Build Coastguard Worker    addi.w a7, zero, 10
5108*c0909341SAndroid Build Coastguard Worker    PREP_8TAP_8BPC_LSX 10
5109*c0909341SAndroid Build Coastguard Workerendfunc
5110*c0909341SAndroid Build Coastguard Worker
5111*c0909341SAndroid Build Coastguard Worker/*
5112*c0909341SAndroid Build Coastguard Worker * static void blend_lsx(pixel *dst, const ptrdiff_t dst_stride, const pixel *tmp,
5113*c0909341SAndroid Build Coastguard Worker                         const int w, int h, const uint8_t *mask)
5114*c0909341SAndroid Build Coastguard Worker */
5115*c0909341SAndroid Build Coastguard Workerfunction blend_8bpc_lsx
5116*c0909341SAndroid Build Coastguard Worker    addi.d        t8,     zero,    64
5117*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.b  vr23,   t8
5118*c0909341SAndroid Build Coastguard Worker
5119*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a3
5120*c0909341SAndroid Build Coastguard Worker    li.w          t1,     26
5121*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
5122*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .BLEND_LSX_JRTABLE
5123*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
5124*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0  // The jump addresses are relative to JRTABLE
5125*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2 // Get absolute address
5126*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
5127*c0909341SAndroid Build Coastguard Worker
5128*c0909341SAndroid Build Coastguard Worker    .align   3
5129*c0909341SAndroid Build Coastguard Worker.BLEND_LSX_JRTABLE:
5130*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_W32_LSX  - .BLEND_LSX_JRTABLE
5131*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_W16_LSX  - .BLEND_LSX_JRTABLE
5132*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_W8_LSX   - .BLEND_LSX_JRTABLE
5133*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_W4_LSX   - .BLEND_LSX_JRTABLE
5134*c0909341SAndroid Build Coastguard Worker
5135*c0909341SAndroid Build Coastguard Worker.BLEND_W4_LSX:
5136*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5137*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5138*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a5,      0
5139*c0909341SAndroid Build Coastguard Worker
5140*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr1,    vr1,     0
5141*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr4,    vr2,     0
5142*c0909341SAndroid Build Coastguard Worker    vmul.h          vr1,    vr1,     vr4  //b*m
5143*c0909341SAndroid Build Coastguard Worker    vsub.b          vr3,    vr23,    vr2
5144*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr0,    vr0,     0
5145*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr3,    vr3,     0
5146*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr1,    vr0,     vr3
5147*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5148*c0909341SAndroid Build Coastguard Worker
5149*c0909341SAndroid Build Coastguard Worker    vstelm.w        vr1,    a0,      0,   0
5150*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5151*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5152*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      4
5153*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a5,      4
5154*c0909341SAndroid Build Coastguard Worker
5155*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_W4_LSX
5156*c0909341SAndroid Build Coastguard Worker    b              .BLEND_END_LSX
5157*c0909341SAndroid Build Coastguard Worker.BLEND_W8_LSX:
5158*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5159*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5160*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a5,      0
5161*c0909341SAndroid Build Coastguard Worker
5162*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr1,    vr1,     0
5163*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr4,    vr2,     0
5164*c0909341SAndroid Build Coastguard Worker    vmul.h          vr1,    vr1,     vr4  //b*m
5165*c0909341SAndroid Build Coastguard Worker    vsub.b          vr3,    vr23,    vr2
5166*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr0,    vr0,     0
5167*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr3,    vr3,     0
5168*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr1,    vr0,     vr3
5169*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5170*c0909341SAndroid Build Coastguard Worker
5171*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr1,    a0,      0,   0
5172*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5173*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5174*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      8
5175*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a5,      8
5176*c0909341SAndroid Build Coastguard Worker
5177*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_W8_LSX
5178*c0909341SAndroid Build Coastguard Worker    b               .BLEND_END_LSX
5179*c0909341SAndroid Build Coastguard Worker.BLEND_W16_LSX:
5180*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5181*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5182*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a5,      0
5183*c0909341SAndroid Build Coastguard Worker
5184*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr5,    vr1
5185*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr1,    vr1,     0
5186*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr6,    vr2
5187*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr4,    vr2,     0
5188*c0909341SAndroid Build Coastguard Worker    vmul.h          vr1,    vr1,     vr4  //b*m
5189*c0909341SAndroid Build Coastguard Worker    vmul.h          vr5,    vr5,     vr6  //b*m
5190*c0909341SAndroid Build Coastguard Worker    vsub.b          vr3,    vr23,    vr2
5191*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr7,    vr0
5192*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr8,    vr3
5193*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr5,    vr7,     vr8
5194*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr0,    vr0,     0
5195*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr3,    vr3,     0
5196*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr1,    vr0,     vr3
5197*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr1,     6
5198*c0909341SAndroid Build Coastguard Worker
5199*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      0
5200*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5201*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5202*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      16
5203*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a5,      16
5204*c0909341SAndroid Build Coastguard Worker
5205*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_W16_LSX
5206*c0909341SAndroid Build Coastguard Worker    b               .BLEND_END_LSX
5207*c0909341SAndroid Build Coastguard Worker.BLEND_W32_LSX:
5208*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5209*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5210*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a5,      0
5211*c0909341SAndroid Build Coastguard Worker
5212*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr5,    vr1
5213*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr1,    vr1,     0
5214*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr6,    vr2
5215*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr4,    vr2,     0
5216*c0909341SAndroid Build Coastguard Worker    vmul.h          vr1,    vr1,     vr4  //b*m
5217*c0909341SAndroid Build Coastguard Worker    vmul.h          vr5,    vr5,     vr6  //b*m
5218*c0909341SAndroid Build Coastguard Worker    vsub.b          vr3,    vr23,    vr2
5219*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr7,    vr0
5220*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr8,    vr3
5221*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr5,    vr7,     vr8
5222*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr0,    vr0,     0
5223*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr3,    vr3,     0
5224*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr1,    vr0,     vr3
5225*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr1,     6
5226*c0909341SAndroid Build Coastguard Worker
5227*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      0
5228*c0909341SAndroid Build Coastguard Worker
5229*c0909341SAndroid Build Coastguard Worker    /* sencond */
5230*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      16
5231*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      16
5232*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a5,      16
5233*c0909341SAndroid Build Coastguard Worker
5234*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr5,    vr1
5235*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr1,    vr1,     0
5236*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr6,    vr2
5237*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr4,    vr2,     0
5238*c0909341SAndroid Build Coastguard Worker    vmul.h          vr1,    vr1,     vr4  //b*m
5239*c0909341SAndroid Build Coastguard Worker    vmul.h          vr5,    vr5,     vr6  //b*m
5240*c0909341SAndroid Build Coastguard Worker    vsub.b          vr3,    vr23,    vr2
5241*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr7,    vr0
5242*c0909341SAndroid Build Coastguard Worker    vexth.hu.bu     vr8,    vr3
5243*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr5,    vr7,     vr8
5244*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr0,    vr0,     0
5245*c0909341SAndroid Build Coastguard Worker    vsllwil.hu.bu   vr3,    vr3,     0
5246*c0909341SAndroid Build Coastguard Worker    vmadd.h         vr1,    vr0,     vr3
5247*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr1,     6
5248*c0909341SAndroid Build Coastguard Worker
5249*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      16
5250*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5251*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5252*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      32
5253*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a5,      32
5254*c0909341SAndroid Build Coastguard Worker
5255*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_W32_LSX
5256*c0909341SAndroid Build Coastguard Worker.BLEND_END_LSX:
5257*c0909341SAndroid Build Coastguard Worker
5258*c0909341SAndroid Build Coastguard Workerendfunc
5259*c0909341SAndroid Build Coastguard Worker
5260*c0909341SAndroid Build Coastguard Workerconst obmc_masks_la
5261*c0909341SAndroid Build Coastguard Worker/* Unused */
5262*c0909341SAndroid Build Coastguard Worker.byte 0,  0,  0,  0
5263*c0909341SAndroid Build Coastguard Worker/* 2 */
5264*c0909341SAndroid Build Coastguard Worker.byte 45, 19, 64, 0
5265*c0909341SAndroid Build Coastguard Worker/* 4 */
5266*c0909341SAndroid Build Coastguard Worker.byte 39, 25, 50, 14, 59,  5, 64,  0
5267*c0909341SAndroid Build Coastguard Worker/* 8 */
5268*c0909341SAndroid Build Coastguard Worker.byte 36, 28, 42, 22, 48, 16, 53, 11, 57,  7, 61,  3, 64,  0, 64,  0
5269*c0909341SAndroid Build Coastguard Worker/* 16 */
5270*c0909341SAndroid Build Coastguard Worker.byte 34, 30, 37, 27, 40, 24, 43, 21, 46, 18, 49, 15, 52, 12, 54, 10
5271*c0909341SAndroid Build Coastguard Worker.byte 56,  8, 58,  6, 60,  4, 61,  3, 64,  0, 64,  0, 64,  0, 64,  0
5272*c0909341SAndroid Build Coastguard Worker/* 32 */
5273*c0909341SAndroid Build Coastguard Worker.byte 33, 31, 35, 29, 36, 28, 38, 26, 40, 24, 41, 23, 43, 21, 44, 20
5274*c0909341SAndroid Build Coastguard Worker.byte 45, 19, 47, 17, 48, 16, 50, 14, 51, 13, 52, 12, 53, 11, 55,  9
5275*c0909341SAndroid Build Coastguard Worker.byte 56,  8, 57,  7, 58,  6, 59,  5, 60,  4, 60,  4, 61,  3, 62,  2
5276*c0909341SAndroid Build Coastguard Workerendconst
5277*c0909341SAndroid Build Coastguard Worker
5278*c0909341SAndroid Build Coastguard Worker/*
5279*c0909341SAndroid Build Coastguard Worker * static void blend_v_lsx(pixel *dst, const ptrdiff_t dst_stride, const pixel *tmp,
5280*c0909341SAndroid Build Coastguard Worker                           const int w, int h)
5281*c0909341SAndroid Build Coastguard Worker */
5282*c0909341SAndroid Build Coastguard Workerfunction blend_v_8bpc_lsx
5283*c0909341SAndroid Build Coastguard Worker    la.local      t8,     obmc_masks_la
5284*c0909341SAndroid Build Coastguard Worker
5285*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a3
5286*c0909341SAndroid Build Coastguard Worker    li.w          t1,     26
5287*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
5288*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .BLEND_V_LSX_JRTABLE
5289*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
5290*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0  // The jump addresses are relative to JRTABLE
5291*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2 // Get absolute address
5292*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
5293*c0909341SAndroid Build Coastguard Worker
5294*c0909341SAndroid Build Coastguard Worker    .align   3
5295*c0909341SAndroid Build Coastguard Worker.BLEND_V_LSX_JRTABLE:
5296*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W32_LSX  - .BLEND_V_LSX_JRTABLE
5297*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W16_LSX  - .BLEND_V_LSX_JRTABLE
5298*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W8_LSX   - .BLEND_V_LSX_JRTABLE
5299*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W4_LSX   - .BLEND_V_LSX_JRTABLE
5300*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W2_LSX   - .BLEND_V_LSX_JRTABLE
5301*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_V_W2_LSX_1 - .BLEND_V_LSX_JRTABLE  //Instructions must be 4-byte aligned
5302*c0909341SAndroid Build Coastguard Worker
5303*c0909341SAndroid Build Coastguard Worker.BLEND_V_W2_LSX:
5304*c0909341SAndroid Build Coastguard Worker    ld.bu           t6,     t8,      4
5305*c0909341SAndroid Build Coastguard Worker    ld.bu           t7,     t8,      5
5306*c0909341SAndroid Build Coastguard Worker
5307*c0909341SAndroid Build Coastguard Worker.BLEND_V_W2_LSX_1:
5308*c0909341SAndroid Build Coastguard Worker    ld.bu           t0,     a0,      0
5309*c0909341SAndroid Build Coastguard Worker    ld.bu           t1,     a2,      0
5310*c0909341SAndroid Build Coastguard Worker    mul.d           t0,     t0,      t6
5311*c0909341SAndroid Build Coastguard Worker    mul.d           t1,     t1,      t7
5312*c0909341SAndroid Build Coastguard Worker    addi.d          t0,     t0,      32
5313*c0909341SAndroid Build Coastguard Worker    add.d           t0,     t0,      t1
5314*c0909341SAndroid Build Coastguard Worker    srli.d          t0,     t0,      6
5315*c0909341SAndroid Build Coastguard Worker    st.b            t0,     a0,      0
5316*c0909341SAndroid Build Coastguard Worker
5317*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5318*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5319*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      2
5320*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a5,      2
5321*c0909341SAndroid Build Coastguard Worker
5322*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_V_W2_LSX_1
5323*c0909341SAndroid Build Coastguard Worker    b               .BLEND_V_END_LSX
5324*c0909341SAndroid Build Coastguard Worker
5325*c0909341SAndroid Build Coastguard Worker.BLEND_V_W4_LSX:
5326*c0909341SAndroid Build Coastguard Worker    vld             vr20,   t8,      8
5327*c0909341SAndroid Build Coastguard Worker
5328*c0909341SAndroid Build Coastguard Worker.BLEND_V_W4_LSX_1:
5329*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5330*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5331*c0909341SAndroid Build Coastguard Worker
5332*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5333*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5334*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5335*c0909341SAndroid Build Coastguard Worker
5336*c0909341SAndroid Build Coastguard Worker    vstelm.h        vr1,    a0,      0,   0
5337*c0909341SAndroid Build Coastguard Worker    vstelm.b        vr1,    a0,      2,   2
5338*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5339*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5340*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      4
5341*c0909341SAndroid Build Coastguard Worker
5342*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_V_W4_LSX_1
5343*c0909341SAndroid Build Coastguard Worker    b              .BLEND_V_END_LSX
5344*c0909341SAndroid Build Coastguard Worker
5345*c0909341SAndroid Build Coastguard Worker.BLEND_V_W8_LSX:
5346*c0909341SAndroid Build Coastguard Worker    vld             vr20,   t8,      16
5347*c0909341SAndroid Build Coastguard Worker
5348*c0909341SAndroid Build Coastguard Worker.BLEND_V_W8_LSX_1:
5349*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5350*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5351*c0909341SAndroid Build Coastguard Worker
5352*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5353*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5354*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5355*c0909341SAndroid Build Coastguard Worker
5356*c0909341SAndroid Build Coastguard Worker    vstelm.w        vr1,    a0,      0,   0
5357*c0909341SAndroid Build Coastguard Worker    vstelm.h        vr1,    a0,      4,   2
5358*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5359*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5360*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      8
5361*c0909341SAndroid Build Coastguard Worker
5362*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_V_W8_LSX_1
5363*c0909341SAndroid Build Coastguard Worker    b              .BLEND_V_END_LSX
5364*c0909341SAndroid Build Coastguard Worker
5365*c0909341SAndroid Build Coastguard Worker.BLEND_V_W16_LSX:
5366*c0909341SAndroid Build Coastguard Worker    vld             vr20,   t8,      32
5367*c0909341SAndroid Build Coastguard Worker    vld             vr21,   t8,      48
5368*c0909341SAndroid Build Coastguard Worker
5369*c0909341SAndroid Build Coastguard Worker.BLEND_V_W16_LSX_1:
5370*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5371*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5372*c0909341SAndroid Build Coastguard Worker
5373*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr2,    vr1,     vr0
5374*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr3,    vr1,     vr0
5375*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr2,     vr20
5376*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr3,     vr21
5377*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr2,     vr20
5378*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr3,     vr21
5379*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5380*c0909341SAndroid Build Coastguard Worker
5381*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr5,    a0,      0,   0
5382*c0909341SAndroid Build Coastguard Worker    vstelm.w        vr5,    a0,      8,   2
5383*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5384*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5385*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      16
5386*c0909341SAndroid Build Coastguard Worker
5387*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_V_W16_LSX_1
5388*c0909341SAndroid Build Coastguard Worker    b              .BLEND_V_END_LSX
5389*c0909341SAndroid Build Coastguard Worker
5390*c0909341SAndroid Build Coastguard Worker.BLEND_V_W32_LSX:
5391*c0909341SAndroid Build Coastguard Worker    vld             vr20,   t8,      64
5392*c0909341SAndroid Build Coastguard Worker    vld             vr21,   t8,      80
5393*c0909341SAndroid Build Coastguard Worker    vld             vr22,   t8,      96
5394*c0909341SAndroid Build Coastguard Worker
5395*c0909341SAndroid Build Coastguard Worker.BLEND_V_W32_LSX_1:
5396*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5397*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a0,      16
5398*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a2,      0
5399*c0909341SAndroid Build Coastguard Worker    vld             vr3,    a2,      16
5400*c0909341SAndroid Build Coastguard Worker
5401*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr4,    vr2,     vr0
5402*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr7,    vr4,     vr20
5403*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr5,    vr2,     vr0
5404*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr8,    vr5,     vr21
5405*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr6,    vr3,     vr1
5406*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr9,    vr6,     vr22
5407*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr7,    vr4,     vr20
5408*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr8,    vr5,     vr21
5409*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr9,    vr6,     vr22
5410*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr8,    vr7,     6
5411*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr9,    vr9,     6
5412*c0909341SAndroid Build Coastguard Worker
5413*c0909341SAndroid Build Coastguard Worker    vst             vr8,    a0,      0
5414*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr9,    a0,      16,   0
5415*c0909341SAndroid Build Coastguard Worker    addi.w          a4,     a4,      -1
5416*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5417*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      32
5418*c0909341SAndroid Build Coastguard Worker
5419*c0909341SAndroid Build Coastguard Worker    blt             zero,   a4,     .BLEND_V_W32_LSX_1
5420*c0909341SAndroid Build Coastguard Worker
5421*c0909341SAndroid Build Coastguard Worker.BLEND_V_END_LSX:
5422*c0909341SAndroid Build Coastguard Worker
5423*c0909341SAndroid Build Coastguard Workerendfunc
5424*c0909341SAndroid Build Coastguard Worker
5425*c0909341SAndroid Build Coastguard Worker/*
5426*c0909341SAndroid Build Coastguard Worker * static void blend_h_lsx(pixel *dst, const ptrdiff_t dst_stride, const pixel *tmp,
5427*c0909341SAndroid Build Coastguard Worker                           const int w, int h)
5428*c0909341SAndroid Build Coastguard Worker */
5429*c0909341SAndroid Build Coastguard Workerfunction blend_h_8bpc_lsx
5430*c0909341SAndroid Build Coastguard Worker    la.local      t8,     obmc_masks_la
5431*c0909341SAndroid Build Coastguard Worker    alsl.d        t8,     a4,      t8,    1
5432*c0909341SAndroid Build Coastguard Worker    srli.d        t0,     a4,      1
5433*c0909341SAndroid Build Coastguard Worker    srli.d        t1,     a4,      2
5434*c0909341SAndroid Build Coastguard Worker    add.d         a4,     t0,      t1  // h = (h * 3) >> 2;
5435*c0909341SAndroid Build Coastguard Worker    slli.d        a4,     a4,      1
5436*c0909341SAndroid Build Coastguard Worker    add.d         a4,     a4,      t8
5437*c0909341SAndroid Build Coastguard Worker
5438*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a3
5439*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
5440*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
5441*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .BLEND_H_LSX_JRTABLE
5442*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
5443*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0  // The jump addresses are relative to JRTABLE
5444*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2 // Get absolute address
5445*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
5446*c0909341SAndroid Build Coastguard Worker
5447*c0909341SAndroid Build Coastguard Worker    .align   3
5448*c0909341SAndroid Build Coastguard Worker.BLEND_H_LSX_JRTABLE:
5449*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W128_LSX - .BLEND_H_LSX_JRTABLE
5450*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W64_LSX  - .BLEND_H_LSX_JRTABLE
5451*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W32_LSX  - .BLEND_H_LSX_JRTABLE
5452*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W16_LSX  - .BLEND_H_LSX_JRTABLE
5453*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W8_LSX   - .BLEND_H_LSX_JRTABLE
5454*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W4_LSX   - .BLEND_H_LSX_JRTABLE
5455*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W2_LSX   - .BLEND_H_LSX_JRTABLE
5456*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_END_LSX  - .BLEND_H_LSX_JRTABLE  //Instructions must be 4-byte aligned
5457*c0909341SAndroid Build Coastguard Worker
5458*c0909341SAndroid Build Coastguard Worker.BLEND_H_W2_LSX:
5459*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5460*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5461*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5462*c0909341SAndroid Build Coastguard Worker
5463*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5464*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5465*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5466*c0909341SAndroid Build Coastguard Worker
5467*c0909341SAndroid Build Coastguard Worker    vstelm.h        vr1,    a0,      0,   0
5468*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5469*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5470*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      2
5471*c0909341SAndroid Build Coastguard Worker
5472*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W2_LSX
5473*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5474*c0909341SAndroid Build Coastguard Worker
5475*c0909341SAndroid Build Coastguard Worker.BLEND_H_W4_LSX:
5476*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5477*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5478*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5479*c0909341SAndroid Build Coastguard Worker
5480*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5481*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5482*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5483*c0909341SAndroid Build Coastguard Worker
5484*c0909341SAndroid Build Coastguard Worker    vstelm.w        vr1,    a0,      0,   0
5485*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5486*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5487*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      4
5488*c0909341SAndroid Build Coastguard Worker
5489*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W4_LSX
5490*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5491*c0909341SAndroid Build Coastguard Worker
5492*c0909341SAndroid Build Coastguard Worker.BLEND_H_W8_LSX:
5493*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5494*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5495*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5496*c0909341SAndroid Build Coastguard Worker
5497*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5498*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5499*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5500*c0909341SAndroid Build Coastguard Worker
5501*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr1,    a0,      0,   0
5502*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5503*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5504*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      8
5505*c0909341SAndroid Build Coastguard Worker
5506*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W8_LSX
5507*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5508*c0909341SAndroid Build Coastguard Worker
5509*c0909341SAndroid Build Coastguard Worker.BLEND_H_W16_LSX:
5510*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5511*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5512*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5513*c0909341SAndroid Build Coastguard Worker
5514*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr2,    vr1,     vr0
5515*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr3,    vr1,     vr0
5516*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr2,     vr20
5517*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr3,     vr20
5518*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr2,     vr20
5519*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr3,     vr20
5520*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5521*c0909341SAndroid Build Coastguard Worker
5522*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      0
5523*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5524*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5525*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      16
5526*c0909341SAndroid Build Coastguard Worker
5527*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W16_LSX
5528*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5529*c0909341SAndroid Build Coastguard Worker
5530*c0909341SAndroid Build Coastguard Worker.BLEND_H_W32_LSX:
5531*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5532*c0909341SAndroid Build Coastguard Worker
5533*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5534*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a0,      16
5535*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a2,      0
5536*c0909341SAndroid Build Coastguard Worker    vld             vr3,    a2,      16
5537*c0909341SAndroid Build Coastguard Worker
5538*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr4,    vr2,     vr0
5539*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr5,    vr2,     vr0
5540*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr6,    vr3,     vr1
5541*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr3,    vr3,     vr1
5542*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr7,    vr4,     vr20
5543*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr8,    vr5,     vr20
5544*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr9,    vr6,     vr20
5545*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr0,    vr3,     vr20
5546*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr7,    vr4,     vr20
5547*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr8,    vr5,     vr20
5548*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr9,    vr6,     vr20
5549*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr0,    vr3,     vr20
5550*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr8,    vr7,     6
5551*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr0,    vr9,     6
5552*c0909341SAndroid Build Coastguard Worker
5553*c0909341SAndroid Build Coastguard Worker    vst             vr8,    a0,      0
5554*c0909341SAndroid Build Coastguard Worker    vst             vr0,    a0,      16
5555*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5556*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5557*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      32
5558*c0909341SAndroid Build Coastguard Worker
5559*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W32_LSX
5560*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5561*c0909341SAndroid Build Coastguard Worker
5562*c0909341SAndroid Build Coastguard Worker.BLEND_H_W64_LSX:
5563*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5564*c0909341SAndroid Build Coastguard Worker
5565*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5566*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a0,      16
5567*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a0,      32
5568*c0909341SAndroid Build Coastguard Worker    vld             vr3,    a0,      48
5569*c0909341SAndroid Build Coastguard Worker    vld             vr4,    a2,      0
5570*c0909341SAndroid Build Coastguard Worker    vld             vr5,    a2,      16
5571*c0909341SAndroid Build Coastguard Worker    vld             vr6,    a2,      32
5572*c0909341SAndroid Build Coastguard Worker    vld             vr7,    a2,      48
5573*c0909341SAndroid Build Coastguard Worker
5574*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr8,    vr4,     vr0
5575*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr9,    vr4,     vr0
5576*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr10,   vr5,     vr1
5577*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr11,   vr5,     vr1
5578*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr12,   vr6,     vr2
5579*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr13,   vr6,     vr2
5580*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr14,   vr7,     vr3
5581*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr15,   vr7,     vr3
5582*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr0,    vr8,     vr20
5583*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr1,    vr9,     vr20
5584*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr2,    vr10,    vr20
5585*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr3,    vr11,    vr20
5586*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr12,    vr20
5587*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr13,    vr20
5588*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr6,    vr14,    vr20
5589*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr7,    vr15,    vr20
5590*c0909341SAndroid Build Coastguard Worker
5591*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr0,    vr8,     vr20
5592*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr1,    vr9,     vr20
5593*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr2,    vr10,    vr20
5594*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr3,    vr11,    vr20
5595*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr12,    vr20
5596*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr13,    vr20
5597*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr6,    vr14,    vr20
5598*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr7,    vr15,    vr20
5599*c0909341SAndroid Build Coastguard Worker
5600*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr0,     6
5601*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr3,    vr2,     6
5602*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5603*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr7,    vr6,     6
5604*c0909341SAndroid Build Coastguard Worker
5605*c0909341SAndroid Build Coastguard Worker    vst             vr1,    a0,      0
5606*c0909341SAndroid Build Coastguard Worker    vst             vr3,    a0,      16
5607*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      32
5608*c0909341SAndroid Build Coastguard Worker    vst             vr7,    a0,      48
5609*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5610*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5611*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      64
5612*c0909341SAndroid Build Coastguard Worker
5613*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W64_LSX
5614*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5615*c0909341SAndroid Build Coastguard Worker
5616*c0909341SAndroid Build Coastguard Worker.BLEND_H_W128_LSX:
5617*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5618*c0909341SAndroid Build Coastguard Worker
5619*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5620*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a0,      16
5621*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a0,      32
5622*c0909341SAndroid Build Coastguard Worker    vld             vr3,    a0,      48
5623*c0909341SAndroid Build Coastguard Worker    vld             vr4,    a2,      0
5624*c0909341SAndroid Build Coastguard Worker    vld             vr5,    a2,      16
5625*c0909341SAndroid Build Coastguard Worker    vld             vr6,    a2,      32
5626*c0909341SAndroid Build Coastguard Worker    vld             vr7,    a2,      48
5627*c0909341SAndroid Build Coastguard Worker
5628*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr8,    vr4,     vr0
5629*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr9,    vr4,     vr0
5630*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr10,   vr5,     vr1
5631*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr11,   vr5,     vr1
5632*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr12,   vr6,     vr2
5633*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr13,   vr6,     vr2
5634*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr14,   vr7,     vr3
5635*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr15,   vr7,     vr3
5636*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr0,    vr8,     vr20
5637*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr1,    vr9,     vr20
5638*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr2,    vr10,    vr20
5639*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr3,    vr11,    vr20
5640*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr12,    vr20
5641*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr13,    vr20
5642*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr6,    vr14,    vr20
5643*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr7,    vr15,    vr20
5644*c0909341SAndroid Build Coastguard Worker
5645*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr0,    vr8,     vr20
5646*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr1,    vr9,     vr20
5647*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr2,    vr10,    vr20
5648*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr3,    vr11,    vr20
5649*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr12,    vr20
5650*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr13,    vr20
5651*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr6,    vr14,    vr20
5652*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr7,    vr15,    vr20
5653*c0909341SAndroid Build Coastguard Worker
5654*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr0,     6
5655*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr3,    vr2,     6
5656*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5657*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr7,    vr6,     6
5658*c0909341SAndroid Build Coastguard Worker
5659*c0909341SAndroid Build Coastguard Worker    vst             vr1,    a0,      0
5660*c0909341SAndroid Build Coastguard Worker    vst             vr3,    a0,      16
5661*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      32
5662*c0909341SAndroid Build Coastguard Worker    vst             vr7,    a0,      48
5663*c0909341SAndroid Build Coastguard Worker
5664*c0909341SAndroid Build Coastguard Worker    /* second */
5665*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      64
5666*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a0,      80
5667*c0909341SAndroid Build Coastguard Worker    vld             vr2,    a0,      96
5668*c0909341SAndroid Build Coastguard Worker    vld             vr3,    a0,      112
5669*c0909341SAndroid Build Coastguard Worker    vld             vr4,    a2,      64
5670*c0909341SAndroid Build Coastguard Worker    vld             vr5,    a2,      80
5671*c0909341SAndroid Build Coastguard Worker    vld             vr6,    a2,      96
5672*c0909341SAndroid Build Coastguard Worker    vld             vr7,    a2,      112
5673*c0909341SAndroid Build Coastguard Worker
5674*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr8,    vr4,     vr0
5675*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr9,    vr4,     vr0
5676*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr10,   vr5,     vr1
5677*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr11,   vr5,     vr1
5678*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr12,   vr6,     vr2
5679*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr13,   vr6,     vr2
5680*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr14,   vr7,     vr3
5681*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr15,   vr7,     vr3
5682*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr0,    vr8,     vr20
5683*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr1,    vr9,     vr20
5684*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr2,    vr10,    vr20
5685*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr3,    vr11,    vr20
5686*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr12,    vr20
5687*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr13,    vr20
5688*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr6,    vr14,    vr20
5689*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr7,    vr15,    vr20
5690*c0909341SAndroid Build Coastguard Worker
5691*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr0,    vr8,     vr20
5692*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr1,    vr9,     vr20
5693*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr2,    vr10,    vr20
5694*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr3,    vr11,    vr20
5695*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr12,    vr20
5696*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr13,    vr20
5697*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr6,    vr14,    vr20
5698*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr7,    vr15,    vr20
5699*c0909341SAndroid Build Coastguard Worker
5700*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr0,     6
5701*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr3,    vr2,     6
5702*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5703*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr7,    vr6,     6
5704*c0909341SAndroid Build Coastguard Worker
5705*c0909341SAndroid Build Coastguard Worker    vst             vr1,    a0,      64
5706*c0909341SAndroid Build Coastguard Worker    vst             vr3,    a0,      80
5707*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      96
5708*c0909341SAndroid Build Coastguard Worker    vst             vr7,    a0,      112
5709*c0909341SAndroid Build Coastguard Worker
5710*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5711*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5712*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      128
5713*c0909341SAndroid Build Coastguard Worker
5714*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W128_LSX
5715*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5716*c0909341SAndroid Build Coastguard Worker
5717*c0909341SAndroid Build Coastguard Worker.BLEND_H_END_LSX:
5718*c0909341SAndroid Build Coastguard Worker
5719*c0909341SAndroid Build Coastguard Workerendfunc
5720*c0909341SAndroid Build Coastguard Worker
5721*c0909341SAndroid Build Coastguard Worker/*
5722*c0909341SAndroid Build Coastguard Worker * static void blend_h_lsx(pixel *dst, const ptrdiff_t dst_stride, const pixel *tmp,
5723*c0909341SAndroid Build Coastguard Worker                           const int w, int h)
5724*c0909341SAndroid Build Coastguard Worker */
5725*c0909341SAndroid Build Coastguard Workerfunction blend_h_8bpc_lasx
5726*c0909341SAndroid Build Coastguard Worker    la.local      t8,     obmc_masks_la
5727*c0909341SAndroid Build Coastguard Worker    alsl.d        t8,     a4,      t8,    1
5728*c0909341SAndroid Build Coastguard Worker    srli.d        t0,     a4,      1
5729*c0909341SAndroid Build Coastguard Worker    srli.d        t1,     a4,      2
5730*c0909341SAndroid Build Coastguard Worker    add.d         a4,     t0,      t1  // h = (h * 3) >> 2;
5731*c0909341SAndroid Build Coastguard Worker    slli.d        a4,     a4,      1
5732*c0909341SAndroid Build Coastguard Worker    add.d         a4,     a4,      t8
5733*c0909341SAndroid Build Coastguard Worker
5734*c0909341SAndroid Build Coastguard Worker    clz.w         t0,     a3
5735*c0909341SAndroid Build Coastguard Worker    li.w          t1,     24
5736*c0909341SAndroid Build Coastguard Worker    sub.w         t0,     t0,      t1
5737*c0909341SAndroid Build Coastguard Worker    la.local      t1,     .BLEND_H_LASX_JRTABLE
5738*c0909341SAndroid Build Coastguard Worker    alsl.d        t0,     t0,      t1,    1
5739*c0909341SAndroid Build Coastguard Worker    ld.h          t2,     t0,      0  // The jump addresses are relative to JRTABLE
5740*c0909341SAndroid Build Coastguard Worker    add.d         t1,     t1,      t2 // Get absolute address
5741*c0909341SAndroid Build Coastguard Worker    jirl          $r0,    t1,      0
5742*c0909341SAndroid Build Coastguard Worker
5743*c0909341SAndroid Build Coastguard Worker    .align   3
5744*c0909341SAndroid Build Coastguard Worker.BLEND_H_LASX_JRTABLE:
5745*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W128_LASX - .BLEND_H_LASX_JRTABLE
5746*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W64_LASX  - .BLEND_H_LASX_JRTABLE
5747*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W32_LASX  - .BLEND_H_LASX_JRTABLE
5748*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W16_LASX  - .BLEND_H_LASX_JRTABLE
5749*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W8_LASX   - .BLEND_H_LASX_JRTABLE
5750*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W4_LASX   - .BLEND_H_LASX_JRTABLE
5751*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_W2_LASX   - .BLEND_H_LASX_JRTABLE
5752*c0909341SAndroid Build Coastguard Worker    .hword .BLEND_H_END_LASX  - .BLEND_H_LASX_JRTABLE  //Instructions must be 4-byte aligned
5753*c0909341SAndroid Build Coastguard Worker
5754*c0909341SAndroid Build Coastguard Worker.BLEND_H_W2_LASX:
5755*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5756*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5757*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5758*c0909341SAndroid Build Coastguard Worker
5759*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5760*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5761*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5762*c0909341SAndroid Build Coastguard Worker
5763*c0909341SAndroid Build Coastguard Worker    vstelm.h        vr1,    a0,      0,   0
5764*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5765*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5766*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      2
5767*c0909341SAndroid Build Coastguard Worker
5768*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W2_LASX
5769*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5770*c0909341SAndroid Build Coastguard Worker
5771*c0909341SAndroid Build Coastguard Worker.BLEND_H_W4_LASX:
5772*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5773*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5774*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5775*c0909341SAndroid Build Coastguard Worker
5776*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5777*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5778*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5779*c0909341SAndroid Build Coastguard Worker
5780*c0909341SAndroid Build Coastguard Worker    vstelm.w        vr1,    a0,      0,   0
5781*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5782*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5783*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      4
5784*c0909341SAndroid Build Coastguard Worker
5785*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W4_LASX
5786*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5787*c0909341SAndroid Build Coastguard Worker
5788*c0909341SAndroid Build Coastguard Worker.BLEND_H_W8_LASX:
5789*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5790*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5791*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5792*c0909341SAndroid Build Coastguard Worker
5793*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr0,    vr1,     vr0
5794*c0909341SAndroid Build Coastguard Worker    vdp2.h.bu       vr1,    vr0,     vr20
5795*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr1,    vr1,     6
5796*c0909341SAndroid Build Coastguard Worker
5797*c0909341SAndroid Build Coastguard Worker    vstelm.d        vr1,    a0,      0,   0
5798*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5799*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5800*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      8
5801*c0909341SAndroid Build Coastguard Worker
5802*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W8_LASX
5803*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5804*c0909341SAndroid Build Coastguard Worker
5805*c0909341SAndroid Build Coastguard Worker.BLEND_H_W16_LASX:
5806*c0909341SAndroid Build Coastguard Worker    vldrepl.h       vr20,   t8,      0
5807*c0909341SAndroid Build Coastguard Worker    vld             vr0,    a0,      0
5808*c0909341SAndroid Build Coastguard Worker    vld             vr1,    a2,      0
5809*c0909341SAndroid Build Coastguard Worker
5810*c0909341SAndroid Build Coastguard Worker    vilvl.b         vr2,    vr1,     vr0
5811*c0909341SAndroid Build Coastguard Worker    vilvh.b         vr3,    vr1,     vr0
5812*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr4,    vr2,     vr20
5813*c0909341SAndroid Build Coastguard Worker    vmulwev.h.bu    vr5,    vr3,     vr20
5814*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr4,    vr2,     vr20
5815*c0909341SAndroid Build Coastguard Worker    vmaddwod.h.bu   vr5,    vr3,     vr20
5816*c0909341SAndroid Build Coastguard Worker    vssrarni.bu.h   vr5,    vr4,     6
5817*c0909341SAndroid Build Coastguard Worker
5818*c0909341SAndroid Build Coastguard Worker    vst             vr5,    a0,      0
5819*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5820*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5821*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      16
5822*c0909341SAndroid Build Coastguard Worker
5823*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W16_LSX
5824*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LSX
5825*c0909341SAndroid Build Coastguard Worker
5826*c0909341SAndroid Build Coastguard Worker.BLEND_H_W32_LASX:
5827*c0909341SAndroid Build Coastguard Worker    xvldrepl.h      xr20,   t8,      0
5828*c0909341SAndroid Build Coastguard Worker
5829*c0909341SAndroid Build Coastguard Worker    xvld            xr0,    a0,      0
5830*c0909341SAndroid Build Coastguard Worker    xvld            xr1,    a2,      0
5831*c0909341SAndroid Build Coastguard Worker
5832*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr2,    xr1,     xr0
5833*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr3,    xr1,     xr0
5834*c0909341SAndroid Build Coastguard Worker
5835*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr4,    xr2,     xr20
5836*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr5,    xr3,     xr20
5837*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr4,    xr2,     xr20
5838*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr5,    xr3,     xr20
5839*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr5,    xr4,     6
5840*c0909341SAndroid Build Coastguard Worker
5841*c0909341SAndroid Build Coastguard Worker    xvst            xr5,    a0,      0
5842*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5843*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5844*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      32
5845*c0909341SAndroid Build Coastguard Worker
5846*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W32_LASX
5847*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5848*c0909341SAndroid Build Coastguard Worker
5849*c0909341SAndroid Build Coastguard Worker.BLEND_H_W64_LASX:
5850*c0909341SAndroid Build Coastguard Worker    xvldrepl.h      xr20,   t8,      0
5851*c0909341SAndroid Build Coastguard Worker
5852*c0909341SAndroid Build Coastguard Worker    xvld            xr0,    a0,      0
5853*c0909341SAndroid Build Coastguard Worker    xvld            xr1,    a0,      32
5854*c0909341SAndroid Build Coastguard Worker    xvld            xr2,    a2,      0
5855*c0909341SAndroid Build Coastguard Worker    xvld            xr3,    a2,      32
5856*c0909341SAndroid Build Coastguard Worker
5857*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr4,    xr2,     xr0
5858*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr5,    xr2,     xr0
5859*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr6,    xr3,     xr1
5860*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr7,    xr3,     xr1
5861*c0909341SAndroid Build Coastguard Worker
5862*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr0,    xr4,     xr20
5863*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr1,    xr5,     xr20
5864*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr2,    xr6,     xr20
5865*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr3,    xr7,     xr20
5866*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr0,    xr4,     xr20
5867*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr1,    xr5,     xr20
5868*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr2,    xr6,     xr20
5869*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr3,    xr7,     xr20
5870*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr1,    xr0,     6
5871*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr3,    xr2,     6
5872*c0909341SAndroid Build Coastguard Worker
5873*c0909341SAndroid Build Coastguard Worker    xvst            xr1,    a0,      0
5874*c0909341SAndroid Build Coastguard Worker    xvst            xr3,    a0,      32
5875*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5876*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5877*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      64
5878*c0909341SAndroid Build Coastguard Worker
5879*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W64_LASX
5880*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5881*c0909341SAndroid Build Coastguard Worker
5882*c0909341SAndroid Build Coastguard Worker.BLEND_H_W128_LASX:
5883*c0909341SAndroid Build Coastguard Worker    xvldrepl.h      xr20,   t8,      0
5884*c0909341SAndroid Build Coastguard Worker
5885*c0909341SAndroid Build Coastguard Worker    xvld            xr0,    a0,      0
5886*c0909341SAndroid Build Coastguard Worker    xvld            xr1,    a0,      32
5887*c0909341SAndroid Build Coastguard Worker    xvld            xr2,    a0,      64
5888*c0909341SAndroid Build Coastguard Worker    xvld            xr3,    a0,      96
5889*c0909341SAndroid Build Coastguard Worker    xvld            xr4,    a2,      0
5890*c0909341SAndroid Build Coastguard Worker    xvld            xr5,    a2,      32
5891*c0909341SAndroid Build Coastguard Worker    xvld            xr6,    a2,      64
5892*c0909341SAndroid Build Coastguard Worker    xvld            xr7,    a2,      96
5893*c0909341SAndroid Build Coastguard Worker
5894*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr8,    xr4,     xr0
5895*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr9,    xr4,     xr0
5896*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr10,   xr5,     xr1
5897*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr11,   xr5,     xr1
5898*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr12,   xr6,     xr2
5899*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr13,   xr6,     xr2
5900*c0909341SAndroid Build Coastguard Worker    xvilvl.b        xr14,   xr7,     xr3
5901*c0909341SAndroid Build Coastguard Worker    xvilvh.b        xr15,   xr7,     xr3
5902*c0909341SAndroid Build Coastguard Worker
5903*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr0,    xr8,     xr20
5904*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr1,    xr9,     xr20
5905*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr2,    xr10,    xr20
5906*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr3,    xr11,    xr20
5907*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr4,    xr12,    xr20
5908*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr5,    xr13,    xr20
5909*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr6,    xr14,    xr20
5910*c0909341SAndroid Build Coastguard Worker    xvmulwev.h.bu   xr7,    xr15,    xr20
5911*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr0,    xr8,     xr20
5912*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr1,    xr9,     xr20
5913*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr2,    xr10,    xr20
5914*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr3,    xr11,    xr20
5915*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr4,    xr12,    xr20
5916*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr5,    xr13,    xr20
5917*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr6,    xr14,    xr20
5918*c0909341SAndroid Build Coastguard Worker    xvmaddwod.h.bu  xr7,    xr15,    xr20
5919*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr1,    xr0,     6
5920*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr3,    xr2,     6
5921*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr5,    xr4,     6
5922*c0909341SAndroid Build Coastguard Worker    xvssrarni.bu.h  xr7,    xr6,     6
5923*c0909341SAndroid Build Coastguard Worker
5924*c0909341SAndroid Build Coastguard Worker    xvst            xr1,    a0,      0
5925*c0909341SAndroid Build Coastguard Worker    xvst            xr3,    a0,      32
5926*c0909341SAndroid Build Coastguard Worker    xvst            xr5,    a0,      64
5927*c0909341SAndroid Build Coastguard Worker    xvst            xr7,    a0,      96
5928*c0909341SAndroid Build Coastguard Worker    addi.d          t8,     t8,      2
5929*c0909341SAndroid Build Coastguard Worker    add.d           a0,     a0,      a1
5930*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     a2,      128
5931*c0909341SAndroid Build Coastguard Worker
5932*c0909341SAndroid Build Coastguard Worker    blt             t8,     a4,     .BLEND_H_W128_LASX
5933*c0909341SAndroid Build Coastguard Worker    b               .BLEND_H_END_LASX
5934*c0909341SAndroid Build Coastguard Worker
5935*c0909341SAndroid Build Coastguard Worker.BLEND_H_END_LASX:
5936*c0909341SAndroid Build Coastguard Worker
5937*c0909341SAndroid Build Coastguard Workerendfunc
5938*c0909341SAndroid Build Coastguard Worker
5939*c0909341SAndroid Build Coastguard Worker/*
5940*c0909341SAndroid Build Coastguard Worker *  a1=16 | a2=8 | a3=4
5941*c0909341SAndroid Build Coastguard Worker *  temp reg: a4
5942*c0909341SAndroid Build Coastguard Worker */
5943*c0909341SAndroid Build Coastguard Worker.macro PIXEL_COPY_LSX _dst, _src, _size
5944*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a1,     8f
5945*c0909341SAndroid Build Coastguard Worker16:
5946*c0909341SAndroid Build Coastguard Worker    vld             vr0,     \_src,  0
5947*c0909341SAndroid Build Coastguard Worker    vst             vr0,     \_dst,  0
5948*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -16
5949*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  16
5950*c0909341SAndroid Build Coastguard Worker    addi.d          \_src,   \_src,  16
5951*c0909341SAndroid Build Coastguard Worker    blt             a1,      \_size, 16b
5952*c0909341SAndroid Build Coastguard Worker8:
5953*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a2,     14f
5954*c0909341SAndroid Build Coastguard Worker    ld.d            a4,      \_src,  0
5955*c0909341SAndroid Build Coastguard Worker    st.d            a4,      \_dst,  0
5956*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -8
5957*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  8
5958*c0909341SAndroid Build Coastguard Worker    addi.d          \_src,   \_src,  8
5959*c0909341SAndroid Build Coastguard Worker14:
5960*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a3,     11f
5961*c0909341SAndroid Build Coastguard Worker    ld.w            a4,      \_src,  0
5962*c0909341SAndroid Build Coastguard Worker    st.w            a4,      \_dst,  0
5963*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -4
5964*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  4
5965*c0909341SAndroid Build Coastguard Worker    addi.d          \_src,   \_src,  4
5966*c0909341SAndroid Build Coastguard Worker11:
5967*c0909341SAndroid Build Coastguard Worker    beqz            \_size,  110f
5968*c0909341SAndroid Build Coastguard Worker111:
5969*c0909341SAndroid Build Coastguard Worker    ld.b            a4,      \_src,  0
5970*c0909341SAndroid Build Coastguard Worker    st.b            a4,      \_dst,  0
5971*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -1
5972*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  1
5973*c0909341SAndroid Build Coastguard Worker    addi.d          \_src,   \_src,  1
5974*c0909341SAndroid Build Coastguard Worker    bnez            \_size,  111b
5975*c0909341SAndroid Build Coastguard Worker110:
5976*c0909341SAndroid Build Coastguard Worker.endm
5977*c0909341SAndroid Build Coastguard Worker
5978*c0909341SAndroid Build Coastguard Worker/*
5979*c0909341SAndroid Build Coastguard Worker *  a1=16 | a2=8 | a3=4
5980*c0909341SAndroid Build Coastguard Worker */
5981*c0909341SAndroid Build Coastguard Worker.macro PIXEL_SET_LSX _dst, _vsrc, _size
5982*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a1,     8f
5983*c0909341SAndroid Build Coastguard Worker16:
5984*c0909341SAndroid Build Coastguard Worker    vst             \_vsrc,  \_dst,  0
5985*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -16
5986*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  16
5987*c0909341SAndroid Build Coastguard Worker    blt             a1,      \_size, 16b
5988*c0909341SAndroid Build Coastguard Worker8:
5989*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a2,     14f
5990*c0909341SAndroid Build Coastguard Worker    vstelm.d        \_vsrc,  \_dst,  0,   0
5991*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -8
5992*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  8
5993*c0909341SAndroid Build Coastguard Worker14:
5994*c0909341SAndroid Build Coastguard Worker    blt             \_size,  a3,     11f
5995*c0909341SAndroid Build Coastguard Worker    vstelm.w        \_vsrc,  \_dst,  0,   0
5996*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -4
5997*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  4
5998*c0909341SAndroid Build Coastguard Worker11:
5999*c0909341SAndroid Build Coastguard Worker    beqz            \_size,  110f
6000*c0909341SAndroid Build Coastguard Worker111:
6001*c0909341SAndroid Build Coastguard Worker    vstelm.b        \_vsrc,  \_dst,  0,   0
6002*c0909341SAndroid Build Coastguard Worker    addi.d          \_size,  \_size, -1
6003*c0909341SAndroid Build Coastguard Worker    addi.d          \_dst,   \_dst,  1
6004*c0909341SAndroid Build Coastguard Worker    bnez            \_size,  111b
6005*c0909341SAndroid Build Coastguard Worker110:
6006*c0909341SAndroid Build Coastguard Worker.endm
6007*c0909341SAndroid Build Coastguard Worker
6008*c0909341SAndroid Build Coastguard Worker/*
6009*c0909341SAndroid Build Coastguard Worker *  temp reg: a4 a5 t2 t3 vr0
6010*c0909341SAndroid Build Coastguard Worker */
6011*c0909341SAndroid Build Coastguard Worker.macro DEGE_LOOP need_left, need_right
6012*c0909341SAndroid Build Coastguard Worker0:
6013*c0909341SAndroid Build Coastguard Worker    addi.d          t2,      t6,     0   // dst
6014*c0909341SAndroid Build Coastguard Worker    addi.d          t3,      t7,     0   // src
6015*c0909341SAndroid Build Coastguard Worker.if \need_left
6016*c0909341SAndroid Build Coastguard Worker    vldrepl.b       vr0,     t3,     0
6017*c0909341SAndroid Build Coastguard Worker    addi.d          a5,      t0,     0
6018*c0909341SAndroid Build Coastguard Worker    PIXEL_SET_LSX t2, vr0, a5
6019*c0909341SAndroid Build Coastguard Worker.endif
6020*c0909341SAndroid Build Coastguard Worker
6021*c0909341SAndroid Build Coastguard Worker    addi.d          a5,      t4,     0
6022*c0909341SAndroid Build Coastguard Worker    PIXEL_COPY_LSX t2, t3, a5
6023*c0909341SAndroid Build Coastguard Worker
6024*c0909341SAndroid Build Coastguard Worker.if \need_right
6025*c0909341SAndroid Build Coastguard Worker    vldrepl.b       vr0,     t3,     -1
6026*c0909341SAndroid Build Coastguard Worker    addi.d          a5,      t1,     0
6027*c0909341SAndroid Build Coastguard Worker    PIXEL_SET_LSX t2, vr0, a5
6028*c0909341SAndroid Build Coastguard Worker.endif
6029*c0909341SAndroid Build Coastguard Worker
6030*c0909341SAndroid Build Coastguard Worker    addi.d          t5,      t5,     -1
6031*c0909341SAndroid Build Coastguard Worker    add.d           t7,      t7,     t8
6032*c0909341SAndroid Build Coastguard Worker    add.d           t6,      t6,     a7
6033*c0909341SAndroid Build Coastguard Worker    bnez            t5,      0b
6034*c0909341SAndroid Build Coastguard Worker.endm
6035*c0909341SAndroid Build Coastguard Worker
6036*c0909341SAndroid Build Coastguard Worker/*
6037*c0909341SAndroid Build Coastguard Worker * static void emu_edge_c(const intptr_t bw, const intptr_t bh,
6038*c0909341SAndroid Build Coastguard Worker *                        const intptr_t iw, const intptr_t ih,
6039*c0909341SAndroid Build Coastguard Worker *                        const intptr_t x, const intptr_t y,
6040*c0909341SAndroid Build Coastguard Worker *                        pixel *dst, const ptrdiff_t dst_stride,
6041*c0909341SAndroid Build Coastguard Worker *                        const pixel *ref, const ptrdiff_t ref_stride)
6042*c0909341SAndroid Build Coastguard Worker */
6043*c0909341SAndroid Build Coastguard Workerfunction emu_edge_8bpc_lsx
6044*c0909341SAndroid Build Coastguard Worker    vxor.v          vr23,   vr23,    vr23   // zero
6045*c0909341SAndroid Build Coastguard Worker    addi.d          t0,     a3,      -1     // ih - 1
6046*c0909341SAndroid Build Coastguard Worker    addi.d          t1,     a2,      -1     // iw - 1
6047*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w    vr22,   t0
6048*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.w     vr22,   t1,        1
6049*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w    vr0,    a5
6050*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.w     vr0,    a4,        1     // [0] - h | [1] - w
6051*c0909341SAndroid Build Coastguard Worker
6052*c0909341SAndroid Build Coastguard Worker    vclip.w         vr2,    vr0,      vr23,    vr22
6053*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t0,     vr2,      0
6054*c0909341SAndroid Build Coastguard Worker    ld.d            t2,     sp,       0
6055*c0909341SAndroid Build Coastguard Worker    ld.d            t8,     sp,       8     // ref_stride
6056*c0909341SAndroid Build Coastguard Worker    mul.w           t0,     t0,       t8
6057*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t1,     vr2,      1
6058*c0909341SAndroid Build Coastguard Worker    add.d           t2,     t2,       t1
6059*c0909341SAndroid Build Coastguard Worker    add.d           t7,     t0,       t2    // ref
6060*c0909341SAndroid Build Coastguard Worker
6061*c0909341SAndroid Build Coastguard Worker    addi.d          t0,     a0,       -1     // bw - 1
6062*c0909341SAndroid Build Coastguard Worker    addi.d          t1,     a1,       -1     // bh - 1
6063*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w    vr21,   t0
6064*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w    vr22,   t1
6065*c0909341SAndroid Build Coastguard Worker    vilvl.d         vr21,   vr22,      vr21
6066*c0909341SAndroid Build Coastguard Worker    sub.d           t2,     zero,      a4    // -x
6067*c0909341SAndroid Build Coastguard Worker    add.d           t3,     a0,        a4
6068*c0909341SAndroid Build Coastguard Worker    sub.d           t3,     t3,        a2    // x + bw - iw
6069*c0909341SAndroid Build Coastguard Worker    sub.d           t4,     zero,      a5    // -y
6070*c0909341SAndroid Build Coastguard Worker    add.d           t5,     a1,        a5
6071*c0909341SAndroid Build Coastguard Worker    sub.d           t5,     t5,        a3    // y + bh - ih
6072*c0909341SAndroid Build Coastguard Worker    vreplgr2vr.w    vr0,    t2
6073*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.w     vr0,    t3,        1
6074*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.w     vr0,    t4,        2
6075*c0909341SAndroid Build Coastguard Worker    vinsgr2vr.w     vr0,    t5,        3
6076*c0909341SAndroid Build Coastguard Worker    vclip.w         vr2,    vr0,       vr23,    vr21
6077*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t0,     vr2,       0     // left_ext
6078*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t1,     vr2,       1     // right_ext
6079*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t2,     vr2,       2     // top_ext
6080*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t3,     vr2,       3     // bottom_ext
6081*c0909341SAndroid Build Coastguard Worker
6082*c0909341SAndroid Build Coastguard Worker    mul.w           t6,     t2,        a7
6083*c0909341SAndroid Build Coastguard Worker    add.d           t4,     t0,        t1
6084*c0909341SAndroid Build Coastguard Worker    add.d           t5,     t2,        t3
6085*c0909341SAndroid Build Coastguard Worker    sub.d           t4,     a0,        t4    // center_w
6086*c0909341SAndroid Build Coastguard Worker    sub.d           t5,     a1,        t5    // center_h
6087*c0909341SAndroid Build Coastguard Worker
6088*c0909341SAndroid Build Coastguard Worker    addi.d          a1,     zero,      16
6089*c0909341SAndroid Build Coastguard Worker    addi.d          a2,     zero,      8
6090*c0909341SAndroid Build Coastguard Worker    addi.d          a3,     zero,      4
6091*c0909341SAndroid Build Coastguard Worker    add.d           t6,     t6,        a6    // blk
6092*c0909341SAndroid Build Coastguard Worker
6093*c0909341SAndroid Build Coastguard Worker    beqz            t0,     2f
6094*c0909341SAndroid Build Coastguard Worker    // need_left
6095*c0909341SAndroid Build Coastguard Worker    beqz            t1,     3f
6096*c0909341SAndroid Build Coastguard Worker    // need_left + need_right
6097*c0909341SAndroid Build Coastguard Worker    DEGE_LOOP       1,   1
6098*c0909341SAndroid Build Coastguard Worker    b               5f
6099*c0909341SAndroid Build Coastguard Worker
6100*c0909341SAndroid Build Coastguard Worker2:
6101*c0909341SAndroid Build Coastguard Worker    // !need_left
6102*c0909341SAndroid Build Coastguard Worker    beqz            t1,     4f
6103*c0909341SAndroid Build Coastguard Worker    // !need_left + need_right
6104*c0909341SAndroid Build Coastguard Worker    DEGE_LOOP       0,   1
6105*c0909341SAndroid Build Coastguard Worker    b               5f
6106*c0909341SAndroid Build Coastguard Worker
6107*c0909341SAndroid Build Coastguard Worker3:
6108*c0909341SAndroid Build Coastguard Worker    // need_left + !need_right
6109*c0909341SAndroid Build Coastguard Worker    DEGE_LOOP       1,   0
6110*c0909341SAndroid Build Coastguard Worker    b               5f
6111*c0909341SAndroid Build Coastguard Worker
6112*c0909341SAndroid Build Coastguard Worker4:
6113*c0909341SAndroid Build Coastguard Worker    // !need_left + !need_right
6114*c0909341SAndroid Build Coastguard Worker    DEGE_LOOP       0,   0
6115*c0909341SAndroid Build Coastguard Worker
6116*c0909341SAndroid Build Coastguard Worker5:
6117*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t2,     vr2,       2     // top_ext
6118*c0909341SAndroid Build Coastguard Worker    vpickve2gr.w    t3,     vr2,       3     // bottom_ext
6119*c0909341SAndroid Build Coastguard Worker    sub.d           t7,     a7,        a0    // dst_stride - bw
6120*c0909341SAndroid Build Coastguard Worker    mul.w           t8,     t2,        a7
6121*c0909341SAndroid Build Coastguard Worker
6122*c0909341SAndroid Build Coastguard Worker    beqz            t3,     2f
6123*c0909341SAndroid Build Coastguard Worker    // need_bottom
6124*c0909341SAndroid Build Coastguard Worker    sub.d           t0,     t6,        a7    //  &dst[-PXSTRIDE(dst_stride)]
6125*c0909341SAndroid Build Coastguard Worker1:
6126*c0909341SAndroid Build Coastguard Worker    addi.d          t1,     t0,        0
6127*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a0,        0
6128*c0909341SAndroid Build Coastguard Worker    PIXEL_COPY_LSX t6, t1, a5
6129*c0909341SAndroid Build Coastguard Worker    add.d           t6,     t6,        t7
6130*c0909341SAndroid Build Coastguard Worker    addi.d          t3,     t3,   -1
6131*c0909341SAndroid Build Coastguard Worker    bnez            t3,     1b
6132*c0909341SAndroid Build Coastguard Worker2:
6133*c0909341SAndroid Build Coastguard Worker    beqz            t2,     3f
6134*c0909341SAndroid Build Coastguard Worker    // need_top
6135*c0909341SAndroid Build Coastguard Worker    add.d           t8,     t8,        a6    // blk
6136*c0909341SAndroid Build Coastguard Worker1:
6137*c0909341SAndroid Build Coastguard Worker    addi.d          t1,     t8,        0
6138*c0909341SAndroid Build Coastguard Worker    addi.d          a5,     a0,        0
6139*c0909341SAndroid Build Coastguard Worker    PIXEL_COPY_LSX a6, t1, a5
6140*c0909341SAndroid Build Coastguard Worker    add.d           a6,     a6,        t7
6141*c0909341SAndroid Build Coastguard Worker    addi.d          t2,     t2,   -1
6142*c0909341SAndroid Build Coastguard Worker    bnez            t2,     1b
6143*c0909341SAndroid Build Coastguard Worker3:
6144*c0909341SAndroid Build Coastguard Worker
6145*c0909341SAndroid Build Coastguard Workerendfunc
6146