qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 09/12] cpuid: simplify CPUID flag search functio


From: Amit Shah
Subject: Re: [Qemu-devel] [PATCH 09/12] cpuid: simplify CPUID flag search function
Date: Fri, 11 Sep 2009 13:25:00 +0530
User-agent: Mutt/1.5.19 (2009-01-05)

On (Fri) Sep 11 2009 [00:20:54], Andre Przywara wrote:
> avoid code duplication and handle the CPUID flag name search in a
> loop.
> 
> Signed-off-by: Andre Przywara <address@hidden>
> ---
>  target-i386/cpuid.c |   33 +++++++++++++--------------------
>  1 files changed, 13 insertions(+), 20 deletions(-)
> 
> diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
> index e62dc04..4be1449 100644
> --- a/target-i386/cpuid.c
> +++ b/target-i386/cpuid.c
> @@ -71,29 +71,22 @@ static void add_flagname_to_bitmaps(const char *flagname, 
> uint32_t *features,
>                                      uint32_t *ext2_features,
>                                      uint32_t *ext3_features)
>  {
> -    int i;
> +    int i, j;
>      int found = 0;
> +    const char ** feature_names[4] = {feature_name, ext_feature_name,
> +        ext2_feature_name, ext3_feature_name};
> +    uint32_t* feature_flags[4] = {features, ext_features,
> +        ext2_features, ext3_features};
>  
> -    for ( i = 0 ; i < 32 ; i++ )
> -        if (feature_name[i] && !strcmp (flagname, feature_name[i])) {
> -            *features |= 1 << i;
> -            found = 1;
> -        }
> -    for ( i = 0 ; i < 32 ; i++ )
> -        if (ext_feature_name[i] && !strcmp (flagname, ext_feature_name[i])) {
> -            *ext_features |= 1 << i;
> -            found = 1;
> -        }
> -    for ( i = 0 ; i < 32 ; i++ )
> -        if (ext2_feature_name[i] && !strcmp (flagname, 
> ext2_feature_name[i])) {
> -            *ext2_features |= 1 << i;
> -            found = 1;
> -        }
> -    for ( i = 0 ; i < 32 ; i++ )
> -        if (ext3_feature_name[i] && !strcmp (flagname, 
> ext3_feature_name[i])) {
> -            *ext3_features |= 1 << i;
> -            found = 1;
> +    for (j = 0; j < 4; j++) {
> +        for (i = 0; i < 32; i++) {
> +            if (feature_names[j][i] &&
> +                !strcmp(flagname, feature_names[j][i])) {
> +                *feature_flags[j] |= 1 << i;
> +                found = 1;
> +            }
>          }
> +    }
>      if (!found) {
>          fprintf(stderr, "CPU feature %s not found\n", flagname);
>      }

This just reports the entire string, right? Not just the feature as the
printf suggests.

                Amit




reply via email to

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