summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s')
-rw-r--r--media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s112
1 files changed, 112 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
new file mode 100644
index 0000000..b30e8cb
--- /dev/null
+++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s
@@ -0,0 +1,112 @@
+@/*
+@ ** 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