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