qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH v2 10/21] cpuid: simplify CPUID flag search function


From: Andre Przywara
Subject: [Qemu-devel] [PATCH v2 10/21] cpuid: simplify CPUID flag search function
Date: Fri, 18 Sep 2009 13:48:03 +0200

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 8243f44..9fdaa6c 100644
--- a/target-i386/cpuid.c
+++ b/target-i386/cpuid.c
@@ -84,29 +84,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);
     }
-- 
1.6.1.3






reply via email to

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