Rate This Document
Findability
Accuracy
Completeness
Readability

Fetch_add

Atomic addition

  • x86 platform
    static inline uint64
    pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_)
    {
            uint64 res;
            __asm__ __volatile__(
                    "       lock                            \n"
                    "       xaddq   %0,%1           \n"
    :               "=q"(res), "=m"(ptr->value)
    :               "0" (add_), "m"(ptr->value)
    :               "memory", "cc");
            return res;
    }
  • AArch64 platform
    static inline uint64
    pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_)
    {
            return __sync_fetch_and_add(&ptr->value, add_);
    }