190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 2f71323e297a928af368937089d3ed71239786f86Andreas Huber; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 4f71323e297a928af368937089d3ed71239786f86Andreas Huber; Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber; that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber; tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber; in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber; be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber EXPORT |vp8_copy_mem8x4_v6| 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ; ARM 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ; REQUIRE8 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ; PRESERVE8 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber AREA Block, CODE, READONLY ; name this block of code 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void vp8_copy_mem8x4_v6( unsigned char *src, int src_stride, unsigned char *dst, int dst_stride) 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber|vp8_copy_mem8x4_v6| PROC 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;push {r4-r5} 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stmdb sp!, {r4-r5} 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;preload 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pld [r0] 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pld [r0, r1] 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pld [r0, r1, lsl #1] 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ands r4, r0, #7 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber beq copy_mem8x4_fast 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ands r4, r0, #3 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber beq copy_mem8x4_4 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;copy 1 byte each time 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r4, [r0] 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r5, [r0, #1] 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov r12, #4 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercopy_mem8x4_1_loop 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r4, [r2] 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r5, [r2, #1] 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r4, [r0, #2] 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r5, [r0, #3] 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber subs r12, r12, #1 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r4, [r2, #2] 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r5, [r2, #3] 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r4, [r0, #4] 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r5, [r0, #5] 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r4, [r2, #4] 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r5, [r2, #5] 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r4, [r0, #6] 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrb r5, [r0, #7] 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r0, r0, r1 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r4, [r2, #6] 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber strb r5, [r2, #7] 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r2, r2, r3 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrneb r4, [r0] 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrneb r5, [r0, #1] 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bne copy_mem8x4_1_loop 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldmia sp!, {r4 - r5} 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;pop {r4-r5} 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov pc, lr 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;copy 4 bytes each time 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercopy_mem8x4_4 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldr r4, [r0] 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldr r5, [r0, #4] 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov r12, #4 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercopy_mem8x4_4_loop 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber subs r12, r12, #1 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r0, r0, r1 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str r4, [r2] 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber str r5, [r2, #4] 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r2, r2, r3 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrne r4, [r0] 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldrne r5, [r0, #4] 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bne copy_mem8x4_4_loop 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldmia sp!, {r4-r5} 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;pop {r4-r5} 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov pc, lr 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;copy 8 bytes each time 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercopy_mem8x4_fast 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;sub r1, r1, #8 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;sub r3, r3, #8 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov r12, #4 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercopy_mem8x4_fast_loop 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldmia r0, {r4-r5} 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;ldm r0, {r4-r5} 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r0, r0, r1 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber subs r12, r12, #1 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stmia r2, {r4-r5} 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;stm r2, {r4-r5} 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r2, r2, r3 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bne copy_mem8x4_fast_loop 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ldmia sp!, {r4-r5} 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;pop {r4-r5} 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mov pc, lr 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ENDP ; |vp8_copy_mem8x4_v6| 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber END 129