Re: [PATCH] embarassing typo

From: Phil Howard
Date: Tue Mar 29 2005 - 22:37:12 EST


On Wed, Mar 30, 2005 at 04:07:39AM +0200, M?ns Rullg?rd wrote:

| Michael Tokarev <mjt@xxxxxxxxxx> writes:
|
| > M?ns Rullg?rd wrote:
| >> "Ronald S. Bultje" <rbultje@xxxxxxxxxxxxxxxxxxx> writes:
| >>
| >>>--- linux-2.6.5/drivers/media/video/zr36050.c.old 16 Sep 2004 22:53:27 -0000 1.2
| >>>+++ linux-2.6.5/drivers/media/video/zr36050.c 29 Mar 2005 20:30:23 -0000
| >>>@@ -419,7 +419,7 @@
| >>> dri_data[2] = 0x00;
| >>> dri_data[3] = 0x04;
| >>> dri_data[4] = ptr->dri >> 8;
| >>>- dri_data[5] = ptr->dri * 0xff;
| >>>+ dri_data[5] = ptr->dri & 0xff;
| >> Hey, that's a nice obfuscation of a simple negation.
| >
| > It's not a negation. This statement always assigns zero to
| > dri_data[5] if dri_data is char[].
|
| Sure about that?
|
| __u16 i;
| char c;
| i = 1; c = i * 255; /* c = 255 = -1 */
| i = 2; c = i * 255; /* c = 510 & 0xff = 254 = -2 */
| ...
|
| Looks like negation to me.

Sure it's negation because 255 _is_ 256 - 1. Basic finite math.

( x * 256 ) mod 256 == 0
( ( x * 256 ) - ( x * 1 ) ) mod 256 == - ( x * 1 )
( x * ( 256 - 1 ) ) mod 256 == - ( x * 1 )
( x * 255 ) mod 256 == - ( x * 1 )
( x * 255 ) mod 256 == - x

Now what I am interested in is if gcc optimized it to a faster negation
or subtraction instruction.

--
-----------------------------------------------------------------------------
| Phil Howard KA9WGN | http://linuxhomepage.com/ http://ham.org/ |
| (first name) at ipal.net | http://phil.ipal.org/ http://ka9wgn.ham.org/ |
-----------------------------------------------------------------------------
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/