Date: Wed, 20 Jun 2001 10:47:18 -0700 From: John Merryweather Cooper <jmcoopr@webmail.bmi.net> To: j mckitrick <jcm@FreeBSD-uk.eu.org> Cc: John Merryweather Cooper <jmcoopr@webmail.bmi.net>, freebsd-questions@FreeBSD.ORG Subject: Re: what does this define do? Message-ID: <20010620104718.C14541@johncoop> In-Reply-To: <20010620182353.A3958@dogma.freebsd-uk.eu.org>; from jcm@FreeBSD-uk.eu.org on Wed, Jun 20, 2001 at 10:23:53 -0700 References: <20010620173855.A2941@dogma.freebsd-uk.eu.org> <20010620094925.A14541@johncoop> <20010620182353.A3958@dogma.freebsd-uk.eu.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--SLDf9lqlvOQaIe6s Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit On 2001.06.20 10:23 j mckitrick wrote: > | This is, of course, highly compiler dependent. Looks like somebody is > | concerned with the efficiency of a MOV AX, 0 as opposed to an XOR AX, > AX. > > I wondered about that. But i agree, with no way of knowing what the > compiler is doing anyway, it doesn't make much sense. > > The way it is being used seems to invalid the potential benefit: > > static char var = FLAG1 | FLAG2 | n(FLAG3) > > because the compiler might drop the n() values anyway, since ORing with 0 > does nothing anyway. I can understand the n() values being in the code > as > placeholders, so you can see what lines are hi or low on the hardware > register, but if the compiler drops them anyway, optimizing the macro > rather > than just using 0 doesn't seem to buy any benefits. > > > Jonathon > -- > "It is through will alone I set my mind in motion...." > Because I qualify as among the curious, I ran a little test program to look at the assembly. A couple of observations: 1) the "not/and" macro breaks on doubles; 2) the "xor" macro also breaks on doubles; 3) the compiler doesn't know about fldz . . . :) See attached . . . jmc --SLDf9lqlvOQaIe6s Content-Type: text/x-c; charset=us-ascii Content-Disposition: attachment; filename="testzero.c" #include <stdlib.h> #define n1(flags) (~(flags) & (flags)) #define n2(flags) (0) #define n3(flags) ((flags) ^ (flags)) #define n4(flags) ((flags) - (flags)) #define INIT_IVAR (-1) #define INIT_DVAR (3.1425) int main (int argc, char **argv) { int ivar; double dvar; ivar = INIT_IVAR; ivar = n1(ivar); ivar = INIT_IVAR; ivar = n2(ivar); ivar = INIT_IVAR; ivar = n3(ivar); ivar = INIT_IVAR; ivar = n4(ivar); /* dvar = INIT_DVAR; causes compiler error */ /* dvar = n1(dvar); */ dvar = INIT_DVAR; dvar = n2(dvar); /* dvar = INIT_DVAR; causes compiler error */ /* dvar = n3(dvar); */ dvar = INIT_DVAR; dvar = n4(dvar); exit(0); } --SLDf9lqlvOQaIe6s Content-Type: application/octet-stream; charset=us-ascii Content-Disposition: attachment; filename="testzero.s" Content-Transfer-Encoding: base64 CnRlc3R6ZXJvLm86ICAgICBmaWxlIGZvcm1hdCBlbGYzMi1pMzg2CgpEaXNhc3NlbWJseSBv ZiBzZWN0aW9uIC50ZXh0OgoKMDAwMDAwMDAgPG1haW4+OgoJOzsgcHJvbG9ndWUKICAgMDoJ NTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlZWJwCiAgIDE6CTg5IGU1ICAgICAgICAg ICAgICAgIAltb3YgICAgJWVzcCwlZWJwCiAgIDM6CTgzIGVjIDE4ICAgICAgICAgICAgIAlz dWIgICAgJDB4MTgsJWVzcAoJOzsgbjEoZmxhZ3MpCiAgIDY6CWM3IDQ1IGZjIGZmIGZmIGZm IGZmIAltb3ZsICAgJDB4ZmZmZmZmZmYsMHhmZmZmZmZmYyglZWJwKQogICBkOgk4YiA0NSBm YyAgICAgICAgICAgICAJbW92ICAgIDB4ZmZmZmZmZmMoJWVicCksJWVheAogIDEwOglmNyBk MCAgICAgICAgICAgICAgICAJbm90ICAgICVlYXgKICAxMjoJMjEgNDUgZmMgICAgICAgICAg ICAgCWFuZCAgICAlZWF4LDB4ZmZmZmZmZmMoJWVicCkKCTs7IG4yKGZsYWdzKQogIDE1Oglj NyA0NSBmYyBmZiBmZiBmZiBmZiAJbW92bCAgICQweGZmZmZmZmZmLDB4ZmZmZmZmZmMoJWVi cCkKICAxYzoJYzcgNDUgZmMgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4ZmZmZmZmZmMo JWVicCkKCTs7IG4zKGZsYWdzKQogIDIzOgljNyA0NSBmYyBmZiBmZiBmZiBmZiAJbW92bCAg ICQweGZmZmZmZmZmLDB4ZmZmZmZmZmMoJWVicCkKICAyYToJOGIgNDUgZmMgICAgICAgICAg ICAgCW1vdiAgICAweGZmZmZmZmZjKCVlYnApLCVlYXgKICAyZDoJMzEgNDUgZmMgICAgICAg ICAgICAgCXhvciAgICAlZWF4LDB4ZmZmZmZmZmMoJWVicCkKCTs7IG40KGZsYWdzKQogIDMw OgljNyA0NSBmYyBmZiBmZiBmZiBmZiAJbW92bCAgICQweGZmZmZmZmZmLDB4ZmZmZmZmZmMo JWVicCkKICAzNzoJYzcgNDUgZmMgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4ZmZmZmZm ZmMoJWVicCkKCTs7IG4yKGZsYWdzKQogIDNlOglkZCAwNSAwMCAwMCAwMCAwMCAgICAJZmxk bCAgIDB4MAogIDQ0OglkZCA1ZCBmMCAgICAgICAgICAgICAJZnN0cGwgIDB4ZmZmZmZmZjAo JWVicCkKICA0NzoJYzcgNDUgZjAgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4ZmZmZmZm ZjAoJWVicCkKICA0ZToJYzcgNDUgZjQgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4ZmZm ZmZmZjQoJWVicCkKCTs7IG40KGZsYWdzKQogIDU1OglkZCAwNSAwMCAwMCAwMCAwMCAgICAJ ZmxkbCAgIDB4MAogIDViOglkZCA1ZCBmMCAgICAgICAgICAgICAJZnN0cGwgIDB4ZmZmZmZm ZjAoJWVicCkKICA1ZToJZGQgNDUgZjAgICAgICAgICAgICAgCWZsZGwgICAweGZmZmZmZmYw KCVlYnApCiAgNjE6CWRjIDY1IGYwICAgICAgICAgICAgIAlmc3VibCAgMHhmZmZmZmZmMCgl ZWJwKQogIDY0OglkZCA1ZCBmMCAgICAgICAgICAgICAJZnN0cGwgIDB4ZmZmZmZmZjAoJWVi cCkKCTs7IGVwaWxvZ3VlLCBleGl0KDApLCBldGMuCiAgNjc6CTgzIGM0IGY0ICAgICAgICAg ICAgIAlhZGQgICAgJDB4ZmZmZmZmZjQsJWVzcAogIDZhOgk2YSAwMCAgICAgICAgICAgICAg ICAJcHVzaCAgICQweDAKICA2YzoJZTggZmMgZmYgZmYgZmYgICAgICAgCWNhbGwgICA2ZCA8 bWFpbisweDZkPgogIDcxOgk4MyBjNCAxMCAgICAgICAgICAgICAJYWRkICAgICQweDEwLCVl c3AKICA3NDoJYzkgICAgICAgICAgICAgICAgICAgCWxlYXZlICAKICA3NToJYzMgICAgICAg ICAgICAgICAgICAgCXJldCAgICAK --SLDf9lqlvOQaIe6s-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010620104718.C14541>