1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-29 19:30:36 +02:00

WIN32: use GCC builtin ffs to replace missing function

FFS is missing on MINGW.

* libguile/lightening/lightening/x86-cpu.c
  [__GNUC__ && _WIN32](USE_BUILTIN_FFS): new macro
  (__ffs): wrapper function
  (ffsw): use __ffs;
This commit is contained in:
Michael Gran 2023-06-20 15:10:20 -07:00
parent 2177f3f6c5
commit faa6b8cf82

View file

@ -1012,14 +1012,30 @@ mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
}
}
#if defined(__GNUC__) && defined(_WIN32)
/* ffs may be missing on WIN32 but is always available as GCC
builtin. */
#define USE_BUILTIN_FFS
#endif
static int
__ffs(int i)
{
#ifdef USE_BUILTIN_FFS
return __builtin_ffs(i);
#else
return ffs(i);
#endif
}
static int
ffsw(jit_word_t i)
{
if (sizeof(int) == sizeof(i))
return ffs(i);
int bit = ffs((int)i);
return __ffs(i);
int bit = __ffs((int)i);
if (bit == 0) {
bit = ffs((int)((uint64_t)i >> 32));
bit = __ffs((int)((uint64_t)i >> 32));
if (bit)
bit += 32;
}