Ooops, this one is my fault.

Recent versions of GCC (and llvm-gcc / clang) support portable atomic intrinsics. I've checked these on x86 and x86-64, and they generate the same code that my inline asm uses. If you add this after the Windows bit (it will probably work on Windows too, but I'm not completely sure) then we will gain fast atomic operations on all platforms (e.g. SPARC / ARM) that support them when compiling with a recent compiler.

David

#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
/* Use the GCC atomic operations with recent GCC versions */

typedef int32_t volatile *gsatomic_t;
#define GSATOMICREAD(X) (*(X))
#define GSAtomicIncrement(X)    __sync_fetch_and_add(X, 1)
#define GSAtomicDecrement(X)    __sync_fetch_and_sub(X, 1)


On 13 Apr 2009, at 10:19, Eric Wasylishen wrote:

Hi,
I ran in to a small problem when compiling GNUstep (svn trunk) on
Debian testing for PowerPC. GCC is "gcc (Debian 4.3.2-1.1) 4.3.2"

Compiling file NSObject.m ...
/tmp/ccF8zgwE.s: Assembler messages:
/tmp/ccF8zgwE.s:730: Error: symbol `modified' is already defined
make[3]: *** [obj/NSObject.m.o] Error 1

The PPC atomic increment and decrement functions starting at line 254
of NSObject.m both use the label 'modified:' in their asm code. I
found that by changing the labels in one of the functions to something
else ("modified2"), this error disappeared.

I'm not sure if GCC is correct in reporting this as an error or not,
but it's easy to fix.
-Eric


_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
http://lists.gnu.org/mailman/listinfo/gnustep-dev



_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
http://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to