Line data Source code
1 : /******************************************************************************
2 : * ETSI TS 103 634 V1.5.1 *
3 : * Low Complexity Communication Codec Plus (LC3plus) *
4 : * *
5 : * Copyright licence is solely granted through ETSI Intellectual Property *
6 : * Rights Policy, 3rd April 2019. No patent licence is granted by implication, *
7 : * estoppel or otherwise. *
8 : ******************************************************************************/
9 :
10 : #include "defines.h"
11 :
12 : #include "functions.h"
13 :
14 : #ifdef ENABLE_HR_MODE
15 0 : Word32 Mpy_32_32_0(Word32 x, Word32 y)
16 : {
17 : Word32 z;
18 :
19 0 : z = L_shr(L_add(Mpy_32_32_lc3plus(x, y),1), 1);
20 :
21 0 : return (z);
22 : }
23 :
24 0 : Word32 Mpy_32_16_0(Word32 x, Word16 y)
25 : {
26 : Word32 z;
27 :
28 0 : z = L_shr(L_add(Mpy_32_16_lc3plus(x, y),1), 1);
29 :
30 0 : return (z);
31 : }
32 : #endif
33 :
34 0 : Word32 Mpy_32_16_lc3plus(Word32 x, Word16 y)
35 : {
36 : Word32 mh;
37 : UWord16 ml;
38 :
39 0 : Mpy_32_16_ss(x, y, &mh, &ml);
40 :
41 0 : return (mh);
42 : }
43 :
44 :
45 0 : Word32 Mpy_32_32_lc3plus(Word32 x, Word32 y)
46 : {
47 : Word32 mh;
48 : UWord32 ml;
49 :
50 0 : Mpy_32_32_ss(x, y, &mh, &ml);
51 :
52 0 : return (mh);
53 : }
54 :
55 :
56 0 : void cplxMpy_32_16(Word32 *c_Re, Word32 *c_Im, const Word32 a_Re, const Word32 a_Im, const Word16 b_Re,
57 : const Word16 b_Im)
58 : {
59 0 : *c_Re = L_sub(Mpy_32_16_lc3plus(a_Re, b_Re), Mpy_32_16_lc3plus(a_Im, b_Im)); move32();
60 0 : *c_Im = L_add(Mpy_32_16_lc3plus(a_Re, b_Im), Mpy_32_16_lc3plus(a_Im, b_Re)); move32();
61 0 : }
62 :
63 0 : void cplxMpy_32_32(Word32 *c_Re, Word32 *c_Im, const Word32 a_Re, const Word32 a_Im, const Word32 b_Re,
64 : const Word32 b_Im)
65 : {
66 0 : *c_Re = L_sub(Mpy_32_32_lc3plus(a_Re, b_Re), Mpy_32_32_lc3plus(a_Im, b_Im)); move32();
67 0 : *c_Im = L_add(Mpy_32_32_lc3plus(a_Re, b_Im), Mpy_32_32_lc3plus(a_Im, b_Re)); move32();
68 0 : }
69 :
70 : #ifdef ENABLE_HR_MODE
71 0 : Word32 Mac_32_16_0(Word32 z, Word32 x, Word16 y)
72 : {
73 0 : z = L_add(z, Mpy_32_16_0(x, y));
74 :
75 0 : return (z);
76 : }
77 :
78 0 : Word32 Mac_32_32_0(Word32 z, Word32 x, Word32 y)
79 : {
80 0 : z = L_add(z, Mpy_32_32_0(x, y));
81 :
82 0 : return (z);
83 : }
84 :
85 0 : Word32 Msu_32_16_0(Word32 z, Word32 x, Word16 y)
86 : {
87 0 : z = L_sub(z, Mpy_32_16_0(x, y));
88 :
89 0 : return (z);
90 : }
91 :
92 0 : Word32 Msu_32_32_0(Word32 z, Word32 x, Word32 y)
93 : {
94 0 : z = L_sub(z, Mpy_32_32_0(x, y));
95 :
96 0 : return (z);
97 : }
98 :
99 : #endif /* #ifdef ENABLE_HR_MODE */
|