Home | History | Annotate | Download | only in asm
      1 ; ------------------------------------------------------------------
      2 ; Copyright (C) 1998-2009 PacketVideo
      3 ;
      4 ; Licensed under the Apache License, Version 2.0 (the "License");
      5 ; you may not use this file except in compliance with the License.
      6 ; You may obtain a copy of the License at
      7 ;
      8 ;      http://www.apache.org/licenses/LICENSE-2.0
      9 ;
     10 ; Unless required by applicable law or agreed to in writing, software
     11 ; distributed under the License is distributed on an "AS IS" BASIS,
     12 ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13 ; express or implied.
     14 ; See the License for the specific language governing permissions
     15 ; and limitations under the License.
     16 ; -------------------------------------------------------------------
     17 
     18 ;
     19 ;
     20 ;   Filename: pvmp3_polyphase_filter_window.s
     21 ;
     22 ;------------------------------------------------------------------------------
     23 ; REVISION HISTORY
     24 ;
     25 ;
     26 ; Who:                                   Date: MM/DD/YYYY
     27 ; Description: 
     28 ;
     29 ;------------------------------------------------------------------------------
     30 
     31 	CODE32
     32 
     33 	AREA	|.drectve|, DRECTVE
     34 
     35 	EXPORT	|pvmp3_polyphase_filter_window|
     36 	IMPORT	|pqmfSynthWin|
     37 
     38 	AREA	|.pdata|, PDATA
     39 
     40 	AREA	|.text|, CODE, ARM
     41 
     42 |pvmp3_polyphase_filter_window| PROC
     43         stmfd    sp!,{r0-r2,r4-r11,lr}
     44 
     45         sub      sp,sp,#4
     46         ldr      r2,[sp,#0xc]
     47         ldr      r1,PolyPh_filter_coeff
     48 		
     49         sub      r2,r2,#1
     50         mov      r10,#1
     51         str      r2,[sp]
     52 
     53 ; Accumulators r9, r11::> Initialization
     54 
     55 Loop_j
     56         mov      r9,  #0x20
     57         mov      r11, #0x20
     58         mov      r4,  #0x10
     59 Loop_i
     60         add      r2,r4,r10
     61         add      r3,r0,r2,lsl #2
     62         sub      r2,r4,r10
     63         ldr      r5,[r3]
     64         ldr      lr,[r1]
     65         add      r12,r0,r2,lsl #2
     66         ldr      r6,[r12,#0x780]
     67         smlal    r2,r9,lr,r5
     68         smlal    r2,r11,lr,r6
     69         ldr      r2,[r1,#4]
     70         ldr      r7,[r12,#0x80]
     71         smlal    r5,r11,r2,r5
     72         smull    r6,r5,r2,r6
     73         sub      r9,r9,r5
     74         ldr      r5,[r1,#8]
     75         ldr      r8,[r3,#0x700]
     76         add      r4,r4,#0x200
     77         smlal    r6,r9,r5,r7
     78         smull    r6,r2,r5,r8
     79         ldr      r5,[r1,#0xc]
     80         sub      r11,r11,r2
     81         smlal    r8,r9,r5,r8
     82         smlal    r7,r11,r5,r7
     83         ldr      r5,[r3,#0x100]
     84         ldr      r2,[r1,#0x10]
     85         ldr      r6,[r12,#0x680]
     86         smlal    lr,r9,r2,r5
     87         smlal    lr,r11,r2,r6
     88         ldr      r2,[r1,#0x14]
     89         ldr      r7,[r12,#0x180]
     90         smlal    r5,r11,r2,r5
     91         smull    r6,r5,r2,r6
     92         ldr      r6,[r1,#0x18]
     93         ldr      r8,[r3,#0x600]
     94         sub      r9,r9,r5
     95         smlal    r5,r9,r6,r7
     96         smull    r2,r5,r6,r8
     97         ldr      r6,[r1,#0x1c]
     98         sub      r11,r11,r5
     99         smlal    r8,r9,r6,r8
    100         ldr      r2,[r1,#0x20]
    101         ldr      r5,[r3,#0x200]
    102         smlal    r7,r11,r6,r7
    103         ldr      r6,[r12,#0x580]
    104         smlal    lr,r9,r2,r5
    105         smlal    lr,r11,r2,r6
    106         ldr      r2,[r1,#0x24]
    107         ldr      r7,[r12,#0x280]
    108         smlal    r5,r11,r2,r5
    109         smull    r6,r5,r2,r6
    110         ldr      r6,[r1,#0x28]
    111         ldr      r8,[r3,#0x500]
    112         sub      r9,r9,r5
    113         smlal    r5,r9,r6,r7
    114         smull    r2,r5,r6,r8
    115         ldr      r6,[r1,#0x2c]
    116         sub      r11,r11,r5
    117 
    118         smlal    r8,r9,r6,r8
    119         smlal    r7,r11,r6,r7
    120         ldr      r5,[r3,#0x300]
    121         ldr      r8,[r1,#0x30]
    122         ldr      r6,[r12,#0x480]
    123         smlal    r7,r9,r8,r5
    124         smlal    r7,r11,r8,r6
    125         ldr      r8,[r1,#0x34]
    126         ldr      r12,[r12,#0x380]
    127         smlal    r5,r11,r8,r5
    128         smull    r6,r5,r8,r6
    129         ldr      r6,[r1,#0x38]
    130 
    131 
    132         ldr      r3,[r3,#0x400]
    133         sub      r9,r9,r5
    134         smlal    r7,r9,r6,r12
    135         smull    r8,r7,r6,r3
    136         cmp      r4,#0x210
    137         sub      r11,r11,r7
    138 
    139         ldr      r2,[r1,#0x3c]
    140         add      r1,r1,#0x40
    141         smlal    r3,r9,r2,r3
    142         smlal    r12,r11,r2,r12
    143 
    144         blt      Loop_i
    145 
    146         mov      r3,r9, asr #6
    147         mov      r4,r3, asr #15
    148         teq      r4,r3, asr #31
    149         ldr      r12,LOW_16BITS
    150         ldr      r2,[sp]
    151         eorne    r3,r12,r3,asr #31
    152         ldr      r4,[sp,#8]
    153         mov      r2,r10,lsl r2
    154         add      r4,r4,r2,lsl #1
    155         strh     r3,[r4]
    156 
    157         mov      r3,r11,asr #6
    158         mov      r4,r3,asr #15
    159         teq      r4,r3,asr #31
    160         eorne    r3,r12,r3,asr #31
    161         ldr      r12,[sp,#0xc]
    162         ldr      r11,[sp,#8]
    163         rsb      r2,r2,r12,lsl #5
    164         add      r2,r11,r2,lsl #1
    165         strh     r3,[r2]
    166 
    167         add      r10,r10,#1
    168         cmp      r10,#0x10
    169         blt      Loop_j
    170 
    171 ; Accumulators r4, r5 Initialization
    172 
    173         mov      r4,#0x20
    174         mov      r5,#0x20
    175         mov      r3,#0x10
    176 PolyPh_filter_loop2
    177         add      r2,r0,r3,lsl #2
    178         ldr      r12,[r2]
    179         ldr      r8,[r1]
    180         ldr      r6,[r2,#0x80]
    181         smlal    r12,r4,r8,r12
    182         ldr      r12,[r1,#4]
    183         ldr      r7,[r2,#0x40]
    184         smlal    r6,r4,r12,r6
    185 
    186         ldr      r12,[r1,#8]
    187         ldr      r6,[r2,#0x180]
    188         smlal    r7,r5,r12,r7
    189         ldr      r12,[r2,#0x100]
    190         ldr      r7,[r1,#0xc]
    191         ldr      r2,[r2,#0x140]
    192         smlal    r12,r4,r7,r12
    193         ldr      r12,[r1,#0x10]
    194         add      r3,r3,#0x80
    195         smlal    r6,r4,r12,r6
    196         ldr      r6,[r1,#0x14]
    197         cmp      r3,#0x210
    198         smlal    r2,r5,r6,r2
    199         add      r1,r1,#0x18
    200 
    201         blt      PolyPh_filter_loop2
    202         mov      r0,r4,asr #6
    203         mov      r2,r0,asr #15
    204         teq      r2,r0,asr #31
    205         ldrne    r12,LOW_16BITS
    206         ldr      r1,[sp,#8]
    207         eorne    r0,r12,r0,asr #31
    208         strh     r0,[r1,#0]
    209         mov      r0,r5,asr #6
    210         mov      r2,r0,asr #15
    211         teq      r2,r0,asr #31
    212         ldrne    r12,LOW_16BITS
    213         ldr      r2,[sp]
    214         mov      r1,#0x10
    215         eorne    r0,r12,r0,asr #31
    216         ldr      r12,[sp,#8]
    217         mov      r1,r1,lsl r2
    218         add      r1,r12,r1,lsl #1
    219         strh     r0,[r1]
    220         add      sp,sp,#0x10
    221         ldmfd    sp!,{r4-r11,pc}
    222 
    223 
    224 PolyPh_filter_coeff
    225         DCD      pqmfSynthWin
    226 LOW_16BITS
    227         DCD      0x00007fff
    228 	
    229 		ENDP  ; |pvmp3_polyphase_filter_window|
    230 		END
    231 
    232