mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +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:
parent
2177f3f6c5
commit
faa6b8cf82
1 changed files with 19 additions and 3 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue