1
1

Correct the atomics on x86 and x86_64. Thanks to Iain for the catch,

to Eugene, Jeff, and Briand for the help. This patch is supposed to
fix several outstanding issues, notably the one on tickets #2043.

This commit was SVN r22324.
Этот коммит содержится в:
George Bosilca 2009-12-16 22:34:56 +00:00
родитель a418a7dc43
Коммит 7ba371cd92
2 изменённых файлов: 12 добавлений и 12 удалений

Просмотреть файл

@ -84,11 +84,11 @@ static inline int opal_atomic_cmpset_32( volatile int32_t *addr,
{
unsigned char ret;
__asm__ __volatile__ (
SMPLOCK "cmpxchgl %1,%2 \n\t"
SMPLOCK "cmpxchgl %3,%4 \n\t"
"sete %0 \n\t"
: "=qm" (ret)
: "q"(newval), "m"(*addr), "a"(oldval)
: "memory");
: "=qm" (ret), "=a" (oldval), "=m" (*addr)
: "q"(newval), "m"(*addr), "1"(oldval)
);
return (int)ret;
}
@ -105,11 +105,11 @@ static inline int opal_atomic_cmpset_64( volatile int64_t *addr,
{
unsigned char ret;
__asm__ __volatile__ (
SMPLOCK "cmpxchgq %1,%2 \n\t"
SMPLOCK "cmpxchgq %3,%4 \n\t"
"sete %0 \n\t"
: "=qm" (ret)
: "q"(newval), "m"(*((volatile long*)addr)), "a"(oldval)
: "memory");
: "=qm" (ret), "=a" (oldval), "=m" (*((volatile long*)addr))
: "q"(newval), "m"(*((volatile long*)addr)), "1"(oldval)
);
return (int)ret;
}

Просмотреть файл

@ -91,11 +91,11 @@ static inline int opal_atomic_cmpset_32(volatile int32_t *addr,
{
unsigned char ret;
__asm__ __volatile__ (
SMPLOCK "cmpxchgl %1,%2 \n\t"
SMPLOCK "cmpxchgl %3,%4 \n\t"
"sete %0 \n\t"
: "=qm" (ret)
: "q"(newval), "m"(*((volatile long*)addr)), "a"(oldval)
: "memory");
: "=qm" (ret), "=a" (oldval), "=m" (*addr)
: "q"(newval), "m"(*((volatile long*)addr)), "1"(oldval)
);
return (int)ret;
}