MACROS ARE EVIL. Fixed EXTEND32() and EXTRACT16() and used them properly to
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 10 May 2006 13:47:15 +0000 (13:47 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 10 May 2006 13:47:15 +0000 (13:47 +0000)
fix a 16-bit bug in pseudofloat.h

git-svn-id: http://svn.xiph.org/trunk/speex@11395 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/fixed_generic.h
libspeex/pseudofloat.h

index d6a5d78..8f429b7 100644 (file)
@@ -40,8 +40,8 @@
 
 #define NEG16(x) (-(x))
 #define NEG32(x) (-(x))
-#define EXTRACT16(x) ((spx_word16_t)x)
-#define EXTEND32(x) ((spx_word32_t)x)
+#define EXTRACT16(x) ((spx_word16_t)(x))
+#define EXTEND32(x) ((spx_word32_t)(x))
 #define SHR16(a,shift) ((a) >> (shift))
 #define SHL16(a,shift) ((a) << (shift))
 #define SHR32(a,shift) ((a) >> (shift))
index 715f49c..5250af8 100644 (file)
@@ -208,7 +208,7 @@ static inline spx_float_t FLOAT_SHL(spx_float_t a, int b)
 static inline spx_int16_t FLOAT_EXTRACT16(spx_float_t a)
 {
    if (a.e<0)
-      return (a.m+(1<<(-a.e-1)))>>-a.e;
+      return EXTRACT16((EXTEND32(a.m)+(1<<(-a.e-1)))>>-a.e);
    else
       return a.m<<a.e;
 }