1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ File: AutoCorrelation_v5.s 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Content: AutoCorrelation function armv5 assemble 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 25b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard .section .text 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global AutoCorrelation 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 28e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardAutoCorrelation: 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 31b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r13, r13, #20 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r5, r0 34b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r7, r1 35b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r9, r3 36b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r2, r2, lsl #16 37b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r0, #0 38b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r4, r2, asr #16 39b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r8, #0 40b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r4, #0 41b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ble L136 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 43b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r4, #8 44b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r2, #0 45b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L133 46b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 47b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r12, r4, #8 48b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL132: 49b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r6, [r5, r2] 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r2, r2, #4 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smulbb r3, r6, r6 52b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r1, [r5, r2] 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smultt r10, r6, r6 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r3, r3, asr #9 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smulbb r6, r1, r1 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r10, r10, asr #9 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r3 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smultt r11, r1, r1 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r2, r2, #4 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r10 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r6, r6, asr #9 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r11, r11, asr #9 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r1, [r5, r2] 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r6 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smulbb r10, r1, r1 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smultt r6, r1, r1 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r11 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r10, r10, asr #9 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r6, r6, asr #9 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r10 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r2, r2, #4 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r8, r8, #6 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r6 75b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r8, r12 76b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L132 77b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL133: 78b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r6, [r5, r2] 79b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r10, r6, r6 80b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r2, r2, #2 81b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r1, r10, asr #9 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard qadd r0, r0, r1 83b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL134: 84b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r8, r8, #1 85b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r8, r4 86b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L133 87b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL135: 88b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL136: 89b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r0, [r7, #0] 90b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r0, #0 91b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard beq L1320 92b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL137: 93b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r2, r9, lsl #16 94b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r8, #1 95b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r2, r2, asr #16 96b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r2, #1 97b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ble L1319 98b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL138: 99b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL139: 100b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r4, r4, #1 101b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r14, #0 102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r3, #0 103b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r4, #0 104b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ble L1317 105b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1310: 106b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r4, #6 107b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard addlt r6, r5, r8, lsl #1 108b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L1314 109b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1311: 110b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r6, r5, r8, lsl #1 111b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r12, r4, #6 112b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r8, [r13, #8] 113b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r7, [r13, #4] 114b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1312: 115b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r1, r3, lsl #1 116b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r7, [r6, r1] 117b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r10, [r5, r1] 118b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r8, r1, r6 119b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r9, r5, r1 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mul r7, r10, r7 121b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r1, [r8, #2] 122b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r10, [r8, #4] 123b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r7, r14, r7, asr #9 124b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r0, [r9, #2] 125b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r11, [r9, #4] 126b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r1, r0, r1 127b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r14, [r8, #6] 128b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r10, r11, r10 129b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r7, r7, r1, asr #9 130b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r8, [r8, #8] 131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r3, r3, #5 132b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r11, [r9, #6] 133b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r1, [r9, #8] 134b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r14, r11, r14 135b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r7, r7, r10, asr #9 136b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r1, r1, r8 137b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r14, r7, r14, asr #9 138b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r3, r12 139b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r14, r14, r1, asr #9 140b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ble L1312 141b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1313: 142b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r8, [r13, #8] 143b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r7, [r13, #4] 144b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1314: 145b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1315: 146b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r12, r3, lsl #1 147b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r9, [r6, r12] 148b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldrsh r12, [r5, r12] 149b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r3, r3, #1 150b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r3, r4 151b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r12, r12, r9 152b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r14, r14, r12, asr #9 153b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L1315 154b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1316: 155b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardL1317: 156b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r14, [r7, +r8, lsl #2] 157b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r8, r8, #1 158b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r8, r2 159b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt L139 160b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 161e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardL1319: 162e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardL1320: 163b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r13, r13, #20 164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldmia sp!, {r4 - r11, pc} 165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP @ |AutoCorrelation| 167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .end 168