1; 2; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3; 4; Use of this source code is governed by a BSD-style license 5; that can be found in the LICENSE file in the root of the source 6; tree. An additional intellectual property rights grant can be found 7; in the file PATENTS. All contributing project authors may 8; be found in the AUTHORS file in the root of the source tree. 9; 10 11 12 EXPORT |vp8_memcpy_partial_neon| 13 14 ARM 15 REQUIRE8 16 PRESERVE8 17 18 AREA ||.text||, CODE, READONLY, ALIGN=2 19;========================================= 20;this is not a full memcpy function!!! 21;void vp8_memcpy_partial_neon(unsigned char *dst_ptr, unsigned char *src_ptr, 22; int sz); 23|vp8_memcpy_partial_neon| PROC 24 vpush {d8-d15} 25 ;pld [r1] ;preload pred data 26 ;pld [r1, #128] 27 ;pld [r1, #256] 28 ;pld [r1, #384] 29 30 mov r12, r2, lsr #8 ;copy 256 bytes data at one time 31 32memcpy_neon_loop 33 vld1.8 {q0, q1}, [r1]! ;load src data 34 subs r12, r12, #1 35 vld1.8 {q2, q3}, [r1]! 36 vst1.8 {q0, q1}, [r0]! ;copy to dst_ptr 37 vld1.8 {q4, q5}, [r1]! 38 vst1.8 {q2, q3}, [r0]! 39 vld1.8 {q6, q7}, [r1]! 40 vst1.8 {q4, q5}, [r0]! 41 vld1.8 {q8, q9}, [r1]! 42 vst1.8 {q6, q7}, [r0]! 43 vld1.8 {q10, q11}, [r1]! 44 vst1.8 {q8, q9}, [r0]! 45 vld1.8 {q12, q13}, [r1]! 46 vst1.8 {q10, q11}, [r0]! 47 vld1.8 {q14, q15}, [r1]! 48 vst1.8 {q12, q13}, [r0]! 49 vst1.8 {q14, q15}, [r0]! 50 51 ;pld [r1] ;preload pred data -- need to adjust for real device 52 ;pld [r1, #128] 53 ;pld [r1, #256] 54 ;pld [r1, #384] 55 56 bne memcpy_neon_loop 57 58 ands r3, r2, #0xff ;extra copy 59 beq done_copy_neon_loop 60 61extra_copy_neon_loop 62 vld1.8 {q0}, [r1]! ;load src data 63 subs r3, r3, #16 64 vst1.8 {q0}, [r0]! 65 bne extra_copy_neon_loop 66 67done_copy_neon_loop 68 vpop {d8-d15} 69 bx lr 70 ENDP 71 72 END 73