| Index: celt/arch.h
|
| diff --git a/celt/arch.h b/celt/arch.h
|
| index 3bbcd3663a24b3a08190dd9c7e9ae7d4495e4034..9f74ddd267179f769d0cdc7a3b97315973876688 100644
|
| --- a/celt/arch.h
|
| +++ b/celt/arch.h
|
| @@ -69,11 +69,8 @@ static OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line)
|
|
|
| #define IMUL32(a,b) ((a)*(b))
|
|
|
| -#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */
|
| -#define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */
|
| #define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 16-bit value. */
|
| #define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */
|
| -#define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */
|
| #define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 32-bit value. */
|
| #define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */
|
| #define IMIN(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum int value. */
|
| @@ -108,6 +105,13 @@ typedef opus_val32 celt_ener;
|
| #define SCALEIN(a) (a)
|
| #define SCALEOUT(a) (a)
|
|
|
| +#define ABS16(x) ((x) < 0 ? (-(x)) : (x))
|
| +#define ABS32(x) ((x) < 0 ? (-(x)) : (x))
|
| +
|
| +static OPUS_INLINE opus_int16 SAT16(opus_int32 x) {
|
| + return x > 32767 ? 32767 : x < -32768 ? -32768 : (opus_int16)x;
|
| +}
|
| +
|
| #ifdef FIXED_DEBUG
|
| #include "fixed_debug.h"
|
| #else
|
| @@ -137,6 +141,22 @@ typedef float celt_sig;
|
| typedef float celt_norm;
|
| typedef float celt_ener;
|
|
|
| +#ifdef FLOAT_APPROX
|
| +/* This code should reliably detect NaN/inf even when -ffast-math is used.
|
| + Assumes IEEE 754 format. */
|
| +static OPUS_INLINE int celt_isnan(float x)
|
| +{
|
| + union {float f; opus_uint32 i;} in;
|
| + in.f = x;
|
| + return ((in.i>>23)&0xFF)==0xFF && (in.i&0x007FFFFF)!=0;
|
| +}
|
| +#else
|
| +#ifdef __FAST_MATH__
|
| +#error Cannot build libopus with -ffast-math unless FLOAT_APPROX is defined. This could result in crashes on extreme (e.g. NaN) input
|
| +#endif
|
| +#define celt_isnan(x) ((x)!=(x))
|
| +#endif
|
| +
|
| #define Q15ONE 1.0f
|
|
|
| #define NORM_SCALING 1.f
|
| @@ -146,6 +166,10 @@ typedef float celt_ener;
|
| #define VERY_LARGE16 1e15f
|
| #define Q15_ONE ((opus_val16)1.f)
|
|
|
| +/* This appears to be the same speed as C99's fabsf() but it's more portable. */
|
| +#define ABS16(x) ((float)fabs(x))
|
| +#define ABS32(x) ((float)fabs(x))
|
| +
|
| #define QCONST16(x,bits) (x)
|
| #define QCONST32(x,bits) (x)
|
|
|
| @@ -184,6 +208,7 @@ typedef float celt_ener;
|
| #define MULT32_32_Q31(a,b) ((a)*(b))
|
|
|
| #define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
|
| +#define MAC16_32_Q16(c,a,b) ((c)+(a)*(b))
|
|
|
| #define MULT16_16_Q11_32(a,b) ((a)*(b))
|
| #define MULT16_16_Q11(a,b) ((a)*(b))
|
| @@ -201,6 +226,8 @@ typedef float celt_ener;
|
| #define SCALEIN(a) ((a)*CELT_SIG_SCALE)
|
| #define SCALEOUT(a) ((a)*(1/CELT_SIG_SCALE))
|
|
|
| +#define SIG2WORD16(x) (x)
|
| +
|
| #endif /* !FIXED_POINT */
|
|
|
| #ifndef GLOBAL_STACK_SIZE
|
|
|