xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_fwd_modulation.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker@/******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker@ *
3*15dc779aSAndroid Build Coastguard Worker@ * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker@ *
5*15dc779aSAndroid Build Coastguard Worker@ * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker@ * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker@ * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker@ *
9*15dc779aSAndroid Build Coastguard Worker@ * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker@ *
11*15dc779aSAndroid Build Coastguard Worker@ * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker@ * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker@ * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker@ * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker@ *
17*15dc779aSAndroid Build Coastguard Worker@ *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker@*/
20*15dc779aSAndroid Build Coastguard Worker
21*15dc779aSAndroid Build Coastguard Worker
22*15dc779aSAndroid Build Coastguard Worker.text
23*15dc779aSAndroid Build Coastguard Worker.p2align 2
24*15dc779aSAndroid Build Coastguard Worker .extern ixheaacd_cos_sin_mod
25*15dc779aSAndroid Build Coastguard Worker.hidden ixheaacd_cos_sin_mod
26*15dc779aSAndroid Build Coastguard Worker .global ixheaacd_fwd_modulation
27*15dc779aSAndroid Build Coastguard Worker .type ixheaacd_fwd_modulation, %function
28*15dc779aSAndroid Build Coastguard Workerixheaacd_fwd_modulation:
29*15dc779aSAndroid Build Coastguard Worker
30*15dc779aSAndroid Build Coastguard Worker    STMFD           sp!, {r3-r9, r12, lr}
31*15dc779aSAndroid Build Coastguard Worker    MOV             r5, r2
32*15dc779aSAndroid Build Coastguard Worker    LDR             r2, [sp, #0x24]
33*15dc779aSAndroid Build Coastguard Worker    MOV             lr, r1
34*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r1
35*15dc779aSAndroid Build Coastguard Worker    LDR             r1, [r3]
36*15dc779aSAndroid Build Coastguard Worker    SUB             r1, r1, #1
37*15dc779aSAndroid Build Coastguard Worker    CMP             r1, #0x3f
38*15dc779aSAndroid Build Coastguard Worker    MOV             r7, r5
39*15dc779aSAndroid Build Coastguard Worker    ADD             r8, r0, #0xfc
40*15dc779aSAndroid Build Coastguard Worker    ADDEQ           r8, r8, #0x100
41*15dc779aSAndroid Build Coastguard Worker    MOV             r6, r3
42*15dc779aSAndroid Build Coastguard WorkerLOOP1:
43*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r0], #4
44*15dc779aSAndroid Build Coastguard Worker    LDR             r12, [r8], #-4
45*15dc779aSAndroid Build Coastguard Worker
46*15dc779aSAndroid Build Coastguard Worker    MOV             r3, r3, ASR #4
47*15dc779aSAndroid Build Coastguard Worker    MOV             r12, r12, ASR #4
48*15dc779aSAndroid Build Coastguard Worker
49*15dc779aSAndroid Build Coastguard Worker    QSUB            r9, r3, r12
50*15dc779aSAndroid Build Coastguard Worker    ADD             r3, r3, r12
51*15dc779aSAndroid Build Coastguard Worker
52*15dc779aSAndroid Build Coastguard Worker    STR             r9, [lr], #4
53*15dc779aSAndroid Build Coastguard Worker    SUBS            r1, r1, #1
54*15dc779aSAndroid Build Coastguard Worker    STR             r3, [r7], #4
55*15dc779aSAndroid Build Coastguard Worker
56*15dc779aSAndroid Build Coastguard Worker    BPL             LOOP1
57*15dc779aSAndroid Build Coastguard Worker
58*15dc779aSAndroid Build Coastguard Worker    MOV             r1, r6
59*15dc779aSAndroid Build Coastguard Worker    MOV             r0, r4
60*15dc779aSAndroid Build Coastguard Worker
61*15dc779aSAndroid Build Coastguard Worker
62*15dc779aSAndroid Build Coastguard Worker
63*15dc779aSAndroid Build Coastguard Worker    MOV             r3, #0xd8
64*15dc779aSAndroid Build Coastguard Worker    LSL             r3, r3, #4
65*15dc779aSAndroid Build Coastguard Worker    ADD             r3, r3, #8
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker    ADD             r3, r2, r3
68*15dc779aSAndroid Build Coastguard Worker
69*15dc779aSAndroid Build Coastguard Worker
70*15dc779aSAndroid Build Coastguard Worker    ADD             r2, r3, #4
71*15dc779aSAndroid Build Coastguard Worker
72*15dc779aSAndroid Build Coastguard Worker
73*15dc779aSAndroid Build Coastguard Worker
74*15dc779aSAndroid Build Coastguard Worker    BL              ixheaacd_cos_sin_mod
75*15dc779aSAndroid Build Coastguard Worker
76*15dc779aSAndroid Build Coastguard Worker    LDR             r1, [sp, #0x28]
77*15dc779aSAndroid Build Coastguard Worker    LDRSH           r2, [r6]
78*15dc779aSAndroid Build Coastguard Worker    CMP             r1, #1
79*15dc779aSAndroid Build Coastguard Worker    BEQ             LOOP3
80*15dc779aSAndroid Build Coastguard Worker    LDRSH           r1, [r6, #0x2c]
81*15dc779aSAndroid Build Coastguard Worker    LDRSH           r2, [r6, #0x2a]
82*15dc779aSAndroid Build Coastguard Worker    LDR             r0, [r6, #0x18]
83*15dc779aSAndroid Build Coastguard Worker    SUBS            r2, r1, r2
84*15dc779aSAndroid Build Coastguard Worker
85*15dc779aSAndroid Build Coastguard Worker@   LDMLEFD         sp!, {r3-r9, r12, pc}
86*15dc779aSAndroid Build Coastguard Worker    LDMFDLE         sp!, {r3-r9, r12, pc}
87*15dc779aSAndroid Build Coastguard WorkerLOOP2:
88*15dc779aSAndroid Build Coastguard Worker    LDR             r1, [r0], #4
89*15dc779aSAndroid Build Coastguard Worker    LDR             r12, [r5, #0]
90*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r4, #0]
91*15dc779aSAndroid Build Coastguard Worker
92*15dc779aSAndroid Build Coastguard Worker    SMULWT          r6, r12, r1
93*15dc779aSAndroid Build Coastguard Worker    SMULWB          lr, r3, r1
94*15dc779aSAndroid Build Coastguard Worker
95*15dc779aSAndroid Build Coastguard Worker    SMULWB          r12, r12, r1
96*15dc779aSAndroid Build Coastguard Worker    SMULWT          r1, r3, r1
97*15dc779aSAndroid Build Coastguard Worker
98*15dc779aSAndroid Build Coastguard Worker
99*15dc779aSAndroid Build Coastguard Worker
100*15dc779aSAndroid Build Coastguard Worker
101*15dc779aSAndroid Build Coastguard Worker    ADD             lr, lr, r6
102*15dc779aSAndroid Build Coastguard Worker    QSUB            r1, r12, r1
103*15dc779aSAndroid Build Coastguard Worker    MOV             r3, lr, LSL #1
104*15dc779aSAndroid Build Coastguard Worker    MOV             r1, r1, LSL #1
105*15dc779aSAndroid Build Coastguard Worker    STR             r3, [r4], #4
106*15dc779aSAndroid Build Coastguard Worker    SUBS            r2, r2, #1
107*15dc779aSAndroid Build Coastguard Worker    STR             r1, [r5], #4
108*15dc779aSAndroid Build Coastguard Worker    BGT             LOOP2
109*15dc779aSAndroid Build Coastguard Worker    B               END
110*15dc779aSAndroid Build Coastguard WorkerLOOP3:
111*15dc779aSAndroid Build Coastguard Worker    LDR             r12, [r5, #0]
112*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r4, #0]
113*15dc779aSAndroid Build Coastguard Worker
114*15dc779aSAndroid Build Coastguard Worker    MOV             r1, r3
115*15dc779aSAndroid Build Coastguard Worker    MOV             r3, #0
116*15dc779aSAndroid Build Coastguard Worker    SUB             r3, r3, r12
117*15dc779aSAndroid Build Coastguard Worker
118*15dc779aSAndroid Build Coastguard Worker    STR             r3, [r4], #4
119*15dc779aSAndroid Build Coastguard Worker    STR             r1, [r5], #4
120*15dc779aSAndroid Build Coastguard Worker
121*15dc779aSAndroid Build Coastguard Worker    LDR             r12, [r5, #0]
122*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r4, #0]
123*15dc779aSAndroid Build Coastguard Worker
124*15dc779aSAndroid Build Coastguard Worker    MOV             r1, r12
125*15dc779aSAndroid Build Coastguard Worker    MOV             r12, #0
126*15dc779aSAndroid Build Coastguard Worker    SUB             r12, r12, r3
127*15dc779aSAndroid Build Coastguard Worker
128*15dc779aSAndroid Build Coastguard Worker    STR             r12, [r5], #4
129*15dc779aSAndroid Build Coastguard Worker    STR             r1, [r4], #4
130*15dc779aSAndroid Build Coastguard Worker
131*15dc779aSAndroid Build Coastguard Worker    SUBS            r2, r2, #2
132*15dc779aSAndroid Build Coastguard Worker    BGT             LOOP3
133*15dc779aSAndroid Build Coastguard WorkerEND:
134*15dc779aSAndroid Build Coastguard Worker    LDMFD           sp!, {r3-r9, r12, pc}
135