xref: /aosp_15_r20/external/libxaac/decoder/armv7/ixheaacd_fft32x32_ld.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker.text
2*15dc779aSAndroid Build Coastguard Worker.p2align 2
3*15dc779aSAndroid Build Coastguard Worker.global DSP_fft32x16_dit
4*15dc779aSAndroid Build Coastguard Worker
5*15dc779aSAndroid Build Coastguard WorkerDSP_fft32x16_dit:
6*15dc779aSAndroid Build Coastguard Worker
7*15dc779aSAndroid Build Coastguard Worker    STMFD           sp!, {r4-r12, r14}
8*15dc779aSAndroid Build Coastguard Worker    VPUSH           {D8-D15}
9*15dc779aSAndroid Build Coastguard Worker
10*15dc779aSAndroid Build Coastguard Worker@**************Variables Vs Registers*************************
11*15dc779aSAndroid Build Coastguard Worker@   r0 = *ptr_w
12*15dc779aSAndroid Build Coastguard Worker@   r1 = npoints
13*15dc779aSAndroid Build Coastguard Worker@   r2 = ptr_x  and
14*15dc779aSAndroid Build Coastguard Worker@   r3 = ptr_y
15*15dc779aSAndroid Build Coastguard Worker@   r4 = pbit_rev_1024  and pdigRevTable
16*15dc779aSAndroid Build Coastguard Worker@   r5 = pbit_rev_512   and p_data1
17*15dc779aSAndroid Build Coastguard Worker@   r6 = pbit_rev_128   and p_data2
18*15dc779aSAndroid Build Coastguard Worker@   r7 = pbit_rev_32   and p_data3
19*15dc779aSAndroid Build Coastguard Worker@   r8 = power    and nstages_4
20*15dc779aSAndroid Build Coastguard Worker@   r9 = stage_1_count
21*15dc779aSAndroid Build Coastguard Worker@   r10 = first_stage (8 or 4)
22*15dc779aSAndroid Build Coastguard Worker@   r11 = p_data4
23*15dc779aSAndroid Build Coastguard Worker@   r12 = bit reverse value
24*15dc779aSAndroid Build Coastguard Worker
25*15dc779aSAndroid Build Coastguard Worker
26*15dc779aSAndroid Build Coastguard Worker@        LDR      r4,[sp,#0x68]
27*15dc779aSAndroid Build Coastguard Worker    LDR             r5, [sp, #0x68]
28*15dc779aSAndroid Build Coastguard Worker    LDR             r6, [sp, #0x68+4]
29*15dc779aSAndroid Build Coastguard Worker    LDR             r7, [sp, #0x68+8]
30*15dc779aSAndroid Build Coastguard Worker
31*15dc779aSAndroid Build Coastguard Worker
32*15dc779aSAndroid Build Coastguard Worker@ These conditions can be optimised to lesser number
33*15dc779aSAndroid Build Coastguard Worker@************************************************************************************
34*15dc779aSAndroid Build Coastguard Worker
35*15dc779aSAndroid Build Coastguard Worker@COND_1 CMP r1, #0x400      @1024
36*15dc779aSAndroid Build Coastguard Worker@   BNE COND_2
37*15dc779aSAndroid Build Coastguard Worker@   @MOV    r10, #4         @ because radix 8 first stage is by default
38*15dc779aSAndroid Build Coastguard Worker@        MOV    r8, #4
39*15dc779aSAndroid Build Coastguard Worker@        B  RADIX_4_FIRST_START
40*15dc779aSAndroid Build Coastguard Worker
41*15dc779aSAndroid Build Coastguard Worker@line 59 "../../algo/aacdec/src/neon_asm/fft32x16ch_neon.s"
42*15dc779aSAndroid Build Coastguard WorkerCOND_2: CMP         r1, #0x200          @512
43*15dc779aSAndroid Build Coastguard Worker    BNE             COND_3
44*15dc779aSAndroid Build Coastguard Worker    @MOV    r10, #8
45*15dc779aSAndroid Build Coastguard Worker    MOV             r8, #3
46*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r5
47*15dc779aSAndroid Build Coastguard Worker    B               RADIX_8_FIRST_START
48*15dc779aSAndroid Build Coastguard Worker
49*15dc779aSAndroid Build Coastguard WorkerCOND_3: CMP         r1, #0x100
50*15dc779aSAndroid Build Coastguard Worker    BNE             COND_4
51*15dc779aSAndroid Build Coastguard Worker    @MOV    r10, #4
52*15dc779aSAndroid Build Coastguard Worker    MOV             r8, #3
53*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r5
54*15dc779aSAndroid Build Coastguard Worker    B               RADIX_4_FIRST_START
55*15dc779aSAndroid Build Coastguard Worker
56*15dc779aSAndroid Build Coastguard WorkerCOND_4: CMP         r1, #0x80           @128
57*15dc779aSAndroid Build Coastguard Worker    BNE             COND_5
58*15dc779aSAndroid Build Coastguard Worker    @MOV    r10, #8
59*15dc779aSAndroid Build Coastguard Worker    MOV             r8, #2
60*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r6
61*15dc779aSAndroid Build Coastguard Worker    B               RADIX_8_FIRST_START
62*15dc779aSAndroid Build Coastguard Worker
63*15dc779aSAndroid Build Coastguard WorkerCOND_5: CMP         r1, #0x40
64*15dc779aSAndroid Build Coastguard Worker    BNE             COND_6
65*15dc779aSAndroid Build Coastguard Worker    @MOV    r10, #4
66*15dc779aSAndroid Build Coastguard Worker    MOV             r8, #2
67*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r6
68*15dc779aSAndroid Build Coastguard Worker    B               RADIX_4_FIRST_START
69*15dc779aSAndroid Build Coastguard WorkerCOND_6:
70*15dc779aSAndroid Build Coastguard Worker    @MOV    r10, #8
71*15dc779aSAndroid Build Coastguard Worker    MOV             r8, #1
72*15dc779aSAndroid Build Coastguard Worker    MOV             r4, r7
73*15dc779aSAndroid Build Coastguard Worker@**********************************************************************************
74*15dc779aSAndroid Build Coastguard Worker
75*15dc779aSAndroid Build Coastguard Worker
76*15dc779aSAndroid Build Coastguard Worker    @CMP    r10,#4
77*15dc779aSAndroid Build Coastguard Worker    @BEQ    RADIX_4_FIRST_START
78*15dc779aSAndroid Build Coastguard Worker
79*15dc779aSAndroid Build Coastguard WorkerRADIX_8_FIRST_START:
80*15dc779aSAndroid Build Coastguard Worker
81*15dc779aSAndroid Build Coastguard Worker
82*15dc779aSAndroid Build Coastguard Worker    LSR             r9 , r1, #5         @ LOOP count for first stage
83*15dc779aSAndroid Build Coastguard Worker    LSL             r1, r1, #1
84*15dc779aSAndroid Build Coastguard Worker
85*15dc779aSAndroid Build Coastguard WorkerRADIX_8_FIRST_LOOP:
86*15dc779aSAndroid Build Coastguard Worker
87*15dc779aSAndroid Build Coastguard Worker    MOV             r5 , r2
88*15dc779aSAndroid Build Coastguard Worker    MOV             r6 , r2
89*15dc779aSAndroid Build Coastguard Worker    MOV             r7 , r2
90*15dc779aSAndroid Build Coastguard Worker    MOV             r11 , r2
91*15dc779aSAndroid Build Coastguard Worker
92*15dc779aSAndroid Build Coastguard Worker@*************** Register mapping to data ****************************************
93*15dc779aSAndroid Build Coastguard Worker@ a_data0_r=q0
94*15dc779aSAndroid Build Coastguard Worker@ a_data0_i=q1
95*15dc779aSAndroid Build Coastguard Worker@ a_data2_r=q2
96*15dc779aSAndroid Build Coastguard Worker@ a_data2_i=q3
97*15dc779aSAndroid Build Coastguard Worker@ a_data4_r=q4
98*15dc779aSAndroid Build Coastguard Worker@ a_data4_i=q5
99*15dc779aSAndroid Build Coastguard Worker@ a_data6_r=q6
100*15dc779aSAndroid Build Coastguard Worker@ a_data6_i=q7
101*15dc779aSAndroid Build Coastguard Worker
102*15dc779aSAndroid Build Coastguard Worker@ b_data0_r=q8
103*15dc779aSAndroid Build Coastguard Worker@ b_data0_i=q9
104*15dc779aSAndroid Build Coastguard Worker@ b_data2_r=q10
105*15dc779aSAndroid Build Coastguard Worker@ b_data2_i=q11
106*15dc779aSAndroid Build Coastguard Worker@ b_data4_r=q12
107*15dc779aSAndroid Build Coastguard Worker@ b_data4_i=q13
108*15dc779aSAndroid Build Coastguard Worker@ b_data6_r=q14
109*15dc779aSAndroid Build Coastguard Worker@ b_data6_i=q15
110*15dc779aSAndroid Build Coastguard Worker
111*15dc779aSAndroid Build Coastguard Worker@*********************************************************************************
112*15dc779aSAndroid Build Coastguard Worker
113*15dc779aSAndroid Build Coastguard Worker
114*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #0]
115*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r12, LSL #3
116*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d0[0], d2[0]}, [r5] , r1
117*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r1
118*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d8[0], d10[0]}, [r5] , r1
119*15dc779aSAndroid Build Coastguard Worker    SUB             r5, r5, r1, LSL #1
120*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d4[0], d6[0]}, [r5] , r1
121*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r1
122*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d12[0], d14[0]}, [r5], r1
123*15dc779aSAndroid Build Coastguard Worker    SUB             r5, r5, r1, LSL #2
124*15dc779aSAndroid Build Coastguard Worker
125*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #1]
126*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r12, LSL #3
127*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d0[1], d2[1]}, [r6] , r1
128*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r1
129*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d8[1], d10[1]}, [r6] , r1
130*15dc779aSAndroid Build Coastguard Worker    SUB             r6, r6, r1, LSL #1
131*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d4[1], d6[1]}, [r6] , r1
132*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r1
133*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d12[1], d14[1]}, [r6], r1
134*15dc779aSAndroid Build Coastguard Worker    SUB             r6, r6, r1, LSL #2
135*15dc779aSAndroid Build Coastguard Worker
136*15dc779aSAndroid Build Coastguard Worker
137*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #2]
138*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r12 , LSL #3
139*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d1[0], d3[0]}, [r7] , r1
140*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r1
141*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d9[0], d11[0]}, [r7] , r1
142*15dc779aSAndroid Build Coastguard Worker    SUB             r7, r7, r1, LSL #1
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #3]
145*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r12 , LSL #3
146*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d1[1], d3[1]}, [r11] , r1
147*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r1
148*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d9[1], d11[1]}, [r11] , r1
149*15dc779aSAndroid Build Coastguard Worker    SUB             r11, r11, r1, LSL #1
150*15dc779aSAndroid Build Coastguard Worker
151*15dc779aSAndroid Build Coastguard Worker
152*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q8, q0, q4              @b_data0_r=vhaddq_s32(a_data0_r_i.val[0],a_data4_r_i.val[0])@
153*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q8, q0, q4          @b_data0_r=vhaddq_s32(a_data0_r_i.val[0],a_data4_r_i.val[0])@
154*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d5[0], d7[0]}, [r7] , r1
155*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r1
156*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q9, q0, q4              @b_data4_r=vhsubq_s32(a_data0_r_i.val[0],a_data4_r_i.val[0])@
157*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q9, q0, q4          @b_data4_r=vhsubq_s32(a_data0_r_i.val[0],a_data4_r_i.val[0])@
158*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d13[0], d15[0]}, [r7], r1
159*15dc779aSAndroid Build Coastguard Worker    SUB             r7, r7, r1, LSL #2
160*15dc779aSAndroid Build Coastguard Worker
161*15dc779aSAndroid Build Coastguard Worker
162*15dc779aSAndroid Build Coastguard Worker
163*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q0, q1, q5              @b_data0_i=vhaddq_s32(a_data0_r_i.val[1],a_data4_r_i.val[1])@
164*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q0, q1, q5          @b_data0_i=vhaddq_s32(a_data0_r_i.val[1],a_data4_r_i.val[1])@
165*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d5[1], d7[1]}, [r11] , r1
166*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r1
167*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q4, q1, q5              @b_data4_i=vhsubq_s32(a_data0_r_i.val[1],a_data4_r_i.val[1])@
168*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q4, q1, q5          @b_data4_i=vhsubq_s32(a_data0_r_i.val[1],a_data4_r_i.val[1])@
169*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d13[1], d15[1]}, [r11], r1
170*15dc779aSAndroid Build Coastguard Worker    SUB             r11, r11, r1, LSL #2
171*15dc779aSAndroid Build Coastguard Worker
172*15dc779aSAndroid Build Coastguard Worker
173*15dc779aSAndroid Build Coastguard Worker
174*15dc779aSAndroid Build Coastguard Worker    ADD             r4, r4, #4
175*15dc779aSAndroid Build Coastguard Worker
176*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r1, LSR #1
177*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r1, LSR #1
178*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r1, LSR #1
179*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r1, LSR #1
180*15dc779aSAndroid Build Coastguard Worker
181*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q1, q2, q6              @b_data2_r=vhaddq_s32(a_data2_r_i.val[0],a_data6_r_i.val[0])@
182*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q1, q2, q6          @b_data2_r=vhaddq_s32(a_data2_r_i.val[0],a_data6_r_i.val[0])@
183*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d28[0], d30[0]}, [r5] , r1 @a_data1_r_i=vld2q_lane_s32(__transfersize(2) p_data1,a_data1_r_i,0)@
184*15dc779aSAndroid Build Coastguard Worker
185*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q5, q2, q6              @b_data6_r=vhsubq_s32(a_data2_r_i.val[0],a_data6_r_i.val[0])@
186*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q5, q2, q6          @b_data6_r=vhsubq_s32(a_data2_r_i.val[0],a_data6_r_i.val[0])@
187*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d20[0], d22[0]}, [r5] , r1 @a_data3_r_i=vld2q_lane_s32(__transfersize(2) p_data1,a_data3_r_i,0)
188*15dc779aSAndroid Build Coastguard Worker
189*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q2, q3, q7              @b_data2_i=vhaddq_s32(a_data2_r_i.val[1],a_data6_r_i.val[1])@
190*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q2, q3, q7          @b_data2_i=vhaddq_s32(a_data2_r_i.val[1],a_data6_r_i.val[1])@
191*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d24[0], d26[0]}, [r5] , r1 @a_data5_r_i=vld2q_lane_s32(__transfersize(2) p_data1,a_data5_r_i,0)
192*15dc779aSAndroid Build Coastguard Worker
193*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q6, q3, q7              @b_data6_i=vhsubq_s32(a_data2_r_i.val[1],a_data6_r_i.val[1])@
194*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q6, q3, q7          @b_data6_i=vhsubq_s32(a_data2_r_i.val[1],a_data6_r_i.val[1])@
195*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d28[1], d30[1]}, [r6] , r1
196*15dc779aSAndroid Build Coastguard Worker
197*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q3, q9, q6          @c_data4_r=vaddq_s32(b_data4_r,b_data6_i)@
198*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d20[1], d22[1]}, [r6] , r1
199*15dc779aSAndroid Build Coastguard Worker
200*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q7, q9, q6          @c_data6_r=vsubq_s32(b_data4_r,b_data6_i)@
201*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d24[1], d26[1]}, [r6] , r1
202*15dc779aSAndroid Build Coastguard Worker
203*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q6, q4, q5          @c_data4_i=vsubq_s32(b_data4_i,b_data6_r)@
204*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d29[0], d31[0]}, [r7] , r1
205*15dc779aSAndroid Build Coastguard Worker
206*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q9, q4, q5          @c_data6_i=vaddq_s32(b_data4_i,b_data6_r)@
207*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d21[0], d23[0]}, [r7] , r1
208*15dc779aSAndroid Build Coastguard Worker
209*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q4, q8, q1          @c_data0_r=vaddq_s32(b_data0_r,b_data2_r)@
210*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d25[0], d27[0]}, [r7] , r1
211*15dc779aSAndroid Build Coastguard Worker
212*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q5, q8, q1          @c_data2_r=vsubq_s32(b_data0_r,b_data2_r)@
213*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d29[1], d31[1]}, [r11] , r1
214*15dc779aSAndroid Build Coastguard Worker
215*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q8, q0, q2          @c_data0_i=vaddq_s32(b_data0_i,b_data2_i)@
216*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d21[1], d23[1]}, [r11] , r1
217*15dc779aSAndroid Build Coastguard Worker
218*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q0, q0, q2          @c_data2_i=vsubq_s32(b_data0_i,b_data2_i)@
219*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d25[1], d27[1]}, [r11] , r1
220*15dc779aSAndroid Build Coastguard Worker
221*15dc779aSAndroid Build Coastguard Worker
222*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q3}                @ VPUSH(c_data4_r, c_data6_r)
223*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q7}
224*15dc779aSAndroid Build Coastguard Worker
225*15dc779aSAndroid Build Coastguard Worker
226*15dc779aSAndroid Build Coastguard Worker
227*15dc779aSAndroid Build Coastguard Worker
228*15dc779aSAndroid Build Coastguard Worker
229*15dc779aSAndroid Build Coastguard Worker
230*15dc779aSAndroid Build Coastguard Worker
231*15dc779aSAndroid Build Coastguard Worker
232*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d2[0], d4[0]}, [r5], r1 @a_data7_r_i=vld2q_lane_s32(__transfersize(2) p_data1,a_data7_r_i,0)
233*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q7, q14, q12                @b_data1_r=vhaddq_s32(a_data1_r,a_data5_r)@
234*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q7, q14, q12        @b_data1_r=vhaddq_s32(a_data1_r,a_data5_r)@
235*15dc779aSAndroid Build Coastguard Worker
236*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d2[1], d4[1]}, [r6] , r1
237*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q3, q14, q12                @b_data5_r=vhsubq_s32(a_data1_r,a_data5_r)@
238*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q3, q14, q12        @b_data5_r=vhsubq_s32(a_data1_r,a_data5_r)@
239*15dc779aSAndroid Build Coastguard Worker
240*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d3[0], d5[0]}, [r7] , r1
241*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q14, q15, q13               @b_data1_i=vhaddq_s32(a_data1_i,a_data5_i)@
242*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q14, q15, q13       @b_data1_i=vhaddq_s32(a_data1_i,a_data5_i)@
243*15dc779aSAndroid Build Coastguard Worker
244*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d3[1], d5[1]}, [r11] , r1
245*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q12, q15, q13               @b_data5_i=vhsubq_s32(a_data1_i,a_data5_i)@
246*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q12, q15, q13       @b_data5_i=vhsubq_s32(a_data1_i,a_data5_i)@
247*15dc779aSAndroid Build Coastguard Worker
248*15dc779aSAndroid Build Coastguard Worker
249*15dc779aSAndroid Build Coastguard Worker
250*15dc779aSAndroid Build Coastguard Worker
251*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q15, q10,q1             @b_data3_r=vhaddq_s32(a_data3_r,a_data7_r)@
252*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q13, q10,q1             @b_data7_r=vhsubq_s32(a_data3_r,a_data7_r)@
253*15dc779aSAndroid Build Coastguard Worker    @VHADD.S32  q10, q11, q2                @b_data3_i=vhaddq_s32(a_data3_i,a_data7_i)@
254*15dc779aSAndroid Build Coastguard Worker    @VHSUB.S32  q1, q11, q2             @b_data7_i=vhsubq_s32(a_data3_i,a_data7_i)@
255*15dc779aSAndroid Build Coastguard Worker
256*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q15, q10, q1        @b_data3_r=vhaddq_s32(a_data3_r,a_data7_r)@
257*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q13, q10, q1        @b_data7_r=vhsubq_s32(a_data3_r,a_data7_r)@
258*15dc779aSAndroid Build Coastguard Worker    VADD.I32        q10, q11, q2        @b_data3_i=vhaddq_s32(a_data3_i,a_data7_i)@
259*15dc779aSAndroid Build Coastguard Worker    VSUB.I32        q1, q11, q2         @b_data7_i=vhsubq_s32(a_data3_i,a_data7_i)@
260*15dc779aSAndroid Build Coastguard Worker
261*15dc779aSAndroid Build Coastguard Worker
262*15dc779aSAndroid Build Coastguard Worker
263*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q11, q7, q15        @c_data1_r=vaddq_s32(b_data1_r,b_data3_r)@
264*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q2, q7, q15         @c_data3_r=vsubq_s32(b_data1_r,b_data3_r)@
265*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q7, q14, q10        @c_data1_i=vaddq_s32(b_data1_i,b_data3_i)@
266*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q15, q14, q10       @c_data3_i=vsubq_s32(b_data1_i,b_data3_i)@
267*15dc779aSAndroid Build Coastguard Worker
268*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q14, q3, q12        @c_data5_r=vaddq_s32(b_data5_r,b_data5_i)@
269*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q10, q3, q12        @c_data5_i=vsubq_s32(b_data5_r,b_data5_i)@
270*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q3, q13, q1         @c_data7_r=vaddq_s32(b_data7_r,b_data7_i)@
271*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q12, q13, q1        @c_data7_i=vsubq_s32(b_data7_r,b_data7_i)@
272*15dc779aSAndroid Build Coastguard Worker
273*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q1 , q14, q12       @b_data5_r=vaddq_s32(c_data7_i,c_data5_r)@
274*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q13, q14, q12       @b_data7_i=vsubq_s32(c_data5_r,c_data7_i)@
275*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q12, q3, q10        @b_data5_i=vsubq_s32(c_data7_r,c_data5_i)@
276*15dc779aSAndroid Build Coastguard Worker
277*15dc779aSAndroid Build Coastguard Worker    VUZP.16         d2, d3              @ D0 = b_data5_r_low, D1= b_data5_r_high
278*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q14, q3, q10        @b_data7_r=vaddq_s32(c_data5_i,c_data7_r)@
279*15dc779aSAndroid Build Coastguard Worker
280*15dc779aSAndroid Build Coastguard Worker    VUZP.16         d26, d27
281*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q3, q4, q11         @b_data0_r=vaddq_s32(c_data0_r,c_data1_r)@
282*15dc779aSAndroid Build Coastguard Worker
283*15dc779aSAndroid Build Coastguard Worker    VUZP.16         d24, d25
284*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q10, q4, q11        @b_data1_r=vsubq_s32(c_data0_r,c_data1_r)@
285*15dc779aSAndroid Build Coastguard Worker
286*15dc779aSAndroid Build Coastguard Worker    VUZP.16         d28, d29
287*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q4, q8, q7          @b_data0_i=vaddq_s32(c_data0_i,c_data1_i)@
288*15dc779aSAndroid Build Coastguard Worker
289*15dc779aSAndroid Build Coastguard Worker    LDR             r14, = 0x5a82
290*15dc779aSAndroid Build Coastguard Worker
291*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q11, q8, q7         @b_data1_i=vsubq_s32(c_data0_i,c_data1_i)@
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q8, q5, q15         @b_data2_r=vaddq_s32(c_data2_r,c_data3_i)@
294*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q7, q5, q15         @b_data3_r=vsubq_s32(c_data2_r,c_data3_i)@
295*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q5, q0, q2          @b_data2_i=vsubq_s32(c_data2_i,c_data3_r)@
296*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q15, q0, q2         @b_data3_i=vaddq_s32(c_data2_i,c_data3_r)@
297*15dc779aSAndroid Build Coastguard Worker
298*15dc779aSAndroid Build Coastguard Worker    VPOP            {q0}
299*15dc779aSAndroid Build Coastguard Worker    VPOP            {q2}
300*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q3-q4}
301*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q10}
302*15dc779aSAndroid Build Coastguard Worker
303*15dc779aSAndroid Build Coastguard Worker
304*15dc779aSAndroid Build Coastguard Worker
305*15dc779aSAndroid Build Coastguard Worker
306*15dc779aSAndroid Build Coastguard Worker@********************************************************************
307*15dc779aSAndroid Build Coastguard Worker@ b_data5_r = q1       free regs = q3,q4,q5,q7,q8,q10,q11
308*15dc779aSAndroid Build Coastguard Worker@ b_data5_i = q12
309*15dc779aSAndroid Build Coastguard Worker@ b_data7_r = q14
310*15dc779aSAndroid Build Coastguard Worker@ b_data7_i = q13
311*15dc779aSAndroid Build Coastguard Worker
312*15dc779aSAndroid Build Coastguard Worker@ c_data4_r = q2
313*15dc779aSAndroid Build Coastguard Worker@ c_data4_i = q6
314*15dc779aSAndroid Build Coastguard Worker@ c_data6_r = q0
315*15dc779aSAndroid Build Coastguard Worker@ c_data6_i = q9
316*15dc779aSAndroid Build Coastguard Worker@********************************************************************
317*15dc779aSAndroid Build Coastguard Worker
318*15dc779aSAndroid Build Coastguard Worker
319*15dc779aSAndroid Build Coastguard Worker    VDUP.16         d20, r14
320*15dc779aSAndroid Build Coastguard Worker
321*15dc779aSAndroid Build Coastguard Worker
322*15dc779aSAndroid Build Coastguard Worker    VMULL.u16       q4, d26, d20
323*15dc779aSAndroid Build Coastguard Worker    VMULL.u16       q3, d28, d20
324*15dc779aSAndroid Build Coastguard Worker
325*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q7-q8}
326*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q5}
327*15dc779aSAndroid Build Coastguard Worker
328*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q4, q4, #15
329*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q3, q3, #15
330*15dc779aSAndroid Build Coastguard Worker
331*15dc779aSAndroid Build Coastguard Worker    VQDMLAL.S16     q4, d27, d20
332*15dc779aSAndroid Build Coastguard Worker    VQDMLAL.S16     q3, d29, d20
333*15dc779aSAndroid Build Coastguard Worker
334*15dc779aSAndroid Build Coastguard Worker
335*15dc779aSAndroid Build Coastguard Worker    VPUSH           {q11}
336*15dc779aSAndroid Build Coastguard Worker
337*15dc779aSAndroid Build Coastguard Worker    VMULL.u16       q13, d24, d20
338*15dc779aSAndroid Build Coastguard Worker    VMULL.u16       q14, d2, d20
339*15dc779aSAndroid Build Coastguard Worker
340*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q5, q2, q4          @q5=b_data7_i
341*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q7, q2, q4          @q7=b_data4_r
342*15dc779aSAndroid Build Coastguard Worker
343*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q8, q6, q3          @q10 = b_data4_i
344*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q6, q6, q3          @q11 = b_data7_r
345*15dc779aSAndroid Build Coastguard Worker
346*15dc779aSAndroid Build Coastguard Worker
347*15dc779aSAndroid Build Coastguard Worker
348*15dc779aSAndroid Build Coastguard Worker
349*15dc779aSAndroid Build Coastguard Worker
350*15dc779aSAndroid Build Coastguard Worker
351*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q13, q13, #15
352*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q14, q14, #15
353*15dc779aSAndroid Build Coastguard Worker
354*15dc779aSAndroid Build Coastguard Worker    VQDMLAL.S16     q13, d25, d20
355*15dc779aSAndroid Build Coastguard Worker    VQDMLAL.S16     q14, d3, d20
356*15dc779aSAndroid Build Coastguard Worker
357*15dc779aSAndroid Build Coastguard Worker    VPOP            {q1}
358*15dc779aSAndroid Build Coastguard Worker    VPOP            {q10}
359*15dc779aSAndroid Build Coastguard Worker
360*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q2, q0, q13         @q2 = b_data5_i
361*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q4, q0, q13         @q4 = b_data6_r
362*15dc779aSAndroid Build Coastguard Worker
363*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q11, q9, q14        @q6 = b_data6_i
364*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q3, q9, q14         @q8 = b_data5_r
365*15dc779aSAndroid Build Coastguard Worker
366*15dc779aSAndroid Build Coastguard Worker
367*15dc779aSAndroid Build Coastguard Worker
368*15dc779aSAndroid Build Coastguard Worker
369*15dc779aSAndroid Build Coastguard Worker    VPOP            {q14}
370*15dc779aSAndroid Build Coastguard Worker    VPOP            {q9}
371*15dc779aSAndroid Build Coastguard Worker    VPOP            {q0}
372*15dc779aSAndroid Build Coastguard Worker    VPOP            {q12, q13}
373*15dc779aSAndroid Build Coastguard Worker
374*15dc779aSAndroid Build Coastguard Worker
375*15dc779aSAndroid Build Coastguard Worker
376*15dc779aSAndroid Build Coastguard Worker
377*15dc779aSAndroid Build Coastguard Worker
378*15dc779aSAndroid Build Coastguard Worker@**************regs maping************
379*15dc779aSAndroid Build Coastguard Worker@b_data0_r = q12
380*15dc779aSAndroid Build Coastguard Worker@b_data0_i = q13
381*15dc779aSAndroid Build Coastguard Worker@b_data1_r = q0
382*15dc779aSAndroid Build Coastguard Worker@b_data1_i = q1
383*15dc779aSAndroid Build Coastguard Worker
384*15dc779aSAndroid Build Coastguard Worker@b_data2_r = q9
385*15dc779aSAndroid Build Coastguard Worker@b_data2_i = q10
386*15dc779aSAndroid Build Coastguard Worker@b_data3_r = q14
387*15dc779aSAndroid Build Coastguard Worker@b_data3_i = q15
388*15dc779aSAndroid Build Coastguard Worker
389*15dc779aSAndroid Build Coastguard Worker@b_data4_r = q7
390*15dc779aSAndroid Build Coastguard Worker@b_data4_i = q8
391*15dc779aSAndroid Build Coastguard Worker@b_data5_r = q3
392*15dc779aSAndroid Build Coastguard Worker@b_data5_i = q2
393*15dc779aSAndroid Build Coastguard Worker
394*15dc779aSAndroid Build Coastguard Worker@b_data6_r = q4
395*15dc779aSAndroid Build Coastguard Worker@b_data6_i = q11
396*15dc779aSAndroid Build Coastguard Worker@b_data7_r = q6
397*15dc779aSAndroid Build Coastguard Worker@b_data7_i = q5
398*15dc779aSAndroid Build Coastguard Worker@******************************************
399*15dc779aSAndroid Build Coastguard Worker
400*15dc779aSAndroid Build Coastguard Worker@shifts added (as dual simd instrn)
401*15dc779aSAndroid Build Coastguard Worker
402*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q12, q5
403*15dc779aSAndroid Build Coastguard Worker@line 455 "../../algo/aacdec/src/neon_asm/fft32x16ch_neon.s"
404*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q12, q12, #3        @ch
405*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q9, q2
406*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q5, q5, #3          @ch
407*15dc779aSAndroid Build Coastguard Worker
408*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q9, q9, #3          @ch
409*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q0, q7
410*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q2, q2, #3          @ch
411*15dc779aSAndroid Build Coastguard Worker
412*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q0, q0, #3          @ch
413*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q14, q4
414*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q7, q7, #3          @ch
415*15dc779aSAndroid Build Coastguard Worker
416*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q14, q14, #3        @ch
417*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q13, q6
418*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q4, q4, #3          @ch
419*15dc779aSAndroid Build Coastguard Worker
420*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q13, q13, #3        @ch
421*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q10, q3
422*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q6, q6, #3          @ch
423*15dc779aSAndroid Build Coastguard Worker
424*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q10, q10, #3        @ch
425*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q1, q8
426*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q3, q3, #3          @ch
427*15dc779aSAndroid Build Coastguard Worker
428*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q1, q1, #3          @ch
429*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q15, q11
430*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q8, q8, #3          @ch
431*15dc779aSAndroid Build Coastguard Worker
432*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q15, q15, #3        @ch
433*15dc779aSAndroid Build Coastguard Worker    VSWP            d18, d25
434*15dc779aSAndroid Build Coastguard Worker
435*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q11, q11, #3        @ch
436*15dc779aSAndroid Build Coastguard Worker    VSWP            d4, d11
437*15dc779aSAndroid Build Coastguard Worker
438*15dc779aSAndroid Build Coastguard Worker    VSWP            d1, d28
439*15dc779aSAndroid Build Coastguard Worker    VSWP            d15, d8
440*15dc779aSAndroid Build Coastguard Worker
441*15dc779aSAndroid Build Coastguard Worker    VSWP            d20, d27
442*15dc779aSAndroid Build Coastguard Worker    VSWP            d6, d13
443*15dc779aSAndroid Build Coastguard Worker
444*15dc779aSAndroid Build Coastguard Worker    VSWP            d30, d3
445*15dc779aSAndroid Build Coastguard Worker    VSWP            d22, d17
446*15dc779aSAndroid Build Coastguard Worker
447*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q12, q13}, [r3]!
448*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q0, q1}, [r3]!
449*15dc779aSAndroid Build Coastguard Worker
450*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q5, q6}, [r3]!
451*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q7, q8}, [r3]!
452*15dc779aSAndroid Build Coastguard Worker
453*15dc779aSAndroid Build Coastguard Worker    VMOV            q5, q11
454*15dc779aSAndroid Build Coastguard Worker
455*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q9, q10}, [r3]!
456*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q14, q15}, [r3]!
457*15dc779aSAndroid Build Coastguard Worker
458*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q2, q3}, [r3]!
459*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q4, q5}, [r3]!
460*15dc779aSAndroid Build Coastguard Worker
461*15dc779aSAndroid Build Coastguard Worker
462*15dc779aSAndroid Build Coastguard Worker    SUBS            r9, r9, #1
463*15dc779aSAndroid Build Coastguard Worker    BNE             RADIX_8_FIRST_LOOP
464*15dc779aSAndroid Build Coastguard Worker
465*15dc779aSAndroid Build Coastguard Worker    LSR             r1, r1, #1
466*15dc779aSAndroid Build Coastguard Worker    SUB             r3, r1, LSL #3
467*15dc779aSAndroid Build Coastguard Worker
468*15dc779aSAndroid Build Coastguard Worker    MOV             r5, #8
469*15dc779aSAndroid Build Coastguard Worker    MOV             r4, #32
470*15dc779aSAndroid Build Coastguard Worker    LSR             r6, r1, #5
471*15dc779aSAndroid Build Coastguard Worker
472*15dc779aSAndroid Build Coastguard Worker    B               RADIX_4_FIRST_ENDS
473*15dc779aSAndroid Build Coastguard Worker
474*15dc779aSAndroid Build Coastguard WorkerRADIX_8_FIRST_ENDS:
475*15dc779aSAndroid Build Coastguard Worker
476*15dc779aSAndroid Build Coastguard Worker
477*15dc779aSAndroid Build Coastguard Worker
478*15dc779aSAndroid Build Coastguard Worker
479*15dc779aSAndroid Build Coastguard Worker@************************************RADIX 4 FIRST STAGE**********************************
480*15dc779aSAndroid Build Coastguard Worker
481*15dc779aSAndroid Build Coastguard WorkerRADIX_4_FIRST_START:
482*15dc779aSAndroid Build Coastguard Worker
483*15dc779aSAndroid Build Coastguard Worker
484*15dc779aSAndroid Build Coastguard Worker    LSR             r9 , r1, #4         @ LOOP count for first stage
485*15dc779aSAndroid Build Coastguard Worker    LSL             r1, r1, #1
486*15dc779aSAndroid Build Coastguard Worker
487*15dc779aSAndroid Build Coastguard WorkerRADIX_4_LOOP:
488*15dc779aSAndroid Build Coastguard Worker
489*15dc779aSAndroid Build Coastguard Worker    MOV             r5 , r2
490*15dc779aSAndroid Build Coastguard Worker    MOV             r6 , r2
491*15dc779aSAndroid Build Coastguard Worker    MOV             r7 , r2
492*15dc779aSAndroid Build Coastguard Worker    MOV             r11 , r2
493*15dc779aSAndroid Build Coastguard Worker
494*15dc779aSAndroid Build Coastguard Worker@*************** Register mapping to data ****************************************
495*15dc779aSAndroid Build Coastguard Worker@ a_data0_r=q0
496*15dc779aSAndroid Build Coastguard Worker@ a_data0_i=q1
497*15dc779aSAndroid Build Coastguard Worker@ a_data1_r=q2
498*15dc779aSAndroid Build Coastguard Worker@ a_data1_i=q3
499*15dc779aSAndroid Build Coastguard Worker@ a_data2_r=q4
500*15dc779aSAndroid Build Coastguard Worker@ a_data2_i=q5
501*15dc779aSAndroid Build Coastguard Worker@ a_data3_r=q6
502*15dc779aSAndroid Build Coastguard Worker@ a_data4_i=q7
503*15dc779aSAndroid Build Coastguard Worker
504*15dc779aSAndroid Build Coastguard Worker
505*15dc779aSAndroid Build Coastguard Worker@*********************************************************************************
506*15dc779aSAndroid Build Coastguard Worker
507*15dc779aSAndroid Build Coastguard Worker
508*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #0]
509*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r12, LSL #3
510*15dc779aSAndroid Build Coastguard Worker
511*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d0[0], d2[0]}, [r5] , r1
512*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r1
513*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d8[0], d10[0]}, [r5] , r1
514*15dc779aSAndroid Build Coastguard Worker    SUB             r5, r5, r1, LSL #1
515*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d4[0], d6[0]}, [r5] , r1
516*15dc779aSAndroid Build Coastguard Worker    ADD             r5, r5, r1
517*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d12[0], d14[0]}, [r5], r1
518*15dc779aSAndroid Build Coastguard Worker
519*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #1]
520*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r12, LSL #3
521*15dc779aSAndroid Build Coastguard Worker
522*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d0[1], d2[1]}, [r6] , r1
523*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r1
524*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d8[1], d10[1]}, [r6] , r1
525*15dc779aSAndroid Build Coastguard Worker    SUB             r6, r6, r1, LSL #1
526*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d4[1], d6[1]}, [r6] , r1
527*15dc779aSAndroid Build Coastguard Worker    ADD             r6, r6, r1
528*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d12[1], d14[1]}, [r6], r1
529*15dc779aSAndroid Build Coastguard Worker
530*15dc779aSAndroid Build Coastguard Worker
531*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #2]
532*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r12, LSL #3
533*15dc779aSAndroid Build Coastguard Worker
534*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d1[0], d3[0]}, [r7] , r1
535*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r1
536*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d9[0], d11[0]}, [r7] , r1
537*15dc779aSAndroid Build Coastguard Worker
538*15dc779aSAndroid Build Coastguard Worker    LDRB            r12, [r4, #3]
539*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r12 , LSL #3
540*15dc779aSAndroid Build Coastguard Worker
541*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d1[1], d3[1]}, [r11] , r1
542*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r1
543*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d9[1], d11[1]}, [r11] , r1
544*15dc779aSAndroid Build Coastguard Worker
545*15dc779aSAndroid Build Coastguard Worker
546*15dc779aSAndroid Build Coastguard Worker    SUB             r7, r7, r1, LSL #1
547*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q8, q0, q4          @b_data0_r=vaddq_s32(a_data0_r,a_data2_r)@
548*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d5[0], d7[0]}, [r7] , r1
549*15dc779aSAndroid Build Coastguard Worker    ADD             r7, r7, r1
550*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q9, q1, q5          @b_data0_i=vaddq_s32(a_data0_i,a_data2_i)@
551*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d13[0], d15[0]}, [r7], r1
552*15dc779aSAndroid Build Coastguard Worker
553*15dc779aSAndroid Build Coastguard Worker
554*15dc779aSAndroid Build Coastguard Worker
555*15dc779aSAndroid Build Coastguard Worker    SUB             r11, r11, r1, LSL #1
556*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q10, q0, q4         @b_data2_r=vsubq_s32(a_data0_r,a_data2_r)@
557*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d5[1], d7[1]}, [r11] , r1
558*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r11, r1
559*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q11, q1, q5         @b_data2_i=vsubq_s32(a_data0_i,a_data2_i)@
560*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {d13[1], d15[1]}, [r11], r1
561*15dc779aSAndroid Build Coastguard Worker
562*15dc779aSAndroid Build Coastguard Worker
563*15dc779aSAndroid Build Coastguard Worker    ADD             r4, r4, #4
564*15dc779aSAndroid Build Coastguard Worker
565*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q12, q2, q6         @b_data1_r=vaddq_s32(a_data1_r,a_data3_r)@
566*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q13, q3, q7         @b_data1_i=vaddq_s32(a_data1_i,a_data3_i)@
567*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q14, q2, q6         @b_data3_r=vsubq_s32(a_data1_r,a_data3_r)@
568*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q15, q3, q7         @b_data3_i=vsubq_s32(a_data1_i,a_data3_i)@
569*15dc779aSAndroid Build Coastguard Worker
570*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q0, q8, q12         @a_data0_r=vaddq_s32(b_data0_r,b_data1_r)@
571*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q1, q9, q13         @a_data0_i=vaddq_s32(b_data0_i,b_data1_i)@
572*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q2, q8, q12         @a_data1_r=vsubq_s32(b_data0_r,b_data1_r)@
573*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q3, q9, q13         @a_data1_i=vsubq_s32(b_data0_i,b_data1_i)@
574*15dc779aSAndroid Build Coastguard Worker
575*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q4, q10, q15        @a_data2_r=vaddq_s32(b_data2_r,b_data3_i)@
576*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q5, q11, q14        @a_data2_i=vsubq_s32(b_data2_i,b_data3_r)@
577*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q7, q11, q14        @a_data3_r=vaddq_s32(b_data2_i,b_data3_r)@
578*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q6, q10, q15        @a_data3_i=vsubq_s32(b_data2_r,b_data3_i)@
579*15dc779aSAndroid Build Coastguard Worker
580*15dc779aSAndroid Build Coastguard Worker
581*15dc779aSAndroid Build Coastguard Worker@shifts added
582*15dc779aSAndroid Build Coastguard Worker
583*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q0, q4
584*15dc779aSAndroid Build Coastguard Worker
585*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q0, q0, #2          @ch
586*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q2, q6
587*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q4, q4, #2          @ch
588*15dc779aSAndroid Build Coastguard Worker
589*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q2, q2, #2          @ch
590*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q1, q5              @ch
591*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q6, q6, #2          @ch
592*15dc779aSAndroid Build Coastguard Worker
593*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q1, q1, #2          @ch
594*15dc779aSAndroid Build Coastguard Worker    VTRN.32         q3, q7              @ch
595*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q5, q5, #2          @ch
596*15dc779aSAndroid Build Coastguard Worker
597*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q3, q3, #2          @ch
598*15dc779aSAndroid Build Coastguard Worker    VSWP            d4, d1
599*15dc779aSAndroid Build Coastguard Worker
600*15dc779aSAndroid Build Coastguard Worker    VSHL.S32        q7, q7, #2          @ch
601*15dc779aSAndroid Build Coastguard Worker    VSWP            d12, d9
602*15dc779aSAndroid Build Coastguard Worker
603*15dc779aSAndroid Build Coastguard Worker    @VTRN.32        q1, q5
604*15dc779aSAndroid Build Coastguard Worker    @VTRN.32        q3, q7
605*15dc779aSAndroid Build Coastguard Worker    VSWP            d6, d3
606*15dc779aSAndroid Build Coastguard Worker    VSWP            d14, d11
607*15dc779aSAndroid Build Coastguard Worker
608*15dc779aSAndroid Build Coastguard Worker
609*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q0, q1}, [r3]!
610*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q4, q5}, [r3]!
611*15dc779aSAndroid Build Coastguard Worker
612*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q2, q3}, [r3]!
613*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q6, q7}, [r3]!
614*15dc779aSAndroid Build Coastguard Worker
615*15dc779aSAndroid Build Coastguard Worker
616*15dc779aSAndroid Build Coastguard Worker
617*15dc779aSAndroid Build Coastguard Worker    SUBS            r9, r9, #1
618*15dc779aSAndroid Build Coastguard Worker    BNE             RADIX_4_LOOP
619*15dc779aSAndroid Build Coastguard Worker
620*15dc779aSAndroid Build Coastguard Worker    LSR             r1, r1, #1
621*15dc779aSAndroid Build Coastguard Worker    SUB             r3, r1, LSL #3
622*15dc779aSAndroid Build Coastguard Worker    MOV             r5, #4
623*15dc779aSAndroid Build Coastguard Worker    MOV             r4, #64
624*15dc779aSAndroid Build Coastguard Worker    LSR             r6, r1, #4
625*15dc779aSAndroid Build Coastguard Worker
626*15dc779aSAndroid Build Coastguard Worker
627*15dc779aSAndroid Build Coastguard WorkerRADIX_4_FIRST_ENDS:
628*15dc779aSAndroid Build Coastguard Worker
629*15dc779aSAndroid Build Coastguard Worker
630*15dc779aSAndroid Build Coastguard Worker
631*15dc779aSAndroid Build Coastguard Worker@********************************END OF RADIX 4 FIRST STAGE*******************************
632*15dc779aSAndroid Build Coastguard Worker
633*15dc779aSAndroid Build Coastguard Worker@*************** register assignment after first radix 8 stage****************************
634*15dc779aSAndroid Build Coastguard Worker@ r1 = npoints
635*15dc779aSAndroid Build Coastguard Worker@ r0 = *ptr_w
636*15dc779aSAndroid Build Coastguard Worker@ r3 = *ptr_y
637*15dc779aSAndroid Build Coastguard Worker@ r8 = nstages_4
638*15dc779aSAndroid Build Coastguard Worker@ free regs r2, r4,r5,r6,r7,r9,r10,r11,r12
639*15dc779aSAndroid Build Coastguard Worker@ r2 = j
640*15dc779aSAndroid Build Coastguard Worker@ r4 = node_spacing
641*15dc779aSAndroid Build Coastguard Worker@ r5 = del
642*15dc779aSAndroid Build Coastguard Worker@ r6 = in_loop_count
643*15dc779aSAndroid Build Coastguard Worker@ r7 = middle_loop_count (del*node_spacing)
644*15dc779aSAndroid Build Coastguard Worker@ r9 = p_twiddle_factors
645*15dc779aSAndroid Build Coastguard Worker@ r10= p_twiddle_factors  and inner loop counter
646*15dc779aSAndroid Build Coastguard Worker@ r11=
647*15dc779aSAndroid Build Coastguard Worker@ r12=
648*15dc779aSAndroid Build Coastguard Worker@ r14= *data
649*15dc779aSAndroid Build Coastguard Worker
650*15dc779aSAndroid Build Coastguard Worker    PUSH            {r3}
651*15dc779aSAndroid Build Coastguard Worker
652*15dc779aSAndroid Build Coastguard Worker    LSR             r5, r5, #2
653*15dc779aSAndroid Build Coastguard Worker
654*15dc779aSAndroid Build Coastguard WorkerOUTER_LOOP_R4:
655*15dc779aSAndroid Build Coastguard Worker
656*15dc779aSAndroid Build Coastguard Worker    LDR             r14, [sp]
657*15dc779aSAndroid Build Coastguard Worker    @MOV    r14,r3
658*15dc779aSAndroid Build Coastguard Worker    @LSR    r7,r5,#0    @,#2
659*15dc779aSAndroid Build Coastguard Worker    MOV             r7, r5
660*15dc779aSAndroid Build Coastguard Worker    MOV             r2, #0
661*15dc779aSAndroid Build Coastguard Worker    MOV             r9, r0
662*15dc779aSAndroid Build Coastguard Worker    LSL             r12 , r5, #5
663*15dc779aSAndroid Build Coastguard WorkerMIDDLE_LOOP_R4:
664*15dc779aSAndroid Build Coastguard Worker
665*15dc779aSAndroid Build Coastguard Worker
666*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d0[0], d1[0]}, [r9], r2 @cos_1 = d0 , sin_1=d1
667*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d2[0], d3[0]}, [r9], r2 @cos_2 = d2 , sin_2=d3
668*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r2, r4, LSL #2
669*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d4[0], d5[0]}, [r9] @cos_3 = d4 , sin_3=d5
670*15dc779aSAndroid Build Coastguard Worker    ADD             r10, r0, r11
671*15dc779aSAndroid Build Coastguard Worker
672*15dc779aSAndroid Build Coastguard Worker
673*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d0[1], d1[1]}, [r10], r11
674*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d2[1], d3[1]}, [r10], r11
675*15dc779aSAndroid Build Coastguard Worker    ADD             r2, r11, r4, LSL #2
676*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d4[1], d5[1]}, [r10]
677*15dc779aSAndroid Build Coastguard Worker    ADD             r9, r0, r2
678*15dc779aSAndroid Build Coastguard Worker
679*15dc779aSAndroid Build Coastguard Worker
680*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d0[2], d1[2]}, [r9], r2
681*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d2[2], d3[2]}, [r9], r2
682*15dc779aSAndroid Build Coastguard Worker    ADD             r11, r2, r4, LSL #2
683*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d4[2], d5[2]}, [r9]
684*15dc779aSAndroid Build Coastguard Worker    ADD             r10, r0, r11
685*15dc779aSAndroid Build Coastguard Worker
686*15dc779aSAndroid Build Coastguard Worker
687*15dc779aSAndroid Build Coastguard Worker
688*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d0[3], d1[3]}, [r10], r11
689*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d2[3], d3[3]}, [r10], r11
690*15dc779aSAndroid Build Coastguard Worker    ADD             r2, r11, r4, LSL #2
691*15dc779aSAndroid Build Coastguard Worker    VLD2.16         {d4[3], d5[3]}, [r10]
692*15dc779aSAndroid Build Coastguard Worker    ADD             r9, r0, r2
693*15dc779aSAndroid Build Coastguard Worker
694*15dc779aSAndroid Build Coastguard Worker    MOV             r10, r6
695*15dc779aSAndroid Build Coastguard Worker
696*15dc779aSAndroid Build Coastguard Worker
697*15dc779aSAndroid Build Coastguard Worker
698*15dc779aSAndroid Build Coastguard WorkerINNER_LOOP_R4:
699*15dc779aSAndroid Build Coastguard Worker
700*15dc779aSAndroid Build Coastguard Worker    VLD2.32         {q3, q4}, [r14], r12
701*15dc779aSAndroid Build Coastguard Worker
702*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q3, q3, #1
703*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {q5, q6}, [r14], r12 @a_data1_r_l=d10 , a_data1_r_h=d11, a_data1_i_l=d12, a_data1_i_h=d13
704*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q4, q4, #1
705*15dc779aSAndroid Build Coastguard Worker
706*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d10, d10, #1        @a_data1.val[0]= vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data1.val[0]), 1))@
707*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {q7, q8}, [r14], r12
708*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d12, d12, #1        @a_data1.val[2]= vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data1.val[2]), 1))@
709*15dc779aSAndroid Build Coastguard Worker
710*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q11, d10, d0        @prod_1r=vmull_s16(a_data1.val[0], cos_1)@
711*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q11, d12, d1        @prod_1r=vmlsl_s16(prod_1r, a_data1.val[2], sin_1)@
712*15dc779aSAndroid Build Coastguard Worker    VLD4.16         {q9, q10}, [r14], r12
713*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q12, d10, d1        @prod_1i=vmull_s16(a_data1.val[0], sin_1)@
714*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q12, d12, d0        @prod_1i=vmlal_s16(prod_1i, a_data1.val[2], cos_1)@
715*15dc779aSAndroid Build Coastguard Worker
716*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d14, d14, #1        @a_data2.val[0]=vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data2.val[0]), 1))@
717*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d16, d16, #1        @a_data2.val[2]=vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data2.val[2]), 1))@
718*15dc779aSAndroid Build Coastguard Worker
719*15dc779aSAndroid Build Coastguard Worker    SUB             r14, r14, r12, LSL #2
720*15dc779aSAndroid Build Coastguard Worker
721*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d18, d18, #1        @a_data3.val[0]= vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data3.val[0]), 1))@
722*15dc779aSAndroid Build Coastguard Worker    VSHR.U16        d20, d20, #1        @a_data3.val[2]= vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a_data3.val[2]), 1))@
723*15dc779aSAndroid Build Coastguard Worker
724*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q13, d14, d2        @prod_2r=vmull_s16(a_data2.val[0], cos_2)@
725*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q13, d16, d3        @prod_2r=vmlsl_s16(prod_2r, a_data2.val[2], sin_2)@
726*15dc779aSAndroid Build Coastguard Worker
727*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q11, q11, #15       @a_data1_r=vshrq_n_s32(prod_1r,15)@
728*15dc779aSAndroid Build Coastguard Worker
729*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q14, d14, d3        @prod_2i=vmull_s16(a_data2.val[0], sin_2)@
730*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q14, d16, d2        @prod_2i=vmlal_s16(prod_2i, a_data2.val[2], cos_2)@
731*15dc779aSAndroid Build Coastguard Worker
732*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q15, d18, d4        @prod_3r=vmull_s16(a_data3.val[0], cos_3)@
733*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q15, d20, d5        @prod_3r=vmlsl_s16(prod_3r, a_data3.val[2], sin_3)@
734*15dc779aSAndroid Build Coastguard Worker
735*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q11, d11, d0        @a_data1_r=vmlal_s16(a_data1_r, a_data1.val[1], cos_1)@
736*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q11, d13, d1        @a_data1_r=vmlsl_s16(a_data1_r, a_data1.val[3], sin_1)@
737*15dc779aSAndroid Build Coastguard Worker
738*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q12, q12, #15       @a_data1_i=vshrq_n_s32(prod_1i,15)@
739*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q13, q13, #15       @a_data2_r=vshrq_n_s32(prod_2r,15)@
740*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q14, q14, #15       @a_data2_i=vshrq_n_s32(prod_2i,15)@
741*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q15, q15, #15       @a_data3_r=vshrq_n_s32(prod_3r,15)@
742*15dc779aSAndroid Build Coastguard Worker
743*15dc779aSAndroid Build Coastguard Worker
744*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q12, d11, d1        @a_data1_i=vmlal_s16(a_data1_i, a_data1.val[1], sin_1)@
745*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q12, d13, d0        @a_data1_i=vmlal_s16(a_data1_i, a_data1.val[3], cos_1)@
746*15dc779aSAndroid Build Coastguard Worker
747*15dc779aSAndroid Build Coastguard Worker
748*15dc779aSAndroid Build Coastguard Worker    VMULL.S16       q5, d18, d5         @prod_3i=vmull_s16(a_data3.val[0], sin_3)@
749*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q5, d20, d4         @prod_3i=vmlal_s16(prod_3i, a_data3.val[2], cos_3)@
750*15dc779aSAndroid Build Coastguard Worker
751*15dc779aSAndroid Build Coastguard Worker
752*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q13, d15, d2        @a_data2_r=vmlal_s16(a_data2_r, a_data2.val[1], cos_2)@
753*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q13, d17, d3        @a_data2_r=vmlsl_s16(a_data2_r, a_data2.val[3], sin_2)@
754*15dc779aSAndroid Build Coastguard Worker
755*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q14, d15, d3        @a_data2_i=vmlal_s16(a_data2_i, a_data2.val[1], sin_2)@
756*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q14, d17, d2        @a_data2_i=vmlal_s16(a_data2_i, a_data2.val[3], cos_2)@
757*15dc779aSAndroid Build Coastguard Worker
758*15dc779aSAndroid Build Coastguard Worker
759*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q15, d19, d4        @a_data3_r=vmlal_s16(a_data3_r, a_data3.val[1], cos_3)@
760*15dc779aSAndroid Build Coastguard Worker    VMLSL.S16       q15, d21, d5        @a_data3_r=vmlsl_s16(a_data3_r, a_data3.val[3], sin_3)@
761*15dc779aSAndroid Build Coastguard Worker
762*15dc779aSAndroid Build Coastguard Worker    VSHR.S32        q5, q5, #15         @a_data3_i=vshrq_n_s32(prod_3i,15)@
763*15dc779aSAndroid Build Coastguard Worker
764*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q5, d19, d5         @a_data3_i=vmlal_s16(a_data3_i, a_data3.val[1], sin_3)@
765*15dc779aSAndroid Build Coastguard Worker    VMLAL.S16       q5, d21, d4         @a_data3_i=vmlal_s16(a_data3_i, a_data3.val[3], cos_3)@
766*15dc779aSAndroid Build Coastguard Worker
767*15dc779aSAndroid Build Coastguard Worker@**********if condition******************
768*15dc779aSAndroid Build Coastguard Worker
769*15dc779aSAndroid Build Coastguard Worker    CMP             r7, r5
770*15dc779aSAndroid Build Coastguard Worker    BNE             BYPASS_IF
771*15dc779aSAndroid Build Coastguard Worker
772*15dc779aSAndroid Build Coastguard Worker    ADD             r14, r14, r12
773*15dc779aSAndroid Build Coastguard Worker
774*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14], r12
775*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
776*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d22[0], r3
777*15dc779aSAndroid Build Coastguard Worker
778*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14], r12
779*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
780*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d26[0], r3
781*15dc779aSAndroid Build Coastguard Worker
782*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14]
783*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
784*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d30[0], r3
785*15dc779aSAndroid Build Coastguard Worker
786*15dc779aSAndroid Build Coastguard Worker    SUB             r14, r14, r12, LSL #1
787*15dc779aSAndroid Build Coastguard Worker    ADD             r14, r14, #4
788*15dc779aSAndroid Build Coastguard Worker
789*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14], r12
790*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
791*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d24[0], r3
792*15dc779aSAndroid Build Coastguard Worker
793*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14], r12
794*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
795*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d28[0], r3
796*15dc779aSAndroid Build Coastguard Worker
797*15dc779aSAndroid Build Coastguard Worker    LDR             r3, [r14], r12
798*15dc779aSAndroid Build Coastguard Worker    ASR             r3, r3, #1
799*15dc779aSAndroid Build Coastguard Worker    VMOV.32         d10[0], r3
800*15dc779aSAndroid Build Coastguard Worker
801*15dc779aSAndroid Build Coastguard Worker    SUB             r14, r14, #4
802*15dc779aSAndroid Build Coastguard Worker
803*15dc779aSAndroid Build Coastguard Worker    SUB             r14, r14, r12, LSL #2
804*15dc779aSAndroid Build Coastguard Worker@****************************************
805*15dc779aSAndroid Build Coastguard WorkerBYPASS_IF:
806*15dc779aSAndroid Build Coastguard Worker
807*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q6, q3, q13         @b_data0_r=vaddq_s32(a_data0_r,a_data2_r)@
808*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q7, q4, q14         @b_data0_i=vaddq_s32(a_data0_i,a_data2_i)@
809*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q3, q3, q13         @b_data2_r=vsubq_s32(a_data0_r,a_data2_r)@
810*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q4, q4, q14         @b_data2_i=vsubq_s32(a_data0_i,a_data2_i)@
811*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q8, q11, q15        @b_data1_r=vaddq_s32(a_data1_r,a_data3_r)@
812*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q9, q12, q5         @b_data1_i=vaddq_s32(a_data1_i,a_data3_i)@
813*15dc779aSAndroid Build Coastguard Worker
814*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q15, q11, q15       @b_data3_r=vsubq_s32(a_data1_r,a_data3_r)@
815*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q14, q12, q5        @b_data3_i=vsubq_s32(a_data1_i,a_data3_i)@
816*15dc779aSAndroid Build Coastguard Worker
817*15dc779aSAndroid Build Coastguard Worker@line 882 "../../algo/aacdec/src/neon_asm/fft32x16ch_neon.s"
818*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q10, q6, q8         @c_data0_r=vaddq_s32(b_data0_r,b_data1_r)@
819*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q11, q7, q9         @c_data0_i=vaddq_s32(b_data0_i,b_data1_i)@
820*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q12, q3, q14        @c_data2_r=vaddq_s32(b_data2_r,b_data3_i)@
821*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q13, q4, q15        @c_data2_i=vsubq_s32(b_data2_i,b_data3_r)@
822*15dc779aSAndroid Build Coastguard Worker
823*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q6, q6, q8          @c_data1_r=vsubq_s32(b_data0_r,b_data1_r)@
824*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q10, q11}, [r14], r12 @ storing (c_data0_r,c_data0_i)
825*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q7, q7, q9          @c_data1_i=vsubq_s32(b_data0_i,b_data1_i)@
826*15dc779aSAndroid Build Coastguard Worker
827*15dc779aSAndroid Build Coastguard Worker    VSUB.S32        q8, q3, q14         @c_data3_i=vsubq_s32(b_data2_r,b_data3_i)@
828*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q12, q13}, [r14], r12 @ storing (c_data2_r,c_data2_i)
829*15dc779aSAndroid Build Coastguard Worker    VADD.S32        q9, q4, q15         @c_data3_r=vaddq_s32(b_data2_i,b_data3_r)@
830*15dc779aSAndroid Build Coastguard Worker
831*15dc779aSAndroid Build Coastguard Worker
832*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q6, q7}, [r14], r12 @ storing (c_data1_r,c_data1_i)
833*15dc779aSAndroid Build Coastguard Worker    VST2.32         {q8, q9}, [r14], r12 @ storing (c_data3_i,c_data3_r)
834*15dc779aSAndroid Build Coastguard Worker
835*15dc779aSAndroid Build Coastguard Worker
836*15dc779aSAndroid Build Coastguard Worker
837*15dc779aSAndroid Build Coastguard Worker
838*15dc779aSAndroid Build Coastguard Worker    SUBS            r10, r10, #1
839*15dc779aSAndroid Build Coastguard Worker    BNE             INNER_LOOP_R4
840*15dc779aSAndroid Build Coastguard Worker
841*15dc779aSAndroid Build Coastguard Worker    SUB             r14, r14, r1, LSL #3
842*15dc779aSAndroid Build Coastguard Worker    ADD             r14, r14, #32
843*15dc779aSAndroid Build Coastguard Worker
844*15dc779aSAndroid Build Coastguard Worker    SUBS            r7, r7, #1
845*15dc779aSAndroid Build Coastguard Worker    BNE             MIDDLE_LOOP_R4
846*15dc779aSAndroid Build Coastguard Worker
847*15dc779aSAndroid Build Coastguard Worker
848*15dc779aSAndroid Build Coastguard Worker
849*15dc779aSAndroid Build Coastguard Worker
850*15dc779aSAndroid Build Coastguard Worker    LSR             r4, r4, #2
851*15dc779aSAndroid Build Coastguard Worker    LSL             r5, r5, #2
852*15dc779aSAndroid Build Coastguard Worker    LSR             r6, r6, #2
853*15dc779aSAndroid Build Coastguard Worker    SUBS            r8, r8, #1
854*15dc779aSAndroid Build Coastguard Worker    BNE             OUTER_LOOP_R4
855*15dc779aSAndroid Build Coastguard WorkerEND_LOOPS:
856*15dc779aSAndroid Build Coastguard Worker    POP             {r3}
857*15dc779aSAndroid Build Coastguard Worker    VPOP            {D8-D15}
858*15dc779aSAndroid Build Coastguard Worker    LDMFD           sp!, {r4-r12, r15}
859*15dc779aSAndroid Build Coastguard Worker
860*15dc779aSAndroid Build Coastguard Worker
861