8 #if defined(USE_PTHREAD_MUTEXES) 14 #define _papi_hwd_lock(lck) \ 17 pthread_mutex_lock (&_papi_hwd_lock_data[lck]); \ 19 #define _papi_hwd_unlock(lck) \ 22 pthread_mutex_unlock(&_papi_hwd_lock_data[lck]); \ 30 #define MUTEX_CLOSED 1 32 #define _papi_hwd_lock(lck) \ 35 unsigned int res = 0; \ 37 __asm__ __volatile__ ("lock ; " "cmpxchg %1,%2" : "=a"(res) : "q"(MUTEX_CLOSED), "m"(_papi_hwd_lock_data[lck]), "0"(MUTEX_OPEN) : "memory"); \ 38 } while(res != (unsigned int)MUTEX_OPEN); \ 40 #define _papi_hwd_unlock(lck) \ 43 unsigned int res = 0; \ 44 __asm__ __volatile__ ("xchg %0,%1" : "=r"(res) : "m"(_papi_hwd_lock_data[lck]), "0"(MUTEX_OPEN) : "memory"); \
volatile unsigned int _papi_hwd_lock_data[PAPI_MAX_LOCK]