salute to you two guys!!<br><br><div><span class="gmail_quote">2006/12/21, Franklin Kingma &lt;<a href="mailto:franklin@fourdigits.nl">franklin@fourdigits.nl</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>On Dec 21, 2006, at 9:59 AM, Igor Sysoev wrote:<br><br>&gt; On Thu, 21 Dec 2006, Igor Sysoev wrote:<br>&gt;<br>&gt;&gt;&gt; (gdb) disassemble ___compare_and_swap32<br>&gt;&gt;&gt; Dump of assembler code for function ___compare_and_swap32:
<br>&gt;&gt;&gt; 0xffff8080 &lt;___compare_and_swap32+0&gt;:&nbsp;&nbsp; lwarx&nbsp;&nbsp; r7,0,r5<br>&gt;&gt;&gt; 0xffff8084 &lt;___compare_and_swap32+4&gt;:&nbsp;&nbsp; cmplw&nbsp;&nbsp; r7,r3<br>&gt;&gt;&gt; 0xffff8088 &lt;___compare_and_swap32+8&gt;:&nbsp;&nbsp; bne-&nbsp;&nbsp;&nbsp;&nbsp;0xffff809c
<br>&gt;&gt;&gt; &lt;___compare_and_swap32+28&gt;<br>&gt;&gt;&gt; 0xffff808c &lt;___compare_and_swap32+12&gt;:&nbsp;&nbsp;stwcx.&nbsp;&nbsp;r4,0,r5<br>&gt;&gt;&gt; 0xffff8090 &lt;___compare_and_swap32+16&gt;:&nbsp;&nbsp;bne-&nbsp;&nbsp;&nbsp;&nbsp;0xffff8080<br>&gt;&gt;&gt; &lt;___compare_and_swap32&gt;
<br>&gt;&gt;&gt; 0xffff8094 &lt;___compare_and_swap32+20&gt;:&nbsp;&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,1<br>&gt;&gt;&gt; 0xffff8098 &lt;___compare_and_swap32+24&gt;:&nbsp;&nbsp;blr<br>&gt;&gt;&gt; 0xffff809c &lt;___compare_and_swap32+28&gt;:&nbsp;&nbsp;li&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,0<br>&gt;&gt;&gt; 0xffff80a0 &lt;___compare_and_swap32+32&gt;:&nbsp;&nbsp;blr
<br>&gt;&gt;&gt; 0xffff80a4 &lt;___compare_and_swap32+36&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; 0xffff80a8 &lt;___compare_and_swap32+40&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; 0xffff80ac &lt;___compare_and_swap32+44&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; 0xffff80b0 &lt;___compare_and_swap32+48&gt;:&nbsp;&nbsp;.long 0x0
<br>&gt;&gt;&gt; 0xffff80b4 &lt;___compare_and_swap32+52&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; 0xffff80b8 &lt;___compare_and_swap32+56&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; 0xffff80bc &lt;___compare_and_swap32+60&gt;:&nbsp;&nbsp;.long 0x0<br>&gt;&gt;&gt; End of assembler dump.
<br>&gt;&gt;<br>&gt;&gt; OK, then I will do atomic operation using MacOSX builtin<br>&gt;&gt; OSAtomicCompareAndSwap32Barrier()<br>&gt;<br>&gt; Just to be sure that OSAtomicCompareAndSwap32() does not cycle forever<br>&gt; (as it may if lwarx/stwcx pair does not work) on your Mac compile
<br>&gt; this program:<br>&gt;<br>&gt; -----------<br>&gt; #include &lt;libkern/OSAtomic.h&gt;<br>&gt;<br>&gt; static&nbsp;&nbsp;int32_t&nbsp;&nbsp;test;<br>&gt;<br>&gt; int main()<br>&gt; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;rc;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; rc = OSAtomicCompareAndSwap32(0, 1, &amp;test);
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;rc: %d, test: %d\n&quot;, rc, test);<br>&gt; }<br>&gt; -----------<br>&gt;<br>&gt; using<br>&gt;<br>&gt; cc -o q q.c<br>&gt;<br>&gt; and run, it should show:<br>&gt;<br>&gt; rc: 1, test: 1
<br><br>pluks:~ franklin$ cc -o q q.c<br>q.c: In function &#39;main&#39;:<br>q.c:11: warning: incompatible implicit declaration of built-in<br>function &#39;printf&#39;<br>pluks:~ franklin$ ./q<br>rc: 1, test: 1<br><br><br>
</blockquote></div><br>