|
|
|
@ -35,21 +35,29 @@ |
|
|
|
|
* @{ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) |
|
|
|
|
|
|
|
|
|
#if HAVE_FAST_CLZ |
|
|
|
|
#if AV_GCC_VERSION_AT_LEAST(3,4) |
|
|
|
|
#ifndef ff_log2 |
|
|
|
|
# define ff_log2(x) (31 - __builtin_clz((x)|1)) |
|
|
|
|
# ifndef ff_log2_16bit |
|
|
|
|
# define ff_log2_16bit av_log2 |
|
|
|
|
# endif |
|
|
|
|
#endif /* ff_log2 */ |
|
|
|
|
|
|
|
|
|
#elif defined( __INTEL_COMPILER ) |
|
|
|
|
#ifndef ff_log2 |
|
|
|
|
# define ff_log2(x) (_bit_scan_reverse(x|1)) |
|
|
|
|
# ifndef ff_log2_16bit |
|
|
|
|
# define ff_log2_16bit av_log2 |
|
|
|
|
# endif |
|
|
|
|
#endif /* ff_log2 */ |
|
|
|
|
#endif |
|
|
|
|
#endif /* AV_GCC_VERSION_AT_LEAST(3,4) */ |
|
|
|
|
|
|
|
|
|
extern const uint8_t ff_log2_tab[256]; |
|
|
|
|
|
|
|
|
|
#ifndef ff_log2 |
|
|
|
|
#define ff_log2 ff_log2_c |
|
|
|
|
#if !defined( _MSC_VER ) |
|
|
|
|
static av_always_inline av_const int ff_log2_c(unsigned int v) |
|
|
|
|
{ |
|
|
|
|
int n = 0; |
|
|
|
@ -65,6 +73,15 @@ static av_always_inline av_const int ff_log2_c(unsigned int v) |
|
|
|
|
|
|
|
|
|
return n; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
static av_always_inline av_const int ff_log2_c(unsigned int v) |
|
|
|
|
{ |
|
|
|
|
unsigned long n; |
|
|
|
|
_BitScanReverse(&n, v|1); |
|
|
|
|
return n; |
|
|
|
|
} |
|
|
|
|
#define ff_log2_16bit av_log2 |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifndef ff_log2_16bit |
|
|
|
@ -94,14 +111,21 @@ static av_always_inline av_const int ff_log2_16bit_c(unsigned int v) |
|
|
|
|
* @{ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) |
|
|
|
|
#if HAVE_FAST_CLZ |
|
|
|
|
#if AV_GCC_VERSION_AT_LEAST(3,4) |
|
|
|
|
#ifndef ff_ctz |
|
|
|
|
#define ff_ctz(v) __builtin_ctz(v) |
|
|
|
|
#endif |
|
|
|
|
#elif defined( __INTEL_COMPILER ) |
|
|
|
|
#ifndef ff_ctz |
|
|
|
|
#define ff_ctz(v) _bit_scan_forward(v) |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifndef ff_ctz |
|
|
|
|
#define ff_ctz ff_ctz_c |
|
|
|
|
#if !defined( _MSC_VER ) |
|
|
|
|
static av_always_inline av_const int ff_ctz_c(int v) |
|
|
|
|
{ |
|
|
|
|
int c; |
|
|
|
@ -130,6 +154,14 @@ static av_always_inline av_const int ff_ctz_c(int v) |
|
|
|
|
|
|
|
|
|
return c; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
static av_always_inline av_const int ff_ctz_c( int v ) |
|
|
|
|
{ |
|
|
|
|
unsigned long c; |
|
|
|
|
_BitScanForward(&c, v); |
|
|
|
|
return c; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|