blob: abec5992f2bae4bf9983ee1264ef8af3f3218051 [file] [log] [blame]
; ------------------------------------------------------------------
; 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