[BACK]Return to dsp.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / sndiod

Diff for /src/usr.bin/sndiod/dsp.h between version 1.9 and 1.10

version 1.9, 2021/01/12 15:46:53 version 1.10, 2021/05/25 08:06:12
Line 34 
Line 34 
 #if ADATA_BITS == 16  #if ADATA_BITS == 16
   
 #define ADATA_MUL(x,y)          (((int)(x) * (int)(y)) >> (ADATA_BITS - 1))  #define ADATA_MUL(x,y)          (((int)(x) * (int)(y)) >> (ADATA_BITS - 1))
 #define ADATA_MULDIV(x,y,z)     ((int)(x) * (int)(y) / (int)(z))  
   
 typedef short adata_t;  typedef short adata_t;
   
 #elif ADATA_BITS == 24  #elif ADATA_BITS == 24
   
 #if defined(__i386__) && defined(__GNUC__)  
   
 static inline int  
 fp24_mul(int x, int a)  
 {  
         int res;  
   
         asm volatile (  
                 "imull  %2\n\t"  
                 "shrdl $23, %%edx, %%eax\n\t"  
                 : "=a" (res)  
                 : "a" (x), "r" (a)  
                 : "%edx"  
                 );  
         return res;  
 }  
   
 static inline int  
 fp24_muldiv(int x, int a, int b)  
 {  
         int res;  
   
         asm volatile (  
                 "imull %2\n\t"  
                 "idivl %3\n\t"  
                 : "=a" (res)  
                 : "a" (x), "d" (a), "r" (b)  
                 );  
         return res;  
 }  
   
 #define ADATA_MUL(x,y)          fp24_mul(x, y)  
 #define ADATA_MULDIV(x,y,z)     fp24_muldiv(x, y, z);  
   
 #elif defined(__amd64__) || defined(__sparc64__)  
   
 #define ADATA_MUL(x,y)          \  #define ADATA_MUL(x,y)          \
         ((int)(((long long)(x) * (long long)(y)) >> (ADATA_BITS - 1)))          ((int)(((long long)(x) * (long long)(y)) >> (ADATA_BITS - 1)))
 #define ADATA_MULDIV(x,y,z)     \  
         ((int)((long long)(x) * (long long)(y) / (long long)(z)))  
   
 #else  
 #error "no 24-bit code for this architecture"  
 #endif  
   
 typedef int adata_t;  typedef int adata_t;
   

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10