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