18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*/
207497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *******************************************************************************
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * @file
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  ih264_padding_neon.s
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * @brief
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  Contains function definitions padding
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * @author
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  Ittiam
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * @par List of Functions:
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  - ih264_pad_top_a9q()
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  - ih264_pad_left_luma_a9q()
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  - ih264_pad_left_chroma_a9q()
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  - ih264_pad_right_luma_a9q()
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  - ih264_pad_right_chroma_a9q()
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ * @remarks
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *  None
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@ *******************************************************************************
427497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
457497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@**
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @brief pad at the top of a 2d array
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @par Description:
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  The top row of a 2d array is replicated for pad_size times at the top
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pu1_src
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  UWORD8 pointer to the source
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] src_strd
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer source stride
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pad_size
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer -padding size of the array
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @returns none
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @remarks none
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
707497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@void ih264_pad_top(UWORD8 *pu1_src,
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                   WORD32 src_strd,
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                   WORD32 wd,
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                   WORD32 pad_size)
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@**************Variables Vs Registers*************************
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r0 => *pu1_src
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r1 => src_strd
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r2 => wd
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r3 => pad_size
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S.text
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S.p2align 2
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    .global ih264_pad_top_a9q
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sih264_pad_top_a9q:
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r5, r0, r1
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    rsb           r6, r1, #0
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_neon_memcpy_mul_16:
948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    @ Load 16 bytes
958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vld1.8        {d0, d1}, [r0]!
968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mov           r4, r5
978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mov           r7, r3
988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    add           r5, r5, #16
998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_neon_pad_top:
1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {d0, d1}, [r4], r6
1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r7, r7, #1
1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_neon_pad_top
1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #16
1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_neon_memcpy_mul_16
1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1137497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@**
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @brief
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*   Padding (luma block) at the left of a 2d array
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @par Description:
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*   The left column of a 2d array is replicated for pad_size times at the left
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pu1_src
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  UWORD8 pointer to the source
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] src_strd
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer source stride
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pad_size
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer -padding size of the array
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @returns
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @remarks
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  None
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
1507497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@#if PAD_LEFT_LUMA == C
1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@void ih264_pad_left_luma(UWORD8 *pu1_src,
1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 src_strd,
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 ht,
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 pad_size)
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@**************Variables Vs Registers*************************
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r0 => *pu1_src
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r1 => src_strd
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r2 => ht
1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r3 => pad_size
1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1637497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar
1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    .global ih264_pad_left_luma_a9q
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sih264_pad_left_luma_a9q:
1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r4, r0, r3
1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r6, r1, #16
1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r5, r3, #16
1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32
1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_16:                                @  /*hard coded for width=16  ,height =8,16*/
1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r1        @ 16 bytes store
1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r1        @ 16 bytes store
1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r1        @ 16 bytes store
1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r1        @ 16 bytes store
1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r1        @ 16 bytes store
1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r1        @ 16 bytes store
1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #8
1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r1        @ 16 bytes store
2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r1        @ 16 bytes store
2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_16
2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    b             end_func
2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_32:                                @  /*hard coded for width=32 ,height =8,16*/
2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6
2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6        @ 16 bytes store
2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #8
2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32
2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Send_func:
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2497497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@**
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @brief
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*   Padding (chroma block) at the left of a 2d array
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @par Description:
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*   The left column of a 2d array is replicated for pad_size times at the left
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pu1_src
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  UWORD8 pointer to the source
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] src_strd
2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer source stride
2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array (each colour component)
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pad_size
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer -padding size of the array
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @returns
2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @remarks
2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  None
2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
2867497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@#if PAD_LEFT_CHROMA == C
2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@void ih264_pad_left_chroma(UWORD8 *pu1_src,
2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                            WORD32 src_strd,
2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                            WORD32 ht,
2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                            WORD32 pad_size)
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@{
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r0 => *pu1_src
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r1 => src_strd
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r2 => ht
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r3 => pad_size
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    .global ih264_pad_left_chroma_a9q
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sih264_pad_left_chroma_a9q:
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r4, r0, r3
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r6, r1, #16
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_32_l_c:                            @  /*hard coded for width=32  ,height =4,8,12*/
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6        @ 16 bytes store
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #4
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    beq           end_func_l_c          @/* Branching when ht=4*/
3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6
3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #4
3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    beq           end_func_l_c          @/* Branching when ht=8*/
3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32_l_c
3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6
3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Send_func_l_c:
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3777497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@**
3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @brief
3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* Padding (luma block) at the right of a 2d array
3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @par Description:
3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* The right column of a 2d array is replicated for pad_size times at the right
3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pu1_src
3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  UWORD8 pointer to the source
3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] src_strd
3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer source stride
3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
3978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
3988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
3998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pad_size
4008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer -padding size of the array
4018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
4028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
4038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer height of the array
4048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
4058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
4068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
4078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
4088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @returns
4098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
4108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @remarks
4118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  None
4128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
4138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
4147497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
4158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@#if PAD_RIGHT_LUMA == C
4168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@void ih264_pad_right_luma(UWORD8 *pu1_src,
4178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 src_strd,
4188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 ht,
4198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 pad_size)
4208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@{
4218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@    WORD32 row;
4228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@
4238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@    for(row = 0; row < ht; row++)
4248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@    {
4258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@        memset(pu1_src, *(pu1_src -1), pad_size);
4268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@
4278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@        pu1_src += src_strd;
4288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@    }
4298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@}
4308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@
4318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r0 => *pu1_src
4328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r1 => src_strd
4338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r2 => ht
4348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r3 => pad_size
4358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    .global ih264_pad_right_luma_a9q
4398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sih264_pad_right_luma_a9q:
4418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
4438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mov           r4, r0
4458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r6, r1, #16
4468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r0, r0, #1
4478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r5, r3, #16
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_16_r: @  /*hard coded for width=16  ,height =8,16*/
4508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
4518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
4528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
4538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
4548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r1        @ 16 bytes store
4558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
4568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r1        @ 16 bytes store
4578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
4588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
4598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
4608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r1        @ 16 bytes store
4618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
4628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r1        @ 16 bytes store
4638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
4648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
4658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
4668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r1        @ 16 bytes store
4678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
4688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
4698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r1        @ 16 bytes store
4708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
4718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
4728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #8
4738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r1        @ 16 bytes store
4748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r1        @ 16 bytes store
4758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_16_r
4768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    b             end_func_r
4778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
4788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_32_r:                              @  /*hard coded for width=32  ,height =8,16*/
4798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
4808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
4818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
4828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
4838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
4848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
4858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6
4868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
4878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
4888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
4898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
4908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
4918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
4928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
4938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r8, [r0], r1
4948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
4958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r9, [r0], r1
4968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q0, r8
4978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
4988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r10, [r0], r1
4998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
5008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q1, r9
5018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6        @ 16 bytes store
5028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrb          r11, [r0], r1
5038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
5048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q2, r10
5058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
5068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
5078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u8       q3, r11
5088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
5098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #8
5108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
5118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
5128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32_r
5138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Send_func_r:
5178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
5188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5237497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@**
5248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
5258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @brief
5278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@;* Padding (chroma block) at the right of a 2d array
5288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @par Description:
5308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* The right column of a 2d array is replicated for pad_size times at the right
5318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pu1_src
5348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@;*  UWORD8 pointer to the source
5358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] src_strd
5378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer source stride
5388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
5408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@;*  integer height of the array
5418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
5438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array (each colour component)
5448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] pad_size
5468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer -padding size of the array
5478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] ht
5498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@;*  integer height of the array
5508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @param[in] wd
5528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  integer width of the array
5538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @returns
5558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@* @remarks
5578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*  None
5588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*
5598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@*******************************************************************************
5607497191460a9504f8b4f64df169ab633f0b74353Harish Mahendrakar@*
5618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@#if PAD_RIGHT_CHROMA == C
5628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@void ih264_pad_right_chroma(UWORD8 *pu1_src,
5638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 src_strd,
5648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 ht,
5658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@                        WORD32 pad_size)
5668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r0 => *pu1_src
5678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r1 => src_strd
5688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r2 => ht
5698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S@   r3 => pad_size
5708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    .global ih264_pad_right_chroma_a9q
5748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sih264_pad_right_chroma_a9q:
5768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    stmfd         sp!, {r4-r11, lr}     @stack stores the values of the arguments
5788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
5798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    mov           r4, r0
5808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r6, r1, #16
5818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    sub           r0, r0, #2
5828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Sloop_32_r_c: @  /*hard coded for width=32 ,height =8,4*/
5838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
5848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
5858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
5868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
5878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
5888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
5898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6
5908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
5918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
5928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
5938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #4
5948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
5958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
5968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
5978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
5988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
5998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
6008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    beq           end_func_r_c          @/* Branching when ht=4*/
6028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
6048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
6058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
6068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
6078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
6088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
6098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6        @ 16 bytes store
6108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
6118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
6128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
6138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
6148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
6158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
6168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
6178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    subs          r2, r2, #4
6188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
6198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
6208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    beq           end_func_r_c          @/* Branching when ht=8*/
6228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    bne           loop_32_r_c
6238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r8, [r0], r1
6258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q0, r8
6268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r9, [r0], r1
6278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r10, [r0], r1
6288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4]!           @ 16 bytes store
6298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q1, r9
6308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q0}, [r4], r6        @ 16 bytes store
6318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldrh          r11, [r0], r1
6328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4]!           @ 16 bytes store
6338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q2, r10
6348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q1}, [r4], r6        @ 16 bytes store
6358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4]!           @ 16 bytes store
6368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vdup.u16      q3, r11
6378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q2}, [r4], r6        @ 16 bytes store
6388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4]!           @ 16 bytes store
6398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    vst1.8        {q3}, [r4], r6        @ 16 bytes store
6408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Send_func_r_c:
6428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    ldmfd         sp!, {r4-r11, pc}     @Reload the registers from SP
6438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
6478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
648