From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36088) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YJlMB-0003ny-4q for qemu-devel@nongnu.org; Fri, 06 Feb 2015 11:02:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YJlM7-0003CN-2W for qemu-devel@nongnu.org; Fri, 06 Feb 2015 11:02:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:48632) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YJlM6-0003BP-RW for qemu-devel@nongnu.org; Fri, 06 Feb 2015 11:02:07 -0500 Message-ID: <54D4E579.4040401@redhat.com> Date: Fri, 06 Feb 2015 17:02:01 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1422986938-13469-1-git-send-email-ehabkost@redhat.com> <1422986938-13469-2-git-send-email-ehabkost@redhat.com> In-Reply-To: <1422986938-13469-2-git-send-email-ehabkost@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] target-i386: Simplify listflags() function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eduardo Habkost , qemu-devel@nongnu.org Cc: Igor Mammedov , =?windows-1252?Q?Andreas_F=E4rber?= On 03/02/2015 19:08, Eduardo Habkost wrote: > listflags() had lots of unnecessary complexity. Instead of printing to a > buffer that will be immediately printed, simply call the printing > function directly. Also, remove the fbits and flags arguments that were > always set to the same value. Also, there's no need to list the flags in > reverse order. > > Signed-off-by: Eduardo Habkost > --- > target-i386/cpu.c | 42 ++++++++++++++---------------------------- > 1 file changed, 14 insertions(+), 28 deletions(-) > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 3a9b32e..39d2fda 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -1911,34 +1911,19 @@ static void x86_cpu_parse_featurestr(CPUState *cs, char *features, > } > } > > -/* 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. > +/* Print all cpuid feature names 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; > +static void listflags(FILE *f, fprintf_function print, const char **featureset) > +{ > + int bit; > + bool first = true; > + > + for (bit = 0; bit < 32; bit++) { > + if (featureset[bit]) { > + print(f, "%s%s", first ? "" : " ", featureset[bit]); > + first = false; > } > + } > } > > /* generate CPU information. */ > @@ -1963,8 +1948,9 @@ void x86_cpu_list(FILE *f, fprintf_function cpu_fprintf) > 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, " "); > + listflags(f, cpu_fprintf, fw->feat_names); > + (*cpu_fprintf)(f, "\n"); > } > } > > Reviewed-by: Paolo Bonzini