pred_lt4_1_opt.s revision f3664ae9369a861ffbc2354e8e93e48983802062
1@/*
2@ ** Copyright 2003-2010, VisualOn, Inc.
3@ **
4@ ** Licensed under the Apache License, Version 2.0 (the "License");
5@ ** you may not use this file except in compliance with the License.
6@ ** You may obtain a copy of the License at
7@ **
8@ **     http://www.apache.org/licenses/LICENSE-2.0
9@ **
10@ ** Unless required by applicable law or agreed to in writing, software
11@ ** distributed under the License is distributed on an "AS IS" BASIS,
12@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13@ ** See the License for the specific language governing permissions and
14@ ** limitations under the License.
15@ */
16@
17@void Pred_lt4(
18@		  Word16 exc[],                         /* in/out: excitation buffer */
19@		  Word16 T0,                            /* input : integer pitch lag */
20@		  Word16 frac,                          /* input : fraction of lag   */
21@		  Word16 L_subfr                        /* input : subframe size     */
22@	      )
23
24@******************************
25@       ARM Register
26@******************************
27@ r0  ---  exc[]
28@ r1  ---  T0
29@ r2  ---  frac
30@ r3  ---  L_subfr
31
32         .section  .text
33	 .global   pred_lt4_asm
34	 .extern   inter4_2
35
36pred_lt4_asm:
37
38         STMFD     r13!, {r4 - r12, r14}
39         RSB       r4, r1, #0                         @-T0
40         RSB       r2, r2, #0                         @frac = -frac
41         ADD       r5, r0, r4, LSL #1                 @x = exc - T0
42         CMP       r2, #0
43         ADDLT     r2, r2, #4                         @frac += UP_SAMP
44         SUBLT     r5, r5, #2                         @x--
45         SUB       r5, r5, #30                        @x -= 15
46         RSB       r4, r2, #3                         @k = 3 - frac
47         LDR       r6, Table
48	 MOV       r8, r4, LSL #6
49         @MOV       r7, #0                             @j = 0
50         ADD       r8, r6, r8                         @ptr2 = &(inter4_2[k][0])
51
52	 MOV       r1, r5
53	 MOV       r5, #0x8000
54	 MOV       r14, #21
55@ used register
56         @r0 --- exc[]  r1 --- x  r7 --- j  r8 --- ptr2  r5 --- 0x8000
57THREE_LOOP:
58
59         @MOV       r1, r5                             @ptr1 = x
60	 MOV       r2, r8                             @ptr = ptr2
61         LDR       r3, [r2], #4                       @h[0], h[1]
62	 LDRSH     r4, [r1], #2                       @x[0]
63	 LDRSH     r6, [r1], #2                       @x[1]
64	 LDRSH     r9, [r1], #2                       @x[2]
65
66	 SMULBB    r10, r4, r3                        @x[0] * h[0]
67	 SMULBB    r11, r6, r3                        @x[1] * h[0]
68	 SMULBB    r12, r9, r3                        @x[2] * h[0]
69
70         LDRSH     r4, [r1], #2                       @x[3]
71	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]
72         SMLABT    r11, r9, r3, r11                   @x[2] * h[1]
73	 SMLABT    r12, r4, r3, r12                   @x[3] * h[1]
74
75	 LDR       r3, [r2], #4                       @h[2], h[3]
76	 LDRSH     r6, [r1], #2                       @x[4]
77	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]
78         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]
79         SMLABB    r12, r6, r3, r12                   @x[4] * h[2]
80
81         LDRSH     r9, [r1], #2                       @x[5]
82         SMLABT    r10, r4, r3, r10                   @x[3] * h[3]
83         SMLABT    r11, r6, r3, r11                   @x[4] * h[3]
84         SMLABT    r12, r9, r3, r12                   @x[5] * h[3]
85
86         LDR       r3, [r2], #4                       @h[4], h[5]
87         LDRSH     r4, [r1], #2                       @x[6]
88         SMLABB    r10, r6, r3, r10                   @x[4] * h[4]
89         SMLABB    r11, r9, r3, r11                   @x[5] * h[4]
90         SMLABB    r12, r4, r3, r12                   @x[6] * h[4]
91
92	 LDRSH     r6, [r1], #2                       @x[7]
93	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]
94	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]
95	 SMLABT    r12, r6, r3, r12                   @x[7] * h[5]
96
97         LDR       r3, [r2], #4                       @h[6], h[7]
98	 LDRSH     r9, [r1], #2                       @x[8]
99	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]
100	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]
101	 SMLABB    r12, r9, r3, r12                   @x[8] * h[6]
102
103	 LDRSH     r4, [r1], #2                       @x[9]
104	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]
105	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]
106	 SMLABT    r12, r4, r3, r12                   @x[9] * h[7]
107
108	 LDR       r3, [r2], #4                       @h[8], h[9]
109	 LDRSH     r6, [r1], #2                       @x[10]
110	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]
111	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]
112	 SMLABB    r12, r6, r3, r12                   @x[10] * h[8]
113
114	 LDRSH     r9, [r1], #2                       @x[11]
115	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]
116	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]
117	 SMLABT    r12, r9, r3, r12                   @x[11] * h[9]
118
119         LDR       r3, [r2], #4                       @h[10], h[11]
120	 LDRSH     r4, [r1], #2                       @x[12]
121         SMLABB    r10, r6, r3, r10                   @x[10] * h[10]
122	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]
123	 SMLABB    r12, r4, r3, r12                   @x[12] * h[10]
124
125	 LDRSH     r6, [r1], #2                       @x[13]
126	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]
127	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]
128	 SMLABT    r12, r6, r3, r12                   @x[13] * h[11]
129
130	 LDR       r3, [r2], #4                       @h[12], h[13]
131	 LDRSH     r9, [r1], #2                       @x[14]
132	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]
133	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]
134	 SMLABB    r12, r9, r3, r12                   @x[14] * h[12]
135
136	 LDRSH     r4, [r1], #2                       @x[15]
137	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]
138	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]
139	 SMLABT    r12, r4, r3, r12                   @x[15] * h[13]
140
141	 LDR       r3, [r2], #4                       @h[14], h[15]
142	 LDRSH     r6, [r1], #2                       @x[16]
143	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]
144	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]
145	 SMLABB    r12, r6, r3, r12                   @x[16] * h[14]
146
147	 LDRSH     r9, [r1], #2                       @x[17]
148         SMLABT    r10, r4, r3, r10                   @x[15] * h[15]
149	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]
150	 SMLABT    r12, r9, r3, r12                   @x[17] * h[15]
151
152	 LDR       r3, [r2], #4                       @h[16], h[17]
153	 LDRSH     r4, [r1], #2                       @x[18]
154	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]
155	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]
156	 SMLABB    r12, r4, r3, r12                   @x[18] * h[16]
157
158         LDRSH     r6, [r1], #2                       @x[19]
159	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]
160	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]
161	 SMLABT    r12, r6, r3, r12                   @x[19] * h[17]
162
163	 LDR       r3, [r2], #4                       @h[18], h[19]
164         LDRSH     r9, [r1], #2                       @x[20]
165	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]
166	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]
167	 SMLABB    r12, r9, r3, r12                   @x[20] * h[18]
168
169	 LDRSH     r4, [r1], #2                       @x[21]
170	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]
171	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]
172	 SMLABT    r12, r4, r3, r12                   @x[21] * h[19]
173
174	 LDR       r3, [r2], #4                       @h[20], h[21]
175	 LDRSH     r6, [r1], #2                       @x[22]
176	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]
177	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]
178	 SMLABB    r12, r6, r3, r12                   @x[22] * h[20]
179
180	 LDRSH     r9, [r1], #2                       @x[23]
181	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]
182	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]
183	 SMLABT    r12, r9, r3, r12                   @x[23] * h[21]
184
185	 LDR       r3, [r2], #4                       @h[22], h[23]
186	 LDRSH     r4, [r1], #2                       @x[24]
187	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]
188	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]
189	 SMLABB    r12, r4, r3, r12                   @x[24] * h[22]
190
191         LDRSH     r6, [r1], #2                       @x[25]
192	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]
193	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]
194	 SMLABT    r12, r6, r3, r12                   @x[25] * h[23]
195
196	 LDR       r3, [r2], #4                       @h[24], h[25]
197         LDRSH     r9, [r1], #2                       @x[26]
198	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]
199	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]
200	 SMLABB    r12, r9, r3, r12                   @x[26] * h[24]
201
202	 LDRSH     r4, [r1], #2                       @x[27]
203	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]
204	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]
205	 SMLABT    r12, r4, r3, r12                   @x[27] * h[25]
206
207	 LDR       r3, [r2], #4                       @h[26], h[27]
208	 LDRSH     r6, [r1], #2                       @x[28]
209	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]
210	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]
211	 SMLABB    r12, r6, r3, r12                   @x[28] * h[26]
212
213	 LDRSH     r9, [r1], #2                       @x[29]
214	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]
215	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]
216	 SMLABT    r12, r9, r3, r12                   @x[29] * h[27]
217
218	 LDR       r3, [r2], #4                       @h[28], h[29]
219	 LDRSH     r4, [r1], #2                       @x[30]
220	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]
221	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]
222	 SMLABB    r12, r4, r3, r12                   @x[30] * h[28]
223
224         LDRSH     r6, [r1], #2                       @x[31]
225	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]
226	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]
227	 SMLABT    r12, r6, r3, r12                   @x[31] * h[29]
228
229	 LDR       r3, [r2], #4                       @h[30], h[31]
230         LDRSH     r9, [r1], #2                       @x[32]
231	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]
232	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]
233	 SMLABB    r12, r9, r3, r12                   @x[32] * h[30]
234
235	 LDRSH     r4, [r1], #-60                     @x[33]
236	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]
237	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]
238	 SMLABT    r12, r4, r3, r12                   @x[33] * h[31]
239
240	 @SSAT      r10, #32, r10, LSL #2
241	 @SSAT      r11, #32, r11, LSL #2
242	 @SSAT      r12, #32, r12, LSL #2
243
244	 MOV       r10, r10, LSL #1
245	 MOV       r11, r11, LSL #1
246	 MOV       r12, r12, LSL #1
247
248	 QADD      r10, r10, r10
249	 QADD      r11, r11, r11
250	 QADD      r12, r12, r12
251
252	 QADD      r10, r10, r5
253	 QADD      r11, r11, r5
254	 QADD      r12, r12, r5
255
256	 SUBS      r14, r14, #1
257
258	 MOV       r10, r10, ASR #16
259	 MOV       r11, r11, ASR #16
260	 MOV       r12, r12, ASR #16
261
262	 STRH      r10, [r0], #2
263	 STRH      r11, [r0], #2
264	 STRH      r12, [r0], #2
265	 BNE       THREE_LOOP
266
267	 MOV       r2, r8                             @ptr = ptr2
268
269Last2LOOP:
270
271         LDR       r3, [r2], #4                       @h[0], h[1]
272	 LDRSH     r4, [r1], #2                       @x[0]
273	 LDRSH     r6, [r1], #2                       @x[1]
274	 LDRSH     r9, [r1], #2                       @x[2]
275
276	 SMULBB    r10, r4, r3                        @x[0] * h[0]
277	 SMULBB    r11, r6, r3                        @x[1] * h[0]
278
279	 SMLABT    r10, r6, r3, r10                   @x[1] * h[1]
280	 SMLABT    r11, r9, r3, r11                   @x[2] * h[1]
281
282	 LDR       r3, [r2], #4                       @h[2], h[3]
283	 LDRSH     r4, [r1], #2                       @x[3]
284         LDRSH     r6, [r1], #2                       @x[4]
285
286	 SMLABB    r10, r9, r3, r10                   @x[2] * h[2]
287         SMLABB    r11, r4, r3, r11                   @x[3] * h[2]
288
289	 SMLABT    r10, r4, r3, r10                   @x[3] * h[3]
290	 SMLABT    r11, r6, r3, r11                   @x[4] * h[3]
291
292	 LDR       r3, [r2], #4                       @h[4], h[5]
293	 LDRSH     r9, [r1], #2                       @x[5]
294	 LDRSH     r4, [r1], #2                       @x[6]
295
296	 SMLABB    r10, r6, r3, r10                   @x[4] * h[4]
297	 SMLABB    r11, r9, r3, r11                   @x[5] * h[4]
298
299	 SMLABT    r10, r9, r3, r10                   @x[5] * h[5]
300	 SMLABT    r11, r4, r3, r11                   @x[6] * h[5]
301
302	 LDR       r3, [r2], #4                       @h[6], h[7]
303	 LDRSH     r6, [r1], #2                       @x[7]
304	 LDRSH     r9, [r1], #2                       @x[8]
305
306	 SMLABB    r10, r4, r3, r10                   @x[6] * h[6]
307	 SMLABB    r11, r6, r3, r11                   @x[7] * h[6]
308
309	 SMLABT    r10, r6, r3, r10                   @x[7] * h[7]
310	 SMLABT    r11, r9, r3, r11                   @x[8] * h[7]
311
312	 LDR       r3, [r2], #4                       @h[8], h[9]
313	 LDRSH     r4, [r1], #2                       @x[9]
314	 LDRSH     r6, [r1], #2                       @x[10]
315
316	 SMLABB    r10, r9, r3, r10                   @x[8] * h[8]
317	 SMLABB    r11, r4, r3, r11                   @x[9] * h[8]
318
319	 SMLABT    r10, r4, r3, r10                   @x[9] * h[9]
320	 SMLABT    r11, r6, r3, r11                   @x[10] * h[9]
321
322	 LDR       r3, [r2], #4                       @h[10], h[11]
323	 LDRSH     r9, [r1], #2                       @x[11]
324	 LDRSH     r4, [r1], #2                       @x[12]
325
326	 SMLABB    r10, r6, r3, r10                   @x[10] * h[10]
327	 SMLABB    r11, r9, r3, r11                   @x[11] * h[10]
328
329	 SMLABT    r10, r9, r3, r10                   @x[11] * h[11]
330	 SMLABT    r11, r4, r3, r11                   @x[12] * h[11]
331
332	 LDR       r3, [r2], #4                       @h[12], h[13]
333	 LDRSH     r6, [r1], #2                       @x[13]
334	 LDRSH     r9, [r1], #2                       @x[14]
335
336	 SMLABB    r10, r4, r3, r10                   @x[12] * h[12]
337	 SMLABB    r11, r6, r3, r11                   @x[13] * h[12]
338
339	 SMLABT    r10, r6, r3, r10                   @x[13] * h[13]
340	 SMLABT    r11, r9, r3, r11                   @x[14] * h[13]
341
342	 LDR       r3, [r2], #4                       @h[14], h[15]
343	 LDRSH     r4, [r1], #2                       @x[15]
344	 LDRSH     r6, [r1], #2                       @x[16]
345
346	 SMLABB    r10, r9, r3, r10                   @x[14] * h[14]
347	 SMLABB    r11, r4, r3, r11                   @x[15] * h[14]
348
349	 SMLABT    r10, r4, r3, r10                   @x[15] * h[15]
350	 SMLABT    r11, r6, r3, r11                   @x[16] * h[15]
351
352	 LDR       r3, [r2], #4                       @h[16], h[17]
353	 LDRSH     r9, [r1], #2                       @x[17]
354	 LDRSH     r4, [r1], #2                       @x[18]
355
356	 SMLABB    r10, r6, r3, r10                   @x[16] * h[16]
357	 SMLABB    r11, r9, r3, r11                   @x[17] * h[16]
358
359	 SMLABT    r10, r9, r3, r10                   @x[17] * h[17]
360	 SMLABT    r11, r4, r3, r11                   @x[18] * h[17]
361
362	 LDR       r3, [r2], #4                       @h[18], h[19]
363	 LDRSH     r6, [r1], #2                       @x[19]
364	 LDRSH     r9, [r1], #2                       @x[20]
365
366	 SMLABB    r10, r4, r3, r10                   @x[18] * h[18]
367	 SMLABB    r11, r6, r3, r11                   @x[19] * h[18]
368
369	 SMLABT    r10, r6, r3, r10                   @x[19] * h[19]
370	 SMLABT    r11, r9, r3, r11                   @x[20] * h[19]
371
372	 LDR       r3, [r2], #4                       @h[20], h[21]
373	 LDRSH     r4, [r1], #2                       @x[21]
374	 LDRSH     r6, [r1], #2                       @x[22]
375
376	 SMLABB    r10, r9, r3, r10                   @x[20] * h[20]
377	 SMLABB    r11, r4, r3, r11                   @x[21] * h[20]
378
379	 SMLABT    r10, r4, r3, r10                   @x[21] * h[21]
380	 SMLABT    r11, r6, r3, r11                   @x[22] * h[21]
381
382	 LDR       r3, [r2], #4                       @h[22], h[23]
383	 LDRSH     r9, [r1], #2                       @x[23]
384	 LDRSH     r4, [r1], #2                       @x[24]
385
386	 SMLABB    r10, r6, r3, r10                   @x[22] * h[22]
387	 SMLABB    r11, r9, r3, r11                   @x[23] * h[22]
388
389	 SMLABT    r10, r9, r3, r10                   @x[23] * h[23]
390	 SMLABT    r11, r4, r3, r11                   @x[24] * h[23]
391
392	 LDR       r3, [r2], #4                       @h[24], h[25]
393	 LDRSH     r6, [r1], #2                       @x[25]
394	 LDRSH     r9, [r1], #2                       @x[26]
395
396	 SMLABB    r10, r4, r3, r10                   @x[24] * h[24]
397	 SMLABB    r11, r6, r3, r11                   @x[25] * h[24]
398
399	 SMLABT    r10, r6, r3, r10                   @x[25] * h[25]
400	 SMLABT    r11, r9, r3, r11                   @x[26] * h[25]
401
402	 LDR       r3, [r2], #4                       @h[26], h[27]
403	 LDRSH     r4, [r1], #2                       @x[27]
404	 LDRSH     r6, [r1], #2                       @x[28]
405
406	 SMLABB    r10, r9, r3, r10                   @x[26] * h[26]
407	 SMLABB    r11, r4, r3, r11                   @x[27] * h[26]
408
409	 SMLABT    r10, r4, r3, r10                   @x[27] * h[27]
410	 SMLABT    r11, r6, r3, r11                   @x[28] * h[27]
411
412	 LDR       r3, [r2], #4                       @h[28], h[29]
413	 LDRSH     r9, [r1], #2                       @x[29]
414	 LDRSH     r4, [r1], #2                       @x[30]
415
416	 SMLABB    r10, r6, r3, r10                   @x[28] * h[28]
417	 SMLABB    r11, r9, r3, r11                   @x[29] * h[28]
418
419	 SMLABT    r10, r9, r3, r10                   @x[29] * h[29]
420	 SMLABT    r11, r4, r3, r11                   @x[30] * h[29]
421
422	 LDR       r3, [r2], #4                       @h[30], h[31]
423	 LDRSH     r6, [r1], #2                       @x[31]
424	 LDRSH     r9, [r1], #2                       @x[32]
425
426	 SMLABB    r10, r4, r3, r10                   @x[30] * h[30]
427	 SMLABB    r11, r6, r3, r11                   @x[31] * h[30]
428
429	 SMLABT    r10, r6, r3, r10                   @x[31] * h[31]
430	 SMLABT    r11, r9, r3, r11                   @x[32] * h[31]
431
432	 @SSAT      r10, #32, r10, LSL #2
433	 @SSAT      r11, #32, r11, LSL #2
434	 MOV       r10, r10, LSL #1
435	 MOV       r11, r11, LSL #1
436
437	 QADD      r10, r10, r10
438	 QADD      r11, r11, r11
439
440	 QADD      r10, r10, r5
441	 QADD      r11, r11, r5
442
443	 MOV       r10, r10, ASR #16
444	 MOV       r11, r11, ASR #16
445
446	 STRH      r10, [r0], #2
447	 STRH      r11, [r0], #2
448
449
450pred_lt4_end:
451         LDMFD     r13!, {r4 - r12, r15}
452
453Table:
454         .word       inter4_2
455	 @ENDFUNC
456	 .END
457
458
459
460
461