fixed-point: overflow debugging now works again.
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Fri, 29 Feb 2008 05:07:40 +0000 (16:07 +1100)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Fri, 29 Feb 2008 05:07:40 +0000 (16:07 +1100)
libcelt/_kiss_fft_guts.h
libcelt/fixed_debug.h
libcelt/kiss_fftr.c

index 9cdff54..3baa90e 100644 (file)
@@ -61,12 +61,15 @@ struct kiss_fft_state{
 #define TRIG_UPSCALE 65536
 #define TWID_MAX 2147483647
 #endif
 #define TRIG_UPSCALE 65536
 #define TWID_MAX 2147483647
 #endif
+#define EXT32(a) (a)
+
 #else /* DOUBLE_PRECISION */
 
 # define FRACBITS 15
 # define SAMPPROD celt_int32_t 
 #define SAMP_MAX 32767
 #define TRIG_UPSCALE 1
 #else /* DOUBLE_PRECISION */
 
 # define FRACBITS 15
 # define SAMPPROD celt_int32_t 
 #define SAMP_MAX 32767
 #define TRIG_UPSCALE 1
+#define EXT32(a) EXTEND32(a)
 
 #endif /* !DOUBLE_PRECISION */
 
 
 #endif /* !DOUBLE_PRECISION */
 
index 84c3502..66c0510 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Jean-Marc Valin */
+/* Copyright (C) 2003-2008 Jean-Marc Valin */
 /**
    @file fixed_debug.h
    @brief Fixed-point operations with debugging
 /**
    @file fixed_debug.h
    @brief Fixed-point operations with debugging
@@ -171,6 +171,8 @@ static inline int SHL32(long long a, int shift)
 #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 
 #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
 
+#define ROUND(x,a) (EXTRACT16(PSHR32((x),(a))))
+
 //#define SHR(a,shift) ((a) >> (shift))
 //#define SHL(a,shift) ((a) << (shift))
 
 //#define SHR(a,shift) ((a) >> (shift))
 //#define SHL(a,shift) ((a) << (shift))
 
index 7e2280f..833699f 100644 (file)
@@ -109,11 +109,11 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_scalar
 
    for ( k=1;k <= ncfft/2 ; ++k )
    {
 
    for ( k=1;k <= ncfft/2 ; ++k )
    {
-      f2k.r = SHR32(SUB32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1);
-      f2k.i = PSHR32(ADD32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1);
+      f2k.r = SHR32(SUB32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1);
+      f2k.i = PSHR32(ADD32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1);
       
       
-      f1k.r = SHR32(ADD32(EXTEND32(freqdata[2*k]), EXTEND32(freqdata[2*(ncfft-k)])),1);
-      f1k.i = SHR32(SUB32(EXTEND32(freqdata[2*k+1]), EXTEND32(freqdata[2*(ncfft-k)+1])),1);
+      f1k.r = SHR32(ADD32(EXT32(freqdata[2*k]), EXT32(freqdata[2*(ncfft-k)])),1);
+      f1k.i = SHR32(SUB32(EXT32(freqdata[2*k+1]), EXT32(freqdata[2*(ncfft-k)+1])),1);
       
       C_MULC( tw , f2k , st->super_twiddles[k]);
       
       
       C_MULC( tw , f2k , st->super_twiddles[k]);