15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  Use of this source code is governed by a BSD-style license
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  that can be found in the LICENSE file in the root of the source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  tree. An additional intellectual property rights grant can be found
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  in the file PATENTS.  All contributing project authors may
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);  be found in the AUTHORS file in the root of the source tree.
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles);
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPORT  |vp8_yv12_copy_src_frame_func_neon|
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ARM
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    REQUIRE8
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PRESERVE8
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INCLUDE vpx_scale_asm_offsets.asm
18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AREA ||.text||, CODE, READONLY, ALIGN=2
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);Note: This function is used to copy source data in src_buffer[i] at beginning
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);of the encoding. The buffer has a width and height of cpi->oxcf.Width and
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);cpi->oxcf.Height, which can be ANY numbers(NOT always multiples of 16 or 4).
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);void vp8_yv12_copy_src_frame_func_neon(const YV12_BUFFER_CONFIG *src_ybc,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);                                       YV12_BUFFER_CONFIG *dst_ybc);
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)|vp8_yv12_copy_src_frame_func_neon| PROC
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    push            {r4 - r11, lr}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vpush           {d8 - d15}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ;Copy Y plane
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r4, [r0, #yv12_buffer_config_y_height]
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r5, [r0, #yv12_buffer_config_y_width]
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r6, [r0, #yv12_buffer_config_y_stride]
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r7, [r1, #yv12_buffer_config_y_stride]
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r2, [r0, #yv12_buffer_config_y_buffer]       ;srcptr1
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r3, [r1, #yv12_buffer_config_y_buffer]       ;dstptr1
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r10, r2, r6             ;second row src
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r11, r3, r7             ;second row dst
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r6, r6, lsl #1
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r7, r7, lsl #1
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r6, r6, r5              ;adjust stride
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r7, r7, r5
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ; copy two rows at one time
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             lr, r4, lsr #1
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_src_to_dst_height_loop
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r12, r5
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_128_loop
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q0, q1}, [r2]!
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q4, q5}, [r10]!
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q2, q3}, [r2]!
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q6, q7}, [r10]!
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q8, q9}, [r2]!
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q12, q13}, [r10]!
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q10, q11}, [r2]!
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q14, q15}, [r10]!
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #128
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #128
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q0, q1}, [r3]!
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q4, q5}, [r11]!
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q2, q3}, [r3]!
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q6, q7}, [r11]!
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q8, q9}, [r3]!
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q12, q13}, [r11]!
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q10, q11}, [r3]!
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q14, q15}, [r11]!
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_128_loop
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_done
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_8_loop
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {d0}, [r2]!
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {d1}, [r10]!
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #8
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #8
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d0}, [r3]!
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d1}, [r11]!
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_8_loop
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_done
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_1_loop
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldrb            r8, [r2], #1
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    subs            r12, r12, #1
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    strb            r8, [r3], #1
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ldrb            r8, [r10], #1
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    strb            r8, [r11], #1
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_width_1_loop
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_done
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subs            lr, lr, #1
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r2, r2, r6
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r3, r3, r7
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r10, r10, r6
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r11, r11, r7
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_src_to_dst_height_loop
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);copy last line for Y if y_height is odd
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tst             r4, #1
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_done_1
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r12, r5
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_128_loop_1
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q0, q1}, [r2]!
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q2, q3}, [r2]!
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q8, q9}, [r2]!
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    vld1.8          {q10, q11}, [r2]!
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #128
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #128
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q0, q1}, [r3]!
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q2, q3}, [r3]!
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q8, q9}, [r3]!
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q10, q11}, [r3]!
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_128_loop_1
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_done_1
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_8_loop_1
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {d0}, [r2]!
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #8
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #8
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d0}, [r3]!
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_8_loop_1
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_done_1
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_1_loop_1
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldrb            r8, [r2], #1
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subs            r12, r12, #1
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strb            r8, [r3], #1
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_width_1_loop_1
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_done_1
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles);Copy U & V planes
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r4, [r0, #yv12_buffer_config_uv_height]
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r5, [r0, #yv12_buffer_config_uv_width]
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r6, [r0, #yv12_buffer_config_uv_stride]
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r7, [r1, #yv12_buffer_config_uv_stride]
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r2, [r0, #yv12_buffer_config_u_buffer]       ;srcptr1
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldr             r3, [r1, #yv12_buffer_config_u_buffer]       ;dstptr1
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r10, r2, r6             ;second row src
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r11, r3, r7             ;second row dst
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r6, r6, lsl #1
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r7, r7, lsl #1
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r6, r6, r5              ;adjust stride
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r7, r7, r5
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r9, #2
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_uv_loop
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ;copy two rows at one time
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             lr, r4, lsr #1
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_src_to_dst_height_uv_loop
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r12, r5
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_uv_64_loop
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q0, q1}, [r2]!
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    vld1.8          {q4, q5}, [r10]!
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q2, q3}, [r2]!
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q6, q7}, [r10]!
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #64
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #64
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q0, q1}, [r3]!
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q4, q5}, [r11]!
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q2, q3}, [r3]!
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q6, q7}, [r11]!
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_uv_64_loop
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_uv_done
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_uv_8_loop
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {d0}, [r2]!
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {d1}, [r10]!
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #8
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmp             r12, #8
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d0}, [r3]!
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d1}, [r11]!
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_uv_8_loop
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_uv_done
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)cp_width_uv_1_loop
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldrb            r8, [r2], #1
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subs            r12, r12, #1
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strb            r8, [r3], #1
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldrb            r8, [r10], #1
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strb            r8, [r11], #1
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_width_uv_1_loop
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_uv_done
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subs            lr, lr, #1
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r2, r2, r6
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r3, r3, r7
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r10, r10, r6
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    add             r11, r11, r7
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_src_to_dst_height_uv_loop
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles);copy last line for U & V if uv_height is odd
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    tst             r4, #1
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_uv_done_1
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mov             r12, r5
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_uv_64_loop_1
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q0, q1}, [r2]!
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vld1.8          {q2, q3}, [r2]!
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sub             r12, r12, #64
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #64
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q0, q1}, [r3]!
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {q2, q3}, [r3]!
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_uv_64_loop_1
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_uv_done_1
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)cp_width_uv_8_loop_1
228d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch    vld1.8          {d0}, [r2]!
229d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch    sub             r12, r12, #8
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmp             r12, #8
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    vst1.8          {d0}, [r3]!
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bhs             cp_width_uv_8_loop_1
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmp             r12, #0
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    beq             cp_width_uv_done_1
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cp_width_uv_1_loop_1
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ldrb            r8, [r2], #1
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    subs            r12, r12, #1
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    strb            r8, [r3], #1
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bne             cp_width_uv_1_loop_1
242cp_width_uv_done_1
243
244    subs            r9, r9, #1
245    ldrne           r2, [r0, #yv12_buffer_config_v_buffer]      ;srcptr1
246    ldrne           r3, [r1, #yv12_buffer_config_v_buffer]      ;dstptr1
247    ldrne           r10, [r0, #yv12_buffer_config_uv_stride]
248    ldrne           r11, [r1, #yv12_buffer_config_uv_stride]
249
250    addne           r10, r2, r10                ;second row src
251    addne           r11, r3, r11                ;second row dst
252
253    bne             cp_uv_loop
254
255    vpop            {d8 - d15}
256    pop             {r4 - r11, pc}
257
258    ENDP
259    END
260