Path: blob/main/contrib/jemalloc/include/msvc_compat/strings.h
39604 views
#ifndef strings_h1#define strings_h23/* MSVC doesn't define ffs/ffsl. This dummy strings.h header is provided4* for both */5#ifdef _MSC_VER6# include <intrin.h>7# pragma intrinsic(_BitScanForward)8static __forceinline int ffsl(long x) {9unsigned long i;1011if (_BitScanForward(&i, x)) {12return i + 1;13}14return 0;15}1617static __forceinline int ffs(int x) {18return ffsl(x);19}2021# ifdef _M_X6422# pragma intrinsic(_BitScanForward64)23# endif2425static __forceinline int ffsll(unsigned __int64 x) {26unsigned long i;27#ifdef _M_X6428if (_BitScanForward64(&i, x)) {29return i + 1;30}31return 0;32#else33// Fallback for 32-bit build where 64-bit version not available34// assuming little endian35union {36unsigned __int64 ll;37unsigned long l[2];38} s;3940s.ll = x;4142if (_BitScanForward(&i, s.l[0])) {43return i + 1;44} else if(_BitScanForward(&i, s.l[1])) {45return i + 33;46}47return 0;48#endif49}5051#else52# define ffsll(x) __builtin_ffsll(x)53# define ffsl(x) __builtin_ffsl(x)54# define ffs(x) __builtin_ffs(x)55#endif5657#endif /* strings_h */585960