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