atomic64_add_and_return指令

函数功能

对两个长整数进行加操作,并将结果作为返回值返回。

处理步骤

需要重新实现汇编代码段。

在x86架构下:

static inline long atomic64_add_and_return(long i, atomic64_t *v)
{
    long i = i;
    asm_volatile_(
        "lock ; "
        "xaddq %0, %1;"
        : "=r"(i)
        : "m"(v->counter), "0"(i));
    return i + __i;
}
static inline void prefetch(void *x)
{
    asm volatile("prefetcht0 %0" ::"m"(*(unsigned long *)x));
}

在鲲鹏平台下,使用GCC内置函数实现:

static __inline__ long atomic64_add_and_return(long i, atomic64_t *v) 
{ 
    return __sync_add_and_fetch(&((v)->counter), i); 
}