ref: a8fb25f11cf23b2e50a5e2610fce6d417151efc7
parent: a09815925a1116847ba6948ca8aa25052816b26f
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Wed Mar 20 09:36:42 EDT 2019
Remove NaN checks
--- a/dnn/arch.h
+++ b/dnn/arch.h
@@ -157,22 +157,6 @@
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
--- a/dnn/vec.h
+++ b/dnn/vec.h
@@ -52,16 +52,6 @@
int i;
float y, dy;
float sign=1;
- /* Tests are reversed to catch NaNs */
- if (!(x<8))
- return 1;
- if (!(x>-8))
- return -1;
-#ifndef FIXED_POINT
- /* Another check in case of -ffast-math */
- if (celt_isnan(x))
- return 0;
-#endif
if (x<0)
{x=-x;
@@ -68,6 +58,7 @@
sign=-1;
}
i = (int)floor(.5f+25*x);
+ i = IMAX(0, IMIN(200, i));
x -= .04f*i;
y = tansig_table[i];
dy = 1-y*y;
--
⑨