2 @ ** Copyright 2003-2010, VisualOn, Inc.
\r
4 @ ** Licensed under the Apache License, Version 2.0 (the "License");
\r
5 @ ** you may not use this file except in compliance with the License.
\r
6 @ ** You may obtain a copy of the License at
\r
8 @ ** http://www.apache.org/licenses/LICENSE-2.0
\r
10 @ ** Unless required by applicable law or agreed to in writing, software
\r
11 @ ** distributed under the License is distributed on an "AS IS" BASIS,
\r
12 @ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 @ ** See the License for the specific language governing permissions and
\r
14 @ ** limitations under the License.
\r
18 @ Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */
\r
19 @ Word16 m, /* (i) : order of LP filter */
\r
20 @ Word16 exc[], /* (i) Qnew: excitation (exc[i] >> Qnew) */
\r
21 @ Word16 Qnew, /* (i) : exc scaling = 0(min) to 8(max) */
\r
22 @ Word16 sig_hi[], /* (o) /16 : synthesis high */
\r
23 @ Word16 sig_lo[], /* (o) /16 : synthesis low */
\r
24 @ Word16 lg /* (i) : size of filtering */
\r
26 @***************************************************************
\r
37 .global Syn_filt_32_asm
\r
41 STMFD r13!, {r4 - r12, r14}
\r
42 LDR r4, [r13, #40] @ get sig_hi[] address
\r
43 LDR r5, [r13, #44] @ get sig_lo[] address
\r
45 LDRSH r6, [r0] @ load Aq[0]
\r
46 ADD r7, r3, #4 @ 4 + Q_new
\r
47 MOV r3, r6, ASR r7 @ a0 = Aq[0] >> (4 + Q_new)
\r
50 LDRSH r6, [r0, #2] @ load Aq[1]
\r
51 LDRSH r7, [r0, #4] @ load Aq[2]
\r
52 LDRSH r8, [r0, #6] @ load Aq[3]
\r
53 LDRSH r9, [r0, #8] @ load Aq[4]
\r
56 ORR r10, r6, r7, LSL #16 @ Aq[2] -- Aq[1]
\r
57 ORR r11, r8, r9, LSL #16 @ Aq[4] -- Aq[3]
\r
58 STR r10, [r13, #-4]
\r
61 LDRSH r6, [r0, #10] @ load Aq[5]
\r
62 LDRSH r7, [r0, #12] @ load Aq[6]
\r
63 LDRSH r8, [r0, #14] @ load Aq[7]
\r
64 LDRSH r9, [r0, #16] @ load Aq[8]
\r
67 ORR r10, r6, r7, LSL #16 @ Aq[6] -- Aq[5]
\r
68 ORR r11, r8, r9, LSL #16 @ Aq[8] -- Aq[7]
\r
69 STR r10, [r13, #-12]
\r
70 STR r11, [r13, #-16]
\r
72 LDRSH r6, [r0, #18] @ load Aq[9]
\r
73 LDRSH r7, [r0, #20] @ load Aq[10]
\r
74 LDRSH r8, [r0, #22] @ load Aq[11]
\r
75 LDRSH r9, [r0, #24] @ load Aq[12]
\r
78 ORR r10, r6, r7, LSL #16 @ Aq[10] -- Aq[9]
\r
79 ORR r11, r8, r9, LSL #16 @ Aq[12] -- Aq[11]
\r
80 STR r10, [r13, #-20]
\r
81 STR r11, [r13, #-24]
\r
83 LDRSH r6, [r0, #26] @ load Aq[13]
\r
84 LDRSH r7, [r0, #28] @ load Aq[14]
\r
85 LDRSH r8, [r0, #30] @ load Aq[15]
\r
86 LDRSH r9, [r0, #32] @ load Aq[16]
\r
89 ORR r10, r6, r7, LSL #16 @ Aq[14] -- Aq[13]
\r
90 ORR r11, r8, r9, LSL #16 @ Aq[16] -- Aq[15]
\r
91 STR r10, [r13, #-28]
\r
92 STR r11, [r13, #-32]
\r
97 LDRSH r6, [r5, #-2] @ load sig_lo[i-1]
\r
98 LDRSH r7, [r5, #-4] @ load sig_lo[i-2]
\r
100 LDR r11, [r13, #-4] @ Aq[2] -- Aq[1]
\r
101 LDRSH r9, [r5, #-6] @ load sig_lo[i-3]
\r
102 LDRSH r10, [r5, #-8] @ load sig_lo[i-4]
\r
104 SMULBB r12, r6, r11 @ sig_lo[i-1] * Aq[1]
\r
106 LDRSH r6, [r5, #-10] @ load sig_lo[i-5]
\r
107 SMLABT r12, r7, r11, r12 @ sig_lo[i-2] * Aq[2]
\r
108 LDR r11, [r13, #-8] @ Aq[4] -- Aq[3]
\r
109 LDRSH r7, [r5, #-12] @ load sig_lo[i-6]
\r
110 SMLABB r12, r9, r11, r12 @ sig_lo[i-3] * Aq[3]
\r
111 LDRSH r9, [r5, #-14] @ load sig_lo[i-7]
\r
112 SMLABT r12, r10, r11, r12 @ sig_lo[i-4] * Aq[4]
\r
113 LDR r11, [r13, #-12] @ Aq[6] -- Aq[5]
\r
114 LDRSH r10, [r5, #-16] @ load sig_lo[i-8]
\r
115 SMLABB r12, r6, r11, r12 @ sig_lo[i-5] * Aq[5]
\r
116 LDRSH r6, [r5, #-18] @ load sig_lo[i-9]
\r
117 SMLABT r12, r7, r11, r12 @ sig_lo[i-6] * Aq[6]
\r
118 LDR r11, [r13, #-16] @ Aq[8] -- Aq[7]
\r
119 LDRSH r7, [r5, #-20] @ load sig_lo[i-10]
\r
120 SMLABB r12, r9, r11, r12 @ sig_lo[i-7] * Aq[7]
\r
121 LDRSH r9, [r5, #-22] @ load sig_lo[i-11]
\r
122 SMLABT r12, r10, r11, r12 @ sig_lo[i-8] * Aq[8]
\r
123 LDR r11, [r13, #-20] @ Aq[10] -- Aq[9]
\r
124 LDRSH r10,[r5, #-24] @ load sig_lo[i-12]
\r
125 SMLABB r12, r6, r11, r12 @ sig_lo[i-9] * Aq[9]
\r
126 LDRSH r6, [r5, #-26] @ load sig_lo[i-13]
\r
127 SMLABT r12, r7, r11, r12 @ sig_lo[i-10] * Aq[10]
\r
128 LDR r11, [r13, #-24] @ Aq[12] -- Aq[11]
\r
129 LDRSH r7, [r5, #-28] @ load sig_lo[i-14]
\r
130 SMLABB r12, r9, r11, r12 @ sig_lo[i-11] * Aq[11]
\r
131 LDRSH r9, [r5, #-30] @ load sig_lo[i-15]
\r
132 SMLABT r12, r10, r11, r12 @ sig_lo[i-12] * Aq[12]
\r
134 LDR r11, [r13, #-28] @ Aq[14] -- Aq[13]
\r
135 LDRSH r10, [r5, #-32] @ load sig_lo[i-16]
\r
136 SMLABB r12, r6, r11, r12 @ sig_lo[i-13] * Aq[13]
\r
137 SMLABT r12, r7, r11, r12 @ sig_lo[i-14] * Aq[14]
\r
139 LDR r11, [r13, #-32] @ Aq[16] -- Aq[15]
\r
140 LDRSH r6, [r2],#2 @ load exc[i]
\r
141 SMLABB r12, r9, r11, r12 @ sig_lo[i-15] * Aq[15]
\r
142 SMLABT r12, r10, r11, r12 @ sig_lo[i-16] * Aq[16]
\r
143 MUL r7, r6, r3 @ exc[i] * a0
\r
144 RSB r14, r12, #0 @ L_tmp
\r
145 MOV r14, r14, ASR #11 @ L_tmp >>= 11
\r
146 ADD r14, r14, r7, LSL #1 @ L_tmp += (exc[i] * a0) << 1
\r
149 LDRSH r6, [r4, #-2] @ load sig_hi[i-1]
\r
150 LDRSH r7, [r4, #-4] @ load sig_hi[i-2]
\r
152 LDR r11, [r13, #-4] @ Aq[2] -- Aq[1]
\r
153 LDRSH r9, [r4, #-6] @ load sig_hi[i-3]
\r
154 LDRSH r10, [r4, #-8] @ load sig_hi[i-4]
\r
155 SMULBB r12, r6, r11 @ sig_hi[i-1] * Aq[1]
\r
156 LDRSH r6, [r4, #-10] @ load sig_hi[i-5]
\r
157 SMLABT r12, r7, r11, r12 @ sig_hi[i-2] * Aq[2]
\r
159 LDR r11, [r13, #-8] @ Aq[4] -- Aq[3]
\r
160 LDRSH r7, [r4, #-12] @ load sig_hi[i-6]
\r
162 SMLABB r12, r9, r11, r12 @ sig_hi[i-3] * Aq[3]
\r
163 LDRSH r9, [r4, #-14] @ load sig_hi[i-7]
\r
165 SMLABT r12, r10, r11, r12 @ sig_hi[i-4] * Aq[4]
\r
167 LDR r11, [r13, #-12] @ Aq[6] -- Aq[5]
\r
168 LDRSH r10, [r4, #-16] @ load sig_hi[i-8]
\r
170 SMLABB r12, r6, r11, r12 @ sig_hi[i-5] * Aq[5]
\r
172 LDRSH r6, [r4, #-18] @ load sig_hi[i-9]
\r
173 SMLABT r12, r7, r11, r12 @ sig_hi[i-6] * Aq[6]
\r
175 LDR r11, [r13, #-16] @ Aq[8] -- Aq[7]
\r
176 LDRSH r7, [r4, #-20] @ load sig_hi[i-10]
\r
178 SMLABB r12, r9, r11, r12 @ sig_hi[i-7] * Aq[7]
\r
180 LDRSH r9, [r4, #-22] @ load sig_hi[i-11]
\r
182 SMLABT r12, r10, r11, r12 @ sig_hi[i-8] * Aq[8]
\r
184 LDR r11, [r13, #-20] @ Aq[10] -- Aq[9]
\r
185 LDRSH r10,[r4, #-24] @ load sig_hi[i-12]
\r
187 SMLABB r12, r6, r11, r12 @ sig_hi[i-9] * Aq[9]
\r
188 LDRSH r6, [r4, #-26] @ load sig_hi[i-13]
\r
189 SMLABT r12, r7, r11, r12 @ sig_hi[i-10] * Aq[10]
\r
191 LDR r11, [r13, #-24] @ Aq[12] -- Aq[11]
\r
192 LDRSH r7, [r4, #-28] @ load sig_hi[i-14]
\r
193 SMLABB r12, r9, r11, r12 @ sig_hi[i-11] * Aq[11]
\r
194 LDRSH r9, [r4, #-30] @ load sig_hi[i-15]
\r
195 SMLABT r12, r10, r11, r12 @ sig_hi[i-12] * Aq[12]
\r
197 LDR r11, [r13, #-28] @ Aq[14] -- Aq[13]
\r
198 LDRSH r10, [r4, #-32] @ load sig_hi[i-16]
\r
199 SMLABB r12, r6, r11, r12 @ sig_hi[i-13] * Aq[13]
\r
200 SMLABT r12, r7, r11, r12 @ sig_hi[i-14] * Aq[14]
\r
202 LDR r11, [r13, #-32] @ Aq[16] -- Aq[15]
\r
203 SMLABB r12, r9, r11, r12 @ sig_hi[i-15] * Aq[15]
\r
204 SMLABT r12, r10, r11, r12 @ sig_hi[i-16] * Aq[16]
\r
205 ADD r6, r12, r12 @ r12 << 1
\r
207 MOV r14, r14, LSL #3 @ L_tmp <<=3
\r
209 MOV r7, r14, ASR #16 @ L_tmp >> 16
\r
211 MOV r14, r14, ASR #4 @ L_tmp >>=4
\r
212 STRH r7, [r4], #2 @ sig_hi[i] = L_tmp >> 16
\r
213 SUB r9, r14, r7, LSL #12 @ sig_lo[i] = L_tmp - (sig_hi[i] << 12)
\r
222 LDMFD r13!, {r4 - r12, r15}
\r