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