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