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_decorr_filter2_armv7
25    @PRESERVE8
26
27ixheaacd_decorr_filter2_armv7:
28
29    STMFD           r13!, {r4-r12, r14}
30    LDR             r12, [r0, #24]
31
32    LDRSH           r4, [r0, #12]
33    LDRSH           r5, [r0, #14]
34    LDRSH           r6, [r0, #16]
35
36    MOV             r11, #384
37    LDR             r9, [r13, #44]
38    LDR             r14, [r13, #48]
39    LDR             r10, [r13, #40]
40
41    MLA             r4, r11, r4, r12
42
43    MLA             r5, r11, r5, r12
44
45    MLA             r6, r11, r6, r12
46
47
48    ADD             r11, r9, #0x0150
49    LDRH            r7, [r0, #28]
50    ADD             r2, r2, #12
51    ADD             r10, r10, #12
52
53    ADD             r5, r5, #140
54
55    ADD             r6, r6, #268
56
57
58    STR             r10, [r13, #-4]!
59    STR             r2, [r13, #-4]!
60    LDR             r8, [r0]
61    ADD             r11, r11, #0x0c
62
63    MOV             r0, #128
64    ADD             r2, r9, #0x012
65    ADD             r12, r11, #0x0a0
66
67
68    SUB             r10, r11, #0x03A
69    ADD             r3, r3, #12
70    MLA             r0, r7, r0, r8
71
72
73
74
75    STR             r10, [r13, #-8]!
76    STR             r3, [r13, #-4]!
77    STR             r14, [r13, #-4]!
78    ADD             r1, r1, #12
79    ADD             r0, r0, #12
80    ADD             r4, r4, #12
81
82
83
84
85
86
87DE_COR_FIL2_LOOP1:
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124    ADD             r12, r12, #12
125
126
127    ADD             r11, r11, #12
128
129
130
131
132    MOV             r9, #20
133
134    STR             r9, [r13, #-4]!
135    STR             r1, [r13, #16]
136
137
138DE_COR_FIL2_LOOP2:
139
140    LDR             r7, [r0]
141    LDR             r8, [r11], #4
142    LDR             r14, [r1], #4
143
144    SMULBT          r3, r7, r8
145    SMULBB          r9, r7, r8
146
147
148    STR             r1, [r13, #16]
149
150    SMULTT          r10, r7, r8
151
152    LDR             r1, [r13, #20]
153
154    SMLATB          r3, r7, r8, r3
155
156    MOV             r8, #0x8000
157
158    QSUB            r9, r9, r10
159    LDR             r10, [r1], #4
160    QADD            r14, r14, r8
161
162    STR             r1, [r13, #20]
163    QADD            r1, r10, r8
164
165    MOV             r7, r9, asr #15
166    MOV             r8, r3, asr #15
167
168    LDR             r10, [r12], #4
169    LDR             r9, [r4]
170
171
172    MOV             r14, r14, asr #16
173    MOV             r1, r1, asr #16
174
175    SMULBT          r3, r10, r9
176
177
178    STRH            r14, [r0], #2
179    STRH            r1, [r0], #2
180
181
182
183
184
185    SMULTT          r14, r10, r9
186    SMLATB          r3, r10, r9, r3
187    SMULBB          r9, r10, r9
188
189    LDRSH           r10, [r2], #2
190    MOV             r3, r3, asr #15
191    QSUB            r9, r9, r14
192
193    SMULBB          r14, r10, r8
194    SMULBB          r1, r10, r7
195    MOV             r9, r9, asr #15
196
197    SUB             r3, r3, r14, asr #15
198    SUB             r9, r9, r1, asr #15
199
200    SMULBB          r14, r9, r10
201    SMULBB          r1, r3, r10
202
203    LDR             r10, [r12, #124 ]
204
205    ADD             r14, r7, r14, asr #15
206    LDR             r7, [r5]
207
208    ADD             r1, r8, r1, asr #15
209
210    SMULBT          r8, r10, r7
211
212    STRH            r14, [r4], #2
213    STRH            r1, [r4], #2
214
215    SMULTT          r14, r10, r7
216    SMLATB          r8, r10, r7, r8
217    SMULBB          r7, r10, r7
218
219    LDRSH           r10, [r2], #2
220    MOV             r8, r8, asr #15
221    QSUB            r7, r7, r14
222
223    SMULBB          r14, r10, r3
224    SMULBB          r1, r10, r9
225    MOV             r7, r7, asr #15
226
227    SUB             r8, r8, r14, asr #15
228    SUB             r7, r7, r1, asr #15
229
230    SMULBB          r14, r7, r10
231    SMULBB          r1, r8, r10
232
233    LDR             r10, [r12, #252]
234
235    ADD             r14, r9, r14, asr #15
236    LDR             r9, [r6]
237
238    ADD             r1, r3, r1, asr #15
239
240    SMULBT          r3, r10, r9
241
242
243    STRH            r14, [r5], #2
244    STRH            r1, [r5], #2
245
246    SMULTT          r14, r10, r9
247    SMLATB          r3, r10, r9, r3
248    SMULBB          r9, r10, r9
249
250    LDRSH           r10, [r2], #2
251    MOV             r3, r3, asr #15
252    QSUB            r9, r9, r14
253
254    SMULBB          r14, r10, r8
255    SMULBB          r1, r10, r7
256    MOV             r9, r9, asr #15
257
258    SUB             r3, r3, r14, asr #15
259    SUB             r9, r9, r1, asr #15
260
261    SMULBB          r14, r9, r10
262    SMULBB          r1, r3, r10
263
264    LDR             r10, [r13, #12]
265    ADD             r7, r7, r14, asr #15
266    ADD             r1, r8, r1, asr #15
267
268    LDRH            r8, [r10], #2
269    STR             r10, [r13, #12]
270    STRH            r7, [r6], #2
271    LDR             r10, [r13, #4]
272
273    STRH            r1, [r6], #2
274
275    MOV             r8, r8, lsl #1
276    LDRH            r8, [r10, r8]
277    LDR             r10, [r13, #8]
278
279    LDR             r1, [r13, #16]
280    LDR             r14, [r13]
281    LDR             r7, [r13, #24]
282
283    SMULBB          r3, r3, r8
284    SMULBB          r9, r9, r8
285
286    SUBS            r14, r14, #1
287    MOV             r3, r3, lsl #1
288    MOV             r9, r9, lsl #1
289
290    STR             r3, [r7] , #4
291    STR             r9, [r10], #4
292    STR             r14, [r13]
293    STR             r10, [r13, #8]
294    STR             r7, [r13, #24]
295    BGT             DE_COR_FIL2_LOOP2
296
297    ADD             r13, r13, #28
298
299    LDMFD           r13!, {r4-r12, pc}
300
301
302
303
304.text
305.p2align 2
306.global ixheaacd_decorr_filter1_armv7
307
308ixheaacd_decorr_filter1_armv7:
309
310    STMFD           r13!, {r4-r12, r14}
311    ADD             r12, r0, #0x0bc
312
313    LDRSH           r4, [r0, #12]
314    LDRSH           r5, [r0, #14]
315    LDRSH           r6, [r0, #16]
316
317    MOV             r11, #192
318    LDR             r3, [r0, #0x2c]
319
320    MLA             r4, r11, r4, r12
321
322    MLA             r5, r11, r5, r12
323
324    MLA             r6, r11, r6, r12
325
326
327    ADD             r11, r1, #0x01b0
328    LDRH            r7, [r0, #28]
329
330    ADD             r5, r5, #64
331
332    ADD             r6, r6, #128
333
334
335    ADD             r8, r0, #0x03c
336    ADD             r11, r11, #0x0c
337
338    MOV             r0, #64
339    ADD             r12, r11, #0x1c0
340
341
342    SUB             r10, r11, #0x0b4
343    MLA             r0, r7, r0, r8
344
345
346    MOV             r9, #10
347    STR             r10, [r13, #-4]!
348    STR             r3, [r13, #-4]!
349    STR             r2, [r13, #-4]!
350    STR             r9, [r13, #-4]!
351    ADD             r2, r1, #0x096
352    MOV             r1, r3
353
354
355
356DE_COR_FIL1_LOOP:
357
358    LDR             r7, [r0]
359    LDR             r8, [r11], #4
360    LDR             r14, [r1], #4
361
362    SMULBT          r3, r7, r8
363    SMULBB          r9, r7, r8
364
365    STR             r1, [r13, #8]
366
367    SMULTT          r10, r7, r8
368    SMLATB          r3, r7, r8, r3
369
370    MOV             r8, #0x8000
371
372    QSUB            r9, r9, r10
373    LDR             r10, [r1, #0x3c]
374    QADD            r14, r14, r8
375    QADD            r1, r10, r8
376
377    MOV             r7, r9, asr #15
378    MOV             r8, r3, asr #15
379
380    LDR             r10, [r12], #4
381    LDR             r9, [r4]
382
383
384    MOV             r14, r14, asr #16
385    MOV             r1, r1, asr #16
386
387    SMULBT          r3, r10, r9
388
389    STRH            r14, [r0], #2
390    STRH            r1, [r0], #2
391
392
393
394
395
396    SMULTT          r14, r10, r9
397    SMLATB          r3, r10, r9, r3
398    SMULBB          r9, r10, r9
399
400    LDRSH           r10, [r2]
401    MOV             r3, r3, asr #15
402    QSUB            r9, r9, r14
403
404    SMULBB          r14, r10, r8
405    SMULBB          r1, r10, r7
406    MOV             r9, r9, asr #15
407
408    SUB             r3, r3, r14, asr #15
409    SUB             r9, r9, r1, asr #15
410
411    SMULBB          r14, r9, r10
412    SMULBB          r1, r3, r10
413
414    LDR             r10, [r12, #60 ]
415
416    ADD             r14, r7, r14, asr #15
417    LDR             r7, [r5]
418
419    ADD             r1, r8, r1, asr #15
420
421    SMULBT          r8, r10, r7
422    STRH            r14, [r4], #2
423    STRH            r1, [r4], #2
424
425    SMULTT          r14, r10, r7
426    SMLATB          r8, r10, r7, r8
427    SMULBB          r7, r10, r7
428
429    LDRSH           r10, [r2, #2]
430    MOV             r8, r8, asr #15
431    QSUB            r7, r7, r14
432
433    SMULBB          r14, r10, r3
434    SMULBB          r1, r10, r9
435    MOV             r7, r7, asr #15
436
437    SUB             r8, r8, r14, asr #15
438    SUB             r7, r7, r1, asr #15
439
440    SMULBB          r14, r7, r10
441    SMULBB          r1, r8, r10
442
443    LDR             r10, [r12, #124]
444
445    ADD             r14, r9, r14, asr #15
446    LDR             r9, [r6]
447
448    ADD             r1, r3, r1, asr #15
449
450    SMULBT          r3, r10, r9
451
452    STRH            r14, [r5], #2
453    STRH            r1, [r5], #2
454
455    SMULTT          r14, r10, r9
456    SMLATB          r3, r10, r9, r3
457    SMULBB          r9, r10, r9
458
459    LDRSH           r10, [r2, #4]
460    MOV             r3, r3, asr #15
461    QSUB            r9, r9, r14
462
463    SMULBB          r14, r10, r8
464    SMULBB          r1, r10, r7
465    MOV             r9, r9, asr #15
466
467    SUB             r3, r3, r14, asr #15
468    SUB             r9, r9, r1, asr #15
469
470    SMULBB          r14, r9, r10
471    SMULBB          r1, r3, r10
472
473    LDR             r10, [r13, #12]
474    ADD             r7, r7, r14, asr #15
475    ADD             r1, r8, r1, asr #15
476
477    LDRH            r8, [r10], #2
478    STR             r10, [r13, #12]
479    STRH            r7, [r6], #2
480    LDR             r10, [r13, #4]
481
482    STRH            r1, [r6], #2
483
484    MOV             r8, r8, lsl #1
485    LDRH            r8, [r10, r8]
486
487    LDR             r14, [r13]
488    LDR             r1, [r13, #8]
489
490    SMULBB          r3, r3, r8
491    SMULBB          r9, r9, r8
492
493    SUBS            r14, r14, #1
494    MOV             r3, r3, lsl #1
495    MOV             r9, r9, lsl #1
496
497    STR             r3, [r1 , #0x0bc]
498    STR             r9, [r1, #0x7c]
499    STR             r14, [r13]
500    BGT             DE_COR_FIL1_LOOP
501
502    ADD             r13, r13, #16
503
504    LDMFD           r13!, {r4-r12, pc}
505
506
507
508
509
510
511
512
513
514
515
516.text
517.p2align 2
518.global ixheaacd_divide16_pos_armv7
519
520ixheaacd_divide16_pos_armv7:
521    CMP             r1, #0
522    MOV             r2, r1
523@    MVNLTS      r2, r2
524    MVNSLT          r2, r2
525    CLZ             r2, r2
526    SUB             r2, r2, #1
527    MOV             r0, r0, LSL r2
528    MOV             r1, r1, LSL r2
529    MOV             r2, r1, LSR #16
530    MOV             r0, r0, LSR #16
531    MOVS            r0, r0, LSL #16
532    MOV             r2, r2, LSL #16
533    BXEQ            r14
534    MOV             r1, #0x10
535    MOV             r3, #1
536FFR_DIV_LOOP:
537    CMP             r0, r2
538    MOVCC           r0, r0, LSL #1
539    SUBCS           r0, r0, r2
540    ADDCS           r0, r3, r0, LSL #1
541    SUBS            r1, r1, #1
542    BGT             FFR_DIV_LOOP
543    BX              r14
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563.text
564.p2align 2
565.global ixheaacd_decorrelation_armv7
566
567
568
569
570ixheaacd_decorrelation_armv7:
571
572    STMFD           r13!, {r4-r12, r14}
573
574    LDR             r4, [r13, #40]
575    LDR             r5, [r13, #44]
576    LDR             r6, [r0, #0x2c]
577    STR             r1, [r13, #-4]!
578    STR             r2, [r13, #-4]!
579    STR             r3, [r13, #-4]!
580    STR             r4, [r13, #-4]!
581    SUB             r13, r13, #124
582
583
584    LDR             r7, [r6]
585    LDR             r8, [r6, #20]
586    LDR             r9, [r6, #64]
587    LDR             r10, [r6, #84]
588
589    SMULWT          r11, r7, r7
590    SMULWT          r12, r9, r9
591    SMLAWT          r11, r8, r8, r11
592    SMLAWT          r12, r10, r10, r12
593
594    LDR             r10, [r6, #16]
595    LDR             r8, [r6, #80]
596    LDR             r9, [r6, #4]
597    QADD            r14, r11, r12
598    LDR             r7, [r6, #68]
599    SMULWT          r11, r10, r10
600    STR             r14, [r13]
601
602    SMULWT          r12, r9, r9
603    SMLAWT          r11, r7, r7, r11
604    LDRSH           r7, [r5, #0x0aa]
605    SMLAWT          r12, r8, r8, r12
606
607
608
609    ADD             r10, r6, #0x040
610    LDR             r8, [r6, r7, lsl #2]
611    QADD            r14, r11, r12
612    LDR             r9, [r10, r7, lsl #2]
613    LDRSH           r7, [r5, #0x0ac]
614    SMULWT          r11, r8, r8
615    STR             r14, [r13, #4]
616
617    LDR             r8, [r6, r7, lsl #2]
618    SMLAWT          r12, r9, r9, r11
619    LDR             r9, [r10, r7, lsl #2]
620    LDRSH           r7, [r5, #0x0ae]
621    SMULWT          r11, r8, r8
622    STR             r12, [r13, #8]
623
624    LDR             r8, [r6, r7, lsl #2]
625    SMLAWT          r12, r9, r9, r11
626    LDR             r9, [r10, r7, lsl #2]
627    LDRSH           r7, [r5, #0x0b0]
628    SMULWT          r11, r8, r8
629    STR             r12, [r13, #12]
630
631    LDR             r8, [r6, r7, lsl #2]
632    SMLAWT          r12, r9, r9, r11
633    LDR             r9, [r10, r7, lsl #2]
634    LDRSH           r7, [r5, #0x0b2]
635    SMULWT          r11, r8, r8
636    STR             r12, [r13, #16]
637
638    LDR             r8, [r6, r7, lsl #2]
639    SMLAWT          r12, r9, r9, r11
640    LDR             r9, [r10, r7, lsl #2]
641    LDRSH           r7, [r5, #0x0b4]
642    SMULWT          r11, r8, r8
643    STR             r12, [r13, #20]
644
645    LDR             r8, [r6, r7, lsl #2]
646    SMLAWT          r12, r9, r9, r11
647    LDR             r9, [r10, r7, lsl #2]
648    LDR             r6, [r1, #12]
649    SMULWT          r11, r8, r8
650    LDR             r7, [r2, #12]
651    SMLAWT          r14, r9, r9, r11
652    STR             r12, [r13, #24]
653
654
655    LDR             r8, [r1, #16]
656    SMULWT          r10, r6, r6
657    LDR             r9, [r2, #16]
658    SMLAWT          r12, r7, r7, r10
659    STR             r14, [r13, #28]
660
661    SMULWT          r10, r8, r8
662    LDR             r6, [r1, #20]
663    SMLAWT          r14, r9, r9, r10
664
665    LDR             r7, [r2, #20]
666    STR             r12, [r13, #32]
667
668    LDR             r8, [r1, #24]
669    SMULWT          r10, r6, r6
670    LDR             r9, [r2, #24]
671    SMLAWT          r12, r7, r7, r10
672    STR             r14, [r13, #36]
673
674    SMULWT          r10, r8, r8
675    LDR             r6, [r1, #28]
676    SMLAWT          r14, r9, r9, r10
677
678    LDR             r7, [r2, #28]
679    STR             r12, [r13, #40]
680
681
682    LDR             r8, [r1, #32]
683    SMULWT          r10, r6, r6
684    LDR             r9, [r2, #32]
685    SMLAWT          r12, r7, r7, r10
686    STR             r14, [r13, #44]
687
688    SMULWT          r10, r8, r8
689    ADD             r7, r0, #0x06c0
690    SMLAWT          r14, r9, r9, r10
691    STR             r12, [r13, #48]
692    LDRSH           r12, [r7, #2]
693    STR             r14, [r13, #52]
694    STR             r0, [r13, #-4]!
695    STR             r5, [r13, #-4]!
696
697
698    ADD             r3, r5, #0x0c2
699    MOV             r0, #6
700    ADD             r4, r13, #64
701
702DE_COR_LOOP1:
703
704    LDRSH           r6, [r3, #2]
705    LDRSH           r7, [r3], #2
706    MOV             r14, #0
707    CMP             r6, r12
708    MOVGT           r6, r12
709
710
711    SUBS            r6, r6, r7
712
713
714    ADD             r8, r1, r7, lsl #2
715    ADD             r9, r2, r7, lsl #2
716    BLE             DE_COR_NEXT1
717    LDR             r10, [r8], #4
718    LDR             r11, [r9], #4
719    LDRSH           r7, [r3, #0x0c]
720
721
722DE_COR_LOOP1_1:
723
724    SMULWT          r5, r10, r10
725    SUBS            r6, r6, #1
726    SMLAWT          r5, r11, r11, r5
727    LDR             r10, [r8], #4
728    LDR             r11, [r9], #4
729    MOV             r5, r5, asr  r7
730    QADD            r14, r14, r5
731    BGT             DE_COR_LOOP1_1
732
733DE_COR_NEXT1:
734    SUBS            r0, r0, #1
735    STR             r14, [r4], #4
736    BGT             DE_COR_LOOP1
737
738    LDR             r5, [r13], #4
739    LDR             r0, [r13], #4
740
741    MOV             r14, #20
742    MOV             r7, r13
743    LDR             r3, [r0, #0x020]
744    LDR             r4, [r0, #0x028]
745    LDR             r12, =0x620a
746    LDR             r6, [r0, #0x024]
747    STR             r0, [r13, #-4]!
748    STR             r5, [r13, #-4]!
749    MOV             r11, #0x6000
750    MOV             r8, #0x0ff
751    ADD             r5, r7, #80
752    ORR             r8, r8, #0x07f00
753
754DE_COR_LOOP2:
755
756    LDR             r9, [r3]
757    LDR             r2, [r7]
758    LDR             r10, [r4]
759    SMULWB          r9, r9, r12
760
761    MOVS            r2, r2, lsl #1
762    SMULWB          r10, r10, r11
763    MOVLT           r2, #0
764    MOV             r9, r9, lsl #1
765    CMP             r2, r9
766    MOVGT           r9, r2
767
768    STR             r9, [r3], #4
769    QSUB            r9, r9, r2
770
771    MOV             r10, r10, lsl #1
772    STR             r2, [r7], #4
773    MOV             r9, r9, asr #2
774    QADD            r9, r9, r10
775
776
777
778
779    LDR             r10, [r6]
780    MOV             r2, r2, asr #2
781    STR             r9, [r4], #4
782    SMULWB          r10, r10, r11
783
784
785    MOV             r0, r9, asr #1
786    QADD            r1, r9, r0
787    MOV             r10, r10, lsl #1
788    ADD             r0, r10, r2
789
790
791    STR             r0, [r6], #4
792    CMP             r1, r0
793
794    MOVLE           r0, r8
795    BLE             DE_COR_NEXT2
796
797
798
799
800
801
802
803
804    MOVS            r2, r1
805    MVNLT           r2, r2
806    CLZ             r2, r2
807    SUB             r2, r2, #1
808    MOV             r0, r0, lsl r2
809    MOV             r1, r1, lsl r2
810    MOV             r2, r1, lsr #16
811    MOV             r0, r0, lsr #16
812    MOVS            r0, r0, lsl #16
813    MOV             r2, r2, lsl #16
814    BEQ             DE_COR_NEXT1_1
815    MOV             r1, #04
816    MOV             r10, #1
817
818
819DE_COR_DIV_LOOP:
820    SUBS            r9, r0, r2
821    MOVCC           r0, r0, lsl #1
822
823    ADDCS           r0, r10, r9, lsl #1
824
825
826    SUBS            r9, r0, r2
827    MOVCC           r0, r0, lsl #1
828
829    ADDCS           r0, r10, r9, lsl #1
830
831
832    SUBS            r9, r0, r2
833    MOVCC           r0, r0, lsl #1
834
835    ADDCS           r0, r10, r9, lsl #1
836
837
838    SUBS            r9, r0, r2
839    MOVCC           r0, r0, lsl #1
840
841    ADDCS           r0, r10, r9, lsl #1
842
843
844    SUBS            r1, r1, #1
845    BGT             DE_COR_DIV_LOOP
846
847
848
849DE_COR_NEXT1_1:
850
851
852
853
854    MOV             r0, r0, lsl #16
855    MOV             r0, r0, asr #16
856
857DE_COR_NEXT2:
858
859    STRH            r0, [r5], #2
860    SUBS            r14, r14, #1
861    BGT             DE_COR_LOOP2
862
863    LDR             r5, [r13], #4
864    LDR             r0, [r13]
865    MOV             r1, r5
866    ADD             r2, r13, #84
867    BL              ixheaacd_decorr_filter1_armv7
868
869    LDR             r0, [r13]
870    LDR             r1, [r13, #140]
871    LDR             r2, [r13, #136]
872
873    ADD             r7, r13, #84
874    MOV             r8, #0
875
876    LDR             r3, [r13, #132]
877    LDR             r6, [r13, #128]
878
879    STRH            r8, [r7, #40]
880    STR             r7, [r13, #-4]!
881    STR             r5, [r13, #-4]!
882    STR             r6, [r13, #-4]!
883    BL              ixheaacd_decorr_filter2_armv7
884
885
886
887
888    ADD             r13, r13, #12
889    LDR             r0, [r13], #4
890
891    LDR             r1, [r13, #136]
892    LDR             r2, [r13, #132]
893    ADD             r6, r0, #0x06c0
894    LDR             r3, [r13, #128]
895    LDR             r4, [r13, #124]
896
897    LDRSH           r10, [r0, #0x1e]
898    LDR             r9, [r0, #4]
899    LDRSH           r12, [r6, #2]
900    LDRSH           r14, [r5, #0x0cc]
901    MOV             r6, #0x030
902    LDRSH           r11, [r5, #0x0ca]
903    MLA             r6, r10, r6, r9
904
905
906
907
908    ADD             r10, r10, #1
909
910    CMP             r10, #14
911    MOVGE           r10, #0
912
913
914    CMP             r12, r14
915    MOVLT           r14, r12
916    STRH            r10, [r0, #0x1e]
917    ADD             r1, r1, r11, lsl #2
918    ADD             r2, r2, r11, lsl #2
919    ADD             r3, r3, r11, lsl #2
920    ADD             r4, r4, r11, lsl #2
921    LDRSH           r8, [r7, #36]
922    SUBS            r14, r14, r11
923    MOV             r7, #0x08000
924    BLE             DE_COR_NEXT3
925
926
927
928DE_COR_LOOP3:
929
930    LDR             r10, [r1], #4
931    LDR             r11, [r2], #4
932    LDR             r9, [r6]
933    QADD            r10, r10, r7
934    QADD            r11, r11, r7
935    SUBS            r14, r14, #1
936
937    MOV             r10, r10, asr #16
938    STRH            r10, [r6], #2
939
940    SMULBB          r10, r9, r8
941
942
943    MOV             r11, r11, asr #16
944    STRH            r11, [r6], #2
945
946    SMULTB          r11, r9, r8
947
948
949    MOV             r10, r10, lsl #1
950    STR             r10, [r3], #4
951
952    MOV             r11, r11, lsl #1
953    STR             r11, [r4], #4
954    BGT             DE_COR_LOOP3
955
956DE_COR_NEXT3:
957    LDR             r1, [r13, #136]
958    LDR             r2, [r13, #132]
959    LDR             r3, [r13, #128]
960    LDR             r4, [r13, #124]
961
962    LDRSH           r8, [r13, #118]
963    LDRSH           r14, [r5, #0x0ce]
964    LDRSH           r11, [r5, #0x0cc]
965    LDR             r6, [r0, #8]
966    LDRSH           r8, [r13, #118]
967
968    CMP             r12, r14
969    MOVLT           r14, r12
970
971    ADD             r1, r1, r11, lsl #2
972    ADD             r2, r2, r11, lsl #2
973    ADD             r3, r3, r11, lsl #2
974    ADD             r4, r4, r11, lsl #2
975
976    SUBS            r14, r14, r11
977    BLE             DE_COR_NEXT4
978
979
980
981DE_COR_LOOP4:
982    LDR             r10, [r1], #4
983    LDR             r11, [r2], #4
984    LDR             r9, [r6]
985    QADD            r10, r10, r7
986    QADD            r11, r11, r7
987    SUBS            r14, r14, #1
988
989    MOV             r10, r10, asr #16
990    STRH            r10, [r6], #2
991
992    SMULBB          r10, r9, r8
993
994
995    MOV             r11, r11, asr #16
996    STRH            r11, [r6], #2
997
998    SMULTB          r11, r9, r8
999
1000    MOV             r10, r10, lsl #1
1001    STR             r10, [r3], #4
1002
1003    MOV             r11, r11, lsl #1
1004    STR             r11, [r4], #4
1005    BGT             DE_COR_LOOP4
1006
1007DE_COR_NEXT4:
1008
1009    LDR             r3, [r13, #128]
1010    LDR             r4, [r13, #124]
1011
1012    RSBS            r14, r12, #64
1013
1014
1015    MOV             r9, #0
1016    LDRSH           r10, [r0, #0x01c]
1017    ADD             r3, r3, r12, lsl #2
1018    ADD             r4, r4, r12, lsl #2
1019    BLE             DE_COR_NEXT5
1020
1021DE_COR_LOOP5:
1022
1023    STR             r9, [r3], #4
1024    STR             r9, [r4], #4
1025    SUBS            r14, r14, #1
1026    BGT             DE_COR_LOOP5
1027
1028DE_COR_NEXT5:
1029
1030
1031    ADD             r10, r10, #1
1032    CMP             r10, #2
1033    MOVGE           r10, #0
1034
1035    STRH            r10, [r0, #0x01c]
1036
1037
1038
1039    LDRSH           r1, [r0, #0x0c]
1040    LDRSH           r4, [r0, #0x12]
1041    LDRSH           r2, [r0, #0x0e]
1042    LDRSH           r5, [r0, #0x14]
1043    LDRSH           r3, [r0, #0x10]
1044    LDRSH           r6, [r0, #0x16]
1045
1046    ADD             r13, r13, #140
1047    ADD             r1, r1, #1
1048    ADD             r2, r2, #1
1049    ADD             r3, r3, #1
1050
1051    CMP             r1, r4
1052    MOVGE           r1, #0
1053
1054
1055
1056    CMP             r2, r5
1057    MOVGE           r2, #0
1058
1059
1060
1061    CMP             r3, r6
1062    MOVGE           r3, #0
1063
1064
1065
1066    STRH            r1, [r0, #0x0c]
1067    STRH            r2, [r0, #0x0e]
1068    STRH            r3, [r0, #0x10]
1069
1070    LDMFD           r13!, {r4-r12, pc}
1071
1072