blob: a18afdc20a9a336589b5d159cf06e29c2ab0acbd [file] [log] [blame]
.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}