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