xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_fwd_modulation.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
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 .extern ixheaacd_cos_sin_mod
25.hidden ixheaacd_cos_sin_mod
26 .global ixheaacd_fwd_modulation
27 .type ixheaacd_fwd_modulation, %function
28ixheaacd_fwd_modulation:
29
30    STMFD           sp!, {r3-r9, r12, lr}
31    MOV             r5, r2
32    LDR             r2, [sp, #0x24]
33    MOV             lr, r1
34    MOV             r4, r1
35    LDR             r1, [r3]
36    SUB             r1, r1, #1
37    CMP             r1, #0x3f
38    MOV             r7, r5
39    ADD             r8, r0, #0xfc
40    ADDEQ           r8, r8, #0x100
41    MOV             r6, r3
42LOOP1:
43    LDR             r3, [r0], #4
44    LDR             r12, [r8], #-4
45
46    MOV             r3, r3, ASR #4
47    MOV             r12, r12, ASR #4
48
49    QSUB            r9, r3, r12
50    ADD             r3, r3, r12
51
52    STR             r9, [lr], #4
53    SUBS            r1, r1, #1
54    STR             r3, [r7], #4
55
56    BPL             LOOP1
57
58    MOV             r1, r6
59    MOV             r0, r4
60
61
62
63    MOV             r3, #0xd8
64    LSL             r3, r3, #4
65    ADD             r3, r3, #8
66
67    ADD             r3, r2, r3
68
69
70    ADD             r2, r3, #4
71
72
73
74    BL              ixheaacd_cos_sin_mod
75
76    LDR             r1, [sp, #0x28]
77    LDRSH           r2, [r6]
78    CMP             r1, #1
79    BEQ             LOOP3
80    LDRSH           r1, [r6, #0x2c]
81    LDRSH           r2, [r6, #0x2a]
82    LDR             r0, [r6, #0x18]
83    SUBS            r2, r1, r2
84
85@   LDMLEFD         sp!, {r3-r9, r12, pc}
86    LDMFDLE         sp!, {r3-r9, r12, pc}
87LOOP2:
88    LDR             r1, [r0], #4
89    LDR             r12, [r5, #0]
90    LDR             r3, [r4, #0]
91
92    SMULWT          r6, r12, r1
93    SMULWB          lr, r3, r1
94
95    SMULWB          r12, r12, r1
96    SMULWT          r1, r3, r1
97
98
99
100
101    ADD             lr, lr, r6
102    QSUB            r1, r12, r1
103    MOV             r3, lr, LSL #1
104    MOV             r1, r1, LSL #1
105    STR             r3, [r4], #4
106    SUBS            r2, r2, #1
107    STR             r1, [r5], #4
108    BGT             LOOP2
109    B               END
110LOOP3:
111    LDR             r12, [r5, #0]
112    LDR             r3, [r4, #0]
113
114    MOV             r1, r3
115    MOV             r3, #0
116    SUB             r3, r3, r12
117
118    STR             r3, [r4], #4
119    STR             r1, [r5], #4
120
121    LDR             r12, [r5, #0]
122    LDR             r3, [r4, #0]
123
124    MOV             r1, r12
125    MOV             r12, #0
126    SUB             r12, r12, r3
127
128    STR             r12, [r5], #4
129    STR             r1, [r4], #4
130
131    SUBS            r2, r2, #2
132    BGT             LOOP3
133END:
134    LDMFD           sp!, {r3-r9, r12, pc}
135