#include <isl_config.h> #if !HAVE_DECL_FFS && !HAVE_DECL___BUILTIN_FFS && HAVE_DECL__BITSCANFORWARD #include <intrin.h> /* Implementation of ffs in terms of _BitScanForward. * * ffs returns the position of the least significant bit set in i, * with the least significant bit is position 1, or 0 if not bits are set. * * _BitScanForward returns 1 if mask is non-zero and sets index * to the position of the least significant bit set in i, * with the least significant bit is position 0. */ int isl_ffs(int i) { unsigned char non_zero; unsigned long index, mask = i; non_zero = _BitScanForward(&index, mask); return non_zero ? 1 + index : 0; } #endif