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 
     25 
     26     .global ixheaacd_over_lap_add1_armv7
     27 ixheaacd_over_lap_add1_armv7:
     28 
     29     STMFD           sp!, {R4-R12, R14}
     30     VPUSH           {d8 - d15}
     31 
     32     LDR             R4, [SP, #104]
     33     LDR             R5, [SP, #108]
     34     LDR             R6, [SP, #112]
     35     MOV             R10, R5, LSL #1
     36     SUB             R11, R10, #1
     37     MOV             R10, R11, LSL #2
     38     ADD             R10, R0, R10
     39     SUB             R10, R10, #12
     40     MOV             R8, R11, LSL #1
     41     ADD             R8, R8, R3
     42     SUB             R8, R8, #14
     43     MOV             R12, #0
     44     VDUP.S16        D12, R12
     45     MOV             R12, #-16
     46     VDUP.16         Q11, R4
     47     VLD1.32         {D6, D7}, [R10], R12
     48     MOV             R7, #0x2000
     49     VREV64.32       Q3, Q3
     50     RSB             R7, R7, #0
     51     VQNEG.S32       Q0, Q3
     52     VDUP.32         Q10, R7
     53     VUZP.16         D1, D0
     54     SUB             R11, R5, #1
     55     VUZP.16         D7, D6
     56     SMULBB          R11, R11, R6
     57     MOV             R11, R11, LSL #1
     58     VLD2.16         {D2, D3}, [R8], R12
     59     ADD             R11, R11, R2
     60     VREV64.16       Q1, Q1
     61     MOV             R4, R6, LSL #1
     62     RSB             R4, R4, #0
     63     MOV             R9, R6, LSL #1
     64     SMULBB          R6, R5, R6
     65     MOV             R6, R6, LSL #1
     66     ADD             R6, R6, R2
     67 
     68 
     69 
     70     VMULL.U16       Q15, D7, D2
     71     VLD1.32         {D4, D5}, [R1]!
     72     VSHR.U32        Q15, Q15, #16
     73 
     74     VMLAL.S16       Q15, D6, D2
     75     VQSHL.S32       Q15, Q15, Q11
     76 
     77 
     78     VADDL.S16       Q7, D3, D12
     79 
     80     VMULL.S32       Q13, D4, D14
     81     VQMOVN.S64      D28, Q13
     82     VMULL.S32       Q13, D5, D15
     83     VQMOVN.S64      D29, Q13
     84 
     85     VQADD.S32       Q14, Q14, Q10
     86     VQSUB.S32       Q13, Q15, Q14
     87     VQSHL.S32       Q13, Q13, #2
     88     VSHR.S32        Q13, Q13, #16
     89     VUZP.16         D26, D27
     90 
     91 
     92     VMULL.U16       Q12, D1, D3
     93     VSHR.U32        Q12, Q12, #16
     94     VMLAL.S16       Q12, D0, D3
     95     VQSHL.S32       Q12, Q12, Q11
     96     VLD1.32         {D6, D7}, [R10], R12
     97 
     98 
     99     VADDL.S16       Q7, D2, D12
    100 
    101     VMULL.S32       Q0, D14, D4
    102     VQMOVN.S64      D16, Q0
    103     VMULL.S32       Q0, D15, D5
    104     VQMOVN.S64      D17, Q0
    105 
    106     VREV64.32       Q3, Q3
    107     VQADD.S32       Q8, Q8, Q10
    108     VQNEG.S32       Q0, Q3
    109     VUZP.16         D1, D0
    110     VQSUB.S32       Q9, Q12, Q8
    111     VUZP.16         D7, D6
    112     VQSHL.S32       Q9, Q9, #2
    113     VLD2.16         {D2, D3}, [R8], R12
    114     VSHR.S32        Q9, Q9, #16
    115     VREV64.16       Q1, Q1
    116     VUZP.16         D18, D19
    117 
    118     VLD1.32         {D4, D5}, [R1]!
    119     SUB             R5, R5, #8
    120 
    121 
    122 LOOP_1:
    123 
    124     VST1.16         D26[0], [R11], R4
    125     VMULL.U16       Q15, D7, D2
    126     VST1.16         D26[1], [R11], R4
    127     VMULL.U16       Q12, D1, D3
    128     VST1.16         D26[2], [R11], R4
    129     VSHR.U32        Q15, Q15, #16
    130     VST1.16         D26[3], [R11], R4
    131     VSHR.U32        Q12, Q12, #16
    132     VST1.16         D18[0], [R6], R9
    133     VMLAL.S16       Q15, D6, D2
    134     VST1.16         D18[1], [R6], R9
    135     VMLAL.S16       Q12, D0, D3
    136     VST1.16         D18[2], [R6], R9
    137     VQSHL.S32       Q15, Q15, Q11
    138     VST1.16         D18[3], [R6], R9
    139     VQSHL.S32       Q12, Q12, Q11
    140     VLD1.32         {D6, D7}, [R10], R12
    141 
    142 
    143     VADDL.S16       Q7, D3, D12
    144 
    145     VMULL.S32       Q8, D4, D14
    146     VQMOVN.S64      D28, Q8
    147     VMULL.S32       Q8, D5, D15
    148     VQMOVN.S64      D29, Q8
    149     VREV64.32       Q3, Q3
    150 
    151 
    152 
    153     VADDL.S16       Q7, D2, D12
    154 
    155     VMULL.S32       Q0, D4, D14
    156     VQMOVN.S64      D16, Q0
    157     VMULL.S32       Q0, D5, D15
    158     VQMOVN.S64      D17, Q0
    159 
    160     VLD2.16         {D2, D3}, [R8], R12
    161     VQNEG.S32       Q0, Q3
    162     VLD1.32         {D4, D5}, [R1]!
    163     VQADD.S32       Q14, Q14, Q10
    164     VUZP.16         D1, D0
    165     VQADD.S32       Q8, Q8, Q10
    166     VUZP.16         D7, D6
    167     VQSUB.S32       Q13, Q15, Q14
    168     VREV64.16       Q1, Q1
    169     VQSUB.S32       Q9, Q12, Q8
    170     VQSHL.S32       Q13, Q13, #2
    171     VQSHL.S32       Q9, Q9, #2
    172     VMULL.U16       Q15, D7, D2
    173     VSHR.S32        Q13, Q13, #16
    174     VUZP.16         D26, D27
    175     VSHR.S32        Q9, Q9, #16
    176     VST1.16         D26[0], [R11], R4
    177     VMULL.U16       Q12, D1, D3
    178     VUZP.16         D18, D19
    179     VSHR.U32        Q15, Q15, #16
    180     VST1.16         D26[1], [R11], R4
    181     VMLAL.S16       Q15, D6, D2         @MLA
    182     VST1.16         D26[2], [R11], R4
    183     VSHR.U32        Q12, Q12, #16
    184     VST1.16         D26[3], [R11], R4
    185     VMLAL.S16       Q12, D0, D3         @MLA
    186     VST1.16         D18[0], [R6], R9
    187     VQSHL.S32       Q15, Q15, Q11
    188     VST1.16         D18[1], [R6], R9
    189     VQSHL.S32       Q12, Q12, Q11
    190     VST1.16         D18[2], [R6], R9
    191 
    192 
    193     VADDL.S16       Q7, D3, D12
    194 
    195     VMULL.S32       Q8, D4, D14
    196     VQMOVN.S64      D28, Q8
    197     VMULL.S32       Q8, D5, D15
    198     VQMOVN.S64      D29, Q8
    199 
    200     VST1.16         D18[3], [R6], R9
    201 
    202 
    203     VADDL.S16       Q7, D2, D12
    204 
    205     VMULL.S32       Q0, D4, D14
    206     VQMOVN.S64      D16, Q0
    207     VMULL.S32       Q0, D5, D15
    208     VQMOVN.S64      D17, Q0
    209 
    210     VLD1.32         {D6, D7}, [R10], R12
    211     VQADD.S32       Q14, Q14, Q10
    212     VREV64.32       Q3, Q3
    213     VQNEG.S32       Q0, Q3
    214     VUZP.16         D1, D0
    215     VQSUB.S32       Q13, Q15, Q14
    216     VUZP.16         D7, D6
    217     VQADD.S32       Q8, Q8, Q10
    218     VLD2.16         {D2, D3}, [R8], R12
    219     VQSUB.S32       Q9, Q12, Q8
    220     VREV64.16       Q1, Q1
    221     VQSHL.S32       Q13, Q13, #2
    222     VLD1.32         {D4, D5}, [R1]!
    223     VQSHL.S32       Q9, Q9, #2
    224     VSHR.S32        Q13, Q13, #16
    225     SUBS            R5, R5, #8
    226     VSHR.S32        Q9, Q9, #16
    227     VUZP.16         D26, D27
    228     VUZP.16         D18, D19
    229 
    230 
    231 
    232     BGT             LOOP_1
    233 
    234     VST1.16         D26[0], [R11], R4
    235     VMULL.U16       Q15, D7, D2
    236     VST1.16         D26[1], [R11], R4
    237     VMULL.U16       Q12, D1, D3
    238     VST1.16         D26[2], [R11], R4
    239     VSHR.U32        Q15, Q15, #16
    240     VST1.16         D26[3], [R11], R4
    241     VSHR.U32        Q12, Q12, #16
    242 
    243     VST1.16         D18[0], [R6], R9
    244     VMLAL.S16       Q15, D6, D2
    245     VST1.16         D18[1], [R6], R9
    246     VMLAL.S16       Q12, D0, D3
    247     VST1.16         D18[2], [R6], R9
    248     VQSHL.S32       Q15, Q15, Q11
    249     VST1.16         D18[3], [R6], R9
    250     VQSHL.S32       Q12, Q12, Q11
    251 
    252 
    253 
    254 
    255     VADDL.S16       Q7, D3, D12
    256 
    257     VMULL.S32       Q8, D4, D14
    258     VQMOVN.S64      D28, Q8
    259     VMULL.S32       Q8, D5, D15
    260     VQMOVN.S64      D29, Q8
    261 
    262 
    263 
    264     VADDL.S16       Q7, D2, D12
    265 
    266     VMULL.S32       Q13, D4, D14
    267     VQMOVN.S64      D16, Q13
    268     VMULL.S32       Q13, D5, D15
    269     VQMOVN.S64      D17, Q13
    270 
    271     VQADD.S32       Q14, Q14, Q10
    272     VQADD.S32       Q8, Q8, Q10
    273     VQSUB.S32       Q13, Q15, Q14
    274     VQSUB.S32       Q9, Q12, Q8
    275     VQSHL.S32       Q13, Q13, #2
    276     VQSHL.S32       Q9, Q9, #2
    277     VSHR.S32        Q13, Q13, #16
    278     VSHR.S32        Q9, Q9, #16
    279     VUZP.16         D26, D27
    280 
    281     VUZP.16         D18, D19
    282 
    283 
    284 
    285     VST1.16         D26[0], [R11], R4
    286     VST1.16         D26[1], [R11], R4
    287     VST1.16         D26[2], [R11], R4
    288     VST1.16         D26[3], [R11], R4
    289 
    290     VST1.16         D18[0], [R6], R9
    291     VST1.16         D18[1], [R6], R9
    292     VST1.16         D18[2], [R6], R9
    293     VST1.16         D18[3], [R6], R9
    294 
    295     VPOP            {d8 - d15}
    296     LDMFD           sp!, {R4-R12, R15}
    297 
    298