From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.active-venture.com ([67.228.131.205]:49774 "EHLO mail.active-venture.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751322Ab2IRQYW (ORCPT ); Tue, 18 Sep 2012 12:24:22 -0400 Date: Tue, 18 Sep 2012 09:24:28 -0700 From: Guenter Roeck To: Mauro Carvalho Chehab Cc: Jean Delvare , LMML , Andrew Morton , Mauro Carvalho Chehab Subject: Re: [PATCH] [media] mceusb: Optimize DIV_ROUND_CLOSEST call Message-ID: <20120918162428.GA6391@roeck-us.net> References: <20120901205357.1a75d8a1@endymion.delvare> <50589821.6000108@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <50589821.6000108@redhat.com> Sender: linux-media-owner@vger.kernel.org List-ID: On Tue, Sep 18, 2012 at 12:49:53PM -0300, Mauro Carvalho Chehab wrote: > Em 01-09-2012 15:53, Jean Delvare escreveu: > > DIV_ROUND_CLOSEST is faster if the compiler knows it will only be > > dealing with unsigned dividends. > > > > Signed-off-by: Jean Delvare > > Cc: Andrew Morton > > Cc: Guenter Roeck > > Cc: Mauro Carvalho Chehab > > --- > > drivers/media/rc/mceusb.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > --- linux-3.6-rc3.orig/drivers/media/rc/mceusb.c 2012-08-04 21:49:27.000000000 +0200 > > +++ linux-3.6-rc3/drivers/media/rc/mceusb.c 2012-09-01 18:53:32.053042123 +0200 > > @@ -627,7 +627,7 @@ static void mceusb_dev_printdata(struct > > break; > > case MCE_RSP_EQIRCFS: > > period = DIV_ROUND_CLOSEST( > > - (1 << data1 * 2) * (data2 + 1), 10); > > + (1U << data1 * 2) * (data2 + 1), 10); > > if (!period) > > break; > > carrier = (1000 * 1000) / period; > > > > > > Hmm... this generates the following warning with "W=1": > > drivers/media/rc/mceusb.c:629:4: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits] > drivers/media/rc/mceusb.c:629:4: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits] > > Perhaps it makes sense to use an optimized version for unsigned, or to > change the macro to take the data types into account. > DIV_ROUND_CLOSEST tests "((typeof(x))-1) >= 0" on purpose, so the compiler can optimize the signed part of the macro away if the variable type is unsigned. The test was borrowed from C99 code. Would be great if someone has an idea how to tell the compiler not to create a warning for this test. Guenter