[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] win32: Add missing function ffs
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH] win32: Add missing function ffs |
Date: |
Fri, 11 Jun 2010 14:35:13 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100430 Fedora/3.0.4-3.fc13 Thunderbird/3.0.4 |
On 06/11/2010 01:57 PM, Stefan Weil wrote:
> mingw32 does not include function ffs.
>
> Commit c6d29ad6e24533cc3762e1d654275607e1d03058 added a
> declaration for ffs, but an implementation was missing.
>
> For compilations with optimization, the compiler creates
> inline code, so the implementation is not always needed.
>
> Without optimization, linking fails without this patch.
>
> Signed-off-by: Stefan Weil <address@hidden>
> ---
> osdep.c | 15 +++++++++++++++
> 1 files changed, 15 insertions(+), 0 deletions(-)
>
> diff --git a/osdep.c b/osdep.c
> index abbc8a2..50b38e3 100644
> --- a/osdep.c
> +++ b/osdep.c
> @@ -167,6 +167,21 @@ int qemu_create_pidfile(const char *filename)
>
> #ifdef _WIN32
>
> +/* mingw32 needs ffs for compilations without optimization. */
> +int ffs(int i)
> +{
> + int position = 0;
> + if (i != 0) {
> + for (position = 1; i != 0; position++) {
> + if (i & 1) {
> + break;
> + }
> + i >>= 1;
> + }
> + }
> + return position;
> +}
This is confusingly written. You've already tested for zero.
for (pos = 1; (i & 1) == 0; pos++) {
i >>= 1;
}
That said, is there any reason not to just do
int ffs(int i)
{
return __builtin_ffs(i);
}
?
r~