From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39702) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vlnbn-0002lE-2b for qemu-devel@nongnu.org; Wed, 27 Nov 2013 17:29:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vlnbh-0007hA-1h for qemu-devel@nongnu.org; Wed, 27 Nov 2013 17:29:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:29907) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vlnbg-0007gz-QE for qemu-devel@nongnu.org; Wed, 27 Nov 2013 17:29:17 -0500 From: Igor Mammedov Date: Wed, 27 Nov 2013 23:28:54 +0100 Message-Id: <1385591336-2755-15-git-send-email-imammedo@redhat.com> In-Reply-To: <1385591336-2755-1-git-send-email-imammedo@redhat.com> References: <1385591336-2755-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH 14/16] target-i386: use static properties to list CPUID features List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: afaerber@suse.de - it breaks compatibility with previous output format by printing all features in one string with "feat-" prefixes and all "_" replaced by "-" Signed-off-by: Igor Mammedov --- target-i386/cpu.c | 44 ++++++++++---------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 5c3455f..a9297cc 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1742,42 +1742,13 @@ out: return; } -/* generate a composite string into buf of all cpuid names in featureset - * selected by fbits. indicate truncation at bufsize in the event of overflow. - * if flags, suppress names undefined in featureset. - */ -static void listflags(char *buf, int bufsize, uint32_t fbits, - const char **featureset, uint32_t flags) -{ - const char **p = &featureset[31]; - char *q, *b, bit; - int nc; - - b = 4 <= bufsize ? buf + (bufsize -= 3) - 1 : NULL; - *buf = '\0'; - for (q = buf, bit = 31; fbits && bufsize; --p, fbits &= ~(1 << bit), --bit) - if (fbits & 1 << bit && (*p || !flags)) { - if (*p) - nc = snprintf(q, bufsize, "%s%s", q == buf ? "" : " ", *p); - else - nc = snprintf(q, bufsize, "%s[%d]", q == buf ? "" : " ", bit); - if (bufsize <= nc) { - if (b) { - memcpy(b, "...", sizeof("...")); - } - return; - } - q += nc; - bufsize -= nc; - } -} - /* generate CPU information. */ void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf) { x86_def_t *def; char buf[256]; int i; + const Property *prop; for (i = 0; i < ARRAY_SIZE(builtin_x86_defs); i++) { def = &builtin_x86_defs[i]; @@ -1791,12 +1762,17 @@ void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf) #endif (*cpu_fprintf)(f, "\nRecognized CPUID flags:\n"); - for (i = 0; i < ARRAY_SIZE(feature_word_info); i++) { - FeatureWordInfo *fw = &feature_word_info[i]; - listflags(buf, sizeof(buf), (uint32_t)~0, fw->feat_names, 1); - (*cpu_fprintf)(f, " %s\n", buf); + (*cpu_fprintf)(f, " "); + QDEV_PROP_FOREACH(prop, object_class_by_name(TYPE_X86_CPU)) { + const char *name = prop ? prop->name : ""; + + if (!g_str_has_prefix(name, "feat-")) { + continue; + } + (*cpu_fprintf)(f, " %s", name); } + (*cpu_fprintf)(f, "\n"); } CpuDefinitionInfoList *arch_query_cpu_definitions(Error **errp) -- 1.8.3.1