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