@/* @ ** Copyright 2003-2010, VisualOn, Inc. @ ** @ ** Licensed under the Apache License, Version 2.0 (the "License"); @ ** you may not use this file except in compliance with the License. @ ** You may obtain a copy of the License at @ ** @ ** http://www.apache.org/licenses/LICENSE-2.0 @ ** @ ** Unless required by applicable law or agreed to in writing, software @ ** distributed under the License is distributed on an "AS IS" BASIS, @ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @ ** See the License for the specific language governing permissions and @ ** limitations under the License. @ */ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ File: CalcWindowEnergy_v5.s @ @ Content: CalcWindowEnergy function armv5 assemble @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .section .text .global CalcWindowEnergy CalcWindowEnergy: stmdb sp!, {r4 - r11, lr} sub r13, r13, #20 mov r3, r3, lsl #16 ldr r10, [r0, #168] @ states0 = blockSwitchingControl->iirStates[0]; mov r3, r3, asr #16 ldr r11, [r0, #172] @ states1 = blockSwitchingControl->iirStates[1]; mov r2, r2, lsl #16 ldr r12, hiPassCoeff @ Coeff0 = hiPassCoeff[0]; mov r2, r2, asr #16 ldr r14, hiPassCoeff + 4 @ Coeff1 = hiPassCoeff[1]; mov r8, #0 @ w=0 mov r5, #0 @ wOffset = 0; BLOCK_BEGIN: mov r6, #0 @ accuUE = 0; mov r7, #0 @ accuFE = 0; mov r4, #0 @ i=0 str r8, [r13, #4] str r0, [r13, #8] str r3, [r13, #12] ENERGY_BEG: mov r9, r5, lsl #1 ldrsh r9, [r1, r9] @ tempUnfiltered = timeSignal[tidx]; add r5, r5, r2 @ tidx = tidx + chIncrement; smulwb r3, r14, r9 @ accu1 = L_mpy_ls(Coeff1, tempUnfiltered); smull r0, r8, r12, r11 @ accu2 = fixmul( Coeff0, states1 ); mov r3, r3, lsl #1 mov r8, r8, lsl #1 sub r0, r3, r10 @ accu3 = accu1 - states0; sub r8, r0, r8 @ out = accu3 - accu2; mov r10, r3 @ states0 = accu1; mov r11, r8 @ states1 = out; mul r3, r9, r9 mov r8, r8, asr #16 add r4, r4, #1 add r6, r6, r3, asr #7 mul r9, r8, r8 ldr r3, [r13, #12] add r7, r7, r9, asr #7 cmp r4, r3 blt ENERGY_BEG ldr r0, [r13, #8] ldr r8, [r13, #4] ENERGY_END: add r4, r0, r8, lsl #2 str r6, [r4, #72] add r8, r8, #1 str r7, [r4, #136] cmp r8, #8 blt BLOCK_BEGIN BLOCK_END: str r10, [r0, #168] str r11, [r0, #172] mov r0, #1 add r13, r13, #20 ldmia sp!, {r4 - r11, pc} hiPassCoeff: .word 0xbec8b439 .word 0x609d4952 @ENDP .end