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
|
static int
|
||||||
ffsw(jit_word_t i)
|
ffsw(jit_word_t i)
|
||||||
{
|
{
|
||||||
if (sizeof(int) == sizeof(i))
|
if (sizeof(int) == sizeof(i))
|
||||||
return ffs(i);
|
return __ffs(i);
|
||||||
int bit = ffs((int)i);
|
int bit = __ffs((int)i);
|
||||||
if (bit == 0) {
|
if (bit == 0) {
|
||||||
bit = ffs((int)((uint64_t)i >> 32));
|
bit = __ffs((int)((uint64_t)i >> 32));
|
||||||
if (bit)
|
if (bit)
|
||||||
bit += 32;
|
bit += 32;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue