The encoder would crash in the PVQ search if fed NaNs via the float interface. This...
[opus.git] / libcelt / fixed_c5x.h
index 864aa56..7e2aa32 100644 (file)
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
    
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 #ifndef FIXED_C5X_H
 #define FIXED_C5X_H
 
+#include "dsplib.h"
+
+#undef IMUL32
+static inline long IMUL32(long i, long j)
+{
+   long ac0, ac1;
+   ac0 = _lmpy(i>>16,j);
+   ac1 = ac0 + _lmpy(i,j>>16);
+   return _lmpyu(i,j) + (ac1<<16);
+}
+
 #undef MAX16
 #define MAX16(a,b) _max(a,b)
 
 #define celt_maxabs16(x, len) MAX16(maxval((DATA *)x, len),-minval((DATA *)x, len))
 #define OVERRIDE_CELT_MAXABS16
 
+#define OVERRIDE_FIND_MAX16
+static inline int find_max16(celt_word16 *x, int len)
+{
+   DATA max_corr16 = -VERY_LARGE16;
+   DATA pitch16 = 0;
+   maxvec((DATA *)x, len, &max_corr16, &pitch16);
+   return pitch16;
+}
+
 #endif /* FIXED_C5X_H */