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_covariance_matrix_calc_2_armv7 25ixheaacd_covariance_matrix_calc_2_armv7: 26 STMFD sp!, {r4-r12, r14} 27 28AUTO_CORR_LOOP: 29 30 STR r0 , [sp, #-4]! 31 STR r1 , [sp, #-4]! 32 LDR r1 , [sp], #4 33 34 35 36 37 38 39 40 41 42 43 LDR r4 , [r1, #-4*128] 44 LDR r5 , [r1, #4*(64-128)] 45 LDR r6 , [r1] 46 LDR r7 , [r1, #4*64] 47 48 MOV r4, r4, ASR #3 49 MOV r5, r5, ASR #3 50 MOV r6, r6, ASR #3 51 MOV r7, r7, ASR #3 52 53 54 SMULWT r8 , r6 , r4 55 SMULWT r9 , r7 , r4 56 SMULWT r10, r6 , r5 57 SMLAWT r8 , r7 , r5, r8 58 SMULWT r11, r4 , r4 59 SUB r9 , r9 , r10 60 SMLAWT r11, r5 , r5, r11 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 MOV r10, r1 76 ADD r12, r1, #64*4 77 MOV r4 , r6 78 MOV r5 , r7 79 80 SUB r14, r3 , #2 81 MOVS r14, r14, LSR #1 82 BEQ ENDLOOP2 83LOOP2: 84 LDR r6 , [r10, #4*128]! 85 LDR r7 , [r12, #4*128]! 86 87 MOV r6, r6, ASR #3 88 MOV r7, r7, ASR #3 89 90 SMLAWT r8 , r6 , r4, r8 91 SMLAWT r9 , r7 , r4, r9 92 SMLAWT r8 , r7 , r5, r8 93 SMULWT r0 , r6 , r5 94 SMLAWT r11, r4 , r4, r11 95 SUB r9 , r9 , r0 96 SMLAWT r11, r5 , r5, r11 97 98 LDR r4 , [r10, #4*128]! 99 LDR r5 , [r12, #4*128]! 100 101 MOV r4, r4, ASR #3 102 MOV r5, r5, ASR #3 103 104 SUBS r14, r14, #1 105 106 SMLAWT r8 , r4 , r6, r8 107 SMLAWT r9 , r5 , r6, r9 108 SMLAWT r8 , r5 , r7, r8 109 SMULWT r0 , r4 , r7 110 SMLAWT r11, r6 , r6, r11 111 SUB r9 , r9 , r0 112 SMLAWT r11, r7 , r7, r11 113 114 BNE LOOP2 115 116 ANDS r0, r3, #0x01 117 BEQ ENDLOOP2 118ODDLOOP: 119 120 LDR r6 , [r10, #4*128]! 121 LDR r7 , [r12, #4*128]! 122 123 MOV r6, r6, ASR #3 124 MOV r7, r7, ASR #3 125 126 SMLAWT r8 , r6 , r4, r8 127 SMLAWT r9 , r7 , r4, r9 128 SMLAWT r8 , r7 , r5, r8 129 SMULWT r0 , r6 , r5 130 SMLAWT r11, r4 , r4, r11 131 SUB r9 , r9 , r0 132 SMLAWT r11, r5 , r5, r11 133 134 135 136ENDLOOP2: 137 138 139 140 141 142 143 144 145 146 MOV r12, r11 147 LDR r6 , [r1, #-8*128] 148 LDR r7 , [r1, #4*64-8*128] 149 150 MOV r6, r6, ASR #3 151 MOV r7, r7, ASR #3 152 153 SMLAWT r12, r6 , r6, r12 154 155 SUB r10, r3, #2 156 SMLAWT r12, r7 , r7, r12 157 158 159 160 161 MOV r0, r10, LSL #(2+7) 162 ADD r0, r0, #0x100 163 LDR r4 , [r1, r10, LSL #(2+7)] 164 LDR r5 , [r1, r0] 165 166 MOV r4, r4, ASR #3 167 MOV r5, r5, ASR #3 168 169 SMLAWT r11, r4, r4, r11 170 LDR r0 , [sp], #4 171 SMLAWT r11, r5, r5, r11 172 173 STR r12, [r0, #4] 174 STR r11, [r0] 175 176 177 178 179 180 181 182 183 184 185 186 187 MOV r11, r8 188 LDR r12, [r1, #-4*128] 189 LDR r14, [r1, #4*(64-128)] 190 191 MOV r12, r12, ASR #3 192 MOV r14, r14, ASR #3 193 194 195 SMLAWT r11, r12, r6, r11 196 ADD r10, r10, #1 197 198 LDR r12, [r1, r10, LSL#(2+7)] 199 SMLAWT r11, r14, r7, r11 200 201 MOV r14, r10, LSL #(2+7) 202 ADD r14, r14, #0x100 203 204 205 MOV r12, r12, ASR #3 206 207 LDR r14, [r1, r14] 208 209 SMLAWT r8 , r12, r4, r8 210 211 MOV r14, r14, ASR #3 212 MOV r10, r9 213 214 SMLAWT r8 , r14, r5, r8 215 STR r11, [r0, #16] 216 STR r8 , [r0, #8] 217 218 219 220 221 222 223 224 225 226 227 228 229 SMLAWT r9 , r14, r4 , r9 230 SMULWT r8 , r12, r5 231 LDR r14, [r1, #4*(64-128)] 232 SUB r9 , r9 , r8 233 234 MOV r14, r14, ASR #3 235 LDR r12, [r1, #-4*128] 236 SMLAWT r10, r14, r6 , r10 237 238 MOV r12, r12, ASR #3 239 SMULWT r8 , r12, r7 240 STR r9 , [r0, #20] 241 SUB r10, r10, r8 242 STR r10, [r0, #28] 243 244 245 246 247 248 249 250 251 STR r1 , [sp, #-4]! 252 253 STMFD sp!, {r0, r3} 254 MOVS r0 , r3 , LSR #2 255 256 MOV r12, #0 257 MOV r3 , #0 258 LDR r5 , [r1, #-8*128] 259 LDR r7 , [r1, #-4*128] 260 LDR r9 , [r1, #4*(64-256)] 261 LDR r11, [r1, #4*(64-128)] 262 263 264 265 MOV r5, r5, ASR #3 266 MOV r7, r7, ASR #3 267 MOV r9, r9, ASR #3 268 MOV r11, r11, ASR #3 269 270 271 BEQ ENDLOOP3 272LOOP3: 273 274 275 276 277 278 279 LDR r4 , [r1], #4*128 280 LDR r8 , [r1, #4*(64-128)] 281 282 MOV r4, r4, ASR #3 283 MOV r8, r8, ASR #3 284 285 SMLAWT r12, r4 , r5 , r12 286 SMLAWT r12, r8 , r9 , r12 287 SMULWT r14, r4 , r9 288 SMLAWT r3 , r8 , r5 , r3 289 290 LDR r6 , [r1], #4*128 291 SUB r3 , r3 , r14 292 293 294 295 296 297 298 299 300 LDR r10, [r1, #4*(64-128)] 301 302 MOV r6, r6, ASR #3 303 MOV r10, r10, ASR #3 304 305 SMLAWT r12, r6 , r7 , r12 306 SMLAWT r12, r10, r11, r12 307 SMULWT r14, r6 , r11 308 SMLAWT r3 , r10, r7 , r3 309 310 LDR r5 , [r1], #4*128 311 SUB r3 , r3 , r14 312 313 314 315 316 317 318 319 320 LDR r9 , [r1, #4*(64-128)] 321 322 MOV r5, r5, ASR #3 323 MOV r9, r9, ASR #3 324 325 SMLAWT r12, r5 , r4 , r12 326 SMLAWT r12, r9 , r8 , r12 327 SMULWT r14, r5 , r8 328 SMLAWT r3 , r9 , r4 , r3 329 330 LDR r7 , [r1], #4*128 331 SUB r3 , r3 , r14 332 333 334 335 336 337 338 339 340 341 342 LDR r11, [r1, #4*(64-128)] 343 344 MOV r7, r7, ASR #3 345 MOV r11, r11, ASR #3 346 347 SMLAWT r12, r7 , r6 , r12 348 SMLAWT r12, r11, r10, r12 349 SMULWT r14, r7 , r10 350 SMLAWT r3 , r11, r6 , r3 351 352 SUBS r0 , r0 , #1 353 SUB r3 , r3 , r14 354 355 BNE LOOP3 356ENDLOOP3: 357 MOV r4 , r3 358 LDMFD sp!, {r0, r3} 359 360 ANDS r5 , r3 , #3 361 BEQ ENDLOOP4 362 363LOOP4: 364 LDR r6 , [r1, #-8*128] 365 LDR r10, [r1, #4*(64-256)] 366 367 LDR r7 , [r1], #4*128 368 LDR r11, [r1, #4*(64-128)] 369 370 371 MOV r6, r6, ASR #3 372 MOV r7, r7, ASR #3 373 MOV r10, r10, ASR #3 374 MOV r11, r11, ASR #3 375 376 377 SMLAWT r12, r7 , r6 , r12 378 SMLAWT r12, r11, r10, r12 379 SMULWT r14, r7 , r10 380 SMLAWT r4 , r11, r6 , r4 381 382 SUBSNE r5 , r5 , #1 383 384 SUB r4 , r4 , r14 385 386 BNE LOOP4 387ENDLOOP4: 388 STR r12, [r0, #12] 389 STR r4 , [r0, #24] 390 LDR r1 , [sp], #4 391 392 SUBS R2, R2, #1 393 394 ADD r0, r0, #4*9 395 396 397 ADD r1, r1, #4 398 BGT AUTO_CORR_LOOP 399 400END_OF_AUT0: 401 402 LDMFD sp!, {r4-r12, r15} 403 404