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_sbr_qmfsyn64_winadd 25 .type ixheaacd_sbr_qmfsyn64_winadd, %function 26 27ixheaacd_sbr_qmfsyn64_winadd: 28 29 STMFD sp!, {R4-R12, R14} 30 VPUSH {D8- D15} 31 LDR R4, [SP, #104] 32 LDR R5, [SP, #108] 33 34 MOV R7, #0x8000 35 VLD1.16 D0, [R0]! 36 MOV R12, R2 37 38 VDUP.32 Q15, R7 39 VLD1.16 D1, [R2]! 40 VDUP.32 Q11, R4 41 42 MOV R10, R0 43 MOV R11, R2 44 ADD R0, R0, #504 45 ADD R2, R2, #248 46 47 VNEG.S32 Q14, Q11 48 VSHL.S32 Q10, Q15, Q14 49 MOV R6, #64 50 MOV R6, R6, LSL #1 51 ADD R12, R12, R6 52 MOV R7, #128 53 MOV R9, R7, LSL #1 54 ADD R1, R1, R9 55 MOV R6, #16 56 MOV R7, #128 57 MOV R9, R7, LSL #1 58 MOV R7, #256 59 MOV R8, R7, LSL #1 60 61 MOV R5, R5, LSL #1 62 VLD1.16 D2, [R0], R8 63 VMOV Q13, Q10 64 65 66 VMLAL.S16 Q13, D0, D1 67 VLD1.16 D3, [R2], R9 68 69 VLD1.16 D4, [R0], R8 70 VMLAL.S16 Q13, D2, D3 71 72 VLD1.16 D5, [R2], R9 73 74 VLD1.16 D6, [R0], R8 75 VMLAL.S16 Q13, D5, D4 76 77 VLD1.16 D7, [R2], R9 78 79 VLD1.16 D8, [R0], R8 80 VMLAL.S16 Q13, D7, D6 81 82 VLD1.16 D9, [R2], R9 83 MOV R0, R10 84 85 86 MOV R2, R11 87 VLD1.16 D10, [R1]! 88 VMLAL.S16 Q13, D9, D8 89 90 MOV R10, R1 91 VLD1.16 D11, [R12]! 92 ADD R1, R1, #504 93 94 95 96 MOV R11, R12 97 VLD1.16 D12, [R1], R8 98 ADD R12, R12, #248 99 100 VMLAL.S16 Q13, D10, D11 101 VLD1.16 D13, [R12], R9 102 103 VLD1.16 D14, [R1], R8 104 VMLAL.S16 Q13, D12, D13 105 106 VLD1.16 D15, [R12], R9 107 108 VLD1.16 D16, [R1], R8 109 VMLAL.S16 Q13, D15, D14 110 111 VLD1.16 D17, [R12], R9 112 113 VLD1.16 D18, [R1], R8 114 VMLAL.S16 Q13, D17, D16 115 116 VLD1.16 D19, [R12], R9 117 118 VMLAL.S16 Q13, D19, D18 119 VLD1.16 D0, [R0]! 120 MOV R12, R11 121 122 MOV R1, R10 123 VLD1.16 D1, [R2]! 124 MOV R10, R0 125 126 VQSHL.S32 Q13, Q13, Q11 127 128 ADD R0, R0, #504 129 130 MOV R11, R2 131 VLD1.16 D2, [R0], R8 132 ADD R2, R2, #248 133 134 VSHR.S32 Q14, Q13, #16 135 VLD1.16 D3, [R2], R9 136 137 138 VUZP.16 D28, D29 139 VMOV Q13, Q10 140 141 142 143 144 145 VLD1.16 D4, [R0], R8 146 VLD1.16 D5, [R2], R9 147 148 VLD1.16 D6, [R0], R8 149 VLD1.16 D7, [R2], R9 150 151 VLD1.16 D8, [R0], R8 152 VLD1.16 D9, [R2], R9 153 MOV R0, R10 154 155 156 MOV R2, R11 157 VLD1.16 D10, [R1]! 158 159 MOV R10, R1 160 VLD1.16 D11, [R12]! 161 ADD R1, R1, #504 162 163 164 MOV R11, R12 165 VLD1.16 D12, [R1], R8 166 ADD R12, R12, #248 167 168 169 VLD1.16 D13, [R12], R9 170 171 VLD1.16 D14, [R1], R8 172 VLD1.16 D15, [R12], R9 173 174 VLD1.16 D16, [R1], R8 175 VLD1.16 D17, [R12], R9 176 177 VLD1.16 D18, [R1], R8 178 SUB R6, R6, #2 179 VLD1.16 D19, [R12], R9 180 MOV R1, R10 181 182 MOV R12, R11 183 184LOOP_1: 185 186 VMLAL.S16 Q13, D0, D1 187 VST1.16 D28[0], [R3], R5 188 189 VMLAL.S16 Q13, D2, D3 190 VLD1.16 D0, [R0]! 191 VMLAL.S16 Q13, D5, D4 192 193 VMLAL.S16 Q13, D7, D6 194 VST1.16 D28[1], [R3], R5 195 196 197 MOV R10, R0 198 VLD1.16 D1, [R2]! 199 ADD R0, R0, #504 200 201 VMLAL.S16 Q13, D9, D8 202 VST1.16 D28[2], [R3], R5 203 204 VMLAL.S16 Q13, D10, D11 205 VST1.16 D28[3], [R3], R5 206 207 MOV R11, R2 208 VLD1.16 D2, [R0], R8 209 ADD R2, R2, #248 210 211 VMLAL.S16 Q13, D12, D13 212 VLD1.16 D3, [R2], R9 213 VMLAL.S16 Q13, D15, D14 214 215 VMLAL.S16 Q13, D17, D16 216 VLD1.16 D4, [R0], R8 217 VMLAL.S16 Q13, D19, D18 218 219 VLD1.16 D5, [R2], R9 220 221 VLD1.16 D6, [R0], R8 222 VQSHL.S32 Q13, Q13, Q11 223 224 VSHR.S32 Q14, Q13, #16 225 VLD1.16 D7, [R2], R9 226 VMOV Q13, Q10 227 228 229 VUZP.16 D28, D29 230 VMLAL.S16 Q13, D0, D1 231 232 VMLAL.S16 Q13, D2, D3 233 VLD1.16 D8, [R0], R8 234 VMLAL.S16 Q13, D5, D4 235 236 VMLAL.S16 Q13, D7, D6 237 VLD1.16 D9, [R2], R9 238 239 240 VLD1.16 D10, [R1]! 241 VMLAL.S16 Q13, D9, D8 242 243 MOV R2, R11 244 VLD1.16 D11, [R12]! 245 MOV R0, R10 246 247 MOV R10, R1 248 249 ADD R1, R1, #504 250 251 MOV R11, R12 252 VLD1.16 D12, [R1], R8 253 ADD R12, R12, #248 254 255 VLD1.16 D13, [R12], R9 256 VMLAL.S16 Q13, D10, D11 257 258 VLD1.16 D14, [R1], R8 259 VMLAL.S16 Q13, D12, D13 260 261 VLD1.16 D15, [R12], R9 262 263 VLD1.16 D16, [R1], R8 264 VMLAL.S16 Q13, D15, D14 265 266 VLD1.16 D17, [R12], R9 267 268 VLD1.16 D18, [R1], R8 269 VMLAL.S16 Q13, D17, D16 270 271 VLD1.16 D19, [R12], R9 272 MOV R1, R10 273 274 VMLAL.S16 Q13, D19, D18 275 VST1.16 D28[0], [R3], R5 276 277 MOV R12, R11 278 VLD1.16 D0, [R0]! 279 280 VLD1.16 D1, [R2]! 281 VQSHL.S32 Q13, Q13, Q11 282 283 284 VST1.16 D28[1], [R3], R5 285 MOV R10, R0 286 287 VST1.16 D28[2], [R3], R5 288 ADD R0, R0, #504 289 290 VST1.16 D28[3], [R3], R5 291 MOV R11, R2 292 293 VSHR.S32 Q14, Q13, #16 294 VLD1.16 D2, [R0], R8 295 ADD R2, R2, #248 296 297 VLD1.16 D3, [R2], R9 298 VLD1.16 D4, [R0], R8 299 VLD1.16 D5, [R2], R9 300 VLD1.16 D6, [R0], R8 301 VLD1.16 D7, [R2], R9 302 VLD1.16 D8, [R0], R8 303 VLD1.16 D9, [R2], R9 304 305 VUZP.16 D28, D29 306 VMOV Q13, Q10 307 308 309 310 311 MOV R0, R10 312 VLD1.16 D10, [R1]! 313 MOV R2, R11 314 315 MOV R10, R1 316 VLD1.16 D11, [R12]! 317 ADD R1, R1, #504 318 319 320 MOV R11, R12 321 VLD1.16 D12, [R1], R8 322 ADD R12, R12, #248 323 324 325 VLD1.16 D13, [R12], R9 326 327 VLD1.16 D14, [R1], R8 328 VLD1.16 D15, [R12], R9 329 330 VLD1.16 D16, [R1], R8 331 VLD1.16 D17, [R12], R9 332 333 SUBS R6, R6, #2 334 VLD1.16 D18, [R1], R8 335 336 MOV R1, R10 337 VLD1.16 D19, [R12], R9 338 339 MOV R12, R11 340 341 342 BGT LOOP_1 343 344 VMLAL.S16 Q13, D0, D1 345 VST1.16 D28[0], [R3], R5 346 VMLAL.S16 Q13, D2, D3 347 348 VMLAL.S16 Q13, D5, D4 349 VST1.16 D28[1], [R3], R5 350 VMLAL.S16 Q13, D7, D6 351 352 VMLAL.S16 Q13, D9, D8 353 VST1.16 D28[2], [R3], R5 354 VMLAL.S16 Q13, D10, D11 355 356 VMLAL.S16 Q13, D12, D13 357 VST1.16 D28[3], [R3], R5 358 VMLAL.S16 Q13, D15, D14 359 360 361 362 VMLAL.S16 Q13, D17, D16 363 364 VMLAL.S16 Q13, D19, D18 365 366 VQSHL.S32 Q13, Q13, Q11 367 368 VSHR.S32 Q14, Q13, #16 369 370 VUZP.16 D28, D29 371 372 373 VST1.16 D28[0], [R3], R5 374 VST1.16 D28[1], [R3], R5 375 VST1.16 D28[2], [R3], R5 376 VST1.16 D28[3], [R3], R5 377 378 VPOP {D8 - D15} 379 LDMFD sp!, {R4-R12, R15} 380 381