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 .global ixheaacd_dct3_32
     25 .extern ixheaacd_radix4bfly
     26 .hidden ixheaacd_radix4bfly
     27 .extern ixheaacd_postradixcompute4
     28 .hidden ixheaacd_postradixcompute4
     29 
     30 ixheaacd_dct3_32:
     31 
     32 
     33     STMFD           sp!, {R4-R12, R14}
     34     VPUSH           {D8 - D15}
     35     ADD             R6, R0, #196
     36     SUB             R7, R6, #8
     37     ADD             R10, R7, #4
     38     MOV             R9, #0
     39     VDUP.32         D0, R9
     40     ADD             R4, R2, #8
     41     MOV             R8, R1
     42 
     43     VLD1.32         D0[0], [R10]
     44     MOV             R11, #-4
     45 
     46     VSHR.S32        D0, D0, #7
     47     VLD4.16         {D12, D13, D14, D15}, [R4]!
     48 
     49     MOV             R12, #-16
     50     VST1.32         D0, [R8]!
     51     SUB             R7, R7, #12
     52 
     53     VLD1.32         {Q0}, [R6]!
     54     VLD1.32         {Q1}, [R7], R12
     55     SUB             R9, R6, #144
     56 
     57     VREV64.32       Q1, Q1
     58     SUB             R5, R7, #112
     59 
     60     VSWP            D2, D3
     61     VSHR.S32        Q0, Q0, #7
     62 
     63     VSHR.S32        Q1, Q1, #7
     64     VLD1.32         {Q3}, [R9]!
     65     VADD.I32        Q2, Q1, Q0
     66 
     67     VUZP.16         D4, D5
     68     VSHR.S32        Q3, Q3, #7
     69 
     70 
     71     VLD1.32         {Q4}, [R5], R12
     72     VMULL.U16       Q15, D4, D12
     73 
     74     VREV64.32       Q4, Q4
     75     VMULL.U16       Q14, D4, D13
     76 
     77     VSWP            D8, D9
     78 
     79     VSHR.S32        Q4, Q4, #7
     80     VLD1.32         {Q0}, [R6]!
     81     VSUB.I32        Q5, Q3, Q4
     82 
     83     VUZP.16         D10, D11
     84 
     85     VMLAL.U16       Q15, D10, D13
     86     VLD1.32         {Q1}, [R7], R12
     87     VMLSL.U16       Q14, D10, D12
     88 
     89     VREV64.32       Q1, Q1
     90     VSHR.S32        Q0, Q0, #7
     91 
     92     VSWP            D2, D3
     93 
     94     VSHR.U32        Q15, Q15, #16
     95     VSHR.S32        Q1, Q1, #7
     96 
     97     VMLAL.S16       Q15, D5, D12
     98     VMLAL.S16       Q15, D11, D13
     99 
    100 
    101     VSHR.S32        Q14, Q14, #16
    102     VMLAL.S16       Q14, D5, D13
    103     VADD.I32        Q2, Q1, Q0
    104     VMLSL.S16       Q14, D11, D12
    105 
    106     VUZP.16         D4, D5
    107     SUB             R9, R6, #144
    108 
    109     VSWP            Q15, Q14
    110     SUB             R5, R7, #112
    111 
    112     VST2.32         {Q14, Q15}, [R8]!
    113 
    114     VLD1.32         {Q3}, [R9]!
    115 
    116     VLD1.32         {Q4}, [R5], R12
    117     VSHR.S32        Q3, Q3, #7
    118 
    119     VREV64.32       Q4, Q4
    120 
    121     VSWP            D8, D9
    122 
    123     VSHR.S32        Q4, Q4, #7
    124     VLD4.16         {D12, D13, D14, D15}, [R4]!
    125     VSUB.I32        Q5, Q3, Q4
    126 
    127     VUZP.16         D10, D11
    128     VMULL.U16       Q15, D4, D12
    129     VMLAL.U16       Q15, D10, D13
    130     VMULL.U16       Q14, D4, D13
    131     VLD1.32         {Q0}, [R6]!
    132     VMLSL.U16       Q14, D10, D12
    133     VLD1.32         {Q1}, [R7], R11
    134     VSHR.U32        Q15, Q15, #16
    135 
    136     VREV64.32       Q1, Q1
    137     VSHR.S32        Q14, Q14, #16
    138 
    139     VSWP            D2, D3
    140     VSHR.S32        Q0, Q0, #7
    141 
    142     SUB             R9, R6, #144
    143 
    144     SUB             R5, R7, #124
    145     VLD1.32         {Q3}, [R9]!
    146     VMLAL.S16       Q14, D5, D13
    147 
    148     VMLSL.S16       Q14, D11, D12
    149     VLD1.32         {Q4}, [R5], R11
    150     VMLAL.S16       Q15, D5, D12
    151 
    152     VREV64.32       Q4, Q4
    153     VMLAL.S16       Q15, D11, D13
    154 
    155     VSWP            D8, D9
    156     VSHR.S32        Q1, Q1, #7
    157 
    158     VADD.I32        Q2, Q1, Q0
    159     VLD4.16         {D12, D13, D14, D15}, [R4]!
    160     VSHR.S32        Q3, Q3, #7
    161 
    162     VUZP.16         D4, D5
    163     VSHR.S32        Q4, Q4, #7
    164 
    165     VSWP            Q15, Q14
    166     VSUB.I32        Q5, Q3, Q4
    167 
    168     VST2.32         {Q14, Q15}, [R8]!
    169 
    170     VUZP.16         D10, D11
    171     VMULL.U16       Q15, D4, D12
    172 
    173     VMLAL.U16       Q15, D10, D13
    174     VLD1.32         D0, [R6]!
    175     VMULL.U16       Q14, D4, D13
    176 
    177     VMLSL.U16       Q14, D10, D12
    178     VLD1.32         D1[0], [R6]!
    179 
    180     VSHR.U32        Q15, Q15, #16
    181     VLD1.32         D2[0], [R7], R11
    182 
    183     VMLAL.S16       Q15, D5, D12
    184     VLD1.32         D2[1], [R7], R11
    185     VMLAL.S16       Q15, D11, D13
    186 
    187     SUB             R9, R6, #140
    188     VLD1.32         D3[0], [R7], R11
    189 
    190     SUB             R5, R7, #116
    191     VLD1.32         D6, [R9]!
    192     VSHR.S32        Q14, Q14, #16
    193 
    194     VSHR.S32        Q0, Q0, #7
    195     VLD1.32         D7[0], [R9]!
    196     VMLAL.S16       Q14, D5, D13
    197 
    198     VLD1.32         D8[0], [R5], R11
    199     VMLSL.S16       Q14, D11, D12
    200 
    201     VSHR.S32        Q1, Q1, #7
    202     VLD4.16         {D12, D13, D14, D15}, [R4]
    203     VADD.I32        Q2, Q1, Q0
    204 
    205     VLD1.32         D8[1], [R5], R11
    206     VSHR.S32        Q3, Q3, #7
    207 
    208     VSWP            Q15, Q14
    209 
    210     VLD1.32         D9[0], [R5], R11
    211 
    212     VSHR.S32        Q4, Q4, #7
    213     VST2.32         {Q14, Q15}, [R8]!
    214     ADD             R4, #24
    215 
    216     VUZP.16         D4, D5
    217     VSUB.I32        Q5, Q3, Q4
    218 
    219     VUZP.16         D10, D11
    220     VMULL.U16       Q15, D4, D12
    221 
    222     VMLAL.U16       Q15, D10, D13
    223     VMULL.U16       Q14, D4, D13
    224 
    225     VMLSL.U16       Q14, D10, D12
    226     VLD1.16         D0[0], [R4]!
    227     VSHR.U32        Q15, Q15, #16
    228 
    229     VSHR.S32        Q14, Q14, #16
    230     VLD1.32         D2[0], [R7], R11
    231     VMLAL.S16       Q15, D5, D12
    232 
    233     SUB             R5, R7, #124
    234     VMLAL.S16       Q15, D11, D13
    235     VLD1.32         D4[0], [R5]
    236     VMLAL.S16       Q14, D5, D13
    237 
    238     VMLSL.S16       Q14, D11, D12
    239 
    240     VSHR.S32        D2, D2, #7
    241     VST1.32         D30[0], [R8]!
    242     VSHR.S32        D4, D4, #7
    243     VSUB.I32        D2, D2, D4
    244 
    245     VMOV            D4, D2
    246     VST1.32         D28[0], [R8]!
    247     MOV             R6, R1
    248 
    249     ADD             R7, R1, #124
    250     VST1.32         D30[1], [R8]!
    251     ADD             R10, R3, #16
    252 
    253     SUB             R7, R7, #28
    254     VST1.32         D28[1], [R8]!
    255     MOV             R5, #-16
    256 
    257     MOV             R9, #-4
    258     VST1.32         D31[0], [R8]!
    259     MOV             R11, #16
    260 
    261     VST1.32         D29[0], [R8]!
    262     MOV             R12, #4
    263 
    264     VUZP.16         D4, D5
    265     MOV             R8, #6
    266 
    267     VLD1.16         D1[0], [R4], R8
    268     VMULL.U16       Q15, D4, D0
    269 
    270 
    271     VUZP.16         D2, D3
    272     VMULL.U16       Q14, D4, D1
    273 
    274     VMLAL.U16       Q15, D2, D1
    275     VLD2.32         {D10, D11}, [R6]
    276     VMLSL.U16       Q14, D2, D0
    277 
    278     ADD             R4, R3, #4
    279     MOV             R8, #-32
    280     VSHR.U32        Q15, Q15, #16
    281     VSHR.S32        Q14, Q14, #16
    282     VMLAL.S16       Q15, D5, D0
    283     VMLAL.S16       Q15, D3, D1
    284     VMLAL.S16       Q14, D5, D1
    285     VMLSL.S16       Q14, D3, D0
    286 
    287     VADD.I32        D14, D11, D28
    288     VLD2.32         {Q2, Q3}, [R7]
    289     VNEG.S32        D14, D14
    290 
    291     VREV64.32       Q2, Q2
    292     VSUB.I32        D12, D10, D30
    293 
    294     VREV64.32       Q3, Q3
    295     VADD.I32        D10, D10, D30
    296 
    297     VSWP            D4, D5
    298     VADD.I32        D10, D10, D14
    299 
    300     VSWP            D6, D7
    301     VSUB.I32        D11, D11, D28
    302 
    303     VADD.I32        D11, D11, D12
    304     VLD2.16         {D8, D9}, [R10], R5
    305     VSHR.S32        D10, D10, #1
    306 
    307     VREV64.16       D8, D8
    308     VSHR.S32        D11, D11, #1
    309 
    310     VUZP.32         D10, D11
    311 
    312     VST1.32         D10, [R6]!
    313     VLD2.32         {Q0, Q1}, [R6]
    314 
    315     VADD.I32        Q7, Q0, Q2
    316     VLD2.16         {D10, D11}, [R4], R11
    317     VSUB.I32        Q6, Q0, Q2
    318 
    319     VUZP.16         D12, D13
    320     VADD.I32        Q8, Q1, Q3
    321 
    322     VUZP.16         D16, D17
    323     VSUB.I32        Q9, Q1, Q3
    324 
    325 
    326     VMULL.U16       Q15, D12, D8
    327     VMLAL.U16       Q15, D16, D10
    328     VMULL.U16       Q14, D12, D10
    329     VMLSL.U16       Q14, D16, D8
    330     VSHR.S32        Q7, Q7, #1
    331     VSHR.U32        Q15, Q15, #16
    332     VSHR.S32        Q9, Q9, #1
    333     VSHR.S32        Q14, Q14, #16
    334     VMLAL.S16       Q15, D13, D8
    335     VMLAL.S16       Q15, D17, D10
    336     VMLAL.S16       Q14, D13, D10
    337     VMLSL.S16       Q14, D17, D8
    338 
    339     VSUB.I32        Q10, Q7, Q15
    340     VLD2.16         {D8, D9}, [R10]
    341     VADD.I32        Q13, Q7, Q15
    342 
    343     VREV64.32       Q13, Q13
    344     VSWP            D26, D27
    345 
    346     VADD.I32        Q11, Q9, Q14
    347     VREV64.16       D8, D8
    348 
    349     VSUB.I32        Q12, Q14, Q9
    350 
    351     VREV64.32       Q12, Q12
    352 
    353     VST2.32         {Q10, Q11}, [R6]!
    354     VSWP            D24, D25
    355     VSWP            Q12, Q13
    356     VST2.32         {Q12, Q13}, [R7], R8
    357 
    358     VLD2.32         {Q0, Q1}, [R6]
    359     VLD2.32         {Q2, Q3}, [R7]
    360 
    361     VREV64.32       Q2, Q2
    362     VREV64.32       Q3, Q3
    363 
    364     VSWP            D4, D5
    365     VSWP            D6, D7
    366 
    367     VSUB.I32        Q6, Q0, Q2
    368     VADD.I32        Q7, Q0, Q2
    369     VLD2.16         {D10, D11}, [R4], R11
    370     VADD.I32        Q8, Q1, Q3
    371 
    372     VUZP.16         D12, D13
    373     VSUB.I32        Q9, Q1, Q3
    374 
    375 
    376     VUZP.16         D16, D17
    377     VMULL.U16       Q15, D12, D8
    378 
    379     VMLAL.U16       Q15, D16, D10
    380     VMULL.U16       Q14, D12, D10
    381     VMLSL.U16       Q14, D16, D8
    382     ADD             R7, R7, #8
    383     VSHR.U32        Q15, Q15, #16
    384     VSHR.S32        Q7, Q7, #1
    385     VSHR.S32        Q14, Q14, #16
    386     VMLAL.S16       Q15, D13, D8
    387     VMLAL.S16       Q15, D17, D10
    388     VMLAL.S16       Q14, D13, D10
    389     VMLSL.S16       Q14, D17, D8
    390 
    391     VSHR.S32        Q9, Q9, #1
    392     VSUB.I32        Q10, Q7, Q15
    393     VSUB.I32        Q12, Q14, Q9
    394 
    395     VADD.I32        Q11, Q9, Q14
    396     VST1.32         D20[0], [R6]!
    397     VADD.I32        Q13, Q7, Q15
    398 
    399 
    400     VST1.32         D22[0], [R6]!
    401     VST1.32         D20[1], [R6]!
    402     VST1.32         D22[1], [R6]!
    403     VST1.32         D21[0], [R6]!
    404     VST1.32         D23[0], [R6]!
    405 
    406     VREV64.32       Q12, Q12
    407 
    408     VREV64.32       Q13, Q13
    409     VSWP            D24, D25
    410     VSWP            D26, D27
    411 
    412 
    413     VST1.32         D26[1], [R7]!
    414     VST1.32         D24[1], [R7]!
    415     VST1.32         D27[0], [R7]!
    416     VST1.32         D25[0], [R7]!
    417     VST1.32         D27[1], [R7]!
    418     VST1.32         D25[1], [R7]!
    419 
    420     SUB             R7, R7, #32
    421     VLD2.32         {D0, D1}, [R6]
    422     VLD2.32         {D2, D3}, [R7]
    423 
    424     VSUB.I32        D12, D0, D2
    425     VLD1.16         D8, [R10], R9
    426     VADD.I32        D14, D0, D2
    427 
    428     VADD.I32        D16, D1, D3
    429     VLD1.16         D10, [R4], R12
    430     VSUB.I32        D18, D1, D3
    431 
    432     VUZP.16         D12, D13
    433     MOV             R4, R0
    434 
    435     VUZP.16         D16, D17
    436     VMULL.U16       Q15, D12, D8
    437     VMLAL.U16       Q15, D16, D10
    438     VMULL.U16       Q14, D12, D10
    439     VMLSL.U16       Q14, D16, D8
    440     VSHR.S32        D18, D18, #1
    441     VSHR.U32        Q15, Q15, #16
    442     VSHR.S32        Q14, Q14, #16
    443 
    444     VMLAL.S16       Q15, D13, D8
    445     VMLAL.S16       Q15, D17, D10
    446 
    447     MOV             R10, R1
    448 
    449     VMLAL.S16       Q14, D13, D10
    450     VMLSL.S16       Q14, D17, D8
    451     VNEG.S32        Q15, Q15
    452     VSHR.S32        D14, D14, #1
    453 
    454     VADD.I32        Q13, Q7, Q15
    455 
    456     VADD.I32        Q11, Q9, Q14
    457 
    458     LDR             r0 , [sp , #104]
    459     VST1.32         D26[0], [R6]!
    460     MOV             r2, #1
    461 
    462     VST1.32         D22[0], [R6]!
    463     MOV             r3, #4
    464     BL              ixheaacd_radix4bfly
    465 
    466     MOV             r0, r4
    467     MOV             r1, r10
    468     LDR             r2 , [sp , #108]
    469     MOV             r3, #16
    470     BL              ixheaacd_postradixcompute4
    471 
    472     MOV             r0, r4
    473     MOV             r1, r10
    474     LDMIA           r0!, {r4, r5}
    475     STR             r4, [r1], #4
    476     STR             r5, [r1, #4]
    477     ADD             r2, r0, #64
    478     ADD             r3, r1, #116
    479     MOV             r6, #7
    480 
    481 BACK3:
    482 
    483     LDMIA           r0!, {r4, r5}
    484     STR             r5, [r1], #8
    485     STR             r4, [r1], #8
    486 
    487     LDMIA           r2!, {r4, r5}
    488     STR             r5, [r3], #-8
    489     STR             r4, [r3], #-8
    490 
    491     SUBS            r6, r6, #1
    492     BNE             BACK3
    493 
    494     LDMIA           r0!, {r4, r5}
    495     STR             r5, [r1], #8
    496     STR             r4, [r1], #8
    497 
    498     VPOP            {D8 - D15}
    499     LDMFD           sp!, {r4-r12, r15}
    500 
    501 
    502 
    503 
    504 
    505 
    506 
    507