<br><br><div class="gmail_quote">On Sat, Mar 7, 2009 at 11:20 AM, Charles R Harris <span dir="ltr">&lt;<a href="mailto:charlesr.harris@gmail.com">charlesr.harris@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br><div class="gmail_quote"><div class="im">On Sat, Mar 7, 2009 at 11:02 AM, David Cournapeau <span dir="ltr">&lt;<a href="mailto:cournape@gmail.com" target="_blank">cournape@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

On Sun, Mar 8, 2009 at 2:52 AM, Charles R Harris<br>
<div>&lt;<a href="mailto:charlesr.harris@gmail.com" target="_blank">charlesr.harris@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Mar 7, 2009 at 11:41 AM, David Cournapeau &lt;<a href="mailto:cournape@gmail.com" target="_blank">cournape@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Sat, Mar 7, 2009 at 6:01 AM, Charles R Harris<br>
&gt;&gt; &lt;<a href="mailto:charlesr.harris@gmail.com" target="_blank">charlesr.harris@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi David,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Currently,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; bint.i = __STR2INTCST(&quot;ABCD&quot;);<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; It is probably more portable to just initialize the union<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;     union {<br>
&gt;&gt; &gt;         char c[4];<br>
&gt;&gt; &gt;         npy_uint32 i;<br>
&gt;&gt; &gt;     } bint = {&#39;A&#39;,&#39;B&#39;,&#39;C&#39;,&#39;D&#39;};<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt; Yes, but look at the second version. It does essentially what your macro<br>
&gt; does, only uses 1,2,3,4 instead of &#39;A&#39;,&#39;B&#39;,&#39;C&#39;,&#39;D&#39;.<br>
<br>
</div>Yes, it is the same thing, so I don&#39;t see the point of changing :)</blockquote></div><div><br>The macro is ugly, unneeded, and obfuscating. Why construct a number from characters and shifts when you can just *write it down*?<br>

</div><div class="im"><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">The<br>
const union does not help, BTW.</blockquote></div><div><br>True, it is initialized here:<br><br>        movl    $16909060, -8(%ebp)<br><br>contrast that with the macro.<br></div></div></blockquote><div><br>And here is the optimized code (-O2) to print out the byte values in order:<br>
<br><span style="font-family: courier new,monospace;">main:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        leal    4(%esp), %ecx</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        andl    $-16, %esp</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        pushl   -4(%ecx)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pushl   %ebp</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        movl    %esp, %ebp</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        pushl   %ecx</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        subl    $20, %esp</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        movl    $4, 4(%esp)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        movl    $.LC0, (%esp)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        call    printf</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        movl    $3, 4(%esp)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        movl    $.LC0, (%esp)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    printf</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        movl    $2, 4(%esp)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        movl    $.LC0, (%esp)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        call    printf</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        movl    $1, 4(%esp)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        movl    $.LC0, (%esp)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        call    printf</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        ...</span><br style="font-family: courier new,monospace;"><br> Note the compiler *knows* the byte values, the union never appears.<br><br>Chuck<br></div><br></div>
<br>