qemu-devel
[Top][All Lists]
Advanced

[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~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]