[Bug libgcj/49193] New: __sync_xxxx builtins aren't used in sysdep/*/locks.h
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri May 27 14:43:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49193
Summary: __sync_xxxx builtins aren't used in sysdep/*/locks.h
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libgcj
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: hjl.tools@gmail.com
sysdep/x86-64/locks.h has
inline static bool
compare_and_swap(volatile obj_addr_t *addr,
obj_addr_t old,
obj_addr_t new_val)
{
char result;
#ifdef __x86_64__
__asm__ __volatile__("lock; cmpxchgq %2, %0; setz %1"
: "=m"(*(addr)), "=q"(result)
: "r" (new_val), "a"(old), "m"(*addr)
: "memory");
#else
__asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1"
: "=m"(*addr), "=q"(result)
: "r" (new_val), "a"(old), "m"(*addr)
: "memory");
#endif
return (bool) result;
}
We can replace them with __sync_xxxx builtins.
More information about the Gcc-bugs
mailing list