mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.8 KiB
ArmAsm
113 lines
2.8 KiB
ArmAsm
@/*
|
|
@ ** 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
|