117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@/*
217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Copyright 2003-2010, VisualOn, Inc.
317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ **
417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Licensed under the Apache License, Version 2.0 (the "License");
517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** you may not use this file except in compliance with the License.
617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** You may obtain a copy of the License at
717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ **
817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ **     http://www.apache.org/licenses/LICENSE-2.0
917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ **
1017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Unless required by applicable law or agreed to in writing, software
1117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** distributed under the License is distributed on an "AS IS" BASIS,
1217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** See the License for the specific language governing permissions and
1417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** limitations under the License.
1517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ */
1617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@
1717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@void Syn_filt_32(
1817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients */
1917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 m,                             /* (i)     : order of LP filter             */
2017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 exc[],                         /* (i) Qnew: excitation (exc[i] >> Qnew)    */
2117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 Qnew,                          /* (i)     : exc scaling = 0(min) to 8(max) */
2217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 sig_hi[],                      /* (o) /16 : synthesis high                 */
2317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 sig_lo[],                      /* (o) /16 : synthesis low                  */
2417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@     Word16 lg                             /* (i)     : size of filtering              */
2517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@)
2617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@***************************************************************
2717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@
2817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ a[]      --- r0
2917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ m        --- r1
3017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ exc[]    --- r2
3117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ Qnew     --- r3
3217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ sig_hi[] --- r4
3317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ sig_lo[] --- r5
3417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ lg       --- r6
3517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
3617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          .section  .text
3717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          .global  Syn_filt_32_asm
3817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
3917299ab50ceb70d904e610e3b2d7fb2361a11e03James DongSyn_filt_32_asm:
4017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
4117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STMFD   	r13!, {r4 - r12, r14}
4217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r4,  [r13, #40]                  @ get sig_hi[] address
4317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r5,  [r13, #44]                  @ get sig_lo[] address
4417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
4517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6,  [r0]                        @ load Aq[0]
4617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ADD           r7,  r3, #4                      @ 4 + Q_new
4717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r3, r6, ASR r7                   @ a0 = Aq[0] >> (4 + Q_new)
4817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
4917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r14, =0xffff
5017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r0, #2]                     @ load Aq[1]
5117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r0, #4]                     @ load Aq[2]
5217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r8, [r0, #6]                     @ load Aq[3]
5317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r0, #8]                     @ load Aq[4]
5417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r6, r6, r14
5517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r8, r8, r14
5617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r10, r6, r7, LSL #16             @ Aq[2] -- Aq[1]
5717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r11, r8, r9, LSL #16             @ Aq[4] -- Aq[3]
5817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r10, [r13, #-4]
5917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r11, [r13, #-8]
6017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
6117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r0, #10]                    @ load Aq[5]
6217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r0, #12]                    @ load Aq[6]
6317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r8, [r0, #14]                    @ load Aq[7]
6417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r0, #16]                    @ load Aq[8]
6517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r6, r6, r14
6617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r8, r8, r14
6717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r10, r6, r7, LSL #16             @ Aq[6] -- Aq[5]
6817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r11, r8, r9, LSL #16             @ Aq[8] -- Aq[7]
6917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r10, [r13, #-12]
7017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r11, [r13, #-16]
7117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
7217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r0, #18]                    @ load Aq[9]
7317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r0, #20]                    @ load Aq[10]
7417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r8, [r0, #22]                    @ load Aq[11]
7517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r0, #24]                    @ load Aq[12]
7617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r6, r6, r14
7717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r8, r8, r14
7817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r10, r6, r7, LSL #16             @ Aq[10] -- Aq[9]
7917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r11, r8, r9, LSL #16             @ Aq[12] -- Aq[11]
8017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r10, [r13, #-20]
8117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r11, [r13, #-24]
8217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
8317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r0, #26]                    @ load Aq[13]
8417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r0, #28]                    @ load Aq[14]
8517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r8, [r0, #30]                    @ load Aq[15]
8617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r0, #32]                    @ load Aq[16]
8717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r6, r6, r14
8817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          AND           r8, r8, r14
8917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r10, r6, r7, LSL #16             @ Aq[14] -- Aq[13]
9017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ORR           r11, r8, r9, LSL #16             @ Aq[16] -- Aq[15]
9117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r10, [r13, #-28]
9217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STR           r11, [r13, #-32]
9317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
9417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r8, #0                           @ i = 0
9517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
9617299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP:
9717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r5, #-2]                    @ load sig_lo[i-1]
9817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r5, #-4]                    @ load sig_lo[i-2]
9917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
10017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]
10117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r5, #-6]                    @ load sig_lo[i-3]
10217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r5, #-8]                   @ load sig_lo[i-4]
10317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
10417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMULBB        r12, r6, r11                     @ sig_lo[i-1] * Aq[1]
10517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
10617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r5, #-10]                   @ load sig_lo[i-5]
10717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_lo[i-2] * Aq[2]
10817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]
10917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r5, #-12]                   @ load sig_lo[i-6]
11017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_lo[i-3] * Aq[3]
11117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r5, #-14]                   @ load sig_lo[i-7]
11217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_lo[i-4] * Aq[4]
11317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]
11417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r5, #-16]                  @ load sig_lo[i-8]
11517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r6, r11, r12                @ sig_lo[i-5] * Aq[5]
11617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6,  [r5, #-18]                  @ load sig_lo[i-9]
11717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_lo[i-6] * Aq[6]
11817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]
11917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7,  [r5, #-20]                  @ load sig_lo[i-10]
12017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_lo[i-7] * Aq[7]
12117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r5, #-22]                   @ load sig_lo[i-11]
12217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_lo[i-8] * Aq[8]
12317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]
12417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10,[r5, #-24]                   @ load sig_lo[i-12]
12517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r6, r11, r12                @ sig_lo[i-9] * Aq[9]
12617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r5, #-26]                   @ load sig_lo[i-13]
12717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_lo[i-10] * Aq[10]
12817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]
12917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r5, #-28]                   @ load sig_lo[i-14]
13017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_lo[i-11] * Aq[11]
13117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r5, #-30]                   @ load sig_lo[i-15]
13217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_lo[i-12] * Aq[12]
13317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
13417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]
13517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r5, #-32]                  @ load sig_lo[i-16]
13617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r6, r11, r12                @ sig_lo[i-13] * Aq[13]
13717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_lo[i-14] * Aq[14]
13817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
13917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]
14017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r2],#2                      @ load exc[i]
14117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_lo[i-15] * Aq[15]
14217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_lo[i-16] * Aq[16]
14317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MUL           r7, r6, r3                       @ exc[i] * a0
14417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          RSB           r14, r12, #0                     @ L_tmp
14517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r14, r14, ASR #11                @ L_tmp >>= 11
14617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ADD           r14, r14, r7, LSL #1             @ L_tmp += (exc[i] * a0) << 1
14717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
14817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
14917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r4, #-2]                    @ load sig_hi[i-1]
15017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r4, #-4]                    @ load sig_hi[i-2]
15117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
15217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-4]                  @ Aq[2] -- Aq[1]
15317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r4, #-6]                    @ load sig_hi[i-3]
15417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r4, #-8]                   @ load sig_hi[i-4]
15517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMULBB        r12, r6, r11                     @ sig_hi[i-1] * Aq[1]
15617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r4, #-10]                   @ load sig_hi[i-5]
15717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-2] * Aq[2]
15817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
15917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-8]                  @ Aq[4] -- Aq[3]
16017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r4, #-12]                   @ load sig_hi[i-6]
16117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
16217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_hi[i-3] * Aq[3]
16317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  LDRSH         r9, [r4, #-14]                   @ load sig_hi[i-7]
16417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
16517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-4] * Aq[4]
16617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
16717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-12]                 @ Aq[6] -- Aq[5]
16817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r4, #-16]                  @ load sig_hi[i-8]
16917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
17017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-5] * Aq[5]
17117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
17217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  LDRSH         r6,  [r4, #-18]                  @ load sig_hi[i-9]
17317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABT        r12, r7, r11, r12                @ sig_hi[i-6] * Aq[6]
17417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
17517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-16]                 @ Aq[8] -- Aq[7]
17617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7,  [r4, #-20]                  @ load sig_hi[i-10]
17717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
17817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABB        r12, r9, r11, r12                @ sig_hi[i-7] * Aq[7]
17917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
18017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  LDRSH         r9, [r4, #-22]                   @ load sig_hi[i-11]
18117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
18217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABT        r12, r10, r11, r12               @ sig_hi[i-8] * Aq[8]
18317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
18417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-20]                 @ Aq[10] -- Aq[9]
18517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10,[r4, #-24]                   @ load sig_hi[i-12]
18617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
18717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong	  SMLABB        r12, r6, r11, r12                @ sig_hi[i-9] * Aq[9]
18817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r6, [r4, #-26]                   @ load sig_hi[i-13]
18917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_hi[i-10] * Aq[10]
19017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
19117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-24]                 @ Aq[12] -- Aq[11]
19217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r7, [r4, #-28]                   @ load sig_hi[i-14]
19317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_hi[i-11] * Aq[11]
19417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r9, [r4, #-30]                   @ load sig_hi[i-15]
19517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_hi[i-12] * Aq[12]
19617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
19717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-28]                 @ Aq[14] -- Aq[13]
19817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDRSH         r10, [r4, #-32]                  @ load sig_hi[i-16]
19917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r6, r11, r12                @ sig_hi[i-13] * Aq[13]
20017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r7, r11, r12                @ sig_hi[i-14] * Aq[14]
20117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
20217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDR           r11, [r13, #-32]                 @ Aq[16] -- Aq[15]
20317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABB        r12, r9, r11, r12                @ sig_hi[i-15] * Aq[15]
20417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SMLABT        r12, r10, r11, r12               @ sig_hi[i-16] * Aq[16]
20517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ADD           r6, r12, r12                     @ r12 << 1
20617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SUB           r14, r14, r6
20717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r14, r14, LSL #3                 @ L_tmp <<=3
20817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
20917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r7, r14, ASR #16                 @ L_tmp >> 16
21017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
21117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          MOV           r14, r14, ASR #4                 @ L_tmp >>=4
21217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STRH          r7, [r4], #2                         @ sig_hi[i] = L_tmp >> 16
21317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          SUB           r9, r14, r7, LSL #12             @ sig_lo[i] = L_tmp - (sig_hi[i] << 12)
21417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
21517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          ADD           r8, r8, #1
21617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          STRH          r9, [r5], #2
21717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          CMP           r8, #64
21817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          BLT           LOOP
21917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
22017299ab50ceb70d904e610e3b2d7fb2361a11e03James DongSyn_filt_32_end:
22117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
22217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          LDMFD   	    r13!, {r4 - r12, r15}
22317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          @ENDFUNC
22417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong          .END
22517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
22617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong
227