Originally committed as revision 21873 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
@@ -49,27 +49,6 @@ | |||||
# endif | # endif | ||||
#endif | #endif | ||||
#if ARCH_X86 | |||||
// avoid +32 for shift optimization (gcc should do that ...) | |||||
static inline int32_t NEG_SSR32( int32_t a, int8_t s){ | |||||
__asm__ ("sarl %1, %0\n\t" | |||||
: "+r" (a) | |||||
: "ic" ((uint8_t)(-s)) | |||||
); | |||||
return a; | |||||
} | |||||
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ | |||||
__asm__ ("shrl %1, %0\n\t" | |||||
: "+r" (a) | |||||
: "ic" ((uint8_t)(-s)) | |||||
); | |||||
return a; | |||||
} | |||||
#else | |||||
# define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s))) | |||||
# define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s))) | |||||
#endif | |||||
/* bit input */ | /* bit input */ | ||||
/* buffer, buffer_end and size_in_bits must be present and used by every reader */ | /* buffer, buffer_end and size_in_bits must be present and used by every reader */ | ||||
typedef struct GetBitContext { | typedef struct GetBitContext { | ||||
@@ -131,5 +131,13 @@ if ((y) < (x)) {\ | |||||
} | } | ||||
#endif | #endif | ||||
#ifndef NEG_SSR32 | |||||
# define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s))) | |||||
#endif | |||||
#ifndef NEG_USR32 | |||||
# define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s))) | |||||
#endif | |||||
#endif /* AVCODEC_MATHOPS_H */ | #endif /* AVCODEC_MATHOPS_H */ | ||||
@@ -78,4 +78,23 @@ __asm__ volatile(\ | |||||
); | ); | ||||
#endif | #endif | ||||
// avoid +32 for shift optimization (gcc should do that ...) | |||||
#define NEG_SSR32 NEG_SSR32 | |||||
static inline int32_t NEG_SSR32( int32_t a, int8_t s){ | |||||
__asm__ ("sarl %1, %0\n\t" | |||||
: "+r" (a) | |||||
: "ic" ((uint8_t)(-s)) | |||||
); | |||||
return a; | |||||
} | |||||
#define NEG_USR32 NEG_USR32 | |||||
static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ | |||||
__asm__ ("shrl %1, %0\n\t" | |||||
: "+r" (a) | |||||
: "ic" ((uint8_t)(-s)) | |||||
); | |||||
return a; | |||||
} | |||||
#endif /* AVCODEC_X86_MATHOPS_H */ | #endif /* AVCODEC_X86_MATHOPS_H */ |