| ; ------------------------------------------------------------------ |
| ; Copyright (C) 1998-2009 PacketVideo |
| ; |
| ; 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. |
| ; ------------------------------------------------------------------- |
| |
| ; |
| ; |
| ; Filename: pvmp3_polyphase_filter_window.s |
| ; |
| ;------------------------------------------------------------------------------ |
| ; REVISION HISTORY |
| ; |
| ; |
| ; Who: Date: MM/DD/YYYY |
| ; Description: |
| ; |
| ;------------------------------------------------------------------------------ |
| |
| EXPORT pvmp3_polyphase_filter_window |
| |
| IMPORT ||Lib$$Request$$armlib|| [WEAK] |
| IMPORT ||Lib$$Request$$cpplib|| [WEAK] |
| IMPORT pqmfSynthWin |
| |
| |
| |
| ;------------------------------------------------------------------------------ |
| |
| AREA |.text|, CODE, READONLY, ALIGN=2 |
| |
| |
| ;------------------------------------------------------------------------------ |
| |
| |pvmp3_polyphase_filter_window| PROC |
| |
| stmfd sp!,{r0-r2,r4-r11,lr} |
| |
| sub sp,sp,#4 |
| ldr r2,[sp,#0xc] |
| ldr r1,PolyPh_filter_coeff |
| |
| sub r2,r2,#1 |
| mov r10,#1 |
| str r2,[sp] |
| |
| ; Accumulators r9, r11::> Initialization |
| |
| Loop_j |
| mov r9, #0x20 |
| mov r11, #0x20 |
| mov r4, #0x10 |
| Loop_i |
| add r2,r4,r10 |
| add r3,r0,r2,lsl #2 |
| sub r2,r4,r10 |
| ldr r5,[r3] |
| ldr lr,[r1] |
| add r12,r0,r2,lsl #2 |
| ldr r6,[r12,#0x780] |
| smlal r2,r9,lr,r5 |
| smlal r2,r11,lr,r6 |
| ldr r2,[r1,#4] |
| ldr r7,[r12,#0x80] |
| smlal r5,r11,r2,r5 |
| smull r6,r5,r2,r6 |
| sub r9,r9,r5 |
| ldr r5,[r1,#8] |
| ldr r8,[r3,#0x700] |
| add r4,r4,#0x200 |
| smlal r6,r9,r5,r7 |
| smull r6,r2,r5,r8 |
| ldr r5,[r1,#0xc] |
| sub r11,r11,r2 |
| smlal r8,r9,r5,r8 |
| smlal r7,r11,r5,r7 |
| ldr r5,[r3,#0x100] |
| ldr r2,[r1,#0x10] |
| ldr r6,[r12,#0x680] |
| smlal lr,r9,r2,r5 |
| smlal lr,r11,r2,r6 |
| ldr r2,[r1,#0x14] |
| ldr r7,[r12,#0x180] |
| smlal r5,r11,r2,r5 |
| smull r6,r5,r2,r6 |
| ldr r6,[r1,#0x18] |
| ldr r8,[r3,#0x600] |
| sub r9,r9,r5 |
| smlal r5,r9,r6,r7 |
| smull r2,r5,r6,r8 |
| ldr r6,[r1,#0x1c] |
| sub r11,r11,r5 |
| smlal r8,r9,r6,r8 |
| ldr r2,[r1,#0x20] |
| ldr r5,[r3,#0x200] |
| smlal r7,r11,r6,r7 |
| ldr r6,[r12,#0x580] |
| smlal lr,r9,r2,r5 |
| smlal lr,r11,r2,r6 |
| ldr r2,[r1,#0x24] |
| ldr r7,[r12,#0x280] |
| smlal r5,r11,r2,r5 |
| smull r6,r5,r2,r6 |
| ldr r6,[r1,#0x28] |
| ldr r8,[r3,#0x500] |
| sub r9,r9,r5 |
| smlal r5,r9,r6,r7 |
| smull r2,r5,r6,r8 |
| ldr r6,[r1,#0x2c] |
| sub r11,r11,r5 |
| |
| smlal r8,r9,r6,r8 |
| smlal r7,r11,r6,r7 |
| ldr r5,[r3,#0x300] |
| ldr r8,[r1,#0x30] |
| ldr r6,[r12,#0x480] |
| smlal r7,r9,r8,r5 |
| smlal r7,r11,r8,r6 |
| ldr r8,[r1,#0x34] |
| ldr r12,[r12,#0x380] |
| smlal r5,r11,r8,r5 |
| smull r6,r5,r8,r6 |
| ldr r6,[r1,#0x38] |
| |
| |
| ldr r3,[r3,#0x400] |
| sub r9,r9,r5 |
| smlal r7,r9,r6,r12 |
| smull r8,r7,r6,r3 |
| cmp r4,#0x210 |
| sub r11,r11,r7 |
| |
| ldr r2,[r1,#0x3c] |
| add r1,r1,#0x40 |
| smlal r3,r9,r2,r3 |
| smlal r12,r11,r2,r12 |
| |
| blt Loop_i |
| |
| mov r3,r9, asr #6 |
| mov r4,r3, asr #15 |
| teq r4,r3, asr #31 |
| ldr r12,LOW_16BITS |
| ldr r2,[sp] |
| eorne r3,r12,r3,asr #31 |
| ldr r4,[sp,#8] |
| mov r2,r10,lsl r2 |
| add r4,r4,r2,lsl #1 |
| strh r3,[r4] |
| |
| mov r3,r11,asr #6 |
| mov r4,r3,asr #15 |
| teq r4,r3,asr #31 |
| eorne r3,r12,r3,asr #31 |
| ldr r12,[sp,#0xc] |
| ldr r11,[sp,#8] |
| rsb r2,r2,r12,lsl #5 |
| add r2,r11,r2,lsl #1 |
| strh r3,[r2] |
| |
| add r10,r10,#1 |
| cmp r10,#0x10 |
| blt Loop_j |
| |
| ; Accumulators r4, r5 Initialization |
| |
| mov r4,#0x20 |
| mov r5,#0x20 |
| mov r3,#0x10 |
| PolyPh_filter_loop2 |
| add r2,r0,r3,lsl #2 |
| ldr r12,[r2] |
| ldr r8,[r1] |
| ldr r6,[r2,#0x80] |
| smlal r12,r4,r8,r12 |
| ldr r12,[r1,#4] |
| ldr r7,[r2,#0x40] |
| smlal r6,r4,r12,r6 |
| |
| ldr r12,[r1,#8] |
| ldr r6,[r2,#0x180] |
| smlal r7,r5,r12,r7 |
| ldr r12,[r2,#0x100] |
| ldr r7,[r1,#0xc] |
| ldr r2,[r2,#0x140] |
| smlal r12,r4,r7,r12 |
| ldr r12,[r1,#0x10] |
| add r3,r3,#0x80 |
| smlal r6,r4,r12,r6 |
| ldr r6,[r1,#0x14] |
| cmp r3,#0x210 |
| smlal r2,r5,r6,r2 |
| add r1,r1,#0x18 |
| |
| blt PolyPh_filter_loop2 |
| mov r0,r4,asr #6 |
| mov r2,r0,asr #15 |
| teq r2,r0,asr #31 |
| ldrne r12,LOW_16BITS |
| ldr r1,[sp,#8] |
| eorne r0,r12,r0,asr #31 |
| strh r0,[r1,#0] |
| mov r0,r5,asr #6 |
| mov r2,r0,asr #15 |
| teq r2,r0,asr #31 |
| ldrne r12,LOW_16BITS |
| ldr r2,[sp] |
| mov r1,#0x10 |
| eorne r0,r12,r0,asr #31 |
| ldr r12,[sp,#8] |
| mov r1,r1,lsl r2 |
| add r1,r12,r1,lsl #1 |
| strh r0,[r1] |
| add sp,sp,#0x10 |
| ldmfd sp!,{r4-r11,pc} |
| |
| |
| PolyPh_filter_coeff |
| DCD pqmfSynthWin |
| LOW_16BITS |
| DCD 0x00007fff |
| |
| ENDP |
| |
| |
| END |