Coverage Report

Created: 2026-09-28 07:55

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/opus/celt/mathops.h
Line
Count
Source
1
/* Copyright (c) 2002-2008 Jean-Marc Valin
2
   Copyright (c) 2007-2008 CSIRO
3
   Copyright (c) 2007-2009 Xiph.Org Foundation
4
   Copyright (c) 2024 Arm Limited
5
   Written by Jean-Marc Valin, and Yunho Huh */
6
/**
7
   @file mathops.h
8
   @brief Various math functions
9
*/
10
/*
11
   Redistribution and use in source and binary forms, with or without
12
   modification, are permitted provided that the following conditions
13
   are met:
14
15
   - Redistributions of source code must retain the above copyright
16
   notice, this list of conditions and the following disclaimer.
17
18
   - Redistributions in binary form must reproduce the above copyright
19
   notice, this list of conditions and the following disclaimer in the
20
   documentation and/or other materials provided with the distribution.
21
22
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
26
   OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
*/
34
35
#ifndef MATHOPS_H
36
#define MATHOPS_H
37
38
#include "arch.h"
39
#include "entcode.h"
40
#include "os_support.h"
41
42
43
#if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
44
#include "arm/mathops_arm.h"
45
#endif
46
47
101M
#define PI 3.1415926535897931
48
49
/* Multiplies two 16-bit fractional values. Bit-exactness of this macro is important */
50
12.1M
#define FRAC_MUL16(a,b) ((16384+((opus_int32)(opus_int16)(a)*(opus_int16)(b)))>>15)
51
52
unsigned isqrt32(opus_uint32 _val);
53
54
/* CELT doesn't need it for fixed-point, by analysis.c does. */
55
#if !defined(FIXED_POINT) || defined(ANALYSIS_C)
56
66.0M
#define cA 0.43157974f
57
66.0M
#define cB 0.67848403f
58
66.0M
#define cC 0.08595542f
59
99.4M
#define cE ((float)PI/2)
60
67.5M
static OPUS_INLINE float fast_atan2f(float y, float x) {
61
67.5M
   float x2, y2;
62
67.5M
   x2 = x*x;
63
67.5M
   y2 = y*y;
64
   /* For very small values, we don't care about the answer, so
65
      we can just return 0. */
66
67.5M
   if (x2 + y2 < 1e-18f)
67
1.57M
   {
68
1.57M
      return 0;
69
1.57M
   }
70
66.0M
   if(x2<y2){
71
32.6M
      float den = (y2 + cB*x2) * (y2 + cC*x2);
72
32.6M
      return -x*y*(y2 + cA*x2) / den + (y<0 ? -cE : cE);
73
33.3M
   }else{
74
33.3M
      float den = (x2 + cB*y2) * (x2 + cC*y2);
75
33.3M
      return  x*y*(x2 + cA*y2) / den + (y<0 ? -cE : cE) - (x*y<0 ? -cE : cE);
76
33.3M
   }
77
66.0M
}
analysis.c:fast_atan2f
Line
Count
Source
60
67.5M
static OPUS_INLINE float fast_atan2f(float y, float x) {
61
67.5M
   float x2, y2;
62
67.5M
   x2 = x*x;
63
67.5M
   y2 = y*y;
64
   /* For very small values, we don't care about the answer, so
65
      we can just return 0. */
66
67.5M
   if (x2 + y2 < 1e-18f)
67
1.57M
   {
68
1.57M
      return 0;
69
1.57M
   }
70
66.0M
   if(x2<y2){
71
32.6M
      float den = (y2 + cB*x2) * (y2 + cC*x2);
72
32.6M
      return -x*y*(y2 + cA*x2) / den + (y<0 ? -cE : cE);
73
33.3M
   }else{
74
33.3M
      float den = (x2 + cB*y2) * (x2 + cC*y2);
75
33.3M
      return  x*y*(x2 + cA*y2) / den + (y<0 ? -cE : cE) - (x*y<0 ? -cE : cE);
76
33.3M
   }
77
66.0M
}
Unexecuted instantiation: opus_encoder.c:fast_atan2f
Unexecuted instantiation: celt.c:fast_atan2f
Unexecuted instantiation: celt_encoder.c:fast_atan2f
Unexecuted instantiation: kiss_fft.c:fast_atan2f
Unexecuted instantiation: mdct.c:fast_atan2f
Unexecuted instantiation: modes.c:fast_atan2f
Unexecuted instantiation: pitch.c:fast_atan2f
Unexecuted instantiation: celt_lpc.c:fast_atan2f
Unexecuted instantiation: quant_bands.c:fast_atan2f
Unexecuted instantiation: rate.c:fast_atan2f
Unexecuted instantiation: pitch_sse.c:fast_atan2f
Unexecuted instantiation: opus.c:fast_atan2f
Unexecuted instantiation: opus_decoder.c:fast_atan2f
Unexecuted instantiation: bands.c:fast_atan2f
Unexecuted instantiation: celt_decoder.c:fast_atan2f
Unexecuted instantiation: laplace.c:fast_atan2f
Unexecuted instantiation: mathops.c:fast_atan2f
Unexecuted instantiation: vq.c:fast_atan2f
Unexecuted instantiation: vq_sse2.c:fast_atan2f
Unexecuted instantiation: cwrs.c:fast_atan2f
Unexecuted instantiation: opus_projection_encoder.c:fast_atan2f
Unexecuted instantiation: opus_multistream_encoder.c:fast_atan2f
Unexecuted instantiation: opus_multistream_decode_fuzzer.cc:fast_atan2f(float, float)
Unexecuted instantiation: opus_projection_decoder_fuzzer.cc:fast_atan2f(float, float)
Unexecuted instantiation: opus_projection_decoder.c:fast_atan2f
78
#undef cA
79
#undef cB
80
#undef cC
81
#undef cE
82
#endif
83
84
85
#ifndef OVERRIDE_CELT_MAXABS16
86
static OPUS_INLINE opus_val32 celt_maxabs16(const opus_val16 *x, int len)
87
1.67M
{
88
1.67M
   int i;
89
1.67M
   opus_val16 maxval = 0;
90
1.67M
   opus_val16 minval = 0;
91
746M
   for (i=0;i<len;i++)
92
745M
   {
93
745M
      maxval = MAX16(maxval, x[i]);
94
745M
      minval = MIN16(minval, x[i]);
95
745M
   }
96
1.67M
   return MAX32(EXTEND32(maxval),-EXTEND32(minval));
97
1.67M
}
Unexecuted instantiation: celt.c:celt_maxabs16
Unexecuted instantiation: opus.c:celt_maxabs16
Unexecuted instantiation: opus_decoder.c:celt_maxabs16
celt_decoder.c:celt_maxabs16
Line
Count
Source
87
190k
{
88
190k
   int i;
89
190k
   opus_val16 maxval = 0;
90
190k
   opus_val16 minval = 0;
91
114M
   for (i=0;i<len;i++)
92
114M
   {
93
114M
      maxval = MAX16(maxval, x[i]);
94
114M
      minval = MIN16(minval, x[i]);
95
114M
   }
96
190k
   return MAX32(EXTEND32(maxval),-EXTEND32(minval));
97
190k
}
Unexecuted instantiation: mathops.c:celt_maxabs16
Unexecuted instantiation: mdct.c:celt_maxabs16
Unexecuted instantiation: modes.c:celt_maxabs16
pitch.c:celt_maxabs16
Line
Count
Source
87
242k
{
88
242k
   int i;
89
242k
   opus_val16 maxval = 0;
90
242k
   opus_val16 minval = 0;
91
83.0M
   for (i=0;i<len;i++)
92
82.7M
   {
93
82.7M
      maxval = MAX16(maxval, x[i]);
94
82.7M
      minval = MIN16(minval, x[i]);
95
82.7M
   }
96
242k
   return MAX32(EXTEND32(maxval),-EXTEND32(minval));
97
242k
}
Unexecuted instantiation: celt_lpc.c:celt_maxabs16
Unexecuted instantiation: quant_bands.c:celt_maxabs16
Unexecuted instantiation: rate.c:celt_maxabs16
Unexecuted instantiation: vq.c:celt_maxabs16
Unexecuted instantiation: pitch_sse2.c:celt_maxabs16
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_maxabs16
Unexecuted instantiation: pitch_sse4_1.c:celt_maxabs16
Unexecuted instantiation: bands.c:celt_maxabs16
Unexecuted instantiation: cwrs.c:celt_maxabs16
Unexecuted instantiation: kiss_fft.c:celt_maxabs16
Unexecuted instantiation: laplace.c:celt_maxabs16
Unexecuted instantiation: opus_projection_encoder.c:celt_maxabs16
Unexecuted instantiation: opus_multistream_encoder.c:celt_maxabs16
Unexecuted instantiation: analysis.c:celt_maxabs16
celt_encoder.c:celt_maxabs16
Line
Count
Source
87
811k
{
88
811k
   int i;
89
811k
   opus_val16 maxval = 0;
90
811k
   opus_val16 minval = 0;
91
295M
   for (i=0;i<len;i++)
92
294M
   {
93
294M
      maxval = MAX16(maxval, x[i]);
94
294M
      minval = MIN16(minval, x[i]);
95
294M
   }
96
811k
   return MAX32(EXTEND32(maxval),-EXTEND32(minval));
97
811k
}
opus_encoder.c:celt_maxabs16
Line
Count
Source
87
433k
{
88
433k
   int i;
89
433k
   opus_val16 maxval = 0;
90
433k
   opus_val16 minval = 0;
91
254M
   for (i=0;i<len;i++)
92
253M
   {
93
253M
      maxval = MAX16(maxval, x[i]);
94
253M
      minval = MIN16(minval, x[i]);
95
253M
   }
96
433k
   return MAX32(EXTEND32(maxval),-EXTEND32(minval));
97
433k
}
Unexecuted instantiation: pitch_sse.c:celt_maxabs16
Unexecuted instantiation: vq_sse2.c:celt_maxabs16
Unexecuted instantiation: opus_multistream_decode_fuzzer.cc:celt_maxabs16(float const*, int)
Unexecuted instantiation: opus_projection_decoder_fuzzer.cc:celt_maxabs16(float const*, int)
Unexecuted instantiation: opus_projection_decoder.c:celt_maxabs16
98
#endif
99
100
#if defined(ENABLE_RES24) && defined(FIXED_POINT)
101
static OPUS_INLINE opus_res celt_maxabs_res(const opus_res *x, int len)
102
1.02M
{
103
1.02M
   int i;
104
1.02M
   opus_res maxval = 0;
105
1.02M
   opus_res minval = 0;
106
393M
   for (i=0;i<len;i++)
107
392M
   {
108
392M
      maxval = MAX32(maxval, x[i]);
109
392M
      minval = MIN32(minval, x[i]);
110
392M
   }
111
   /* opus_res should never reach such amplitude, so we should be safe. */
112
1.02M
   celt_sig_assert(minval != -2147483648);
113
1.02M
   return MAX32(maxval,-minval);
114
1.02M
}
Unexecuted instantiation: celt.c:celt_maxabs_res
Unexecuted instantiation: opus.c:celt_maxabs_res
Unexecuted instantiation: opus_decoder.c:celt_maxabs_res
Unexecuted instantiation: celt_decoder.c:celt_maxabs_res
Unexecuted instantiation: mathops.c:celt_maxabs_res
Unexecuted instantiation: mdct.c:celt_maxabs_res
Unexecuted instantiation: modes.c:celt_maxabs_res
Unexecuted instantiation: pitch.c:celt_maxabs_res
Unexecuted instantiation: celt_lpc.c:celt_maxabs_res
Unexecuted instantiation: quant_bands.c:celt_maxabs_res
Unexecuted instantiation: rate.c:celt_maxabs_res
Unexecuted instantiation: vq.c:celt_maxabs_res
Unexecuted instantiation: pitch_sse2.c:celt_maxabs_res
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_maxabs_res
Unexecuted instantiation: pitch_sse4_1.c:celt_maxabs_res
Unexecuted instantiation: bands.c:celt_maxabs_res
Unexecuted instantiation: cwrs.c:celt_maxabs_res
Unexecuted instantiation: kiss_fft.c:celt_maxabs_res
Unexecuted instantiation: laplace.c:celt_maxabs_res
Unexecuted instantiation: opus_projection_encoder.c:celt_maxabs_res
opus_encoder.c:celt_maxabs_res
Line
Count
Source
102
663k
{
103
663k
   int i;
104
663k
   opus_res maxval = 0;
105
663k
   opus_res minval = 0;
106
340M
   for (i=0;i<len;i++)
107
339M
   {
108
339M
      maxval = MAX32(maxval, x[i]);
109
339M
      minval = MIN32(minval, x[i]);
110
339M
   }
111
   /* opus_res should never reach such amplitude, so we should be safe. */
112
663k
   celt_sig_assert(minval != -2147483648);
113
663k
   return MAX32(maxval,-minval);
114
663k
}
Unexecuted instantiation: opus_multistream_encoder.c:celt_maxabs_res
Unexecuted instantiation: analysis.c:celt_maxabs_res
celt_encoder.c:celt_maxabs_res
Line
Count
Source
102
362k
{
103
362k
   int i;
104
362k
   opus_res maxval = 0;
105
362k
   opus_res minval = 0;
106
52.6M
   for (i=0;i<len;i++)
107
52.2M
   {
108
52.2M
      maxval = MAX32(maxval, x[i]);
109
52.2M
      minval = MIN32(minval, x[i]);
110
52.2M
   }
111
   /* opus_res should never reach such amplitude, so we should be safe. */
112
362k
   celt_sig_assert(minval != -2147483648);
113
362k
   return MAX32(maxval,-minval);
114
362k
}
Unexecuted instantiation: opus_projection_decoder.c:celt_maxabs_res
115
#else
116
600k
#define celt_maxabs_res celt_maxabs16
117
#endif
118
119
120
#ifndef OVERRIDE_CELT_MAXABS32
121
#ifdef FIXED_POINT
122
static OPUS_INLINE opus_val32 celt_maxabs32(const opus_val32 *x, int len)
123
3.96M
{
124
3.96M
   int i;
125
3.96M
   opus_val32 maxval = 0;
126
3.96M
   opus_val32 minval = 0;
127
692M
   for (i=0;i<len;i++)
128
688M
   {
129
688M
      maxval = MAX32(maxval, x[i]);
130
688M
      minval = MIN32(minval, x[i]);
131
688M
   }
132
3.96M
   return MAX32(maxval, -minval);
133
3.96M
}
Unexecuted instantiation: celt.c:celt_maxabs32
Unexecuted instantiation: opus.c:celt_maxabs32
Unexecuted instantiation: opus_decoder.c:celt_maxabs32
Unexecuted instantiation: celt_decoder.c:celt_maxabs32
Unexecuted instantiation: mathops.c:celt_maxabs32
Unexecuted instantiation: mdct.c:celt_maxabs32
Unexecuted instantiation: modes.c:celt_maxabs32
pitch.c:celt_maxabs32
Line
Count
Source
123
194k
{
124
194k
   int i;
125
194k
   opus_val32 maxval = 0;
126
194k
   opus_val32 minval = 0;
127
386M
   for (i=0;i<len;i++)
128
386M
   {
129
386M
      maxval = MAX32(maxval, x[i]);
130
386M
      minval = MIN32(minval, x[i]);
131
386M
   }
132
194k
   return MAX32(maxval, -minval);
133
194k
}
Unexecuted instantiation: celt_lpc.c:celt_maxabs32
Unexecuted instantiation: quant_bands.c:celt_maxabs32
Unexecuted instantiation: rate.c:celt_maxabs32
Unexecuted instantiation: vq.c:celt_maxabs32
Unexecuted instantiation: pitch_sse2.c:celt_maxabs32
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_maxabs32
Unexecuted instantiation: pitch_sse4_1.c:celt_maxabs32
bands.c:celt_maxabs32
Line
Count
Source
123
3.51M
{
124
3.51M
   int i;
125
3.51M
   opus_val32 maxval = 0;
126
3.51M
   opus_val32 minval = 0;
127
43.3M
   for (i=0;i<len;i++)
128
39.8M
   {
129
39.8M
      maxval = MAX32(maxval, x[i]);
130
39.8M
      minval = MIN32(minval, x[i]);
131
39.8M
   }
132
3.51M
   return MAX32(maxval, -minval);
133
3.51M
}
Unexecuted instantiation: cwrs.c:celt_maxabs32
Unexecuted instantiation: kiss_fft.c:celt_maxabs32
Unexecuted instantiation: laplace.c:celt_maxabs32
Unexecuted instantiation: opus_projection_encoder.c:celt_maxabs32
Unexecuted instantiation: opus_encoder.c:celt_maxabs32
Unexecuted instantiation: opus_multistream_encoder.c:celt_maxabs32
analysis.c:celt_maxabs32
Line
Count
Source
123
62.4k
{
124
62.4k
   int i;
125
62.4k
   opus_val32 maxval = 0;
126
62.4k
   opus_val32 minval = 0;
127
45.0M
   for (i=0;i<len;i++)
128
44.9M
   {
129
44.9M
      maxval = MAX32(maxval, x[i]);
130
44.9M
      minval = MIN32(minval, x[i]);
131
44.9M
   }
132
62.4k
   return MAX32(maxval, -minval);
133
62.4k
}
celt_encoder.c:celt_maxabs32
Line
Count
Source
123
196k
{
124
196k
   int i;
125
196k
   opus_val32 maxval = 0;
126
196k
   opus_val32 minval = 0;
127
217M
   for (i=0;i<len;i++)
128
216M
   {
129
216M
      maxval = MAX32(maxval, x[i]);
130
216M
      minval = MIN32(minval, x[i]);
131
216M
   }
132
196k
   return MAX32(maxval, -minval);
133
196k
}
Unexecuted instantiation: opus_projection_decoder.c:celt_maxabs32
134
#else
135
#define celt_maxabs32(x,len) celt_maxabs16(x,len)
136
#endif
137
#endif
138
139
#ifndef FIXED_POINT
140
/* Calculates the arctangent of x using a Remez approximation of order 15,
141
 * incorporating only odd-powered terms. */
142
static OPUS_INLINE float celt_atan_norm(float x)
143
1.35M
{
144
1.35M
   #define ATAN2_2_OVER_PI 0.636619772367581f
145
1.35M
   float x_sq = x * x;
146
147
   /* Polynomial coefficients approximated in the [0, 1] range.
148
    * Lolremez command: lolremez --degree 6 --range "0:1"
149
    *                   "(atan(sqrt(x))-sqrt(x))/(x*sqrt(x))" "1/(sqrt(x)*x)"
150
    * Please note that ATAN2_COEFF_A01 is fixed to 1.0f. */
151
1.35M
   #define ATAN2_COEFF_A03 -3.3331659436225891113281250000e-01f
152
1.35M
   #define ATAN2_COEFF_A05 1.99627041816711425781250000000e-01f
153
1.35M
   #define ATAN2_COEFF_A07 -1.3976582884788513183593750000e-01f
154
1.35M
   #define ATAN2_COEFF_A09 9.79423448443412780761718750000e-02f
155
1.35M
   #define ATAN2_COEFF_A11 -5.7773590087890625000000000000e-02f
156
1.35M
   #define ATAN2_COEFF_A13 2.30401363223791122436523437500e-02f
157
1.35M
   #define ATAN2_COEFF_A15 -4.3554059229791164398193359375e-03f
158
1.35M
   return ATAN2_2_OVER_PI * (x + x * x_sq * (ATAN2_COEFF_A03
159
1.35M
                + x_sq * (ATAN2_COEFF_A05
160
1.35M
                + x_sq * (ATAN2_COEFF_A07
161
1.35M
                + x_sq * (ATAN2_COEFF_A09
162
1.35M
                + x_sq * (ATAN2_COEFF_A11
163
1.35M
                + x_sq * (ATAN2_COEFF_A13
164
1.35M
                + x_sq * (ATAN2_COEFF_A15))))))));
165
1.35M
}
Unexecuted instantiation: pitch_sse.c:celt_atan_norm
vq.c:celt_atan_norm
Line
Count
Source
143
1.35M
{
144
1.35M
   #define ATAN2_2_OVER_PI 0.636619772367581f
145
1.35M
   float x_sq = x * x;
146
147
   /* Polynomial coefficients approximated in the [0, 1] range.
148
    * Lolremez command: lolremez --degree 6 --range "0:1"
149
    *                   "(atan(sqrt(x))-sqrt(x))/(x*sqrt(x))" "1/(sqrt(x)*x)"
150
    * Please note that ATAN2_COEFF_A01 is fixed to 1.0f. */
151
1.35M
   #define ATAN2_COEFF_A03 -3.3331659436225891113281250000e-01f
152
1.35M
   #define ATAN2_COEFF_A05 1.99627041816711425781250000000e-01f
153
1.35M
   #define ATAN2_COEFF_A07 -1.3976582884788513183593750000e-01f
154
1.35M
   #define ATAN2_COEFF_A09 9.79423448443412780761718750000e-02f
155
1.35M
   #define ATAN2_COEFF_A11 -5.7773590087890625000000000000e-02f
156
1.35M
   #define ATAN2_COEFF_A13 2.30401363223791122436523437500e-02f
157
1.35M
   #define ATAN2_COEFF_A15 -4.3554059229791164398193359375e-03f
158
1.35M
   return ATAN2_2_OVER_PI * (x + x * x_sq * (ATAN2_COEFF_A03
159
1.35M
                + x_sq * (ATAN2_COEFF_A05
160
1.35M
                + x_sq * (ATAN2_COEFF_A07
161
1.35M
                + x_sq * (ATAN2_COEFF_A09
162
1.35M
                + x_sq * (ATAN2_COEFF_A11
163
1.35M
                + x_sq * (ATAN2_COEFF_A13
164
1.35M
                + x_sq * (ATAN2_COEFF_A15))))))));
165
1.35M
}
Unexecuted instantiation: vq_sse2.c:celt_atan_norm
Unexecuted instantiation: opus_multistream_decode_fuzzer.cc:celt_atan_norm(float)
Unexecuted instantiation: opus_projection_decoder_fuzzer.cc:celt_atan_norm(float)
166
167
/* Calculates the arctangent of y/x, returning an approximate value in radians.
168
 * Please refer to the linked wiki page (https://en.wikipedia.org/wiki/Atan2)
169
 * to learn how atan2 results are computed. */
170
static OPUS_INLINE float celt_atan2p_norm(float y, float x)
171
1.38M
{
172
1.38M
   celt_sig_assert(x>=0 && y>=0);
173
174
   /* For very small values, we don't care about the answer. */
175
1.38M
   if ((x*x + y*y) < 1e-18f)
176
35.9k
   {
177
35.9k
      return 0;
178
35.9k
   }
179
180
1.35M
   if (y < x)
181
660k
   {
182
660k
      return celt_atan_norm(y / x);
183
690k
   } else {
184
690k
      return 1.f - celt_atan_norm(x / y);
185
690k
   }
186
1.35M
}
Unexecuted instantiation: pitch_sse.c:celt_atan2p_norm
vq.c:celt_atan2p_norm
Line
Count
Source
171
1.38M
{
172
1.38M
   celt_sig_assert(x>=0 && y>=0);
173
174
   /* For very small values, we don't care about the answer. */
175
1.38M
   if ((x*x + y*y) < 1e-18f)
176
35.9k
   {
177
35.9k
      return 0;
178
35.9k
   }
179
180
1.35M
   if (y < x)
181
660k
   {
182
660k
      return celt_atan_norm(y / x);
183
690k
   } else {
184
690k
      return 1.f - celt_atan_norm(x / y);
185
690k
   }
186
1.35M
}
Unexecuted instantiation: vq_sse2.c:celt_atan2p_norm
Unexecuted instantiation: opus_multistream_decode_fuzzer.cc:celt_atan2p_norm(float, float)
Unexecuted instantiation: opus_projection_decoder_fuzzer.cc:celt_atan2p_norm(float, float)
187
#endif
188
189
#if !defined(FIXED_POINT) || defined(ENABLE_QEXT)
190
/* Computes estimated cosine values for (PI/2 * x) using only terms with even
191
 * exponents. */
192
static OPUS_INLINE float celt_cos_norm2(float x)
193
2.48M
{
194
2.48M
   float x_norm_sq;
195
2.48M
   int output_sign;
196
   /* Restrict x to [-1, 3]. */
197
2.48M
   x -= 4*floor(.25*(x+1));
198
   /* Negative sign for [1, 3]. */
199
2.48M
   output_sign = 1 - 2*(x>1);
200
   /* Restrict to [-1, 1]. */
201
2.48M
   x -= 2*(x>1);
202
203
   /* The cosine function, cos(x), has a Taylor series representation consisting
204
    * exclusively of even-powered polynomial terms. */
205
2.48M
   x_norm_sq = x * x;
206
207
   /* Polynomial coefficients approximated in the [0, 1] range using only terms
208
    * with even exponents.
209
    * Lolremez command: lolremez --degree 4 --range 0:1 "cos(sqrt(x)*pi*0.5)" */
210
2.48M
   #define COS_COEFF_A0 9.999999403953552246093750000000e-01f
211
2.48M
   #define COS_COEFF_A2 -1.233698248863220214843750000000000f
212
2.48M
   #define COS_COEFF_A4 2.536507546901702880859375000000e-01f
213
2.48M
   #define COS_COEFF_A6 -2.08106283098459243774414062500e-02f
214
2.48M
   #define COS_COEFF_A8 8.581906440667808055877685546875e-04f
215
2.48M
   return output_sign * (COS_COEFF_A0 + x_norm_sq * (COS_COEFF_A2 +
216
2.48M
                               x_norm_sq * (COS_COEFF_A4 +
217
2.48M
                               x_norm_sq * (COS_COEFF_A6 +
218
2.48M
                               x_norm_sq * (COS_COEFF_A8)))));
219
2.48M
}
Unexecuted instantiation: opus_projection_encoder.c:celt_cos_norm2
Unexecuted instantiation: celt.c:celt_cos_norm2
Unexecuted instantiation: mathops.c:celt_cos_norm2
Unexecuted instantiation: opus_encoder.c:celt_cos_norm2
Unexecuted instantiation: opus_multistream_encoder.c:celt_cos_norm2
Unexecuted instantiation: analysis.c:celt_cos_norm2
Unexecuted instantiation: celt_encoder.c:celt_cos_norm2
Unexecuted instantiation: kiss_fft.c:celt_cos_norm2
Unexecuted instantiation: mdct.c:celt_cos_norm2
Unexecuted instantiation: modes.c:celt_cos_norm2
Unexecuted instantiation: pitch.c:celt_cos_norm2
Unexecuted instantiation: celt_lpc.c:celt_cos_norm2
Unexecuted instantiation: quant_bands.c:celt_cos_norm2
Unexecuted instantiation: rate.c:celt_cos_norm2
Unexecuted instantiation: vq.c:celt_cos_norm2
Unexecuted instantiation: pitch_sse2.c:celt_cos_norm2
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_cos_norm2
Unexecuted instantiation: pitch_sse4_1.c:celt_cos_norm2
Unexecuted instantiation: opus.c:celt_cos_norm2
Unexecuted instantiation: opus_decoder.c:celt_cos_norm2
Unexecuted instantiation: celt_decoder.c:celt_cos_norm2
Unexecuted instantiation: cwrs.c:celt_cos_norm2
Unexecuted instantiation: laplace.c:celt_cos_norm2
Unexecuted instantiation: pitch_sse.c:celt_cos_norm2
bands.c:celt_cos_norm2
Line
Count
Source
193
2.48M
{
194
2.48M
   float x_norm_sq;
195
2.48M
   int output_sign;
196
   /* Restrict x to [-1, 3]. */
197
2.48M
   x -= 4*floor(.25*(x+1));
198
   /* Negative sign for [1, 3]. */
199
2.48M
   output_sign = 1 - 2*(x>1);
200
   /* Restrict to [-1, 1]. */
201
2.48M
   x -= 2*(x>1);
202
203
   /* The cosine function, cos(x), has a Taylor series representation consisting
204
    * exclusively of even-powered polynomial terms. */
205
2.48M
   x_norm_sq = x * x;
206
207
   /* Polynomial coefficients approximated in the [0, 1] range using only terms
208
    * with even exponents.
209
    * Lolremez command: lolremez --degree 4 --range 0:1 "cos(sqrt(x)*pi*0.5)" */
210
2.48M
   #define COS_COEFF_A0 9.999999403953552246093750000000e-01f
211
2.48M
   #define COS_COEFF_A2 -1.233698248863220214843750000000000f
212
2.48M
   #define COS_COEFF_A4 2.536507546901702880859375000000e-01f
213
2.48M
   #define COS_COEFF_A6 -2.08106283098459243774414062500e-02f
214
2.48M
   #define COS_COEFF_A8 8.581906440667808055877685546875e-04f
215
2.48M
   return output_sign * (COS_COEFF_A0 + x_norm_sq * (COS_COEFF_A2 +
216
2.48M
                               x_norm_sq * (COS_COEFF_A4 +
217
2.48M
                               x_norm_sq * (COS_COEFF_A6 +
218
2.48M
                               x_norm_sq * (COS_COEFF_A8)))));
219
2.48M
}
Unexecuted instantiation: vq_sse2.c:celt_cos_norm2
Unexecuted instantiation: opus_multistream_decode_fuzzer.cc:celt_cos_norm2(float)
Unexecuted instantiation: opus_projection_decoder_fuzzer.cc:celt_cos_norm2(float)
Unexecuted instantiation: opus_projection_decoder.c:celt_cos_norm2
220
221
#endif
222
223
#ifndef FIXED_POINT
224
225
11.7M
#define celt_sqrt(x) ((float)sqrt(x))
226
5.42M
#define celt_sqrt32(x) ((float)sqrt(x))
227
1.49M
#define celt_rsqrt(x) (1.f/celt_sqrt(x))
228
#define celt_rsqrt_norm(x) (celt_rsqrt(x))
229
1.44M
#define celt_rsqrt_norm32(x) (celt_rsqrt(x))
230
1.81M
#define celt_cos_norm(x) ((float)cos((.5f*PI)*(x)))
231
128k
#define celt_rcp(x) (1.f/(x))
232
905k
#define celt_div(a,b) ((a)/(b))
233
1.34M
#define frac_div32(a,b) ((float)(a)/(b))
234
287k
#define frac_div32_q29(a,b) frac_div32(a,b)
235
236
#ifdef FLOAT_APPROX
237
/* Calculates the base-2 logarithm (log2(x)) of a number. It is designed for
238
 * systems using radix-2 floating-point representation, with the exponent
239
 * located at bits 23 to 30 and an offset of 127. Note that special cases like
240
 * denormalized numbers, positive/negative infinity, and NaN are not handled.
241
 * log2(x) = log2(x^exponent * mantissa)
242
 *         = exponent + log2(mantissa) */
243
244
/* Log2 x normalization single precision coefficients calculated by
245
 * 1 / (1 + 0.125 * index).
246
 * Coefficients in Double Precision
247
 * double log2_x_norm_coeff[8] = {
248
 *    1.0000000000000000000, 8.888888888888888e-01,
249
 *    8.000000000000000e-01, 7.272727272727273e-01,
250
 *    6.666666666666666e-01, 6.153846153846154e-01,
251
 *    5.714285714285714e-01, 5.333333333333333e-01} */
252
static const float log2_x_norm_coeff[8] = {
253
   1.000000000000000000000000000f, 8.88888895511627197265625e-01f,
254
   8.00000000000000000000000e-01f, 7.27272748947143554687500e-01f,
255
   6.66666686534881591796875e-01f, 6.15384638309478759765625e-01f,
256
   5.71428596973419189453125e-01f, 5.33333361148834228515625e-01f};
257
258
/* Log2 y normalization single precision coefficients calculated by
259
 * log2(1 + 0.125 * index).
260
 * Coefficients in Double Precision
261
 * double log2_y_norm_coeff[8] = {
262
 *    0.0000000000000000000, 1.699250014423124e-01,
263
 *    3.219280948873623e-01, 4.594316186372973e-01,
264
 *    5.849625007211562e-01, 7.004397181410922e-01,
265
 *    8.073549220576041e-01, 9.068905956085185e-01}; */
266
static const float log2_y_norm_coeff[8] = {
267
   0.0000000000000000000000000000f, 1.699250042438507080078125e-01f,
268
   3.219280838966369628906250e-01f, 4.594316184520721435546875e-01f,
269
   5.849624872207641601562500e-01f, 7.004396915435791015625000e-01f,
270
   8.073549270629882812500000e-01f, 9.068905711174011230468750e-01f};
271
272
static OPUS_INLINE float celt_log2(float x)
273
4.03M
{
274
4.03M
   opus_int32 integer;
275
4.03M
   opus_int32 range_idx;
276
4.03M
   union {
277
4.03M
      float f;
278
4.03M
      opus_uint32 i;
279
4.03M
   } in;
280
4.03M
   in.f = x;
281
4.03M
   integer = (opus_int32)(in.i>>23)-127;
282
4.03M
   in.i = (opus_int32)in.i - (opus_int32)((opus_uint32)integer<<23);
283
284
   /* Normalize the mantissa range from [1, 2] to [1,1.125], and then shift x
285
    * by 1.0625 to [-0.0625, 0.0625]. */
286
4.03M
   range_idx = (in.i >> 20) & 0x7;
287
4.03M
   in.f = in.f * log2_x_norm_coeff[range_idx] - 1.0625f;
288
289
   /* Polynomial coefficients approximated in the [1, 1.125] range.
290
    * Lolremez command: lolremez --degree 4 --range -0.0625:0.0625
291
    *                   "log(x+1.0625)/log(2)"
292
    * Coefficients in Double Precision
293
    * A0: 8.7462840624502679e-2    A1: 1.3578296070972002
294
    * A2: -6.3897703690210047e-1   A3: 4.0197125617419959e-1
295
    * A4: -2.8415445877832832e-1 */
296
4.03M
   #define LOG2_COEFF_A0 8.74628424644470214843750000e-02f
297
4.03M
   #define LOG2_COEFF_A1 1.357829570770263671875000000000f
298
4.03M
   #define LOG2_COEFF_A2 -6.3897705078125000000000000e-01f
299
4.03M
   #define LOG2_COEFF_A3 4.01971250772476196289062500e-01f
300
4.03M
   #define LOG2_COEFF_A4 -2.8415444493293762207031250e-01f
301
4.03M
   in.f = LOG2_COEFF_A0 + in.f * (LOG2_COEFF_A1
302
4.03M
               + in.f * (LOG2_COEFF_A2
303
4.03M
               + in.f * (LOG2_COEFF_A3
304
4.03M
               + in.f * (LOG2_COEFF_A4))));
305
4.03M
   return integer + in.f + log2_y_norm_coeff[range_idx];
306
4.03M
}
celt_encoder.c:celt_log2
Line
Count
Source
273
92.8k
{
274
92.8k
   opus_int32 integer;
275
92.8k
   opus_int32 range_idx;
276
92.8k
   union {
277
92.8k
      float f;
278
92.8k
      opus_uint32 i;
279
92.8k
   } in;
280
92.8k
   in.f = x;
281
92.8k
   integer = (opus_int32)(in.i>>23)-127;
282
92.8k
   in.i = (opus_int32)in.i - (opus_int32)((opus_uint32)integer<<23);
283
284
   /* Normalize the mantissa range from [1, 2] to [1,1.125], and then shift x
285
    * by 1.0625 to [-0.0625, 0.0625]. */
286
92.8k
   range_idx = (in.i >> 20) & 0x7;
287
92.8k
   in.f = in.f * log2_x_norm_coeff[range_idx] - 1.0625f;
288
289
   /* Polynomial coefficients approximated in the [1, 1.125] range.
290
    * Lolremez command: lolremez --degree 4 --range -0.0625:0.0625
291
    *                   "log(x+1.0625)/log(2)"
292
    * Coefficients in Double Precision
293
    * A0: 8.7462840624502679e-2    A1: 1.3578296070972002
294
    * A2: -6.3897703690210047e-1   A3: 4.0197125617419959e-1
295
    * A4: -2.8415445877832832e-1 */
296
92.8k
   #define LOG2_COEFF_A0 8.74628424644470214843750000e-02f
297
92.8k
   #define LOG2_COEFF_A1 1.357829570770263671875000000000f
298
92.8k
   #define LOG2_COEFF_A2 -6.3897705078125000000000000e-01f
299
92.8k
   #define LOG2_COEFF_A3 4.01971250772476196289062500e-01f
300
92.8k
   #define LOG2_COEFF_A4 -2.8415444493293762207031250e-01f
301
92.8k
   in.f = LOG2_COEFF_A0 + in.f * (LOG2_COEFF_A1
302
92.8k
               + in.f * (LOG2_COEFF_A2
303
92.8k
               + in.f * (LOG2_COEFF_A3
304
92.8k
               + in.f * (LOG2_COEFF_A4))));
305
92.8k
   return integer + in.f + log2_y_norm_coeff[range_idx];
306
92.8k
}
quant_bands.c:celt_log2
Line
Count
Source
273
3.94M
{
274
3.94M
   opus_int32 integer;
275
3.94M
   opus_int32 range_idx;
276
3.94M
   union {
277
3.94M
      float f;
278
3.94M
      opus_uint32 i;
279
3.94M
   } in;
280
3.94M
   in.f = x;
281
3.94M
   integer = (opus_int32)(in.i>>23)-127;
282
3.94M
   in.i = (opus_int32)in.i - (opus_int32)((opus_uint32)integer<<23);
283
284
   /* Normalize the mantissa range from [1, 2] to [1,1.125], and then shift x
285
    * by 1.0625 to [-0.0625, 0.0625]. */
286
3.94M
   range_idx = (in.i >> 20) & 0x7;
287
3.94M
   in.f = in.f * log2_x_norm_coeff[range_idx] - 1.0625f;
288
289
   /* Polynomial coefficients approximated in the [1, 1.125] range.
290
    * Lolremez command: lolremez --degree 4 --range -0.0625:0.0625
291
    *                   "log(x+1.0625)/log(2)"
292
    * Coefficients in Double Precision
293
    * A0: 8.7462840624502679e-2    A1: 1.3578296070972002
294
    * A2: -6.3897703690210047e-1   A3: 4.0197125617419959e-1
295
    * A4: -2.8415445877832832e-1 */
296
3.94M
   #define LOG2_COEFF_A0 8.74628424644470214843750000e-02f
297
3.94M
   #define LOG2_COEFF_A1 1.357829570770263671875000000000f
298
3.94M
   #define LOG2_COEFF_A2 -6.3897705078125000000000000e-01f
299
3.94M
   #define LOG2_COEFF_A3 4.01971250772476196289062500e-01f
300
3.94M
   #define LOG2_COEFF_A4 -2.8415444493293762207031250e-01f
301
3.94M
   in.f = LOG2_COEFF_A0 + in.f * (LOG2_COEFF_A1
302
3.94M
               + in.f * (LOG2_COEFF_A2
303
3.94M
               + in.f * (LOG2_COEFF_A3
304
3.94M
               + in.f * (LOG2_COEFF_A4))));
305
3.94M
   return integer + in.f + log2_y_norm_coeff[range_idx];
306
3.94M
}
Unexecuted instantiation: pitch_sse.c:celt_log2
Unexecuted instantiation: vq_sse2.c:celt_log2
opus_multistream_encoder.c:celt_log2
Line
Count
Source
273
992
{
274
992
   opus_int32 integer;
275
992
   opus_int32 range_idx;
276
992
   union {
277
992
      float f;
278
992
      opus_uint32 i;
279
992
   } in;
280
992
   in.f = x;
281
992
   integer = (opus_int32)(in.i>>23)-127;
282
992
   in.i = (opus_int32)in.i - (opus_int32)((opus_uint32)integer<<23);
283
284
   /* Normalize the mantissa range from [1, 2] to [1,1.125], and then shift x
285
    * by 1.0625 to [-0.0625, 0.0625]. */
286
992
   range_idx = (in.i >> 20) & 0x7;
287
992
   in.f = in.f * log2_x_norm_coeff[range_idx] - 1.0625f;
288
289
   /* Polynomial coefficients approximated in the [1, 1.125] range.
290
    * Lolremez command: lolremez --degree 4 --range -0.0625:0.0625
291
    *                   "log(x+1.0625)/log(2)"
292
    * Coefficients in Double Precision
293
    * A0: 8.7462840624502679e-2    A1: 1.3578296070972002
294
    * A2: -6.3897703690210047e-1   A3: 4.0197125617419959e-1
295
    * A4: -2.8415445877832832e-1 */
296
992
   #define LOG2_COEFF_A0 8.74628424644470214843750000e-02f
297
992
   #define LOG2_COEFF_A1 1.357829570770263671875000000000f
298
992
   #define LOG2_COEFF_A2 -6.3897705078125000000000000e-01f
299
992
   #define LOG2_COEFF_A3 4.01971250772476196289062500e-01f
300
992
   #define LOG2_COEFF_A4 -2.8415444493293762207031250e-01f
301
992
   in.f = LOG2_COEFF_A0 + in.f * (LOG2_COEFF_A1
302
992
               + in.f * (LOG2_COEFF_A2
303
992
               + in.f * (LOG2_COEFF_A3
304
992
               + in.f * (LOG2_COEFF_A4))));
305
992
   return integer + in.f + log2_y_norm_coeff[range_idx];
306
992
}
307
308
/* Calculates an approximation of 2^x. The approximation was achieved by
309
 * employing a base-2 exponential function and utilizing a Remez approximation
310
 * of order 5, ensuring a controlled relative error.
311
 * exp2(x) = exp2(integer + fraction)
312
 *         = exp2(integer) * exp2(fraction) */
313
static OPUS_INLINE float celt_exp2(float x)
314
3.90M
{
315
3.90M
   opus_int32 integer;
316
3.90M
   float frac;
317
3.90M
   union {
318
3.90M
      float f;
319
3.90M
      opus_uint32 i;
320
3.90M
   } res;
321
3.90M
   integer = (int)floor(x);
322
3.90M
   if (integer < -50)
323
3.83k
      return 0;
324
3.89M
   frac = x-integer;
325
326
   /* Polynomial coefficients approximated in the [0, 1] range.
327
    * Lolremez command: lolremez --degree 5 --range 0:1
328
    *                   "exp(x*0.693147180559945)" "exp(x*0.693147180559945)"
329
    * NOTE: log(2) ~ 0.693147180559945 */
330
3.89M
   #define EXP2_COEFF_A0 9.999999403953552246093750000000e-01f
331
3.89M
   #define EXP2_COEFF_A1 6.931530833244323730468750000000e-01f
332
3.89M
   #define EXP2_COEFF_A2 2.401536107063293457031250000000e-01f
333
3.89M
   #define EXP2_COEFF_A3 5.582631751894950866699218750000e-02f
334
3.89M
   #define EXP2_COEFF_A4 8.989339694380760192871093750000e-03f
335
3.89M
   #define EXP2_COEFF_A5 1.877576694823801517486572265625e-03f
336
3.89M
   res.f = EXP2_COEFF_A0 + frac * (EXP2_COEFF_A1
337
3.89M
               + frac * (EXP2_COEFF_A2
338
3.89M
               + frac * (EXP2_COEFF_A3
339
3.89M
               + frac * (EXP2_COEFF_A4
340
3.89M
               + frac * (EXP2_COEFF_A5)))));
341
3.89M
   res.i = (opus_uint32)((opus_int32)res.i + (opus_int32)((opus_uint32)integer<<23)) & 0x7fffffff;
342
3.89M
   return res.f;
343
3.90M
}
opus_encoder.c:celt_exp2
Line
Count
Source
314
8.75k
{
315
8.75k
   opus_int32 integer;
316
8.75k
   float frac;
317
8.75k
   union {
318
8.75k
      float f;
319
8.75k
      opus_uint32 i;
320
8.75k
   } res;
321
8.75k
   integer = (int)floor(x);
322
8.75k
   if (integer < -50)
323
168
      return 0;
324
8.58k
   frac = x-integer;
325
326
   /* Polynomial coefficients approximated in the [0, 1] range.
327
    * Lolremez command: lolremez --degree 5 --range 0:1
328
    *                   "exp(x*0.693147180559945)" "exp(x*0.693147180559945)"
329
    * NOTE: log(2) ~ 0.693147180559945 */
330
8.58k
   #define EXP2_COEFF_A0 9.999999403953552246093750000000e-01f
331
8.58k
   #define EXP2_COEFF_A1 6.931530833244323730468750000000e-01f
332
8.58k
   #define EXP2_COEFF_A2 2.401536107063293457031250000000e-01f
333
8.58k
   #define EXP2_COEFF_A3 5.582631751894950866699218750000e-02f
334
8.58k
   #define EXP2_COEFF_A4 8.989339694380760192871093750000e-03f
335
8.58k
   #define EXP2_COEFF_A5 1.877576694823801517486572265625e-03f
336
8.58k
   res.f = EXP2_COEFF_A0 + frac * (EXP2_COEFF_A1
337
8.58k
               + frac * (EXP2_COEFF_A2
338
8.58k
               + frac * (EXP2_COEFF_A3
339
8.58k
               + frac * (EXP2_COEFF_A4
340
8.58k
               + frac * (EXP2_COEFF_A5)))));
341
8.58k
   res.i = (opus_uint32)((opus_int32)res.i + (opus_int32)((opus_uint32)integer<<23)) & 0x7fffffff;
342
8.58k
   return res.f;
343
8.75k
}
celt_encoder.c:celt_exp2
Line
Count
Source
314
885k
{
315
885k
   opus_int32 integer;
316
885k
   float frac;
317
885k
   union {
318
885k
      float f;
319
885k
      opus_uint32 i;
320
885k
   } res;
321
885k
   integer = (int)floor(x);
322
885k
   if (integer < -50)
323
0
      return 0;
324
885k
   frac = x-integer;
325
326
   /* Polynomial coefficients approximated in the [0, 1] range.
327
    * Lolremez command: lolremez --degree 5 --range 0:1
328
    *                   "exp(x*0.693147180559945)" "exp(x*0.693147180559945)"
329
    * NOTE: log(2) ~ 0.693147180559945 */
330
885k
   #define EXP2_COEFF_A0 9.999999403953552246093750000000e-01f
331
885k
   #define EXP2_COEFF_A1 6.931530833244323730468750000000e-01f
332
885k
   #define EXP2_COEFF_A2 2.401536107063293457031250000000e-01f
333
885k
   #define EXP2_COEFF_A3 5.582631751894950866699218750000e-02f
334
885k
   #define EXP2_COEFF_A4 8.989339694380760192871093750000e-03f
335
885k
   #define EXP2_COEFF_A5 1.877576694823801517486572265625e-03f
336
885k
   res.f = EXP2_COEFF_A0 + frac * (EXP2_COEFF_A1
337
885k
               + frac * (EXP2_COEFF_A2
338
885k
               + frac * (EXP2_COEFF_A3
339
885k
               + frac * (EXP2_COEFF_A4
340
885k
               + frac * (EXP2_COEFF_A5)))));
341
885k
   res.i = (opus_uint32)((opus_int32)res.i + (opus_int32)((opus_uint32)integer<<23)) & 0x7fffffff;
342
885k
   return res.f;
343
885k
}
Unexecuted instantiation: pitch_sse.c:celt_exp2
Unexecuted instantiation: opus_decoder.c:celt_exp2
bands.c:celt_exp2
Line
Count
Source
314
3.00M
{
315
3.00M
   opus_int32 integer;
316
3.00M
   float frac;
317
3.00M
   union {
318
3.00M
      float f;
319
3.00M
      opus_uint32 i;
320
3.00M
   } res;
321
3.00M
   integer = (int)floor(x);
322
3.00M
   if (integer < -50)
323
3.66k
      return 0;
324
3.00M
   frac = x-integer;
325
326
   /* Polynomial coefficients approximated in the [0, 1] range.
327
    * Lolremez command: lolremez --degree 5 --range 0:1
328
    *                   "exp(x*0.693147180559945)" "exp(x*0.693147180559945)"
329
    * NOTE: log(2) ~ 0.693147180559945 */
330
3.00M
   #define EXP2_COEFF_A0 9.999999403953552246093750000000e-01f
331
3.00M
   #define EXP2_COEFF_A1 6.931530833244323730468750000000e-01f
332
3.00M
   #define EXP2_COEFF_A2 2.401536107063293457031250000000e-01f
333
3.00M
   #define EXP2_COEFF_A3 5.582631751894950866699218750000e-02f
334
3.00M
   #define EXP2_COEFF_A4 8.989339694380760192871093750000e-03f
335
3.00M
   #define EXP2_COEFF_A5 1.877576694823801517486572265625e-03f
336
3.00M
   res.f = EXP2_COEFF_A0 + frac * (EXP2_COEFF_A1
337
3.00M
               + frac * (EXP2_COEFF_A2
338
3.00M
               + frac * (EXP2_COEFF_A3
339
3.00M
               + frac * (EXP2_COEFF_A4
340
3.00M
               + frac * (EXP2_COEFF_A5)))));
341
3.00M
   res.i = (opus_uint32)((opus_int32)res.i + (opus_int32)((opus_uint32)integer<<23)) & 0x7fffffff;
342
3.00M
   return res.f;
343
3.00M
}
Unexecuted instantiation: vq_sse2.c:celt_exp2
344
345
#else
346
#define celt_log2(x) ((float)(1.442695040888963387*log(x)))
347
#define celt_exp2(x) ((float)exp(0.6931471805599453094*(x)))
348
#endif
349
350
3.84M
#define celt_exp2_db celt_exp2
351
7.36M
#define celt_log2_db celt_log2
352
353
#define celt_sin(x) celt_cos_norm2((0.5f*PI) * (x) - 1.0f)
354
#define celt_log(x) (celt_log2(x) * 0.6931471805599453f)
355
#define celt_exp(x) (celt_exp2((x) * 1.4426950408889634f))
356
357
#endif
358
359
#ifdef FIXED_POINT
360
361
#include "os_support.h"
362
363
#ifndef OVERRIDE_CELT_ILOG2
364
/** Integer log in base2. Undefined for zero and negative numbers */
365
static OPUS_INLINE opus_int16 celt_ilog2(opus_int32 x)
366
55.3M
{
367
55.3M
   celt_sig_assert(x>0);
368
55.3M
   return EC_ILOG(x)-1;
369
55.3M
}
Unexecuted instantiation: celt.c:celt_ilog2
Unexecuted instantiation: opus.c:celt_ilog2
Unexecuted instantiation: opus_decoder.c:celt_ilog2
celt_decoder.c:celt_ilog2
Line
Count
Source
366
144k
{
367
144k
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
144k
}
mathops.c:celt_ilog2
Line
Count
Source
366
22.2M
{
367
22.2M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
22.2M
}
mdct.c:celt_ilog2
Line
Count
Source
366
3.11M
{
367
3.11M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
3.11M
}
Unexecuted instantiation: modes.c:celt_ilog2
pitch.c:celt_ilog2
Line
Count
Source
366
1.55M
{
367
1.55M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
1.55M
}
celt_lpc.c:celt_ilog2
Line
Count
Source
366
1.17M
{
367
1.17M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
1.17M
}
quant_bands.c:celt_ilog2
Line
Count
Source
366
3.41M
{
367
3.41M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
3.41M
}
Unexecuted instantiation: rate.c:celt_ilog2
vq.c:celt_ilog2
Line
Count
Source
366
10.8M
{
367
10.8M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
10.8M
}
Unexecuted instantiation: pitch_sse2.c:celt_ilog2
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_ilog2
Unexecuted instantiation: pitch_sse4_1.c:celt_ilog2
bands.c:celt_ilog2
Line
Count
Source
366
10.9M
{
367
10.9M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
10.9M
}
Unexecuted instantiation: cwrs.c:celt_ilog2
Unexecuted instantiation: kiss_fft.c:celt_ilog2
Unexecuted instantiation: laplace.c:celt_ilog2
Unexecuted instantiation: opus_projection_encoder.c:celt_ilog2
opus_encoder.c:celt_ilog2
Line
Count
Source
366
1.40M
{
367
1.40M
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
1.40M
}
opus_multistream_encoder.c:celt_ilog2
Line
Count
Source
366
711
{
367
711
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
711
}
Unexecuted instantiation: analysis.c:celt_ilog2
celt_encoder.c:celt_ilog2
Line
Count
Source
366
629k
{
367
629k
   celt_sig_assert(x>0);
368
   return EC_ILOG(x)-1;
369
629k
}
Unexecuted instantiation: opus_projection_decoder.c:celt_ilog2
370
#endif
371
372
373
/** Integer log in base2. Defined for zero, but not for negative numbers */
374
static OPUS_INLINE opus_int16 celt_zlog2(opus_val32 x)
375
3.81M
{
376
3.81M
   return x <= 0 ? 0 : celt_ilog2(x);
377
3.81M
}
Unexecuted instantiation: celt.c:celt_zlog2
Unexecuted instantiation: opus.c:celt_zlog2
Unexecuted instantiation: opus_decoder.c:celt_zlog2
celt_decoder.c:celt_zlog2
Line
Count
Source
375
190k
{
376
190k
   return x <= 0 ? 0 : celt_ilog2(x);
377
190k
}
Unexecuted instantiation: mathops.c:celt_zlog2
mdct.c:celt_zlog2
Line
Count
Source
375
694k
{
376
694k
   return x <= 0 ? 0 : celt_ilog2(x);
377
694k
}
Unexecuted instantiation: modes.c:celt_zlog2
Unexecuted instantiation: pitch.c:celt_zlog2
Unexecuted instantiation: celt_lpc.c:celt_zlog2
Unexecuted instantiation: quant_bands.c:celt_zlog2
Unexecuted instantiation: rate.c:celt_zlog2
Unexecuted instantiation: vq.c:celt_zlog2
Unexecuted instantiation: pitch_sse2.c:celt_zlog2
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_zlog2
Unexecuted instantiation: pitch_sse4_1.c:celt_zlog2
bands.c:celt_zlog2
Line
Count
Source
375
2.93M
{
376
2.93M
   return x <= 0 ? 0 : celt_ilog2(x);
377
2.93M
}
Unexecuted instantiation: cwrs.c:celt_zlog2
Unexecuted instantiation: kiss_fft.c:celt_zlog2
Unexecuted instantiation: laplace.c:celt_zlog2
Unexecuted instantiation: opus_projection_encoder.c:celt_zlog2
Unexecuted instantiation: opus_encoder.c:celt_zlog2
Unexecuted instantiation: opus_multistream_encoder.c:celt_zlog2
Unexecuted instantiation: analysis.c:celt_zlog2
Unexecuted instantiation: celt_encoder.c:celt_zlog2
Unexecuted instantiation: opus_projection_decoder.c:celt_zlog2
378
379
opus_val16 celt_rsqrt_norm(opus_val32 x);
380
381
opus_val32 celt_rsqrt_norm32(opus_val32 x);
382
383
opus_val32 celt_sqrt(opus_val32 x);
384
385
opus_val32 celt_sqrt32(opus_val32 x);
386
387
opus_val16 celt_cos_norm(opus_val32 x);
388
389
opus_val32 celt_cos_norm32(opus_val32 x);
390
391
/** Base-2 logarithm approximation (log2(x)). (Q14 input, Q10 output) */
392
static OPUS_INLINE opus_val16 celt_log2(opus_val32 x)
393
1.23M
{
394
1.23M
   int i;
395
1.23M
   opus_val16 n, frac;
396
   /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
397
       0.15530808010959576, -0.08556153059057618 */
398
1.23M
   static const opus_val16 C[5] = {-6801+(1<<(13-10)), 15746, -5217, 2545, -1401};
399
1.23M
   if (x==0)
400
0
      return -32767;
401
1.23M
   i = celt_ilog2(x);
402
1.23M
   n = VSHR32(x,i-15)-32768-16384;
403
1.23M
   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
404
1.23M
   return SHL32(i-13,10)+SHR32(frac,14-10);
405
1.23M
}
Unexecuted instantiation: celt.c:celt_log2
Unexecuted instantiation: opus.c:celt_log2
Unexecuted instantiation: opus_decoder.c:celt_log2
Unexecuted instantiation: celt_decoder.c:celt_log2
Unexecuted instantiation: mathops.c:celt_log2
Unexecuted instantiation: mdct.c:celt_log2
Unexecuted instantiation: modes.c:celt_log2
Unexecuted instantiation: pitch.c:celt_log2
Unexecuted instantiation: celt_lpc.c:celt_log2
quant_bands.c:celt_log2
Line
Count
Source
393
1.09M
{
394
1.09M
   int i;
395
1.09M
   opus_val16 n, frac;
396
   /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
397
       0.15530808010959576, -0.08556153059057618 */
398
1.09M
   static const opus_val16 C[5] = {-6801+(1<<(13-10)), 15746, -5217, 2545, -1401};
399
1.09M
   if (x==0)
400
0
      return -32767;
401
1.09M
   i = celt_ilog2(x);
402
1.09M
   n = VSHR32(x,i-15)-32768-16384;
403
1.09M
   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
404
1.09M
   return SHL32(i-13,10)+SHR32(frac,14-10);
405
1.09M
}
Unexecuted instantiation: rate.c:celt_log2
Unexecuted instantiation: vq.c:celt_log2
Unexecuted instantiation: pitch_sse2.c:celt_log2
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_log2
Unexecuted instantiation: pitch_sse4_1.c:celt_log2
Unexecuted instantiation: bands.c:celt_log2
Unexecuted instantiation: cwrs.c:celt_log2
Unexecuted instantiation: kiss_fft.c:celt_log2
Unexecuted instantiation: laplace.c:celt_log2
Unexecuted instantiation: opus_projection_encoder.c:celt_log2
Unexecuted instantiation: opus_encoder.c:celt_log2
opus_multistream_encoder.c:celt_log2
Line
Count
Source
393
711
{
394
711
   int i;
395
711
   opus_val16 n, frac;
396
   /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
397
       0.15530808010959576, -0.08556153059057618 */
398
711
   static const opus_val16 C[5] = {-6801+(1<<(13-10)), 15746, -5217, 2545, -1401};
399
711
   if (x==0)
400
0
      return -32767;
401
711
   i = celt_ilog2(x);
402
711
   n = VSHR32(x,i-15)-32768-16384;
403
711
   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
404
711
   return SHL32(i-13,10)+SHR32(frac,14-10);
405
711
}
Unexecuted instantiation: analysis.c:celt_log2
celt_encoder.c:celt_log2
Line
Count
Source
393
132k
{
394
132k
   int i;
395
132k
   opus_val16 n, frac;
396
   /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
397
       0.15530808010959576, -0.08556153059057618 */
398
132k
   static const opus_val16 C[5] = {-6801+(1<<(13-10)), 15746, -5217, 2545, -1401};
399
132k
   if (x==0)
400
0
      return -32767;
401
132k
   i = celt_ilog2(x);
402
132k
   n = VSHR32(x,i-15)-32768-16384;
403
132k
   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
404
132k
   return SHL32(i-13,10)+SHR32(frac,14-10);
405
132k
}
Unexecuted instantiation: opus_projection_decoder.c:celt_log2
406
407
/*
408
 K0 = 1
409
 K1 = log(2)
410
 K2 = 3-4*log(2)
411
 K3 = 3*log(2) - 2
412
*/
413
#define D0 16383
414
#define D1 22804
415
#define D2 14819
416
#define D3 10204
417
418
static OPUS_INLINE opus_val32 celt_exp2_frac(opus_val16 x)
419
2.04M
{
420
2.04M
   opus_val16 frac;
421
2.04M
   frac = SHL16(x, 4);
422
2.04M
   return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
423
2.04M
}
Unexecuted instantiation: celt.c:celt_exp2_frac
Unexecuted instantiation: opus.c:celt_exp2_frac
Unexecuted instantiation: opus_decoder.c:celt_exp2_frac
Unexecuted instantiation: celt_decoder.c:celt_exp2_frac
Unexecuted instantiation: mathops.c:celt_exp2_frac
Unexecuted instantiation: mdct.c:celt_exp2_frac
Unexecuted instantiation: modes.c:celt_exp2_frac
Unexecuted instantiation: pitch.c:celt_exp2_frac
Unexecuted instantiation: celt_lpc.c:celt_exp2_frac
Unexecuted instantiation: quant_bands.c:celt_exp2_frac
Unexecuted instantiation: rate.c:celt_exp2_frac
Unexecuted instantiation: vq.c:celt_exp2_frac
Unexecuted instantiation: pitch_sse2.c:celt_exp2_frac
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_exp2_frac
Unexecuted instantiation: pitch_sse4_1.c:celt_exp2_frac
bands.c:celt_exp2_frac
Line
Count
Source
419
1.76M
{
420
1.76M
   opus_val16 frac;
421
1.76M
   frac = SHL16(x, 4);
422
1.76M
   return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
423
1.76M
}
Unexecuted instantiation: cwrs.c:celt_exp2_frac
Unexecuted instantiation: kiss_fft.c:celt_exp2_frac
Unexecuted instantiation: laplace.c:celt_exp2_frac
Unexecuted instantiation: opus_projection_encoder.c:celt_exp2_frac
opus_encoder.c:celt_exp2_frac
Line
Count
Source
419
5.36k
{
420
5.36k
   opus_val16 frac;
421
5.36k
   frac = SHL16(x, 4);
422
5.36k
   return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
423
5.36k
}
Unexecuted instantiation: opus_multistream_encoder.c:celt_exp2_frac
Unexecuted instantiation: analysis.c:celt_exp2_frac
Unexecuted instantiation: opus_projection_decoder.c:celt_exp2_frac
celt_encoder.c:celt_exp2_frac
Line
Count
Source
419
280k
{
420
280k
   opus_val16 frac;
421
280k
   frac = SHL16(x, 4);
422
280k
   return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
423
280k
}
424
425
#undef D0
426
#undef D1
427
#undef D2
428
#undef D3
429
430
/** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */
431
static OPUS_INLINE opus_val32 celt_exp2(opus_val16 x)
432
353k
{
433
353k
   int integer;
434
353k
   opus_val16 frac;
435
353k
   integer = SHR16(x,10);
436
353k
   if (integer>14)
437
227
      return 0x7f000000;
438
353k
   else if (integer < -15)
439
2.05k
      return 0;
440
351k
   frac = celt_exp2_frac(x-SHL16(integer,10));
441
351k
   return VSHR32(EXTEND32(frac), -integer-2);
442
353k
}
Unexecuted instantiation: celt.c:celt_exp2
Unexecuted instantiation: opus.c:celt_exp2
Unexecuted instantiation: opus_decoder.c:celt_exp2
Unexecuted instantiation: celt_decoder.c:celt_exp2
Unexecuted instantiation: mathops.c:celt_exp2
Unexecuted instantiation: mdct.c:celt_exp2
Unexecuted instantiation: modes.c:celt_exp2
Unexecuted instantiation: pitch.c:celt_exp2
Unexecuted instantiation: celt_lpc.c:celt_exp2
Unexecuted instantiation: quant_bands.c:celt_exp2
Unexecuted instantiation: rate.c:celt_exp2
Unexecuted instantiation: vq.c:celt_exp2
Unexecuted instantiation: pitch_sse2.c:celt_exp2
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_exp2
Unexecuted instantiation: pitch_sse4_1.c:celt_exp2
bands.c:celt_exp2
Line
Count
Source
432
66.7k
{
433
66.7k
   int integer;
434
66.7k
   opus_val16 frac;
435
66.7k
   integer = SHR16(x,10);
436
66.7k
   if (integer>14)
437
0
      return 0x7f000000;
438
66.7k
   else if (integer < -15)
439
845
      return 0;
440
65.9k
   frac = celt_exp2_frac(x-SHL16(integer,10));
441
65.9k
   return VSHR32(EXTEND32(frac), -integer-2);
442
66.7k
}
Unexecuted instantiation: cwrs.c:celt_exp2
Unexecuted instantiation: kiss_fft.c:celt_exp2
Unexecuted instantiation: laplace.c:celt_exp2
Unexecuted instantiation: opus_projection_encoder.c:celt_exp2
opus_encoder.c:celt_exp2
Line
Count
Source
432
6.80k
{
433
6.80k
   int integer;
434
6.80k
   opus_val16 frac;
435
6.80k
   integer = SHR16(x,10);
436
6.80k
   if (integer>14)
437
227
      return 0x7f000000;
438
6.57k
   else if (integer < -15)
439
1.21k
      return 0;
440
5.36k
   frac = celt_exp2_frac(x-SHL16(integer,10));
441
5.36k
   return VSHR32(EXTEND32(frac), -integer-2);
442
6.80k
}
Unexecuted instantiation: opus_multistream_encoder.c:celt_exp2
Unexecuted instantiation: analysis.c:celt_exp2
Unexecuted instantiation: opus_projection_decoder.c:celt_exp2
celt_encoder.c:celt_exp2
Line
Count
Source
432
280k
{
433
280k
   int integer;
434
280k
   opus_val16 frac;
435
280k
   integer = SHR16(x,10);
436
280k
   if (integer>14)
437
0
      return 0x7f000000;
438
280k
   else if (integer < -15)
439
0
      return 0;
440
280k
   frac = celt_exp2_frac(x-SHL16(integer,10));
441
280k
   return VSHR32(EXTEND32(frac), -integer-2);
442
280k
}
443
444
#ifdef ENABLE_QEXT
445
446
/* Calculates the base-2 logarithm of a Q14 input value. The result is returned
447
 * in Q(DB_SHIFT). If the input value is 0, the function will output -32.0f. */
448
2.32M
static OPUS_INLINE opus_val32 celt_log2_db(opus_val32 x) {
449
   /* Q30 */
450
2.32M
   static const opus_val32 log2_x_norm_coeff[8] = {
451
2.32M
      1073741824, 954437184, 858993472, 780903168,
452
2.32M
      715827904,  660764224, 613566784, 572662336};
453
   /* Q24 */
454
2.32M
   static const opus_val32 log2_y_norm_coeff[8] = {
455
2.32M
      0,       2850868,  5401057,  7707983,
456
2.32M
      9814042, 11751428, 13545168, 15215099};
457
2.32M
   static const opus_val32 LOG2_COEFF_A0 = 1467383;     /* Q24 */
458
2.32M
   static const opus_val32 LOG2_COEFF_A1 = 182244800;   /* Q27 */
459
2.32M
   static const opus_val32 LOG2_COEFF_A2 = -21440512;   /* Q25 */
460
2.32M
   static const opus_val32 LOG2_COEFF_A3 = 107903336;   /* Q28 */
461
2.32M
   static const opus_val32 LOG2_COEFF_A4 = -610217024;  /* Q31 */
462
463
2.32M
   opus_int32 integer, norm_coeff_idx, tmp;
464
2.32M
   opus_val32 mantissa;
465
2.32M
   if (x==0) {
466
0
      return -536870912; /* -32.0f */
467
0
   }
468
2.32M
   integer =  SUB32(celt_ilog2(x), 14);  /* Q0 */
469
2.32M
   mantissa = VSHR32(x, integer + 14 - 29);  /* Q29 */
470
2.32M
   norm_coeff_idx = SHR32(mantissa, 29 - 3) & 0x7;
471
   /* mantissa is in Q28 (29 + Q_NORM_CONST - 31 where Q_NORM_CONST is Q30)
472
    * 285212672 (Q28) is 1.0625f. */
473
2.32M
   mantissa = SUB32(MULT32_32_Q31(mantissa, log2_x_norm_coeff[norm_coeff_idx]),
474
2.32M
                    285212672);
475
476
   /* q_a3(Q28): q_mantissa + q_a4 - 31
477
    * q_a2(Q25): q_mantissa + q_a3 - 31
478
    * q_a1(Q27): q_mantissa + q_a2 - 31 + 5
479
    * q_a0(Q24): q_mantissa + q_a1 - 31
480
    * where  q_mantissa is Q28 */
481
   /* Split evaluation in steps to avoid exploding macro expansion. */
482
2.32M
   tmp = MULT32_32_Q31(mantissa, LOG2_COEFF_A4);
483
2.32M
   tmp = MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A3, tmp));
484
2.32M
   tmp = SHL32(MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A2, tmp)), 5 /* SHL32 for LOG2_COEFF_A1 */);
485
2.32M
   tmp = MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A1, tmp));
486
2.32M
   return ADD32(log2_y_norm_coeff[norm_coeff_idx],
487
2.32M
          ADD32(SHL32(integer, DB_SHIFT),
488
2.32M
          ADD32(LOG2_COEFF_A0, tmp)));
489
2.32M
}
Unexecuted instantiation: opus_projection_encoder.c:celt_log2_db
Unexecuted instantiation: celt.c:celt_log2_db
Unexecuted instantiation: mathops.c:celt_log2_db
Unexecuted instantiation: opus_encoder.c:celt_log2_db
Unexecuted instantiation: opus_multistream_encoder.c:celt_log2_db
Unexecuted instantiation: analysis.c:celt_log2_db
Unexecuted instantiation: bands.c:celt_log2_db
Unexecuted instantiation: celt_encoder.c:celt_log2_db
Unexecuted instantiation: kiss_fft.c:celt_log2_db
Unexecuted instantiation: mdct.c:celt_log2_db
Unexecuted instantiation: modes.c:celt_log2_db
Unexecuted instantiation: pitch.c:celt_log2_db
Unexecuted instantiation: celt_lpc.c:celt_log2_db
quant_bands.c:celt_log2_db
Line
Count
Source
448
2.32M
static OPUS_INLINE opus_val32 celt_log2_db(opus_val32 x) {
449
   /* Q30 */
450
2.32M
   static const opus_val32 log2_x_norm_coeff[8] = {
451
2.32M
      1073741824, 954437184, 858993472, 780903168,
452
2.32M
      715827904,  660764224, 613566784, 572662336};
453
   /* Q24 */
454
2.32M
   static const opus_val32 log2_y_norm_coeff[8] = {
455
2.32M
      0,       2850868,  5401057,  7707983,
456
2.32M
      9814042, 11751428, 13545168, 15215099};
457
2.32M
   static const opus_val32 LOG2_COEFF_A0 = 1467383;     /* Q24 */
458
2.32M
   static const opus_val32 LOG2_COEFF_A1 = 182244800;   /* Q27 */
459
2.32M
   static const opus_val32 LOG2_COEFF_A2 = -21440512;   /* Q25 */
460
2.32M
   static const opus_val32 LOG2_COEFF_A3 = 107903336;   /* Q28 */
461
2.32M
   static const opus_val32 LOG2_COEFF_A4 = -610217024;  /* Q31 */
462
463
2.32M
   opus_int32 integer, norm_coeff_idx, tmp;
464
2.32M
   opus_val32 mantissa;
465
2.32M
   if (x==0) {
466
0
      return -536870912; /* -32.0f */
467
0
   }
468
2.32M
   integer =  SUB32(celt_ilog2(x), 14);  /* Q0 */
469
2.32M
   mantissa = VSHR32(x, integer + 14 - 29);  /* Q29 */
470
2.32M
   norm_coeff_idx = SHR32(mantissa, 29 - 3) & 0x7;
471
   /* mantissa is in Q28 (29 + Q_NORM_CONST - 31 where Q_NORM_CONST is Q30)
472
    * 285212672 (Q28) is 1.0625f. */
473
2.32M
   mantissa = SUB32(MULT32_32_Q31(mantissa, log2_x_norm_coeff[norm_coeff_idx]),
474
2.32M
                    285212672);
475
476
   /* q_a3(Q28): q_mantissa + q_a4 - 31
477
    * q_a2(Q25): q_mantissa + q_a3 - 31
478
    * q_a1(Q27): q_mantissa + q_a2 - 31 + 5
479
    * q_a0(Q24): q_mantissa + q_a1 - 31
480
    * where  q_mantissa is Q28 */
481
   /* Split evaluation in steps to avoid exploding macro expansion. */
482
2.32M
   tmp = MULT32_32_Q31(mantissa, LOG2_COEFF_A4);
483
2.32M
   tmp = MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A3, tmp));
484
2.32M
   tmp = SHL32(MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A2, tmp)), 5 /* SHL32 for LOG2_COEFF_A1 */);
485
2.32M
   tmp = MULT32_32_Q31(mantissa, ADD32(LOG2_COEFF_A1, tmp));
486
2.32M
   return ADD32(log2_y_norm_coeff[norm_coeff_idx],
487
2.32M
          ADD32(SHL32(integer, DB_SHIFT),
488
2.32M
          ADD32(LOG2_COEFF_A0, tmp)));
489
2.32M
}
Unexecuted instantiation: rate.c:celt_log2_db
Unexecuted instantiation: vq.c:celt_log2_db
Unexecuted instantiation: pitch_sse2.c:celt_log2_db
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_log2_db
Unexecuted instantiation: pitch_sse4_1.c:celt_log2_db
Unexecuted instantiation: opus.c:celt_log2_db
Unexecuted instantiation: opus_decoder.c:celt_log2_db
Unexecuted instantiation: celt_decoder.c:celt_log2_db
Unexecuted instantiation: cwrs.c:celt_log2_db
Unexecuted instantiation: laplace.c:celt_log2_db
Unexecuted instantiation: opus_projection_decoder.c:celt_log2_db
490
491
/* Calculates exp2 for Q28 within a specific range (0 to 1.0) using fixed-point
492
 * arithmetic. The input number must be adjusted for Q DB_SHIFT. */
493
static OPUS_INLINE opus_val32 celt_exp2_db_frac(opus_val32 x)
494
2.36M
{
495
   /* Approximation constants. */
496
2.36M
   static const opus_int32 EXP2_COEFF_A0 = 268435440;   /* Q28 */
497
2.36M
   static const opus_int32 EXP2_COEFF_A1 = 744267456;   /* Q30 */
498
2.36M
   static const opus_int32 EXP2_COEFF_A2 = 1031451904;  /* Q32 */
499
2.36M
   static const opus_int32 EXP2_COEFF_A3 = 959088832;   /* Q34 */
500
2.36M
   static const opus_int32 EXP2_COEFF_A4 = 617742720;   /* Q36 */
501
2.36M
   static const opus_int32 EXP2_COEFF_A5 = 516104352;   /* Q38 */
502
2.36M
   opus_int32 tmp;
503
   /* Converts input value from Q24 to Q29. */
504
2.36M
   opus_val32 x_q29 = SHL32(x, 29 - 24);
505
   /* Split evaluation in steps to avoid exploding macro expansion. */
506
2.36M
   tmp = ADD32(EXP2_COEFF_A4, MULT32_32_Q31(x_q29, EXP2_COEFF_A5));
507
2.36M
   tmp = ADD32(EXP2_COEFF_A3, MULT32_32_Q31(x_q29, tmp));
508
2.36M
   tmp = ADD32(EXP2_COEFF_A2, MULT32_32_Q31(x_q29, tmp));
509
2.36M
   tmp = ADD32(EXP2_COEFF_A1, MULT32_32_Q31(x_q29, tmp));
510
2.36M
   return ADD32(EXP2_COEFF_A0, MULT32_32_Q31(x_q29, tmp));
511
2.36M
}
Unexecuted instantiation: opus_projection_encoder.c:celt_exp2_db_frac
Unexecuted instantiation: celt.c:celt_exp2_db_frac
Unexecuted instantiation: mathops.c:celt_exp2_db_frac
Unexecuted instantiation: opus_encoder.c:celt_exp2_db_frac
Unexecuted instantiation: opus_multistream_encoder.c:celt_exp2_db_frac
Unexecuted instantiation: analysis.c:celt_exp2_db_frac
bands.c:celt_exp2_db_frac
Line
Count
Source
494
1.82M
{
495
   /* Approximation constants. */
496
1.82M
   static const opus_int32 EXP2_COEFF_A0 = 268435440;   /* Q28 */
497
1.82M
   static const opus_int32 EXP2_COEFF_A1 = 744267456;   /* Q30 */
498
1.82M
   static const opus_int32 EXP2_COEFF_A2 = 1031451904;  /* Q32 */
499
1.82M
   static const opus_int32 EXP2_COEFF_A3 = 959088832;   /* Q34 */
500
1.82M
   static const opus_int32 EXP2_COEFF_A4 = 617742720;   /* Q36 */
501
1.82M
   static const opus_int32 EXP2_COEFF_A5 = 516104352;   /* Q38 */
502
1.82M
   opus_int32 tmp;
503
   /* Converts input value from Q24 to Q29. */
504
1.82M
   opus_val32 x_q29 = SHL32(x, 29 - 24);
505
   /* Split evaluation in steps to avoid exploding macro expansion. */
506
1.82M
   tmp = ADD32(EXP2_COEFF_A4, MULT32_32_Q31(x_q29, EXP2_COEFF_A5));
507
1.82M
   tmp = ADD32(EXP2_COEFF_A3, MULT32_32_Q31(x_q29, tmp));
508
1.82M
   tmp = ADD32(EXP2_COEFF_A2, MULT32_32_Q31(x_q29, tmp));
509
1.82M
   tmp = ADD32(EXP2_COEFF_A1, MULT32_32_Q31(x_q29, tmp));
510
1.82M
   return ADD32(EXP2_COEFF_A0, MULT32_32_Q31(x_q29, tmp));
511
1.82M
}
celt_encoder.c:celt_exp2_db_frac
Line
Count
Source
494
533k
{
495
   /* Approximation constants. */
496
533k
   static const opus_int32 EXP2_COEFF_A0 = 268435440;   /* Q28 */
497
533k
   static const opus_int32 EXP2_COEFF_A1 = 744267456;   /* Q30 */
498
533k
   static const opus_int32 EXP2_COEFF_A2 = 1031451904;  /* Q32 */
499
533k
   static const opus_int32 EXP2_COEFF_A3 = 959088832;   /* Q34 */
500
533k
   static const opus_int32 EXP2_COEFF_A4 = 617742720;   /* Q36 */
501
533k
   static const opus_int32 EXP2_COEFF_A5 = 516104352;   /* Q38 */
502
533k
   opus_int32 tmp;
503
   /* Converts input value from Q24 to Q29. */
504
533k
   opus_val32 x_q29 = SHL32(x, 29 - 24);
505
   /* Split evaluation in steps to avoid exploding macro expansion. */
506
533k
   tmp = ADD32(EXP2_COEFF_A4, MULT32_32_Q31(x_q29, EXP2_COEFF_A5));
507
533k
   tmp = ADD32(EXP2_COEFF_A3, MULT32_32_Q31(x_q29, tmp));
508
533k
   tmp = ADD32(EXP2_COEFF_A2, MULT32_32_Q31(x_q29, tmp));
509
533k
   tmp = ADD32(EXP2_COEFF_A1, MULT32_32_Q31(x_q29, tmp));
510
533k
   return ADD32(EXP2_COEFF_A0, MULT32_32_Q31(x_q29, tmp));
511
533k
}
Unexecuted instantiation: kiss_fft.c:celt_exp2_db_frac
Unexecuted instantiation: mdct.c:celt_exp2_db_frac
Unexecuted instantiation: modes.c:celt_exp2_db_frac
Unexecuted instantiation: pitch.c:celt_exp2_db_frac
Unexecuted instantiation: celt_lpc.c:celt_exp2_db_frac
Unexecuted instantiation: quant_bands.c:celt_exp2_db_frac
Unexecuted instantiation: rate.c:celt_exp2_db_frac
Unexecuted instantiation: vq.c:celt_exp2_db_frac
Unexecuted instantiation: pitch_sse2.c:celt_exp2_db_frac
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_exp2_db_frac
Unexecuted instantiation: pitch_sse4_1.c:celt_exp2_db_frac
Unexecuted instantiation: opus.c:celt_exp2_db_frac
Unexecuted instantiation: opus_decoder.c:celt_exp2_db_frac
Unexecuted instantiation: celt_decoder.c:celt_exp2_db_frac
Unexecuted instantiation: cwrs.c:celt_exp2_db_frac
Unexecuted instantiation: laplace.c:celt_exp2_db_frac
Unexecuted instantiation: opus_projection_decoder.c:celt_exp2_db_frac
512
513
/* Calculates exp2 for Q16 using fixed-point arithmetic. The input number must
514
 * be adjusted for Q DB_SHIFT. */
515
static OPUS_INLINE opus_val32 celt_exp2_db(opus_val32 x)
516
540k
{
517
540k
   int integer;
518
540k
   opus_val32 frac;
519
540k
   integer = SHR32(x,DB_SHIFT);
520
540k
   if (integer>14)
521
0
      return 0x7f000000;
522
540k
   else if (integer <= -17)
523
0
      return 0;
524
540k
   frac = celt_exp2_db_frac(x-SHL32(integer, DB_SHIFT));  /* Q28 */
525
540k
   return VSHR32(frac, -integer + 28 - 16);  /* Q16 */
526
540k
}
Unexecuted instantiation: opus_projection_encoder.c:celt_exp2_db
Unexecuted instantiation: celt.c:celt_exp2_db
Unexecuted instantiation: mathops.c:celt_exp2_db
Unexecuted instantiation: opus_encoder.c:celt_exp2_db
Unexecuted instantiation: opus_multistream_encoder.c:celt_exp2_db
Unexecuted instantiation: analysis.c:celt_exp2_db
bands.c:celt_exp2_db
Line
Count
Source
516
6.77k
{
517
6.77k
   int integer;
518
6.77k
   opus_val32 frac;
519
6.77k
   integer = SHR32(x,DB_SHIFT);
520
6.77k
   if (integer>14)
521
0
      return 0x7f000000;
522
6.77k
   else if (integer <= -17)
523
0
      return 0;
524
6.77k
   frac = celt_exp2_db_frac(x-SHL32(integer, DB_SHIFT));  /* Q28 */
525
6.77k
   return VSHR32(frac, -integer + 28 - 16);  /* Q16 */
526
6.77k
}
celt_encoder.c:celt_exp2_db
Line
Count
Source
516
533k
{
517
533k
   int integer;
518
533k
   opus_val32 frac;
519
533k
   integer = SHR32(x,DB_SHIFT);
520
533k
   if (integer>14)
521
0
      return 0x7f000000;
522
533k
   else if (integer <= -17)
523
0
      return 0;
524
533k
   frac = celt_exp2_db_frac(x-SHL32(integer, DB_SHIFT));  /* Q28 */
525
533k
   return VSHR32(frac, -integer + 28 - 16);  /* Q16 */
526
533k
}
Unexecuted instantiation: kiss_fft.c:celt_exp2_db
Unexecuted instantiation: mdct.c:celt_exp2_db
Unexecuted instantiation: modes.c:celt_exp2_db
Unexecuted instantiation: pitch.c:celt_exp2_db
Unexecuted instantiation: celt_lpc.c:celt_exp2_db
Unexecuted instantiation: quant_bands.c:celt_exp2_db
Unexecuted instantiation: rate.c:celt_exp2_db
Unexecuted instantiation: vq.c:celt_exp2_db
Unexecuted instantiation: pitch_sse2.c:celt_exp2_db
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_exp2_db
Unexecuted instantiation: pitch_sse4_1.c:celt_exp2_db
Unexecuted instantiation: opus.c:celt_exp2_db
Unexecuted instantiation: opus_decoder.c:celt_exp2_db
Unexecuted instantiation: celt_decoder.c:celt_exp2_db
Unexecuted instantiation: cwrs.c:celt_exp2_db
Unexecuted instantiation: laplace.c:celt_exp2_db
Unexecuted instantiation: opus_projection_decoder.c:celt_exp2_db
527
#else
528
529
7.36M
#define celt_log2_db(x) SHL32(EXTEND32(celt_log2(x)), DB_SHIFT-10)
530
#define celt_exp2_db_frac(x) SHL32(celt_exp2_frac(PSHR32(x, DB_SHIFT-10)), 14)
531
#define celt_exp2_db(x) celt_exp2(PSHR32(x, DB_SHIFT-10))
532
533
#endif
534
535
536
opus_val32 celt_rcp(opus_val32 x);
537
opus_val32 celt_rcp_norm32(opus_val32 x);
538
539
905k
#define celt_div(a,b) MULT32_32_Q31((opus_val32)(a),celt_rcp(b))
540
541
opus_val32 frac_div32_q29(opus_val32 a, opus_val32 b);
542
opus_val32 frac_div32(opus_val32 a, opus_val32 b);
543
544
/* Computes atan(x) multiplied by 2/PI. The input value (x) should be within the
545
 * range of -1 to 1 and represented in Q30 format. The function will return the
546
 * result in Q30 format. */
547
static OPUS_INLINE opus_val32 celt_atan_norm(opus_val32 x)
548
1.21M
{
549
   /* Approximation constants. */
550
1.21M
   static const opus_int32 ATAN_2_OVER_PI = 1367130551;   /* Q31 */
551
1.21M
   static const opus_int32 ATAN_COEFF_A03 = -715791936;   /* Q31 */
552
1.21M
   static const opus_int32 ATAN_COEFF_A05 = 857391616;    /* Q32 */
553
1.21M
   static const opus_int32 ATAN_COEFF_A07 = -1200579328;  /* Q33 */
554
1.21M
   static const opus_int32 ATAN_COEFF_A09 = 1682636672;   /* Q34 */
555
1.21M
   static const opus_int32 ATAN_COEFF_A11 = -1985085440;  /* Q35 */
556
1.21M
   static const opus_int32 ATAN_COEFF_A13 = 1583306112;   /* Q36 */
557
1.21M
   static const opus_int32 ATAN_COEFF_A15 = -598602432;   /* Q37 */
558
1.21M
   opus_int32 x_sq_q30;
559
1.21M
   opus_int32 x_q31;
560
1.21M
   opus_int32 tmp;
561
   /* The expected x is in the range of [-1.0f, 1.0f] */
562
1.21M
   celt_sig_assert((x <= 1073741824) && (x >= -1073741824));
563
564
   /* If x = 1.0f, returns 0.5f */
565
1.21M
   if (x == 1073741824)
566
0
   {
567
0
      return 536870912; /* 0.5f (Q30) */
568
0
   }
569
   /* If x = 1.0f, returns 0.5f */
570
1.21M
   if (x == -1073741824)
571
0
   {
572
0
      return -536870912; /* -0.5f (Q30) */
573
0
   }
574
1.21M
   x_q31 = SHL32(x, 1);
575
1.21M
   x_sq_q30 = MULT32_32_Q31(x_q31, x);
576
   /* Split evaluation in steps to avoid exploding macro expansion. */
577
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ATAN_COEFF_A15);
578
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A13, tmp));
579
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A11, tmp));
580
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A09, tmp));
581
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A07, tmp));
582
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A05, tmp));
583
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A03, tmp));
584
1.21M
   tmp = ADD32(x, MULT32_32_Q31(x_q31, tmp));
585
1.21M
   return MULT32_32_Q31(ATAN_2_OVER_PI, tmp);
586
1.21M
}
Unexecuted instantiation: celt.c:celt_atan_norm
Unexecuted instantiation: opus.c:celt_atan_norm
Unexecuted instantiation: opus_decoder.c:celt_atan_norm
Unexecuted instantiation: celt_decoder.c:celt_atan_norm
Unexecuted instantiation: mathops.c:celt_atan_norm
Unexecuted instantiation: mdct.c:celt_atan_norm
Unexecuted instantiation: modes.c:celt_atan_norm
Unexecuted instantiation: pitch.c:celt_atan_norm
Unexecuted instantiation: celt_lpc.c:celt_atan_norm
Unexecuted instantiation: quant_bands.c:celt_atan_norm
Unexecuted instantiation: rate.c:celt_atan_norm
vq.c:celt_atan_norm
Line
Count
Source
548
1.21M
{
549
   /* Approximation constants. */
550
1.21M
   static const opus_int32 ATAN_2_OVER_PI = 1367130551;   /* Q31 */
551
1.21M
   static const opus_int32 ATAN_COEFF_A03 = -715791936;   /* Q31 */
552
1.21M
   static const opus_int32 ATAN_COEFF_A05 = 857391616;    /* Q32 */
553
1.21M
   static const opus_int32 ATAN_COEFF_A07 = -1200579328;  /* Q33 */
554
1.21M
   static const opus_int32 ATAN_COEFF_A09 = 1682636672;   /* Q34 */
555
1.21M
   static const opus_int32 ATAN_COEFF_A11 = -1985085440;  /* Q35 */
556
1.21M
   static const opus_int32 ATAN_COEFF_A13 = 1583306112;   /* Q36 */
557
1.21M
   static const opus_int32 ATAN_COEFF_A15 = -598602432;   /* Q37 */
558
1.21M
   opus_int32 x_sq_q30;
559
1.21M
   opus_int32 x_q31;
560
1.21M
   opus_int32 tmp;
561
   /* The expected x is in the range of [-1.0f, 1.0f] */
562
1.21M
   celt_sig_assert((x <= 1073741824) && (x >= -1073741824));
563
564
   /* If x = 1.0f, returns 0.5f */
565
1.21M
   if (x == 1073741824)
566
0
   {
567
0
      return 536870912; /* 0.5f (Q30) */
568
0
   }
569
   /* If x = 1.0f, returns 0.5f */
570
1.21M
   if (x == -1073741824)
571
0
   {
572
0
      return -536870912; /* -0.5f (Q30) */
573
0
   }
574
1.21M
   x_q31 = SHL32(x, 1);
575
1.21M
   x_sq_q30 = MULT32_32_Q31(x_q31, x);
576
   /* Split evaluation in steps to avoid exploding macro expansion. */
577
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ATAN_COEFF_A15);
578
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A13, tmp));
579
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A11, tmp));
580
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A09, tmp));
581
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A07, tmp));
582
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A05, tmp));
583
1.21M
   tmp = MULT32_32_Q31(x_sq_q30, ADD32(ATAN_COEFF_A03, tmp));
584
1.21M
   tmp = ADD32(x, MULT32_32_Q31(x_q31, tmp));
585
1.21M
   return MULT32_32_Q31(ATAN_2_OVER_PI, tmp);
586
1.21M
}
Unexecuted instantiation: pitch_sse2.c:celt_atan_norm
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_atan_norm
Unexecuted instantiation: pitch_sse4_1.c:celt_atan_norm
Unexecuted instantiation: bands.c:celt_atan_norm
Unexecuted instantiation: cwrs.c:celt_atan_norm
Unexecuted instantiation: kiss_fft.c:celt_atan_norm
Unexecuted instantiation: laplace.c:celt_atan_norm
Unexecuted instantiation: opus_projection_encoder.c:celt_atan_norm
Unexecuted instantiation: opus_encoder.c:celt_atan_norm
Unexecuted instantiation: opus_multistream_encoder.c:celt_atan_norm
Unexecuted instantiation: analysis.c:celt_atan_norm
Unexecuted instantiation: celt_encoder.c:celt_atan_norm
Unexecuted instantiation: opus_projection_decoder.c:celt_atan_norm
587
588
/* Calculates the arctangent of y/x, multiplies the result by 2/pi, and returns
589
 * the value in Q30 format. Both input values (x and y) must be within the range
590
 * of 0 to 1 and represented in Q30 format. Inputs must be zero or greater, and
591
 * at least one input must be non-zero. */
592
static OPUS_INLINE opus_val32 celt_atan2p_norm(opus_val32 y, opus_val32 x)
593
1.32M
{
594
1.32M
   celt_sig_assert(x>=0 && y>=0);
595
1.32M
   if (y==0 && x==0) {
596
113k
      return 0;
597
1.21M
   } else if (y < x) {
598
588k
      return celt_atan_norm(SHR32(frac_div32(y, x), 1));
599
623k
   } else {
600
623k
      celt_sig_assert(y > 0);
601
623k
      return 1073741824 /* 1.0f Q30 */ -
602
623k
             celt_atan_norm(SHR32(frac_div32(x, y), 1));
603
623k
   }
604
1.32M
}
Unexecuted instantiation: celt.c:celt_atan2p_norm
Unexecuted instantiation: opus.c:celt_atan2p_norm
Unexecuted instantiation: opus_decoder.c:celt_atan2p_norm
Unexecuted instantiation: celt_decoder.c:celt_atan2p_norm
Unexecuted instantiation: mathops.c:celt_atan2p_norm
Unexecuted instantiation: mdct.c:celt_atan2p_norm
Unexecuted instantiation: modes.c:celt_atan2p_norm
Unexecuted instantiation: pitch.c:celt_atan2p_norm
Unexecuted instantiation: celt_lpc.c:celt_atan2p_norm
Unexecuted instantiation: quant_bands.c:celt_atan2p_norm
Unexecuted instantiation: rate.c:celt_atan2p_norm
vq.c:celt_atan2p_norm
Line
Count
Source
593
1.32M
{
594
1.32M
   celt_sig_assert(x>=0 && y>=0);
595
1.32M
   if (y==0 && x==0) {
596
113k
      return 0;
597
1.21M
   } else if (y < x) {
598
588k
      return celt_atan_norm(SHR32(frac_div32(y, x), 1));
599
623k
   } else {
600
623k
      celt_sig_assert(y > 0);
601
623k
      return 1073741824 /* 1.0f Q30 */ -
602
623k
             celt_atan_norm(SHR32(frac_div32(x, y), 1));
603
623k
   }
604
1.32M
}
Unexecuted instantiation: pitch_sse2.c:celt_atan2p_norm
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_atan2p_norm
Unexecuted instantiation: pitch_sse4_1.c:celt_atan2p_norm
Unexecuted instantiation: bands.c:celt_atan2p_norm
Unexecuted instantiation: cwrs.c:celt_atan2p_norm
Unexecuted instantiation: kiss_fft.c:celt_atan2p_norm
Unexecuted instantiation: laplace.c:celt_atan2p_norm
Unexecuted instantiation: opus_projection_encoder.c:celt_atan2p_norm
Unexecuted instantiation: opus_encoder.c:celt_atan2p_norm
Unexecuted instantiation: opus_multistream_encoder.c:celt_atan2p_norm
Unexecuted instantiation: analysis.c:celt_atan2p_norm
Unexecuted instantiation: celt_encoder.c:celt_atan2p_norm
Unexecuted instantiation: opus_projection_decoder.c:celt_atan2p_norm
605
606
#define M1 32767
607
#define M2 -21
608
#define M3 -11943
609
#define M4 4936
610
611
/* Atan approximation using a 4th order polynomial. Input is in Q15 format
612
   and normalized by pi/4. Output is in Q15 format */
613
static OPUS_INLINE opus_val16 celt_atan01(opus_val16 x)
614
0
{
615
0
   return MULT16_16_P15(x, ADD32(M1, MULT16_16_P15(x, ADD32(M2, MULT16_16_P15(x, ADD32(M3, MULT16_16_P15(M4, x)))))));
616
0
}
Unexecuted instantiation: celt.c:celt_atan01
Unexecuted instantiation: opus.c:celt_atan01
Unexecuted instantiation: opus_decoder.c:celt_atan01
Unexecuted instantiation: celt_decoder.c:celt_atan01
Unexecuted instantiation: mathops.c:celt_atan01
Unexecuted instantiation: mdct.c:celt_atan01
Unexecuted instantiation: modes.c:celt_atan01
Unexecuted instantiation: pitch.c:celt_atan01
Unexecuted instantiation: celt_lpc.c:celt_atan01
Unexecuted instantiation: quant_bands.c:celt_atan01
Unexecuted instantiation: rate.c:celt_atan01
Unexecuted instantiation: vq.c:celt_atan01
Unexecuted instantiation: pitch_sse2.c:celt_atan01
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_atan01
Unexecuted instantiation: pitch_sse4_1.c:celt_atan01
Unexecuted instantiation: bands.c:celt_atan01
Unexecuted instantiation: cwrs.c:celt_atan01
Unexecuted instantiation: kiss_fft.c:celt_atan01
Unexecuted instantiation: laplace.c:celt_atan01
Unexecuted instantiation: opus_projection_encoder.c:celt_atan01
Unexecuted instantiation: opus_encoder.c:celt_atan01
Unexecuted instantiation: opus_multistream_encoder.c:celt_atan01
Unexecuted instantiation: analysis.c:celt_atan01
Unexecuted instantiation: celt_encoder.c:celt_atan01
Unexecuted instantiation: opus_projection_decoder.c:celt_atan01
617
618
#undef M1
619
#undef M2
620
#undef M3
621
#undef M4
622
623
/* atan2() approximation valid for positive input values */
624
static OPUS_INLINE opus_val16 celt_atan2p(opus_val16 y, opus_val16 x)
625
0
{
626
0
   if (x==0 && y==0) {
627
0
      return 0;
628
0
   } else if (y < x)
629
0
   {
630
0
      opus_val32 arg;
631
0
      arg = celt_div(SHL32(EXTEND32(y),15),x);
632
0
      if (arg >= 32767)
633
0
         arg = 32767;
634
0
      return SHR16(celt_atan01(EXTRACT16(arg)),1);
635
0
   } else {
636
0
      opus_val32 arg;
637
0
      arg = celt_div(SHL32(EXTEND32(x),15),y);
638
0
      if (arg >= 32767)
639
0
         arg = 32767;
640
0
      return 25736-SHR16(celt_atan01(EXTRACT16(arg)),1);
641
0
   }
642
0
}
Unexecuted instantiation: celt.c:celt_atan2p
Unexecuted instantiation: opus.c:celt_atan2p
Unexecuted instantiation: opus_decoder.c:celt_atan2p
Unexecuted instantiation: celt_decoder.c:celt_atan2p
Unexecuted instantiation: mathops.c:celt_atan2p
Unexecuted instantiation: mdct.c:celt_atan2p
Unexecuted instantiation: modes.c:celt_atan2p
Unexecuted instantiation: pitch.c:celt_atan2p
Unexecuted instantiation: celt_lpc.c:celt_atan2p
Unexecuted instantiation: quant_bands.c:celt_atan2p
Unexecuted instantiation: rate.c:celt_atan2p
Unexecuted instantiation: vq.c:celt_atan2p
Unexecuted instantiation: pitch_sse2.c:celt_atan2p
Unexecuted instantiation: celt_lpc_sse4_1.c:celt_atan2p
Unexecuted instantiation: pitch_sse4_1.c:celt_atan2p
Unexecuted instantiation: bands.c:celt_atan2p
Unexecuted instantiation: cwrs.c:celt_atan2p
Unexecuted instantiation: kiss_fft.c:celt_atan2p
Unexecuted instantiation: laplace.c:celt_atan2p
Unexecuted instantiation: opus_projection_encoder.c:celt_atan2p
Unexecuted instantiation: opus_encoder.c:celt_atan2p
Unexecuted instantiation: opus_multistream_encoder.c:celt_atan2p
Unexecuted instantiation: analysis.c:celt_atan2p
Unexecuted instantiation: celt_encoder.c:celt_atan2p
Unexecuted instantiation: opus_projection_decoder.c:celt_atan2p
643
644
#endif /* FIXED_POINT */
645
646
#ifndef DISABLE_FLOAT_API
647
648
void celt_float2int16_c(const float * OPUS_RESTRICT in, short * OPUS_RESTRICT out, int cnt);
649
650
#ifndef OVERRIDE_FLOAT2INT16
651
0
#define celt_float2int16(in, out, cnt, arch) ((void)(arch), celt_float2int16_c(in, out, cnt))
652
#endif
653
654
int opus_limit2_checkwithin1_c(float *samples, int cnt);
655
656
#ifndef OVERRIDE_LIMIT2_CHECKWITHIN1
657
0
#define opus_limit2_checkwithin1(samples, cnt, arch) ((void)(arch), opus_limit2_checkwithin1_c(samples, cnt))
658
#endif
659
660
#endif /* DISABLE_FLOAT_API */
661
662
#endif /* MATHOPS_H */