From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:59922) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RlNuw-0000zl-GY for qemu-devel@nongnu.org; Thu, 12 Jan 2012 11:54:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RlNuq-0005On-0B for qemu-devel@nongnu.org; Thu, 12 Jan 2012 11:54:22 -0500 Received: from mail-gx0-f173.google.com ([209.85.161.173]:65431) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RlNup-0005Ob-U5 for qemu-devel@nongnu.org; Thu, 12 Jan 2012 11:54:15 -0500 Received: by ggnk1 with SMTP id k1so1340918ggn.4 for ; Thu, 12 Jan 2012 08:54:15 -0800 (PST) Message-ID: <4F0F1033.20304@codemonkey.ws> Date: Thu, 12 Jan 2012 10:54:11 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1325597577-29385-1-git-send-email-avi@redhat.com> In-Reply-To: <1325597577-29385-1-git-send-email-avi@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] vga: optimize ppm_save() divisions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: qemu-devel@nongnu.org On 01/03/2012 07:32 AM, Avi Kivity wrote: > ppm_save() spends upwards of 50% of its time doing divisions. Replace them > with shifts. > > Signed-off-by: Avi Kivity Applied. Thanks. Regards, Anthony Liguori > --- > hw/vga.c | 10 ++++------ > 1 files changed, 4 insertions(+), 6 deletions(-) > > diff --git a/hw/vga.c b/hw/vga.c > index ca79aa1..a228cde 100644 > --- a/hw/vga.c > +++ b/hw/vga.c > @@ -2370,12 +2370,10 @@ int ppm_save(const char *filename, struct DisplaySurface *ds) > v = *(uint32_t *)d; > else > v = (uint32_t) (*(uint16_t *)d); > - r = ((v>> ds->pf.rshift)& ds->pf.rmax) * 256 / > - (ds->pf.rmax + 1); > - g = ((v>> ds->pf.gshift)& ds->pf.gmax) * 256 / > - (ds->pf.gmax + 1); > - b = ((v>> ds->pf.bshift)& ds->pf.bmax) * 256 / > - (ds->pf.bmax + 1); > + /* Limited to 8 or fewer bits per channel: */ > + r = ((v>> ds->pf.rshift)& ds->pf.rmax)<< (8 - ds->pf.rbits); > + g = ((v>> ds->pf.gshift)& ds->pf.gmax)<< (8 - ds->pf.gbits); > + b = ((v>> ds->pf.bshift)& ds->pf.bmax)<< (8 - ds->pf.bbits); > *pbuf++ = r; > *pbuf++ = g; > *pbuf++ = b;