Re: lib/include/vm_atomic.h - Atomic_FetchAndAddUnfenced() for GCC x86 broken?

2012-07-24 Thread John Wolfe
Dmitry, Thanks for removing the blinders on my eyes. Obviously I read through that many times and only saw the add. -- John :-[ Dmitry Torokhov wrote: John, Unlike regular "addl", "xaddl %eax, (%edx)" is "Exchange and Add" instruction, it exchanges old value in %(ebx) with data in %eax

Re: lib/include/vm_atomic.h - Atomic_FetchAndAddUnfenced() for GCC x86 broken?

2012-07-24 Thread Dmitry Torokhov
John, Unlike regular "addl", "xaddl %eax, (%edx)" is "Exchange and Add" instruction, it exchanges old value in %(ebx) with data in %eax and adds and stores the result in %(ebx), leaving %eax with old data that is later returned. Thanks, Dmitry On Tuesday, July 24, 2012 12:58:08 PM John Wolfe

lib/include/vm_atomic.h - Atomic_FetchAndAddUnfenced() for GCC x86 broken?

2012-07-24 Thread John Wolfe
I am working on a port of the open-vm-tools for UnixWare 7.1.4 compiled with the native C & C++ compiler. As I was coding AT&T/USLC enhanced ASM functions equivalent to the __asm__ definitions in vm_atomic.h, I noticed that the GCC x86 __asm__ statement for Atomic_FetchAnd AddUnfenced() is cle