On Wed, Mar 30, 2005 at 04:07:39AM +0200, M?ns Rullg?rd wrote: | Michael Tokarev <[EMAIL PROTECTED]> writes: | | > M?ns Rullg?rd wrote: | >> "Ronald S. Bultje" <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/