__asm__ __volatile__ 编译报错
//function: set *pv to nv
//return: the initial value of *pv
/// 原子地把nv赋值给pv指向的整数,支持8位,16位,32位,84位操作
/// @param pv 待赋值的整数(目的操作数)
/// @param nv 向pv赋的整数
/// @return pv指向的赋值前的数值
__inline__ uint64_t atomic_exchange(volatile uint64_t * pv, const uint64_t nv)
{
register unsigned long __res;
__asm__ __volatile__ (
"1:"
LOCK_PREFIX "cmpxchgq %3,(%1);" \
"jne 1b":
"=a" (__res), "=q" (pv): "1" (pv), "q" (nv), "0" (*pv));
return __res;
}
上面是软件中的代码,编译报错,
./../src/common/atomic.h: In function ‘uint64_t tfs::common::atomic_exchange(volatile uint64_t*, uint64_t)’:
../../src/common/atomic.h:211: error: impossible register constraint in ‘asm’
make[2]: *** [client_request_server.o] Error 1
make[2]: Leaving directory `/home/liliming/lib/tfs/src/names
哪位大侠指点一下,是哪出了错
[解决办法]
这是啥环境?