1@ 2@ Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3@ 4@ Use of this source code is governed by a BSD-style license 5@ that can be found in the LICENSE file in the root of the source 6@ tree. An additional intellectual property rights grant can be found 7@ in the file PATENTS. All contributing project authors may 8@ be found in the AUTHORS file in the root of the source tree. 9@ 10 11@ Contains a function for the core loop in the normalized lattice AR 12@ filter routine for iSAC codec, optimized for ARMv7 platforms. 13@ 14@ Output is bit-exact with the reference C code in lattic_c.c 15@ 16@ Register usage: 17@ 18@ r0: &ar_g_Q0 19@ r1: &ar_f_Q0 20@ r2: &cth_Q15 21@ r3: &sth_Q15 22@ r4: out loop counter 23@ r5: tmpAR 24@ r9: inner loop counter 25@ r12: constant #16384 26@ r6, r7, r8, r10, r11: scratch 27 28#include "webrtc/system_wrappers/include/asm_defines.h" 29#include "settings.h" 30 31GLOBAL_FUNCTION WebRtcIsacfix_FilterArLoop 32.align 2 33DEFINE_FUNCTION WebRtcIsacfix_FilterArLoop 34 push {r4-r11} 35 36 add r1, #2 @ &ar_f_Q0[1] 37 mov r12, #16384 38 mov r4, #HALF_SUBFRAMELEN 39 sub r4, #1 @ Outer loop counter = HALF_SUBFRAMELEN - 1 40 41HALF_SUBFRAME_LOOP: @ for (n = 0; n < HALF_SUBFRAMELEN - 1; n++) 42 43 ldr r9, [sp, #32] @ Restore the inner loop counter to order_coef 44 ldrh r5, [r1] @ tmpAR = ar_f_Q0[n+1] 45 add r0, r9, asl #1 @ Restore r0 to &ar_g_Q0[order_coef] 46 add r2, r9, asl #1 @ Restore r2 to &cth_Q15[order_coef] 47 add r3, r9, asl #1 @ Restore r3 to &sth_Q15[order_coef] 48 49ORDER_COEF_LOOP: @ for (k = order_coef; k > 0; k--) 50 51 ldrh r7, [r3, #-2]! @ sth_Q15[k - 1] 52 ldrh r6, [r2, #-2]! @ cth_Q15[k - 1] 53 54 ldrh r8, [r0, #-2] @ ar_g_Q0[k - 1] 55 smlabb r11, r7, r5, r12 @ sth_Q15[k - 1] * tmpAR + 16384 56 smlabb r10, r6, r5, r12 @ cth_Q15[k - 1] * tmpAR + 16384 57 smulbb r7, r7, r8 @ sth_Q15[k - 1] * ar_g_Q0[k - 1] 58 smlabb r11, r6, r8, r11 @ cth_Q15[k - 1] * ar_g_Q0[k - 1] + 59 @ (sth_Q15[k - 1] * tmpAR + 16384) 60 61 sub r10, r10, r7 @ cth_Q15[k - 1] * tmpAR + 16384 - 62 @ (sth_Q15[k - 1] * ar_g_Q0[k - 1]) 63 ssat r11, #16, r11, asr #15 64 ssat r5, #16, r10, asr #15 65 strh r11, [r0], #-2 @ Output: ar_g_Q0[k] 66 67 subs r9, #1 68 bgt ORDER_COEF_LOOP 69 70 strh r5, [r0] @ Output: ar_g_Q0[0] = tmpAR; 71 strh r5, [r1], #2 @ Output: ar_f_Q0[n+1] = tmpAR; 72 73 subs r4, #1 74 bne HALF_SUBFRAME_LOOP 75 76 pop {r4-r11} 77 bx lr 78