Added MAX16 operator
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Tue, 7 Jun 2005 06:56:21 +0000 (06:56 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Tue, 7 Jun 2005 06:56:21 +0000 (06:56 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@9384 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/arch.h
libspeex/fixed_bfin.h
libspeex/fixed_generic.h
libspeex/ltp.c

index c1967bb..dec605f 100644 (file)
@@ -38,6 +38,9 @@
 #include "speex/speex_types.h"
 
 #define ABS(x) ((x) < 0 ? (-(x)) : (x))
+#define ABS16(x) ((x) < 0 ? (-(x)) : (x))
+#define MAX16(a,b) ((a) > (b) ? (a) : (b))
+#define ABS32(x) ((x) < 0 ? (-(x)) : (x))
 
 #ifdef FIXED_POINT
 
index 89d3af0..adee43c 100644 (file)
@@ -59,6 +59,20 @@ static inline spx_word16_t DIV32_16(spx_word32_t a, spx_word16_t b)
    return res;
 }
 
+#undef MAX16
+static inline spx_word16_t MAX16(spx_word16_t a, spx_word16_t b)
+{
+   spx_word32_t res;
+   __asm__  (
+         "%1 = %1.L (X);\n\t"
+         "%2 = %2.L (X);\n\t"
+         "%0 = MAX(%1,%2);"
+   : "=d" (res)
+   : "%d" (a), "d" (b)
+   );
+   return res;
+}
+
 #undef MULT16_32_Q15
 static inline spx_word32_t MULT16_32_Q15(spx_word16_t a, spx_word32_t b)
 {
index 6a40ad4..8546e4a 100644 (file)
 #define PSHR(a,shift) (SHR((a)+(1<<((shift)-1)),shift))
 #define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 
-static inline spx_word32_t slow_saturate(spx_word32_t x, spx_word16_t a)
-{
-  return (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)));
-}
 
 #define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b)))
 #define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b))
index 5afd15d..4f24b2a 100644 (file)
@@ -490,11 +490,7 @@ int plc_tuning
          g[2]=ADD16((spx_word16_t)ptr[2],32);
 
          /* We favor "safe" pitch values to handle packet loss better */
-         gain_sum = g[1];
-         if (g[0]>0)
-            gain_sum += g[0];
-         if (g[2]>0)
-            gain_sum += g[2];
+         gain_sum = ADD16(ADD16(g[1],MAX16(g[0], 0)),MAX16(g[2], 0));
          if (gain_sum > 64)
          {
             gain_sum = SUB16(gain_sum, 64);