Home | History | Annotate | Download | only in armv7
      1 @/******************************************************************************
      2 @ *
      3 @ * Copyright (C) 2018 The Android Open Source Project
      4 @ *
      5 @ * Licensed under the Apache License, Version 2.0 (the "License");
      6 @ * you may not use this file except in compliance with the License.
      7 @ * You may obtain a copy of the License at:
      8 @ *
      9 @ * http://www.apache.org/licenses/LICENSE-2.0
     10 @ *
     11 @ * Unless required by applicable law or agreed to in writing, software
     12 @ * distributed under the License is distributed on an "AS IS" BASIS,
     13 @ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 @ * See the License for the specific language governing permissions and
     15 @ * limitations under the License.
     16 @ *
     17 @ *****************************************************************************
     18 @ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
     19 @*/
     20 
     21 
     22 .text
     23 .p2align 2
     24         .extern ixheaacd_radix4bfly
     25 .hidden ixheaacd_radix4bfly
     26         .extern ixheaacd_postradixcompute2
     27 .hidden ixheaacd_postradixcompute2
     28         .extern ixheaacd_sbr_imdct_using_fft
     29 .hidden ixheaacd_sbr_imdct_using_fft
     30 
     31         .global ixheaacd_dec_DCT2_64_asm
     32 
     33 ixheaacd_dec_DCT2_64_asm:
     34 
     35     STMFD           sp!, {r0-r3, r4-r12, r14}
     36     ADD             R2, R1, #252
     37     MOV             R3, #32
     38     MOV             R4, #-4
     39 
     40     ADD             R2, R2, #4
     41 
     42 
     43 FOR_LOOP:
     44 
     45     VLD2.32         {Q0, Q1}, [R0]!
     46     SUBS            R3, R3, #4
     47 
     48     VST1.32         {Q0}, [R1]!
     49     SUB             R2, R2, #16
     50 
     51     VREV64.32       Q1, Q1
     52     VSWP            D2, D3
     53     VST1.32         {Q1}, [R2]
     54     BGT             FOR_LOOP
     55 
     56     LDR             r0, [sp, #8]
     57     MOV             r1, #32
     58     LDR             r2, [sp, #4]
     59     LDR             r3, [sp]
     60 
     61     LDR             r4, [sp, #12]
     62     STR             r4, [sp, #-4]!
     63     STR             r4, [sp, #-4]!
     64     STR             r4, [sp, #-4]!
     65     STR             r4, [sp, #-4]!
     66 
     67     BL              ixheaacd_sbr_imdct_using_fft
     68 
     69     ADD             sp, sp, #16
     70 
     71     LDR             r0, [sp]
     72 
     73 
     74     LDR             r2, [sp, #56]
     75 
     76     VPUSH           {D8 - D15}
     77     ADD             R5, R0, #252
     78     VLD1.32         D0, [R0]
     79     ADD             R3, R2, #2
     80     VSHL.S32        D0, D0, #1
     81     VST1.32         D0, [R0]!
     82     SUB             R5, R5, #28
     83 
     84 
     85     VLD2.32         {Q0, Q1}, [R0]!
     86 
     87     VLD2.32         {Q2, Q3}, [R5]!
     88     VREV64.32       Q2, Q2
     89     VSWP            D4, D5
     90     MOV             R10, #-8
     91     VREV64.32       Q3, Q3
     92     ADD             R4, R2, #30
     93     VSWP            D6, D7
     94     SUB             R4, R4, #6
     95     VLD1.16         D8, [R3]!
     96     VSUB.I32        Q11, Q3, Q1
     97     VLD1.16         D10, [R4], R10
     98     VADD.I32        Q10, Q3, Q1
     99     VREV64.16       D10, D10
    100     VSUB.I32        Q9, Q0, Q2
    101     VUZP.16         D20, D21
    102     VADD.I32        Q8, Q0, Q2
    103     VUZP.16         D18, D19
    104     VMULL.U16       Q15, D20, D8
    105     VMLSL.U16       Q15, D18, D10
    106     VMULL.U16       Q14, D18, D8
    107     VMLAL.U16       Q14, D20, D10
    108     SUB             R11, R0, #32
    109     VSHR.S32        Q15, Q15, #16
    110     VSHR.U32        Q14, Q14, #16
    111     SUB             R12, R5, #32
    112     VMLAL.S16       Q15, D21, D8
    113     VMLSL.S16       Q15, D19, D10
    114 
    115     VLD2.32         {Q0, Q1}, [R0]!
    116     SUB             R5, R5, #64
    117     VMLAL.S16       Q14, D19, D8
    118     VLD2.32         {Q2, Q3}, [R5]!
    119     VMLAL.S16       Q14, D21, D10
    120     VREV64.32       Q2, Q2
    121     VSHL.S32        Q15, Q15, #1
    122     VSWP            D4, D5
    123     VSHL.S32        Q14, Q14, #1
    124 
    125     VREV64.32       Q3, Q3
    126     VADD.I32        Q13, Q8, Q15
    127     VSWP            D6, D7
    128     VADD.I32        Q12, Q11, Q14
    129 
    130 
    131     VLD1.16         D8, [R3]!
    132     VSUB.I32        Q7, Q14, Q11
    133     VLD1.16         D10, [R4], R10
    134 
    135     VSUB.I32        Q6, Q8, Q15
    136     VREV64.32       Q7, Q7
    137     VREV64.32       Q6, Q6
    138     VSWP            D14, D15
    139     VSWP            D12, D13
    140     VREV64.16       D10, D10
    141 
    142 
    143     VSUB.I32        Q11, Q3, Q1
    144     VSWP            Q13, Q12
    145     VADD.I32        Q10, Q3, Q1
    146     VST2.32         {Q12, Q13}, [R11]!
    147     VSUB.I32        Q9, Q0, Q2
    148 
    149     VADD.I32        Q8, Q0, Q2
    150     VST2.32         {Q6, Q7}, [R12]
    151     SUB             R11, R0, #32
    152 
    153     VUZP.16         D20, D21
    154     SUB             R12, R5, #32
    155 
    156     VUZP.16         D18, D19
    157     SUB             R5, R5, #64
    158 
    159     VMULL.U16       Q15, D20, D8
    160     VLD2.32         {Q0, Q1}, [R0]!
    161     VMLSL.U16       Q15, D18, D10
    162     VLD2.32         {Q2, Q3}, [R5]!
    163     VMULL.U16       Q14, D18, D8
    164     VREV64.32       Q2, Q2
    165     VMLAL.U16       Q14, D20, D10
    166     VSWP            D4, D5
    167     VSHR.S32        Q15, Q15, #16
    168     VREV64.32       Q3, Q3
    169     VMLAL.S16       Q15, D21, D8
    170     VMLSL.S16       Q15, D19, D10
    171     VSWP            D6, D7
    172     VSHR.U32        Q14, Q14, #16
    173     VMLAL.S16       Q14, D19, D8
    174     VLD1.16         D8, [R3]!
    175     VMLAL.S16       Q14, D21, D10
    176     VSHL.S32        Q15, Q15, #1
    177     VLD1.16         D10, [R4], R10
    178 
    179     VSHL.S32        Q14, Q14, #1
    180     VREV64.16       D10, D10
    181     VADD.I32        Q13, Q8, Q15
    182     VADD.I32        Q12, Q11, Q14
    183 
    184 
    185     VSUB.I32        Q7, Q14, Q11
    186     VSUB.I32        Q6, Q8, Q15
    187     VREV64.32       Q7, Q7
    188     VSUB.I32        Q11, Q3, Q1
    189     VREV64.32       Q6, Q6
    190     VADD.I32        Q10, Q3, Q1
    191     VSWP            D14, D15
    192     VSUB.I32        Q9, Q0, Q2
    193     VSWP            D12, D13
    194     VADD.I32        Q8, Q0, Q2
    195     VSWP            Q13, Q12
    196 
    197 
    198     VUZP.16         D20, D21
    199     VUZP.16         D18, D19
    200     VMULL.U16       Q15, D20, D8
    201     VMLSL.U16       Q15, D18, D10
    202     VST2.32         {Q12, Q13}, [R11]!
    203     VMULL.U16       Q14, D18, D8
    204     VMLAL.U16       Q14, D20, D10
    205     VST2.32         {Q6, Q7}, [R12]
    206 
    207     SUB             R11, R0, #32
    208     VLD2.32         {Q0, Q1}, [R0]!
    209     SUB             R12, R5, #32
    210     SUB             R5, R5, #64
    211     VSHR.S32        Q15, Q15, #16
    212     VLD2.32         {Q2, Q3}, [R5]!
    213     VMLAL.S16       Q15, D21, D8
    214     VREV64.32       Q2, Q2
    215     VMLSL.S16       Q15, D19, D10
    216     VSWP            D4, D5
    217     VSHR.U32        Q14, Q14, #16
    218 
    219     VREV64.32       Q3, Q3
    220     VMLAL.S16       Q14, D19, D8
    221     VSWP            D6, D7
    222     VMLAL.S16       Q14, D21, D10
    223     VSHL.S32        Q15, Q15, #1
    224 
    225     VLD1.16         D8, [R3]!
    226     VSHL.S32        Q14, Q14, #1
    227 
    228     VADD.I32        Q13, Q8, Q15
    229 
    230     VLD1.16         D10, [R4], R10
    231 
    232     VADD.I32        Q12, Q11, Q14
    233 
    234 
    235     VREV64.16       D10, D10
    236     VSUB.I32        Q7, Q14, Q11
    237 
    238 
    239     VSUB.I32        Q6, Q8, Q15
    240     VREV64.32       Q7, Q7
    241     VREV64.32       Q6, Q6
    242     VSWP            D14, D15
    243     VSWP            D12, D13
    244 
    245     VSWP            Q13, Q12
    246     VSUB.I32        Q11, Q3, Q1
    247     VST2.32         {Q12, Q13}, [R11]!
    248     VADD.I32        Q10, Q3, Q1
    249 
    250     VST2.32         {Q6, Q7}, [R12]
    251 
    252     SUB             R11, R0, #32
    253 
    254     VSUB.I32        Q9, Q0, Q2
    255     VADD.I32        Q8, Q0, Q2
    256     VUZP.16         D20, D21
    257     SUB             R12, R5, #32
    258     VUZP.16         D18, D19
    259     SUB             R5, R5, #64
    260 
    261     VMULL.U16       Q15, D20, D8
    262     VMLSL.U16       Q15, D18, D10
    263     VMULL.U16       Q14, D18, D8
    264     VMLAL.U16       Q14, D20, D10
    265     VSHR.S32        Q15, Q15, #16
    266     VMLAL.S16       Q15, D21, D8
    267     VMLSL.S16       Q15, D19, D10
    268 
    269     VSHR.U32        Q14, Q14, #16
    270     VMLAL.S16       Q14, D19, D8
    271     VMLAL.S16       Q14, D21, D10
    272 
    273     VSHL.S32        Q15, Q15, #1
    274     VSHL.S32        Q14, Q14, #1
    275     VADD.I32        Q13, Q8, Q15
    276     VADD.I32        Q12, Q11, Q14
    277 
    278     VSUB.I32        Q7, Q14, Q11
    279     VSUB.I32        Q6, Q8, Q15
    280     VREV64.32       Q7, Q7
    281     VREV64.32       Q6, Q6
    282     VSWP            D14, D15
    283     VSWP            D12, D13
    284 
    285 
    286     VSWP            Q13, Q12
    287     VST2.32         {Q12, Q13}, [R11]!
    288 
    289     VST2.32         {Q6, Q7}, [R12]
    290     VPOP            {D8 - D15}
    291 
    292 
    293 
    294 
    295 
    296 
    297 
    298 
    299 
    300 
    301 
    302 
    303     LDMFD           sp!, {r0-r2, r3}
    304     LDR             R1, [SP, #48]
    305     LDR             R2, [SP, #44]
    306     ADD             R3, R1, #126
    307     VLD1.32         D0[0], [R0, :32]!
    308     SUB             R4, R1, #2
    309 
    310     ADD             R5, R1, #130
    311     VLD1.32         D1[0], [R0, :32]!
    312     ADD             R7, R2, #4
    313 
    314     MOV             R6, #0x8000
    315     VDUP.32         Q15, R6
    316 
    317     VADD.I32        D2, D0, D1
    318     VSHR.S32        D2, D2, #1
    319     VSHL.S32        D2, D2, #4
    320     VADD.I32        Q2, Q1, Q15
    321     VSHR.S32        Q2, Q2, #16
    322     VSUB.I32        D6, D0, D1
    323     VST1.16         D4[0], [R1]!
    324     MOV             R8, #28
    325 
    326     MOV             R9, #-2
    327     VLD2.32         {Q0, Q1}, [R0]!
    328     SUB             R4, R4, #6
    329 
    330     SUB             R3, R3, #6
    331     VLD2.16         {D4, D5}, [R7]!
    332 
    333     VUZP.16         D0, D1
    334 
    335     VUZP.16         D2, D3
    336     VMULL.U16       Q14, D0, D4
    337 
    338     VMLSL.U16       Q14, D2, D5
    339     VSHR.S32        Q14, Q14, #16
    340     VMLAL.S16       Q14, D1, D4
    341     VMLSL.S16       Q14, D3, D5
    342 
    343 
    344     VMULL.U16       Q13, D0, D5
    345     VMLAL.U16       Q13, D2, D4
    346     VSHR.U32        Q13, Q13, #16
    347     VMLAL.S16       Q13, D1, D5
    348     VMLAL.S16       Q13, D3, D4
    349 
    350     VSHL.S32        Q12, Q14, #4
    351     VLD2.32         {Q0, Q1}, [R0]!
    352     VADD.I32        Q12, Q12, Q15
    353 
    354     VSHR.S32        Q12, Q12, #16
    355     VUZP.16         D24, D25
    356 
    357 
    358     VSHL.S32        Q11, Q13, #4
    359     VLD2.16         {D4, D5}, [R7]!
    360     VADD.I32        Q11, Q11, Q15
    361 
    362     VSHR.S32        Q11, Q11, #16
    363     VUZP.16         D22, D23
    364 
    365 
    366     VQNEG.S16       D20, D22
    367 
    368     VUZP.16         D0, D1
    369     VUZP.16         D2, D3
    370     SUB             R8, R8, #8
    371 
    372 LOOP_2:
    373 
    374     VMULL.U16       Q14, D0, D4
    375     VST1.16         D24, [R1]!
    376     VMLSL.U16       Q14, D2, D5
    377 
    378     VREV64.16       D24, D24
    379     VMULL.U16       Q13, D0, D5
    380 
    381     VMLAL.U16       Q13, D2, D4
    382     VST1.16         D24, [R4]
    383     SUB             R4, R4, #8
    384 
    385     VREV64.16       D22, D22
    386     VSHR.S32        Q14, Q14, #16
    387     VSHR.U32        Q13, Q13, #16
    388     VST1.16         D22, [R3]
    389     VMLAL.S16       Q14, D1, D4
    390     VMLSL.S16       Q14, D3, D5
    391     VST1.16         D20, [R5]!
    392     VMLAL.S16       Q13, D1, D5
    393     VMLAL.S16       Q13, D3, D4
    394     VSHL.S32        Q12, Q14, #4
    395 
    396     SUB             R3, R3, #8
    397     VLD2.32         {Q0, Q1}, [R0]!
    398     VSHL.S32        Q11, Q13, #4
    399 
    400     VADD.I32        Q12, Q12, Q15
    401     VLD2.16         {D4, D5}, [R7]!
    402 
    403     VADD.I32        Q11, Q11, Q15
    404     VUZP.16         D0, D1
    405     VSHR.S32        Q12, Q12, #16
    406     VUZP.16         D24, D25
    407 
    408 
    409     VSHR.S32        Q11, Q11, #16
    410     VUZP.16         D22, D23
    411     SUBS            R8, R8, #4
    412 
    413     VUZP.16         D2, D3
    414     VQNEG.S16       D20, D22
    415 
    416     BGT             LOOP_2
    417 
    418 
    419     VMULL.U16       Q14, D0, D4
    420     VST1.16         D24, [R1]!
    421     VMLSL.U16       Q14, D2, D5
    422     VREV64.16       D24, D24
    423     VMULL.U16       Q13, D0, D5
    424     VMLAL.U16       Q13, D2, D4
    425     VST1.16         D24, [R4]
    426     VSHR.S32        Q14, Q14, #16
    427     SUB             R4, R4, #8
    428     VST1.16         D20, [R5]!
    429 
    430     VMLAL.S16       Q14, D1, D4
    431     VMLSL.S16       Q14, D3, D5
    432     VREV64.16       D22, D22
    433     VSHR.U32        Q13, Q13, #16
    434     VST1.16         D22, [R3]
    435     SUB             R3, R3, #8
    436     VMLAL.S16       Q13, D1, D5
    437     VSHL.S32        Q12, Q14, #4
    438     VMLAL.S16       Q13, D3, D4
    439     VADD.I32        Q12, Q12, Q15
    440 
    441     VSHL.S32        Q11, Q13, #4
    442 
    443     VSHR.S32        Q12, Q12, #16
    444     VUZP.16         D24, D25
    445     VADD.I32        Q11, Q11, Q15
    446 
    447     VST1.16         D24, [R1]!
    448     VSHR.S32        Q11, Q11, #16
    449     VREV64.16       D24, D24
    450     VUZP.16         D22, D23
    451 
    452     VST1.16         D24, [R4]
    453     VQNEG.S16       D20, D22
    454 
    455     SUB             R4, R4, #2
    456     VREV64.16       D22, D22
    457     VST1.16         D22, [R3]
    458     SUB             R3, R3, #2
    459 
    460     VST1.16         D20, [R5]!
    461     VLD2.32         {Q0, Q1}, [R0]!
    462 
    463     VLD2.16         {Q2}, [R7]
    464     ADD             R7, R7, #12
    465     VUZP.16         D0, D1
    466     VUZP.16         D2, D3
    467 
    468     VMULL.U16       Q14, D0, D4
    469     VMLSL.U16       Q14, D2, D5
    470     VSHR.S32        Q14, Q14, #16
    471     VMLAL.S16       Q14, D1, D4
    472     VMLSL.S16       Q14, D3, D5
    473 
    474     VMULL.U16       Q13, D0, D5
    475     VMLAL.U16       Q13, D2, D4
    476     VSHR.U32        Q13, Q13, #16
    477     VMLAL.S16       Q13, D1, D5
    478     VMLAL.S16       Q13, D3, D4
    479 
    480     VSHL.S32        Q12, Q14, #4
    481     VADD.I32        Q12, Q12, Q15
    482     VSHR.S32        Q12, Q12, #16
    483     VUZP.16         D24, D25
    484 
    485     VSHL.S32        Q11, Q13, #4
    486     VADD.I32        Q11, Q11, Q15
    487     VSHR.S32        Q11, Q11, #16
    488     VUZP.16         D22, D23
    489 
    490     VQNEG.S16       D20, D22
    491 
    492     VST1.16         D24[0], [R1]!
    493     VST1.16         D24[1], [R1]!
    494     VST1.16         D24[2], [R1]!
    495 
    496     VST1.16         D24[0], [R4], R9
    497     VST1.16         D24[1], [R4], R9
    498     VST1.16         D24[2], [R4], R9
    499 
    500     VST1.16         D22[0], [R3], R9
    501     VST1.16         D22[1], [R3], R9
    502     VST1.16         D22[2], [R3], R9
    503 
    504     VST1.16         D20[0], [R5]!
    505     VST1.16         D20[1], [R5]!
    506     VST1.16         D20[2], [R5]!
    507     VUZP.16         D6, D7
    508     VLD1.16         D0, [R7]!
    509     VMULL.U16       Q1, D0, D6
    510     VSHR.S32        Q1, Q1, #16
    511     VMLAL.S16       Q1, D0, D7
    512     VSHL.S32        Q1, Q1, #4
    513 
    514     VADD.I32        Q1, Q1, Q15
    515     VSHR.S32        Q1, Q1, #16
    516 
    517     VST1.16         D2[0], [R1]!
    518     VST1.16         D2[0], [R4], R9
    519 
    520     LDMFD           sp!, {r4-r12, r15}
    521 
    522 
    523