1
1

* Typo: change __volatile to __volatile__. Some compilers

(e.g., gcc) are indifferent about this, while others are more
   particular (e.g., Sun Studio 12).
 * Typo: `asms.s` to `asm.s`
 * Eliminate "foo is multiply-defined" linker errors on
   Solaris by making the declarations in `opal/sys/atomic.h` agree
   with their corresponding definitions (use `static inline` in *both*
   places).

This commit was SVN r16807.
Этот коммит содержится в:
Ethan Mallove 2007-11-30 17:59:12 +00:00
родитель beaf38ef42
Коммит b7c885247a
5 изменённых файлов: 21 добавлений и 16 удалений

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

@ -9,6 +9,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -82,7 +83,7 @@ static inline int opal_atomic_cmpset_32( volatile int32_t *addr,
int32_t oldval, int32_t newval)
{
unsigned char ret;
__asm__ __volatile (
__asm__ __volatile__ (
SMPLOCK "cmpxchgl %1,%2 \n\t"
"sete %0 \n\t"
: "=qm" (ret)
@ -103,7 +104,7 @@ static inline int opal_atomic_cmpset_64( volatile int64_t *addr,
int64_t oldval, int64_t newval)
{
unsigned char ret;
__asm__ __volatile (
__asm__ __volatile__ (
SMPLOCK "cmpxchgq %1,%2 \n\t"
"sete %0 \n\t"
: "=qm" (ret)

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

@ -9,6 +9,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -179,7 +180,7 @@ typedef struct opal_atomic_lock_t opal_atomic_lock_t;
* generally grinding the memory controller's performance. Use only
* if you need *both* read and write barriers.
*/
void opal_atomic_mb(void);
static inline void opal_atomic_mb(void);
/**
* Read memory barrier
@ -190,7 +191,7 @@ void opal_atomic_mb(void);
* next read. Nothing is said about the ordering of writes when using
* \c opal_atomic_rmb().
*/
void opal_atomic_rmb(void);
static inline void opal_atomic_rmb(void);
/**
* Write memory barrier.
@ -201,7 +202,7 @@ void opal_atomic_rmb(void);
* next write. Nothing is said about the ordering of reads when using
* \c opal_atomic_wmb().
*/
void opal_atomic_wmb(void);
static inline void opal_atomic_wmb(void);
#endif /* defined(DOXYGEN) || OPAL_HAVE_ATOMIC_MEM_BARRIER */
@ -293,11 +294,11 @@ void opal_atomic_unlock(opal_atomic_lock_t *lock);
#define OPAL_HAVE_ATOMIC_CMPSET_32 0
#endif
#if defined(DOXYGEN) || OPAL_HAVE_ATOMIC_CMPSET_32
int opal_atomic_cmpset_32(volatile int32_t *addr, int32_t oldval,
static inline int opal_atomic_cmpset_32(volatile int32_t *addr, int32_t oldval,
int32_t newval);
int opal_atomic_cmpset_acq_32(volatile int32_t *addr, int32_t oldval,
static inline int opal_atomic_cmpset_acq_32(volatile int32_t *addr, int32_t oldval,
int32_t newval);
int opal_atomic_cmpset_rel_32(volatile int32_t *addr, int32_t oldval,
static inline int opal_atomic_cmpset_rel_32(volatile int32_t *addr, int32_t oldval,
int32_t newval);
#endif
@ -306,11 +307,11 @@ int opal_atomic_cmpset_rel_32(volatile int32_t *addr, int32_t oldval,
#define OPAL_HAVE_ATOMIC_CMPSET_64 0
#endif
#if defined(DOXYGEN) || OPAL_HAVE_ATOMIC_CMPSET_64
int opal_atomic_cmpset_64(volatile int64_t *addr, int64_t oldval,
static inline int opal_atomic_cmpset_64(volatile int64_t *addr, int64_t oldval,
int64_t newval);
int opal_atomic_cmpset_acq_64(volatile int64_t *addr, int64_t oldval,
static inline int opal_atomic_cmpset_acq_64(volatile int64_t *addr, int64_t oldval,
int64_t newval);
int opal_atomic_cmpset_rel_64(volatile int64_t *addr, int64_t oldval,
static inline int opal_atomic_cmpset_rel_64(volatile int64_t *addr, int64_t oldval,
int64_t newval);
#endif

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

@ -9,6 +9,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -87,7 +88,7 @@ static inline int opal_atomic_cmpset_32(volatile int32_t *addr,
int32_t newval)
{
unsigned char ret;
__asm__ __volatile (
__asm__ __volatile__ (
SMPLOCK "cmpxchgl %1,%2 \n\t"
"sete %0 \n\t"
: "=qm" (ret)

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

@ -10,6 +10,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@ -34,4 +35,4 @@ cat > $CFILE<<EOF
#include "timer.h"
EOF
gcc -O1 -I. -S $CFILE -o asms.s
gcc -O1 -I. -S $CFILE -o asm.s

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

@ -9,6 +9,7 @@
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserverd.
* $COPYRIGHT$
*
* Additional copyrights may follow
@ -91,7 +92,7 @@ static inline int opal_atomic_cmpset_32( volatile int32_t *addr,
int32_t ret = newval;
__asm__ __volatile("casa [%1] " ASI_P ", %2, %0"
__asm__ __volatile__("casa [%1] " ASI_P ", %2, %0"
: "+r" (ret)
: "r" (addr), "r" (oldval));
return (ret == oldval);
@ -132,7 +133,7 @@ static inline int opal_atomic_cmpset_64( volatile int64_t *addr,
*/
int64_t ret = newval;
__asm__ __volatile("casxa [%1] " ASI_P ", %2, %0"
__asm__ __volatile__("casxa [%1] " ASI_P ", %2, %0"
: "+r" (ret)
: "r" (addr), "r" (oldval));
return (ret == oldval);
@ -153,7 +154,7 @@ static inline int opal_atomic_cmpset_64( volatile int64_t *addr,
*/
long long ret = newval;
__asm__ __volatile(
__asm__ __volatile__(
"ldx %0, %%g1 \n\t" /* g1 = ret */
"ldx %2, %%g2 \n\t" /* g2 = oldval */
"casxa [%1] " ASI_P ", %%g2, %%g1 \n\t"