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: CalcWindowEnergy_v5.s 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Content: CalcWindowEnergy function armv5 assemble 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 25b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global CalcWindowEnergy 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 28e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardCalcWindowEnergy: 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 30b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r13, r13, #20 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 32b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r3, r3, lsl #16 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r10, [r0, #168] @ states0 = blockSwitchingControl->iirStates[0]; 34b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r3, r3, asr #16 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r11, [r0, #172] @ states1 = blockSwitchingControl->iirStates[1]; 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r2, r2, lsl #16 38b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r12, hiPassCoeff @ Coeff0 = hiPassCoeff[0]; 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r2, r2, asr #16 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r14, hiPassCoeff + 4 @ Coeff1 = hiPassCoeff[1]; 41b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r8, #0 @ w=0 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r5, #0 @ wOffset = 0; 44b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 45e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardBLOCK_BEGIN: 46b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r6, #0 @ accuUE = 0; 47b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r7, #0 @ accuFE = 0; 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r4, #0 @ i=0 49b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 50b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r8, [r13, #4] 51b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r0, [r13, #8] 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard str r3, [r13, #12] 53b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 54b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardENERGY_BEG: 55b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r9, r5, lsl #1 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldrsh r9, [r1, r9] @ tempUnfiltered = timeSignal[tidx]; 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r5, r5, r2 @ tidx = tidx + chIncrement; 59b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 60b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard smulwb r3, r14, r9 @ accu1 = L_mpy_ls(Coeff1, tempUnfiltered); 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r0, r8, r12, r11 @ accu2 = fixmul( Coeff0, states1 ); 62b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r3, r3, lsl #1 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r8, r8, lsl #1 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 66b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard sub r0, r3, r10 @ accu3 = accu1 - states0; 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r8, r0, r8 @ out = accu3 - accu2; 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r10, r3 @ states0 = accu1; 70b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r11, r8 @ states1 = out; 71b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 72b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r3, r9, r9 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard mov r8, r8, asr #16 74b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r4, r4, #1 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r6, r6, r3, asr #7 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 78b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mul r9, r8, r8 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r3, [r13, #12] 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r7, r7, r9, asr #7 82b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 83b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard cmp r4, r3 84b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt ENERGY_BEG 85b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r0, [r13, #8] 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r8, [r13, #4] 88b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 89e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardENERGY_END: 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r4, r0, r8, lsl #2 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 92b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r6, [r4, #72] 93b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r8, r8, #1 94b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r7, [r4, #136] 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard cmp r8, #8 97b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard blt BLOCK_BEGIN 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 99e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardBLOCK_END: 100b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r10, [r0, #168] 101b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard str r11, [r0, #172] 102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r0, #1 103b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 104b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r13, r13, #20 105b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldmia sp!, {r4 - r11, pc} 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 107e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardhiPassCoeff: 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .word 0xbec8b439 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .word 0x609d4952 110b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .end 113