.text .p2align 2 .global ia_eld_decoder_sbr_pre_twiddle ia_eld_decoder_sbr_pre_twiddle: STMFD sp!, {r4-r12, r14} LDR r4, [r0, #0] @Xre = *pXre MOV r3, #62 @Loop count LDR r5, [r1, #0] @Xim = *pXim LOOP: LDR r6, [r2], #4 @Load and increment pointer *pTwiddles++ Lower - cosine , higher - sine SUBS r3, r3, #1 @Decrement loop count by 1 SMULWB r8, r4, r6 @mult32x16in32(Xre, cosine) LSL r8, r8, #1 @Left shift the multiplied value by 1 SMULWT r10, r5, r6 @mult32x16in32( Xim , sine) ADD r12, r8, r10, LSL #1 @mac32x16in32_shl( mult32x16in32_shl(Xre, cosine) , mult32x16in32_shl( Xim , sine))@ SMULWT r7, r4, r6 @mult32x16in32(Xre, sine) LDR r4, [r0, #4] @Load next iteration value Xre = *pXre SMULWB r9, r5, r6 @mult32x16in32(Xim, cosine) STR r12, [r0], #4 @Store and increment pointer *pXre++ = re LSL r9, r9, #1 @Left shift the multiplied value by 1 LDR r5, [r1, #4] @Load next iteration value Xim = *pXim SUB r14, r9, r7, LSL #1 @sub32(mult32x16in32_shl(Xim, cosine) , mult32x16in32_shl(Xre, sine)) STR r14, [r1], #4 @Store and increment pointer *pXim++ = im BNE LOOP @Check r3 equals 0 and continue EPILOUGE: LDR r6, [r2], #4 SMULWB r8, r4, r6 LSL r8, r8, #1 SMULWT r10, r5, r6 ADD r12, r8, r10, LSL #1 SMULWB r9, r5, r6 LSL r9, r9, #1 SMULWT r7, r4, r6 SUB r14, r9, r7, LSL #1 STR r12, [r0], #4 STR r14, [r1], #4 END_LOOP: LDMFD sp!, {r4-r12, pc}