lavu/intmath.h: Add msvc/icl ctzll optimisations.
Signed-off-by: Matt Oliver <protogonoi@gmail.com>
This commit is contained in:
parent
ce0a117ed4
commit
216cc1f6fe
@ -24,6 +24,41 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#if HAVE_FAST_CLZ
|
||||||
|
#if defined(__INTEL_COMPILER)
|
||||||
|
# define ff_ctzll ff_ctzll_x86
|
||||||
|
static av_always_inline av_const int ff_ctzll_x86(long long v)
|
||||||
|
{
|
||||||
|
# if ARCH_X86_64
|
||||||
|
uint64_t c;
|
||||||
|
__asm__("bsfq %1,%0" : "=r" (c) : "r" (v));
|
||||||
|
return c;
|
||||||
|
# else
|
||||||
|
return ((uint32_t)v == 0) ? _bit_scan_forward((uint32_t)(v >> 32)) + 32 : _bit_scan_forward((uint32_t)v);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
# define ff_ctzll ff_ctzll_x86
|
||||||
|
static av_always_inline av_const int ff_ctzll_x86(long long v)
|
||||||
|
{
|
||||||
|
unsigned long c;
|
||||||
|
# if ARCH_X86_64
|
||||||
|
_BitScanForward64(&c, v);
|
||||||
|
# else
|
||||||
|
if ((uint32_t)v == 0) {
|
||||||
|
_BitScanForward(&c, (uint32_t)(v >> 32));
|
||||||
|
c += 32;
|
||||||
|
} else {
|
||||||
|
_BitScanForward(&c, (uint32_t)v);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __INTEL_COMPILER */
|
||||||
|
|
||||||
|
#endif /* HAVE_FAST_CLZ */
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
/* Our generic version of av_popcount is faster than GCC's built-in on
|
/* Our generic version of av_popcount is faster than GCC's built-in on
|
||||||
|
Loading…
x
Reference in New Issue
Block a user