xref: /aosp_15_r20/external/libavc/common/arm/ih264_padding_neon.s (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1*495ae853SAndroid Build Coastguard Worker@/******************************************************************************
2*495ae853SAndroid Build Coastguard Worker@ *
3*495ae853SAndroid Build Coastguard Worker@ * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker@ *
5*495ae853SAndroid Build Coastguard Worker@ * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker@ * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker@ * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker@ *
9*495ae853SAndroid Build Coastguard Worker@ * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker@ *
11*495ae853SAndroid Build Coastguard Worker@ * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker@ * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker@ * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker@ * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker@ *
17*495ae853SAndroid Build Coastguard Worker@ *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker@*/
20*495ae853SAndroid Build Coastguard Worker@*
21*495ae853SAndroid Build Coastguard Worker@ *******************************************************************************
22*495ae853SAndroid Build Coastguard Worker@ * @file
23*495ae853SAndroid Build Coastguard Worker@ *  ih264_padding_neon.s
24*495ae853SAndroid Build Coastguard Worker@ *
25*495ae853SAndroid Build Coastguard Worker@ * @brief
26*495ae853SAndroid Build Coastguard Worker@ *  Contains function definitions padding
27*495ae853SAndroid Build Coastguard Worker@ *
28*495ae853SAndroid Build Coastguard Worker@ * @author
29*495ae853SAndroid Build Coastguard Worker@ *  Ittiam
30*495ae853SAndroid Build Coastguard Worker@ *
31*495ae853SAndroid Build Coastguard Worker@ * @par List of Functions:
32*495ae853SAndroid Build Coastguard Worker@ *  - ih264_pad_top_a9q()
33*495ae853SAndroid Build Coastguard Worker@ *  - ih264_pad_left_luma_a9q()
34*495ae853SAndroid Build Coastguard Worker@ *  - ih264_pad_left_chroma_a9q()
35*495ae853SAndroid Build Coastguard Worker@ *  - ih264_pad_right_luma_a9q()
36*495ae853SAndroid Build Coastguard Worker@ *  - ih264_pad_right_chroma_a9q()
37*495ae853SAndroid Build Coastguard Worker@ *
38*495ae853SAndroid Build Coastguard Worker@ * @remarks
39*495ae853SAndroid Build Coastguard Worker@ *  None
40*495ae853SAndroid Build Coastguard Worker@ *
41*495ae853SAndroid Build Coastguard Worker@ *******************************************************************************
42*495ae853SAndroid Build Coastguard Worker@*
43*495ae853SAndroid Build Coastguard Worker
44*495ae853SAndroid Build Coastguard Worker
45*495ae853SAndroid Build Coastguard Worker@**
46*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
47*495ae853SAndroid Build Coastguard Worker@*
48*495ae853SAndroid Build Coastguard Worker@* @brief pad at the top of a 2d array
49*495ae853SAndroid Build Coastguard Worker@*
50*495ae853SAndroid Build Coastguard Worker@* @par Description:
51*495ae853SAndroid Build Coastguard Worker@*  The top row of a 2d array is replicated for pad_size times at the top
52*495ae853SAndroid Build Coastguard Worker@*
53*495ae853SAndroid Build Coastguard Worker@* @param[in] pu1_src
54*495ae853SAndroid Build Coastguard Worker@*  UWORD8 pointer to the source
55*495ae853SAndroid Build Coastguard Worker@*
56*495ae853SAndroid Build Coastguard Worker@* @param[in] src_strd
57*495ae853SAndroid Build Coastguard Worker@*  integer source stride
58*495ae853SAndroid Build Coastguard Worker@*
59*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
60*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
61*495ae853SAndroid Build Coastguard Worker@*
62*495ae853SAndroid Build Coastguard Worker@* @param[in] pad_size
63*495ae853SAndroid Build Coastguard Worker@*  integer -padding size of the array
64*495ae853SAndroid Build Coastguard Worker@*
65*495ae853SAndroid Build Coastguard Worker@* @returns none
66*495ae853SAndroid Build Coastguard Worker@*
67*495ae853SAndroid Build Coastguard Worker@* @remarks none
68*495ae853SAndroid Build Coastguard Worker@*
69*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
70*495ae853SAndroid Build Coastguard Worker@*
71*495ae853SAndroid Build Coastguard Worker@void ih264_pad_top(UWORD8 *pu1_src,
72*495ae853SAndroid Build Coastguard Worker@                   WORD32 src_strd,
73*495ae853SAndroid Build Coastguard Worker@                   WORD32 wd,
74*495ae853SAndroid Build Coastguard Worker@                   WORD32 pad_size)
75*495ae853SAndroid Build Coastguard Worker@**************Variables Vs Registers*************************
76*495ae853SAndroid Build Coastguard Worker@   r0 => *pu1_src
77*495ae853SAndroid Build Coastguard Worker@   r1 => src_strd
78*495ae853SAndroid Build Coastguard Worker@   r2 => wd
79*495ae853SAndroid Build Coastguard Worker@   r3 => pad_size
80*495ae853SAndroid Build Coastguard Worker
81*495ae853SAndroid Build Coastguard Worker.text
82*495ae853SAndroid Build Coastguard Worker.p2align 2
83*495ae853SAndroid Build Coastguard Worker
84*495ae853SAndroid Build Coastguard Worker    .global ih264_pad_top_a9q
85*495ae853SAndroid Build Coastguard Worker
86*495ae853SAndroid Build Coastguard Workerih264_pad_top_a9q:
87*495ae853SAndroid Build Coastguard Worker
88*495ae853SAndroid Build Coastguard Worker    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
89*495ae853SAndroid Build Coastguard Worker
90*495ae853SAndroid Build Coastguard Worker    sub           r5, r0, r1
91*495ae853SAndroid Build Coastguard Worker    neg           r6, r1
92*495ae853SAndroid Build Coastguard Worker
93*495ae853SAndroid Build Coastguard Workerloop_neon_memcpy_mul_16:
94*495ae853SAndroid Build Coastguard Worker    @ Load 16 bytes
95*495ae853SAndroid Build Coastguard Worker    vld1.8        {d0, d1}, [r0]!
96*495ae853SAndroid Build Coastguard Worker    mov           r4, r5
97*495ae853SAndroid Build Coastguard Worker    mov           r7, r3
98*495ae853SAndroid Build Coastguard Worker    add           r5, r5, #16
99*495ae853SAndroid Build Coastguard Worker
100*495ae853SAndroid Build Coastguard Workerloop_neon_pad_top:
101*495ae853SAndroid Build Coastguard Worker    vst1.8        {d0, d1}, [r4], r6
102*495ae853SAndroid Build Coastguard Worker    subs          r7, r7, #1
103*495ae853SAndroid Build Coastguard Worker    bne           loop_neon_pad_top
104*495ae853SAndroid Build Coastguard Worker
105*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #16
106*495ae853SAndroid Build Coastguard Worker    bne           loop_neon_memcpy_mul_16
107*495ae853SAndroid Build Coastguard Worker
108*495ae853SAndroid Build Coastguard Worker    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
109*495ae853SAndroid Build Coastguard Worker
110*495ae853SAndroid Build Coastguard Worker
111*495ae853SAndroid Build Coastguard Worker
112*495ae853SAndroid Build Coastguard Worker
113*495ae853SAndroid Build Coastguard Worker@**
114*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
115*495ae853SAndroid Build Coastguard Worker@*
116*495ae853SAndroid Build Coastguard Worker@* @brief
117*495ae853SAndroid Build Coastguard Worker@*   Padding (luma block) at the left of a 2d array
118*495ae853SAndroid Build Coastguard Worker@*
119*495ae853SAndroid Build Coastguard Worker@* @par Description:
120*495ae853SAndroid Build Coastguard Worker@*   The left column of a 2d array is replicated for pad_size times at the left
121*495ae853SAndroid Build Coastguard Worker@*
122*495ae853SAndroid Build Coastguard Worker@*
123*495ae853SAndroid Build Coastguard Worker@* @param[in] pu1_src
124*495ae853SAndroid Build Coastguard Worker@*  UWORD8 pointer to the source
125*495ae853SAndroid Build Coastguard Worker@*
126*495ae853SAndroid Build Coastguard Worker@* @param[in] src_strd
127*495ae853SAndroid Build Coastguard Worker@*  integer source stride
128*495ae853SAndroid Build Coastguard Worker@*
129*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
130*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
131*495ae853SAndroid Build Coastguard Worker@*
132*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
133*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
134*495ae853SAndroid Build Coastguard Worker@*
135*495ae853SAndroid Build Coastguard Worker@* @param[in] pad_size
136*495ae853SAndroid Build Coastguard Worker@*  integer -padding size of the array
137*495ae853SAndroid Build Coastguard Worker@*
138*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
139*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
140*495ae853SAndroid Build Coastguard Worker@*
141*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
142*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
143*495ae853SAndroid Build Coastguard Worker@*
144*495ae853SAndroid Build Coastguard Worker@* @returns
145*495ae853SAndroid Build Coastguard Worker@*
146*495ae853SAndroid Build Coastguard Worker@* @remarks
147*495ae853SAndroid Build Coastguard Worker@*  None
148*495ae853SAndroid Build Coastguard Worker@*
149*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
150*495ae853SAndroid Build Coastguard Worker@*
151*495ae853SAndroid Build Coastguard Worker@#if PAD_LEFT_LUMA == C
152*495ae853SAndroid Build Coastguard Worker@void ih264_pad_left_luma(UWORD8 *pu1_src,
153*495ae853SAndroid Build Coastguard Worker@                        WORD32 src_strd,
154*495ae853SAndroid Build Coastguard Worker@                        WORD32 ht,
155*495ae853SAndroid Build Coastguard Worker@                        WORD32 pad_size)
156*495ae853SAndroid Build Coastguard Worker@**************Variables Vs Registers*************************
157*495ae853SAndroid Build Coastguard Worker@   r0 => *pu1_src
158*495ae853SAndroid Build Coastguard Worker@   r1 => src_strd
159*495ae853SAndroid Build Coastguard Worker@   r2 => ht
160*495ae853SAndroid Build Coastguard Worker@   r3 => pad_size
161*495ae853SAndroid Build Coastguard Worker
162*495ae853SAndroid Build Coastguard Worker
163*495ae853SAndroid Build Coastguard Worker
164*495ae853SAndroid Build Coastguard Worker    .global ih264_pad_left_luma_a9q
165*495ae853SAndroid Build Coastguard Worker
166*495ae853SAndroid Build Coastguard Workerih264_pad_left_luma_a9q:
167*495ae853SAndroid Build Coastguard Worker
168*495ae853SAndroid Build Coastguard Worker    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
169*495ae853SAndroid Build Coastguard Worker
170*495ae853SAndroid Build Coastguard Worker
171*495ae853SAndroid Build Coastguard Worker    sub           r4, r0, r3
172*495ae853SAndroid Build Coastguard Worker    sub           r6, r1, #16
173*495ae853SAndroid Build Coastguard Worker    subs          r5, r3, #16
174*495ae853SAndroid Build Coastguard Worker    bne           loop_32
175*495ae853SAndroid Build Coastguard Workerloop_16:                                @  /*hard coded for width=16  ,height =8,16*/
176*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
177*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
178*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
179*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
180*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r1        @ 16 bytes store
181*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
182*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r1        @ 16 bytes store
183*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
184*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
185*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
186*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r1        @ 16 bytes store
187*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
188*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r1        @ 16 bytes store
189*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
190*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
191*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
192*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r1        @ 16 bytes store
193*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
194*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
195*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r1        @ 16 bytes store
196*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
197*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
198*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #8
199*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r1        @ 16 bytes store
200*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r1        @ 16 bytes store
201*495ae853SAndroid Build Coastguard Worker    bne           loop_16
202*495ae853SAndroid Build Coastguard Worker    b             end_func
203*495ae853SAndroid Build Coastguard Worker
204*495ae853SAndroid Build Coastguard Workerloop_32:                                @  /*hard coded for width=32 ,height =8,16*/
205*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
206*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
207*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
208*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
209*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
210*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
211*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6
212*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
213*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
214*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
215*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
216*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
217*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
218*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
219*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
220*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
221*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
222*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
223*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
224*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
225*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
226*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
227*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6        @ 16 bytes store
228*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
229*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
230*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
231*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
232*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
233*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
234*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
235*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #8
236*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
237*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
238*495ae853SAndroid Build Coastguard Worker    bne           loop_32
239*495ae853SAndroid Build Coastguard Worker
240*495ae853SAndroid Build Coastguard Worker
241*495ae853SAndroid Build Coastguard Worker
242*495ae853SAndroid Build Coastguard Workerend_func:
243*495ae853SAndroid Build Coastguard Worker    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
244*495ae853SAndroid Build Coastguard Worker
245*495ae853SAndroid Build Coastguard Worker
246*495ae853SAndroid Build Coastguard Worker
247*495ae853SAndroid Build Coastguard Worker
248*495ae853SAndroid Build Coastguard Worker
249*495ae853SAndroid Build Coastguard Worker@**
250*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
251*495ae853SAndroid Build Coastguard Worker@*
252*495ae853SAndroid Build Coastguard Worker@* @brief
253*495ae853SAndroid Build Coastguard Worker@*   Padding (chroma block) at the left of a 2d array
254*495ae853SAndroid Build Coastguard Worker@*
255*495ae853SAndroid Build Coastguard Worker@* @par Description:
256*495ae853SAndroid Build Coastguard Worker@*   The left column of a 2d array is replicated for pad_size times at the left
257*495ae853SAndroid Build Coastguard Worker@*
258*495ae853SAndroid Build Coastguard Worker@*
259*495ae853SAndroid Build Coastguard Worker@* @param[in] pu1_src
260*495ae853SAndroid Build Coastguard Worker@*  UWORD8 pointer to the source
261*495ae853SAndroid Build Coastguard Worker@*
262*495ae853SAndroid Build Coastguard Worker@* @param[in] src_strd
263*495ae853SAndroid Build Coastguard Worker@*  integer source stride
264*495ae853SAndroid Build Coastguard Worker@*
265*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
266*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
267*495ae853SAndroid Build Coastguard Worker@*
268*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
269*495ae853SAndroid Build Coastguard Worker@*  integer width of the array (each colour component)
270*495ae853SAndroid Build Coastguard Worker@*
271*495ae853SAndroid Build Coastguard Worker@* @param[in] pad_size
272*495ae853SAndroid Build Coastguard Worker@*  integer -padding size of the array
273*495ae853SAndroid Build Coastguard Worker@*
274*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
275*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
276*495ae853SAndroid Build Coastguard Worker@*
277*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
278*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
279*495ae853SAndroid Build Coastguard Worker@*
280*495ae853SAndroid Build Coastguard Worker@* @returns
281*495ae853SAndroid Build Coastguard Worker@*
282*495ae853SAndroid Build Coastguard Worker@* @remarks
283*495ae853SAndroid Build Coastguard Worker@*  None
284*495ae853SAndroid Build Coastguard Worker@*
285*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
286*495ae853SAndroid Build Coastguard Worker@*
287*495ae853SAndroid Build Coastguard Worker@#if PAD_LEFT_CHROMA == C
288*495ae853SAndroid Build Coastguard Worker@void ih264_pad_left_chroma(UWORD8 *pu1_src,
289*495ae853SAndroid Build Coastguard Worker@                            WORD32 src_strd,
290*495ae853SAndroid Build Coastguard Worker@                            WORD32 ht,
291*495ae853SAndroid Build Coastguard Worker@                            WORD32 pad_size)
292*495ae853SAndroid Build Coastguard Worker@{
293*495ae853SAndroid Build Coastguard Worker@   r0 => *pu1_src
294*495ae853SAndroid Build Coastguard Worker@   r1 => src_strd
295*495ae853SAndroid Build Coastguard Worker@   r2 => ht
296*495ae853SAndroid Build Coastguard Worker@   r3 => pad_size
297*495ae853SAndroid Build Coastguard Worker
298*495ae853SAndroid Build Coastguard Worker
299*495ae853SAndroid Build Coastguard Worker
300*495ae853SAndroid Build Coastguard Worker    .global ih264_pad_left_chroma_a9q
301*495ae853SAndroid Build Coastguard Worker
302*495ae853SAndroid Build Coastguard Workerih264_pad_left_chroma_a9q:
303*495ae853SAndroid Build Coastguard Worker
304*495ae853SAndroid Build Coastguard Worker    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
305*495ae853SAndroid Build Coastguard Worker
306*495ae853SAndroid Build Coastguard Worker    sub           r4, r0, r3
307*495ae853SAndroid Build Coastguard Worker    sub           r6, r1, #16
308*495ae853SAndroid Build Coastguard Worker
309*495ae853SAndroid Build Coastguard Worker
310*495ae853SAndroid Build Coastguard Workerloop_32_l_c:                            @  /*hard coded for width=32  ,height =4,8,12*/
311*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
312*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
313*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
314*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
315*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
316*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
317*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6        @ 16 bytes store
318*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
319*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
320*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
321*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
322*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
323*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
324*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
325*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #4
326*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
327*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
328*495ae853SAndroid Build Coastguard Worker
329*495ae853SAndroid Build Coastguard Worker
330*495ae853SAndroid Build Coastguard Worker    beq           end_func_l_c          @/* Branching when ht=4*/
331*495ae853SAndroid Build Coastguard Worker
332*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
333*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
334*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
335*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
336*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
337*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
338*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6
339*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
340*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
341*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
342*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
343*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
344*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
345*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
346*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #4
347*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
348*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
349*495ae853SAndroid Build Coastguard Worker
350*495ae853SAndroid Build Coastguard Worker    beq           end_func_l_c          @/* Branching when ht=8*/
351*495ae853SAndroid Build Coastguard Worker    bne           loop_32_l_c
352*495ae853SAndroid Build Coastguard Worker
353*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
354*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
355*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
356*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
357*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
358*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
359*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6
360*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
361*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
362*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
363*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
364*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
365*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
366*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
367*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
368*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
369*495ae853SAndroid Build Coastguard Worker
370*495ae853SAndroid Build Coastguard Workerend_func_l_c:
371*495ae853SAndroid Build Coastguard Worker    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
372*495ae853SAndroid Build Coastguard Worker
373*495ae853SAndroid Build Coastguard Worker
374*495ae853SAndroid Build Coastguard Worker
375*495ae853SAndroid Build Coastguard Worker
376*495ae853SAndroid Build Coastguard Worker
377*495ae853SAndroid Build Coastguard Worker@**
378*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
379*495ae853SAndroid Build Coastguard Worker@*
380*495ae853SAndroid Build Coastguard Worker@* @brief
381*495ae853SAndroid Build Coastguard Worker@* Padding (luma block) at the right of a 2d array
382*495ae853SAndroid Build Coastguard Worker@*
383*495ae853SAndroid Build Coastguard Worker@* @par Description:
384*495ae853SAndroid Build Coastguard Worker@* The right column of a 2d array is replicated for pad_size times at the right
385*495ae853SAndroid Build Coastguard Worker@*
386*495ae853SAndroid Build Coastguard Worker@*
387*495ae853SAndroid Build Coastguard Worker@* @param[in] pu1_src
388*495ae853SAndroid Build Coastguard Worker@*  UWORD8 pointer to the source
389*495ae853SAndroid Build Coastguard Worker@*
390*495ae853SAndroid Build Coastguard Worker@* @param[in] src_strd
391*495ae853SAndroid Build Coastguard Worker@*  integer source stride
392*495ae853SAndroid Build Coastguard Worker@*
393*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
394*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
395*495ae853SAndroid Build Coastguard Worker@*
396*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
397*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
398*495ae853SAndroid Build Coastguard Worker@*
399*495ae853SAndroid Build Coastguard Worker@* @param[in] pad_size
400*495ae853SAndroid Build Coastguard Worker@*  integer -padding size of the array
401*495ae853SAndroid Build Coastguard Worker@*
402*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
403*495ae853SAndroid Build Coastguard Worker@*  integer height of the array
404*495ae853SAndroid Build Coastguard Worker@*
405*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
406*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
407*495ae853SAndroid Build Coastguard Worker@*
408*495ae853SAndroid Build Coastguard Worker@* @returns
409*495ae853SAndroid Build Coastguard Worker@*
410*495ae853SAndroid Build Coastguard Worker@* @remarks
411*495ae853SAndroid Build Coastguard Worker@*  None
412*495ae853SAndroid Build Coastguard Worker@*
413*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
414*495ae853SAndroid Build Coastguard Worker@*
415*495ae853SAndroid Build Coastguard Worker@#if PAD_RIGHT_LUMA == C
416*495ae853SAndroid Build Coastguard Worker@void ih264_pad_right_luma(UWORD8 *pu1_src,
417*495ae853SAndroid Build Coastguard Worker@                        WORD32 src_strd,
418*495ae853SAndroid Build Coastguard Worker@                        WORD32 ht,
419*495ae853SAndroid Build Coastguard Worker@                        WORD32 pad_size)
420*495ae853SAndroid Build Coastguard Worker@{
421*495ae853SAndroid Build Coastguard Worker@    WORD32 row;
422*495ae853SAndroid Build Coastguard Worker@
423*495ae853SAndroid Build Coastguard Worker@    for(row = 0; row < ht; row++)
424*495ae853SAndroid Build Coastguard Worker@    {
425*495ae853SAndroid Build Coastguard Worker@        memset(pu1_src, *(pu1_src -1), pad_size);
426*495ae853SAndroid Build Coastguard Worker@
427*495ae853SAndroid Build Coastguard Worker@        pu1_src += src_strd;
428*495ae853SAndroid Build Coastguard Worker@    }
429*495ae853SAndroid Build Coastguard Worker@}
430*495ae853SAndroid Build Coastguard Worker@
431*495ae853SAndroid Build Coastguard Worker@   r0 => *pu1_src
432*495ae853SAndroid Build Coastguard Worker@   r1 => src_strd
433*495ae853SAndroid Build Coastguard Worker@   r2 => ht
434*495ae853SAndroid Build Coastguard Worker@   r3 => pad_size
435*495ae853SAndroid Build Coastguard Worker
436*495ae853SAndroid Build Coastguard Worker
437*495ae853SAndroid Build Coastguard Worker
438*495ae853SAndroid Build Coastguard Worker    .global ih264_pad_right_luma_a9q
439*495ae853SAndroid Build Coastguard Worker
440*495ae853SAndroid Build Coastguard Workerih264_pad_right_luma_a9q:
441*495ae853SAndroid Build Coastguard Worker
442*495ae853SAndroid Build Coastguard Worker    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
443*495ae853SAndroid Build Coastguard Worker
444*495ae853SAndroid Build Coastguard Worker    mov           r4, r0
445*495ae853SAndroid Build Coastguard Worker    sub           r6, r1, #16
446*495ae853SAndroid Build Coastguard Worker    sub           r0, r0, #1
447*495ae853SAndroid Build Coastguard Worker    subs          r5, r3, #16
448*495ae853SAndroid Build Coastguard Worker    bne           loop_32
449*495ae853SAndroid Build Coastguard Workerloop_16_r: @  /*hard coded for width=16  ,height =8,16*/
450*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
451*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
452*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
453*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
454*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r1        @ 16 bytes store
455*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
456*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r1        @ 16 bytes store
457*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
458*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
459*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
460*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r1        @ 16 bytes store
461*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
462*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r1        @ 16 bytes store
463*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
464*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
465*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
466*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r1        @ 16 bytes store
467*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
468*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
469*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r1        @ 16 bytes store
470*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
471*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
472*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #8
473*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r1        @ 16 bytes store
474*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r1        @ 16 bytes store
475*495ae853SAndroid Build Coastguard Worker    bne           loop_16_r
476*495ae853SAndroid Build Coastguard Worker    b             end_func_r
477*495ae853SAndroid Build Coastguard Worker
478*495ae853SAndroid Build Coastguard Workerloop_32_r:                              @  /*hard coded for width=32  ,height =8,16*/
479*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
480*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
481*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
482*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
483*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
484*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
485*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6
486*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
487*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
488*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
489*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
490*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
491*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
492*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
493*495ae853SAndroid Build Coastguard Worker    ldrb          r8, [r0], r1
494*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
495*495ae853SAndroid Build Coastguard Worker    ldrb          r9, [r0], r1
496*495ae853SAndroid Build Coastguard Worker    vdup.u8       q0, r8
497*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
498*495ae853SAndroid Build Coastguard Worker    ldrb          r10, [r0], r1
499*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
500*495ae853SAndroid Build Coastguard Worker    vdup.u8       q1, r9
501*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6        @ 16 bytes store
502*495ae853SAndroid Build Coastguard Worker    ldrb          r11, [r0], r1
503*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
504*495ae853SAndroid Build Coastguard Worker    vdup.u8       q2, r10
505*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
506*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
507*495ae853SAndroid Build Coastguard Worker    vdup.u8       q3, r11
508*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
509*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #8
510*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
511*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
512*495ae853SAndroid Build Coastguard Worker    bne           loop_32_r
513*495ae853SAndroid Build Coastguard Worker
514*495ae853SAndroid Build Coastguard Worker
515*495ae853SAndroid Build Coastguard Worker
516*495ae853SAndroid Build Coastguard Workerend_func_r:
517*495ae853SAndroid Build Coastguard Worker    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
518*495ae853SAndroid Build Coastguard Worker
519*495ae853SAndroid Build Coastguard Worker
520*495ae853SAndroid Build Coastguard Worker
521*495ae853SAndroid Build Coastguard Worker
522*495ae853SAndroid Build Coastguard Worker
523*495ae853SAndroid Build Coastguard Worker@**
524*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
525*495ae853SAndroid Build Coastguard Worker@*
526*495ae853SAndroid Build Coastguard Worker@* @brief
527*495ae853SAndroid Build Coastguard Worker@;* Padding (chroma block) at the right of a 2d array
528*495ae853SAndroid Build Coastguard Worker@*
529*495ae853SAndroid Build Coastguard Worker@* @par Description:
530*495ae853SAndroid Build Coastguard Worker@* The right column of a 2d array is replicated for pad_size times at the right
531*495ae853SAndroid Build Coastguard Worker@*
532*495ae853SAndroid Build Coastguard Worker@*
533*495ae853SAndroid Build Coastguard Worker@* @param[in] pu1_src
534*495ae853SAndroid Build Coastguard Worker@;*  UWORD8 pointer to the source
535*495ae853SAndroid Build Coastguard Worker@*
536*495ae853SAndroid Build Coastguard Worker@* @param[in] src_strd
537*495ae853SAndroid Build Coastguard Worker@*  integer source stride
538*495ae853SAndroid Build Coastguard Worker@*
539*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
540*495ae853SAndroid Build Coastguard Worker@;*  integer height of the array
541*495ae853SAndroid Build Coastguard Worker@*
542*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
543*495ae853SAndroid Build Coastguard Worker@*  integer width of the array (each colour component)
544*495ae853SAndroid Build Coastguard Worker@*
545*495ae853SAndroid Build Coastguard Worker@* @param[in] pad_size
546*495ae853SAndroid Build Coastguard Worker@*  integer -padding size of the array
547*495ae853SAndroid Build Coastguard Worker@*
548*495ae853SAndroid Build Coastguard Worker@* @param[in] ht
549*495ae853SAndroid Build Coastguard Worker@;*  integer height of the array
550*495ae853SAndroid Build Coastguard Worker@*
551*495ae853SAndroid Build Coastguard Worker@* @param[in] wd
552*495ae853SAndroid Build Coastguard Worker@*  integer width of the array
553*495ae853SAndroid Build Coastguard Worker@*
554*495ae853SAndroid Build Coastguard Worker@* @returns
555*495ae853SAndroid Build Coastguard Worker@*
556*495ae853SAndroid Build Coastguard Worker@* @remarks
557*495ae853SAndroid Build Coastguard Worker@*  None
558*495ae853SAndroid Build Coastguard Worker@*
559*495ae853SAndroid Build Coastguard Worker@*******************************************************************************
560*495ae853SAndroid Build Coastguard Worker@*
561*495ae853SAndroid Build Coastguard Worker@#if PAD_RIGHT_CHROMA == C
562*495ae853SAndroid Build Coastguard Worker@void ih264_pad_right_chroma(UWORD8 *pu1_src,
563*495ae853SAndroid Build Coastguard Worker@                        WORD32 src_strd,
564*495ae853SAndroid Build Coastguard Worker@                        WORD32 ht,
565*495ae853SAndroid Build Coastguard Worker@                        WORD32 pad_size)
566*495ae853SAndroid Build Coastguard Worker@   r0 => *pu1_src
567*495ae853SAndroid Build Coastguard Worker@   r1 => src_strd
568*495ae853SAndroid Build Coastguard Worker@   r2 => ht
569*495ae853SAndroid Build Coastguard Worker@   r3 => pad_size
570*495ae853SAndroid Build Coastguard Worker
571*495ae853SAndroid Build Coastguard Worker
572*495ae853SAndroid Build Coastguard Worker
573*495ae853SAndroid Build Coastguard Worker    .global ih264_pad_right_chroma_a9q
574*495ae853SAndroid Build Coastguard Worker
575*495ae853SAndroid Build Coastguard Workerih264_pad_right_chroma_a9q:
576*495ae853SAndroid Build Coastguard Worker
577*495ae853SAndroid Build Coastguard Worker    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
578*495ae853SAndroid Build Coastguard Worker
579*495ae853SAndroid Build Coastguard Worker    mov           r4, r0
580*495ae853SAndroid Build Coastguard Worker    sub           r6, r1, #16
581*495ae853SAndroid Build Coastguard Worker    sub           r0, r0, #2
582*495ae853SAndroid Build Coastguard Workerloop_32_r_c: @  /*hard coded for width=32 ,height =8,4*/
583*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
584*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
585*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
586*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
587*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
588*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
589*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6
590*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
591*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
592*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
593*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #4
594*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
595*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
596*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
597*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
598*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
599*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
600*495ae853SAndroid Build Coastguard Worker
601*495ae853SAndroid Build Coastguard Worker    beq           end_func_r_c          @/* Branching when ht=4*/
602*495ae853SAndroid Build Coastguard Worker
603*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
604*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
605*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
606*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
607*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
608*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
609*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6        @ 16 bytes store
610*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
611*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
612*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
613*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
614*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
615*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
616*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
617*495ae853SAndroid Build Coastguard Worker    subs          r2, r2, #4
618*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
619*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
620*495ae853SAndroid Build Coastguard Worker
621*495ae853SAndroid Build Coastguard Worker    beq           end_func_r_c          @/* Branching when ht=8*/
622*495ae853SAndroid Build Coastguard Worker    bne           loop_32_r_c
623*495ae853SAndroid Build Coastguard Worker
624*495ae853SAndroid Build Coastguard Worker    ldrh          r8, [r0], r1
625*495ae853SAndroid Build Coastguard Worker    vdup.u16      q0, r8
626*495ae853SAndroid Build Coastguard Worker    ldrh          r9, [r0], r1
627*495ae853SAndroid Build Coastguard Worker    ldrh          r10, [r0], r1
628*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4]!           @ 16 bytes store
629*495ae853SAndroid Build Coastguard Worker    vdup.u16      q1, r9
630*495ae853SAndroid Build Coastguard Worker    vst1.8        {q0}, [r4], r6        @ 16 bytes store
631*495ae853SAndroid Build Coastguard Worker    ldrh          r11, [r0], r1
632*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4]!           @ 16 bytes store
633*495ae853SAndroid Build Coastguard Worker    vdup.u16      q2, r10
634*495ae853SAndroid Build Coastguard Worker    vst1.8        {q1}, [r4], r6        @ 16 bytes store
635*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4]!           @ 16 bytes store
636*495ae853SAndroid Build Coastguard Worker    vdup.u16      q3, r11
637*495ae853SAndroid Build Coastguard Worker    vst1.8        {q2}, [r4], r6        @ 16 bytes store
638*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4]!           @ 16 bytes store
639*495ae853SAndroid Build Coastguard Worker    vst1.8        {q3}, [r4], r6        @ 16 bytes store
640*495ae853SAndroid Build Coastguard Worker
641*495ae853SAndroid Build Coastguard Workerend_func_r_c:
642*495ae853SAndroid Build Coastguard Worker    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
643*495ae853SAndroid Build Coastguard Worker
644*495ae853SAndroid Build Coastguard Worker
645*495ae853SAndroid Build Coastguard Worker
646*495ae853SAndroid Build Coastguard Worker
647*495ae853SAndroid Build Coastguard Worker
648