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