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_copy_mem16x16_v6| 13 ; ARM 14 ; REQUIRE8 15 ; PRESERVE8 16 17 AREA Block, CODE, READONLY ; name this block of code 18 ;void copy_mem16x16_v6( unsigned char *src, int src_stride, unsigned char *dst, int dst_stride) 19 ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 20 |vp8_copy_mem16x16_v6| PROC 21 stmdb sp!, {r4 - r7} 22 ;push {r4-r7} 23 24 ;preload 25 pld [r0] 26 pld [r0, r1] 27 pld [r0, r1, lsl #1] 28 29 ands r4, r0, #15 30 beq copy_mem16x16_fast 31 32 ands r4, r0, #7 33 beq copy_mem16x16_8 34 35 ands r4, r0, #3 36 beq copy_mem16x16_4 37 38 ;copy one byte each time 39 ldrb r4, [r0] 40 ldrb r5, [r0, #1] 41 ldrb r6, [r0, #2] 42 ldrb r7, [r0, #3] 43 44 mov r12, #16 45 46 copy_mem16x16_1_loop 47 strb r4, [r2] 48 strb r5, [r2, #1] 49 strb r6, [r2, #2] 50 strb r7, [r2, #3] 51 52 ldrb r4, [r0, #4] 53 ldrb r5, [r0, #5] 54 ldrb r6, [r0, #6] 55 ldrb r7, [r0, #7] 56 57 subs r12, r12, #1 58 59 strb r4, [r2, #4] 60 strb r5, [r2, #5] 61 strb r6, [r2, #6] 62 strb r7, [r2, #7] 63 64 ldrb r4, [r0, #8] 65 ldrb r5, [r0, #9] 66 ldrb r6, [r0, #10] 67 ldrb r7, [r0, #11] 68 69 strb r4, [r2, #8] 70 strb r5, [r2, #9] 71 strb r6, [r2, #10] 72 strb r7, [r2, #11] 73 74 ldrb r4, [r0, #12] 75 ldrb r5, [r0, #13] 76 ldrb r6, [r0, #14] 77 ldrb r7, [r0, #15] 78 79 add r0, r0, r1 80 81 strb r4, [r2, #12] 82 strb r5, [r2, #13] 83 strb r6, [r2, #14] 84 strb r7, [r2, #15] 85 86 add r2, r2, r3 87 88 ldrneb r4, [r0] 89 ldrneb r5, [r0, #1] 90 ldrneb r6, [r0, #2] 91 ldrneb r7, [r0, #3] 92 93 bne copy_mem16x16_1_loop 94 95 ldmia sp!, {r4 - r7} 96 ;pop {r4-r7} 97 mov pc, lr 98 99 ;copy 4 bytes each time 100 copy_mem16x16_4 101 ldr r4, [r0] 102 ldr r5, [r0, #4] 103 ldr r6, [r0, #8] 104 ldr r7, [r0, #12] 105 106 mov r12, #16 107 108 copy_mem16x16_4_loop 109 subs r12, r12, #1 110 add r0, r0, r1 111 112 str r4, [r2] 113 str r5, [r2, #4] 114 str r6, [r2, #8] 115 str r7, [r2, #12] 116 117 add r2, r2, r3 118 119 ldrne r4, [r0] 120 ldrne r5, [r0, #4] 121 ldrne r6, [r0, #8] 122 ldrne r7, [r0, #12] 123 124 bne copy_mem16x16_4_loop 125 126 ldmia sp!, {r4 - r7} 127 ;pop {r4-r7} 128 mov pc, lr 129 130 ;copy 8 bytes each time 131 copy_mem16x16_8 132 sub r1, r1, #16 133 sub r3, r3, #16 134 135 mov r12, #16 136 137 copy_mem16x16_8_loop 138 ldmia r0!, {r4-r5} 139 ;ldm r0, {r4-r5} 140 ldmia r0!, {r6-r7} 141 142 add r0, r0, r1 143 144 stmia r2!, {r4-r5} 145 subs r12, r12, #1 146 ;stm r2, {r4-r5} 147 stmia r2!, {r6-r7} 148 149 add r2, r2, r3 150 151 bne copy_mem16x16_8_loop 152 153 ldmia sp!, {r4 - r7} 154 ;pop {r4-r7} 155 mov pc, lr 156 157 ;copy 16 bytes each time 158 copy_mem16x16_fast 159 ;sub r1, r1, #16 160 ;sub r3, r3, #16 161 162 mov r12, #16 163 164 copy_mem16x16_fast_loop 165 ldmia r0, {r4-r7} 166 ;ldm r0, {r4-r7} 167 add r0, r0, r1 168 169 subs r12, r12, #1 170 stmia r2, {r4-r7} 171 ;stm r2, {r4-r7} 172 add r2, r2, r3 173 174 bne copy_mem16x16_fast_loop 175 176 ldmia sp!, {r4 - r7} 177 ;pop {r4-r7} 178 mov pc, lr 179 180 ENDP ; |vp8_copy_mem16x16_v6| 181 182 END 183