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_dct_18_gcc.s
     21 @
     22 @------------------------------------------------------------------------------
     23 @ REVISION HISTORY
     24 @
     25 @
     26 @ Who:                                   Date: MM/DD/YYYY
     27 @ Description:
     28 @
     29 @------------------------------------------------------------------------------
     30 
     31 .arm
     32 
     33 .align 4
     34 
     35 .text
     36 
     37 .extern  pvmp3_dct_9
     38 
     39 @------------------------------------------------------------------------------
     40 
     41 .global pvmp3_mdct_18
     42 
     43 pvmp3_mdct_18:
     44         stmfd    sp!,{r4-r11,lr}
     45         mov      r7,r2
     46         adr      r2,constdata$1
     47         mov      r6,r1
     48         add      r3,r2,#0x24
     49         add      r12,r3,#0x44
     50         add      r1,r0,#0x44
     51         mov      r5,r0
     52 
     53 @    for ( i=9@ i!=0@ i--)
     54 @    {
     55 
     56         mov      r4,#9
     57 Loop_1:
     58 
     59 @       tmp  = *(pt_vec)
     60 @		tmp1 = *(pt_vec_o)
     61 
     62         ldr      lr,[r0]		@@ tmp  == lr
     63         ldr      r8,[r3],#4		@@ tmp1 == r8
     64 
     65 @        tmp  = fxp_mul32_Q32( tmp<<1,  *(pt_cos++  ))
     66 @        tmp1 = fxp_mul32_Q27( tmp1, *(pt_cos_x--))
     67 
     68         mov      lr,lr,lsl #1
     69         smull    r10,lr,r8,lr
     70         ldr      r8,[r12],#-4
     71         ldr      r9,[r1]
     72         subs     r4,r4,#1
     73         smull    r9,r10,r8,r9
     74         mov      r8,r9,lsr #27
     75         add      r8,r8,r10,lsl #5
     76 
     77 @        *(pt_vec++)   =   tmp + tmp1
     78 @        *(pt_vec_o--) = fxp_mul32_Q28( (tmp - tmp1), *(pt_cos_split++))
     79 
     80         add      r9,lr,r8
     81         sub      r8,lr,r8
     82         ldr      lr,[r2],#4
     83         str      r9,[r0],#4
     84         smull    r8,r9,lr,r8
     85         mov      lr,r8,lsr #28
     86         add      lr,lr,r9,lsl #4
     87         str      lr,[r1],#-4
     88         bne      Loop_1
     89 
     90 @		}
     91 
     92         mov      r0,r5			@@ r0 = vec
     93         bl       pvmp3_dct_9
     94         add      r0,r5,#0x24	@@ r0 = &vec[9]
     95         bl       pvmp3_dct_9
     96 
     97         ldr      r0,[r5,#0x20]
     98         ldr      r2,[r5,#0x40]
     99         str      r0,[r5,#0x40]
    100         ldr      r0,[r5,#0x1c]
    101         ldr      r3,[r5,#0x38]
    102         str      r0,[r5,#0x38]
    103         ldr      r1,[r5,#0x18]
    104         ldr      r0,[r5,#0x30]
    105         str      r1,[r5,#0x30]
    106         ldr      r12,[r5,#0x14]
    107         ldr      r1,[r5,#0x28]
    108         str      r12,[r5,#0x28]
    109         ldr      r12,[r5,#0x10]
    110         str      r12,[r5,#0x20]
    111         ldr      r12,[r5,#0xc]
    112         str      r12,[r5,#0x18]
    113         ldr      r12,[r5,#8]
    114         str      r12,[r5,#0x10]
    115         ldr      r12,[r5,#4]
    116         str      r12,[r5,#8]
    117         ldr      r12,[r5,#0x24]
    118         sub      r12,r12,r1
    119         str      r12,[r5,#4]
    120         ldr      r12,[r5,#0x2c]
    121         sub      r1,r12,r1
    122         str      r1,[r5,#0xc]
    123         sub      r1,r12,r0
    124         str      r1,[r5,#0x14]
    125         ldr      r1,[r5,#0x34]
    126         sub      r0,r1,r0
    127         str      r0,[r5,#0x1c]
    128         sub      r0,r1,r3
    129         str      r0,[r5,#0x24]
    130         ldr      r1,[r5,#0x3c]
    131         sub      r3,r1,r3
    132         sub      r1,r1,r2
    133         str      r1,[r5,#0x34]
    134         str      r3,[r5,#0x2c]
    135         ldr      r1,[r5,#0x44]
    136         sub      r1,r1,r2
    137         str      r1,[r5,#0x3c]
    138         ldr      r12,[r5,#0]
    139 
    140 Loop_2:
    141         add      r1,r5,r4,lsl #2
    142         ldr      r2,[r1,#0x28]
    143         ldr      r3,[r6,r4,lsl #2]
    144         add      r0,r0,r2
    145         str      r0,[r1,#0x28]
    146         ldr      lr,[r7,r4,lsl #2]
    147         ldr      r1,[r1,#4]
    148         smlal    r0,r3,lr,r0
    149         mov      r0,r2
    150         add      r2,r12,r1
    151         rsb      r2,r2,#0
    152         str      r3,[r5,r4,lsl #2]
    153         str      r2,[r6,r4,lsl #2]
    154         add      r4,r4,#1
    155         cmp      r4,#6
    156         mov      r12,r1
    157 
    158         blt      Loop_2
    159 
    160         ldr      r1,[r5,#0x40]
    161         ldr      r2,[r6,#0x18]
    162         add      r3,r0,r1
    163         str      r3,[r5,#0x40]
    164         ldr      lr,[r7,r4,lsl #2]
    165         mov      r3,r3,lsl #1
    166         ldr      r0,[r5,#0x1c]
    167         smlal    r3,r2,lr,r3
    168         add      r3,r12,r0
    169         str      r2,[r5,#0x18]
    170         ldr      r2,[r6,#0x1c]
    171         rsb      r3,r3,#0
    172         str      r3,[r6,#0x18]
    173         ldr      r3,[r5,#0x20]
    174         add      r0,r3,r0
    175         rsb      r0,r0,#0
    176         str      r0,[r6,#0x1c]
    177         ldr      r3,[r5,#0x44]
    178         ldr      r0,[r6,#0x20]
    179         add      r3,r3,r1
    180         mov      r1,r2
    181         ldr      r10,[r7,#0x1c]
    182         mov      r2,r3,lsl #1
    183         smlal    r12,r1,r10,r2
    184         str      r1,[r5,#0x1c]
    185         ldr      r1,[r5,#0x20]
    186         ldr      r3,[r5,#0x24]
    187         add      r1,r1,r3
    188         rsb      r1,r1,#0
    189         str      r1,[r6,#0x20]
    190         ldr      r1,[r5,#0x44]
    191         ldr      r3,[r7,#0x20]
    192         mov      r1,r1,lsl #1
    193         smlal    r12,r0,r3,r1
    194         ldr      lr,[r7,#0x24]
    195         ldr      r3,[r6,#0x24]
    196         str      r0,[r5,#0x20]
    197         smlal    r1,r3,lr,r1
    198         ldr      r0,[r6,#0x40]
    199         ldr      r12,[r6,#0x44]
    200         str      r3,[r5,#0x24]
    201         ldr      r1,[r5,#0x28]
    202         ldr      r3,[r7,#0x44]
    203         mov      r1,r1,lsl #1
    204         smlal    r1,r12,r3,r1
    205         ldr      r1,[r5,#0x40]
    206         str      r12,[r5,#0x44]
    207         rsb      r8,r1,#0
    208         str      r8,[r5,#0x28]
    209         ldr      r1,[r5,#0x2c]
    210         ldr      r3,[r7,#0x40]
    211         mov      r1,r1,lsl #1
    212         smlal    r1,r0,r3,r1
    213         str      r0,[r5,#0x40]
    214         ldr      r0,[r5,#0x3c]
    215         ldr      r1,[r6,#0x38]
    216         ldr      r3,[r6,#0x3c]
    217         rsb      r9,r0,#0
    218         str      r9,[r5,#0x2c]
    219         ldr      r0,[r5,#0x30]
    220         ldr      r12,[r7,#0x3c]
    221         mov      r0,r0,lsl #1
    222         smlal    r0,r3,r12,r0
    223         str      r3,[r5,#0x3c]
    224         ldr      r0,[r5,#0x38]
    225         rsb      r0,r0,#0
    226         str      r0,[r5,#0x30]
    227         ldr      r3,[r5,#0x34]
    228         ldr      r12,[r7,#0x38]
    229         mov      r3,r3,lsl #1
    230         smlal    r3,r1,r12,r3
    231         mov      r0,r0,lsl #1
    232         str      r1,[r5,#0x38]
    233         ldr      r4,[r7,#0x34]
    234         ldr      r1,[r6,#0x34]
    235         ldr      r3,[r6,#0x30]
    236         smlal    r0,r1,r4,r0
    237         ldr      r12,[r6,#0x2c]
    238         ldr      lr,[r6,#0x28]
    239         str      r1,[r5,#0x34]
    240         ldr      r1,[r7,#0x30]
    241         mov      r0,r9,lsl #1
    242         smlal    r0,r3,r1,r0
    243         mov      r0,r8,lsl #1
    244         ldr      r1,[r7,#0x2c]
    245         str      r3,[r5,#0x30]
    246         smlal    r0,r12,r1,r0
    247         ldr      r0,[r7,#0x28]
    248         str      r12,[r5,#0x2c]
    249         smlal    r2,lr,r0,r2
    250         str      lr,[r5,#0x28]
    251         ldr      r1,[r6,#4]
    252         ldr      r12,[r7,#0x48]
    253         mov      r2,r1,lsl #1
    254         ldr      r1,[r6,#0x20]
    255         ldr      r0,[r6,#0]
    256         mov      r1,r1,lsl #1
    257         smull    r4,lr,r12,r1
    258         ldr      r3,[r6,#0x1c]
    259         str      lr,[r6,#0]
    260         ldr      r12,[r7,#0x4c]
    261         mov      r3,r3,lsl #1
    262         smull    r4,lr,r12,r3
    263         mov      r0,r0,lsl #1
    264         ldr      r12,[r7,#0x64]
    265         str      lr,[r6,#4]
    266         smull    r4,lr,r12,r2
    267         ldr      r12,[r7,#0x68]
    268         str      lr,[r6,#0x1c]
    269         smull    r4,lr,r12,r0
    270         ldr      r12,[r7,#0x6c]
    271         str      lr,[r6,#0x20]
    272         smull    lr,r0,r12,r0
    273         ldr      r12,[r7,#0x70]
    274         str      r0,[r6,#0x24]
    275         smull    r0,r2,r12,r2
    276         ldr      r0,[r7,#0x88]
    277         str      r2,[r6,#0x28]
    278         smull    r3,r2,r0,r3
    279         ldr      r0,[r7,#0x8c]
    280         str      r2,[r6,#0x40]
    281         smull    r2,r1,r0,r1
    282         str      r1,[r6,#0x44]
    283         ldr      r0,[r6,#0x18]
    284         ldr      lr,[r7,#0x50]
    285         mov      r1,r0,lsl #1
    286         ldr      r0,[r6,#0x14]
    287         smull    r5,r4,lr,r1
    288         mov      r3,r0,lsl #1
    289         ldr      r0,[r6,#0x10]
    290         mov      r12,r0,lsl #1
    291         ldr      r0,[r6,#0xc]
    292         mov      r2,r0,lsl #1
    293         ldr      r0,[r6,#8]
    294         str      r4,[r6,#8]
    295         ldr      lr,[r7,#0x54]
    296         mov      r0,r0,lsl #1
    297         smull    r5,r4,lr,r3
    298         ldr      lr,[r7,#0x58]
    299         str      r4,[r6,#0xc]
    300         smull    r5,r4,lr,r12
    301         ldr      lr,[r7,#0x5c]
    302         str      r4,[r6,#0x10]
    303         smull    r5,r4,lr,r2
    304         ldr      lr,[r7,#0x60]
    305         str      r4,[r6,#0x14]
    306         smull    r5,r4,lr,r0
    307         ldr      lr,[r7,#0x74]
    308         str      r4,[r6,#0x18]
    309         smull    r4,r0,lr,r0
    310         ldr      lr,[r7,#0x78]
    311         str      r0,[r6,#0x2c]
    312         smull    r0,r2,lr,r2
    313         ldr      r0,[r7,#0x7c]
    314         str      r2,[r6,#0x30]
    315         smull    r12,r2,r0,r12
    316         ldr      r0,[r7,#0x80]
    317         str      r2,[r6,#0x34]
    318         smull    r3,r2,r0,r3
    319         ldr      r0,[r7,#0x84]
    320         str      r2,[r6,#0x38]
    321         smull    r2,r1,r0,r1
    322         str      r1,[r6,#0x3c]
    323         ldmfd    sp!,{r4-r11,pc}
    324 
    325 @------------------------------------------------------------------------------
    326 
    327 constdata$1:
    328 cosTerms_dct18:
    329         .word      0x0807d2b0
    330         .word      0x08483ee0
    331         .word      0x08d3b7d0
    332         .word      0x09c42570
    333         .word      0x0b504f30
    334         .word      0x0df29440
    335         .word      0x12edfb20
    336         .word      0x1ee8dd40
    337         .word      0x5bca2a00
    338 cosTerms_1_ov_cos_phi:
    339         .word      0x400f9c00
    340         .word      0x408d6080
    341         .word      0x418dcb80
    342         .word      0x431b1a00
    343         .word      0x4545ea00
    344         .word      0x48270680
    345         .word      0x4be25480
    346         .word      0x50ab9480
    347         .word      0x56ce4d80
    348         .word      0x05ebb630
    349         .word      0x06921a98
    350         .word      0x0771d3a8
    351         .word      0x08a9a830
    352         .word      0x0a73d750
    353         .word      0x0d4d5260
    354         .word      0x127b1ca0
    355         .word      0x1ea52b40
    356         .word      0x5bb3cc80
    357 
    358