1.text
2.p2align 2
3.global ia_eld_decoder_sbr_pre_twiddle
4
5
6ia_eld_decoder_sbr_pre_twiddle:
7
8
9
10    STMFD           sp!, {r4-r12, r14}
11    LDR             r4, [r0, #0]        @Xre  = *pXre
12    MOV             r3, #62             @Loop count
13    LDR             r5, [r1, #0]        @Xim  = *pXim
14
15LOOP:
16    LDR             r6, [r2], #4        @Load and increment pointer *pTwiddles++ Lower - cosine , higher - sine
17    SUBS            r3, r3, #1          @Decrement loop count by 1
18
19    SMULWB          r8, r4, r6          @mult32x16in32(Xre, cosine)
20    LSL             r8, r8, #1          @Left shift the multiplied value by 1
21
22    SMULWT          r10, r5, r6         @mult32x16in32( Xim , sine)
23
24    ADD             r12, r8, r10, LSL #1 @mac32x16in32_shl( mult32x16in32_shl(Xre, cosine) , mult32x16in32_shl( Xim , sine))@
25
26
27    SMULWT          r7, r4, r6          @mult32x16in32(Xre, sine)
28    LDR             r4, [r0, #4]        @Load next iteration value Xre  = *pXre
29
30    SMULWB          r9, r5, r6          @mult32x16in32(Xim, cosine)
31    STR             r12, [r0], #4       @Store and increment pointer *pXre++ = re
32
33    LSL             r9, r9, #1          @Left shift the multiplied value by 1
34    LDR             r5, [r1, #4]        @Load next iteration value Xim  = *pXim
35
36
37    SUB             r14, r9, r7, LSL #1 @sub32(mult32x16in32_shl(Xim, cosine) , mult32x16in32_shl(Xre, sine))
38
39    STR             r14, [r1], #4       @Store and increment pointer *pXim++ = im
40
41    BNE             LOOP                @Check r3 equals 0 and continue
42
43EPILOUGE:
44
45    LDR             r6, [r2], #4
46
47    SMULWB          r8, r4, r6
48    LSL             r8, r8, #1
49
50    SMULWT          r10, r5, r6
51
52    ADD             r12, r8, r10, LSL #1
53
54
55    SMULWB          r9, r5, r6
56    LSL             r9, r9, #1
57
58    SMULWT          r7, r4, r6
59
60    SUB             r14, r9, r7, LSL #1
61
62    STR             r12, [r0], #4
63    STR             r14, [r1], #4
64
65END_LOOP:
66
67    LDMFD           sp!, {r4-r12, pc}
68