59 #if (defined _WIN32 && !defined _WIN32_WCE) || (defined __WINS__ && defined _SYMBIAN) || defined(_OPENWAVE_SIMULATOR) || defined(WINCE_EMULATOR) 61 #pragma warning( disable : 4035 ) 63 static __inline
int MULSHIFT32(
int x,
int y)
72 static __inline
int FASTABS(
int x)
76 sign = x >> (
sizeof(int) * 8 - 1);
83 static __inline
int CLZ(
int x)
88 return (
sizeof(
int) * 8);
91 while (!(x & 0x80000000)) {
105 typedef long long Word64;
107 typedef __int64 Word64;
110 static __inline Word64 MADD64(Word64 sum,
int x,
int y)
112 unsigned int sumLo = ((
unsigned int *)&sum)[0];
113 int sumHi = ((
int *)&sum)[1];
125 static __inline Word64 SHL64(Word64 x,
int n)
127 unsigned int xLo = ((
unsigned int *)&x)[0];
128 int xHi = ((
int *)&x)[1];
129 unsigned char nb = (
unsigned char)n;
155 static __inline Word64 SAR64(Word64 x,
int n)
157 unsigned int xLo = ((
unsigned int *)&x)[0];
158 int xHi = ((
int *)&x)[1];
159 unsigned char nb = (
unsigned char)n;
187 #elif (defined _WIN32) && (defined _WIN32_WCE) 190 #define MULSHIFT32 xmp3_MULSHIFT32 191 int MULSHIFT32(
int x,
int y);
193 static __inline
int FASTABS(
int x)
197 sign = x >> (
sizeof(int) * 8 - 1);
204 static __inline
int CLZ(
int x)
209 return (
sizeof(
int) * 8);
212 while (!(x & 0x80000000)) {
220 #elif defined ARM_ADS 222 static __inline
int MULSHIFT32(
int x,
int y)
242 static __inline
int FASTABS(
int x)
254 static __inline
int CLZ(
int x)
259 return (
sizeof(
int) * 8);
262 while (!(x & 0x80000000)) {
270 #elif defined(__GNUC__) && defined(ARM) 272 static __inline
int MULSHIFT32(
int x,
int y)
285 __asm__
volatile (
"smull %0,%1,%2,%3" :
"=&r" (zlow),
"=r" (y) :
"r" (x),
"1" (y)) ;
290 static __inline
int FASTABS(
int x)
295 "eor %0,%2,%2, asr #31;" 296 "sub %0,%1,%2, asr #31;" 304 static __inline
int CLZ(
int x)
309 return (
sizeof(
int) * 8);
312 while (!(x & 0x80000000)) {
320 #elif defined(__GNUC__) && defined(__AVR32_UC__) 322 typedef signed long long int Word64;
325 __attribute__((__always_inline__))
static __inline
int MULSHIFT32(
int x,
int y)
327 signed long long int s64Tmp;
328 __asm__ __volatile__(
"muls.d %0, %1, %2" 330 :
"r" (x),
"r" (y) );
331 return( s64Tmp >> 32 );
334 __attribute__((__always_inline__))
static __inline
int FASTABS(
int x)
337 __asm__ __volatile__(
"abs %0" 345 __attribute__((__always_inline__))
static __inline
int CLZ(
int x)
348 __asm__ __volatile__(
"clz %0,%1" 359 __attribute__((__always_inline__))
static __inline Word64 MADD64(Word64 sum,
int x,
int y)
361 __asm__ __volatile__(
"macs.d %0, %1, %2" 363 :
"r" (x),
"r" (y) );
368 __attribute__((__always_inline__))
static __inline Word64 SAR64(Word64 x,
int n)
370 unsigned int xLo = (
unsigned int) x;
371 int xHi = (int) (x >> 32);
375 __asm__ __volatile__(
"lsl %2, %0, %3\n\t" 379 :
"+&r" (xHi),
"+r" (xLo),
"=&r" (tmp)
380 :
"r" (nComp),
"r" (n) );
381 x = xLo | ((Word64)xHi << 32);
385 #elif defined(__CORTEX_M) && __CORTEX_M == 0x04U 389 typedef signed long long int Word64;
392 static __inline
int MULSHIFT32(
int x,
int y)
405 __asm__
volatile (
"smull %0,%1,%2,%3" :
"=&r" (zlow),
"=r" (y) :
"r" (x),
"1" (y)) ;
410 static __inline
int FASTABS(
int x)
414 sign = x >> (
sizeof(int) * 8 - 1);
421 static __inline
int CLZ(
int x)
435 static __inline Word64 MADD64(Word64 sum64,
int x,
int y)
440 __asm__
volatile (
"smlal %0,%1,%2,%3" :
"+&r" (u.r.lo32),
"+&r" (u.r.hi32) :
"r" (x),
"r" (y) :
"cc");
446 __attribute__((__always_inline__))
static __inline Word64 SAR64(Word64 x,
int n)
448 unsigned int xLo = (
unsigned int) x;
449 int xHi = (int) (x >> 32);
453 __asm__ __volatile__(
"lsl %2, %0, %3\n\t" 457 :
"+&r" (xHi),
"+r" (xLo),
"=&r" (tmp)
458 :
"r" (nComp),
"r" (n) );
459 x = xLo | ((Word64)xHi << 32);
468 #error Unsupported platform in assembly.h