PostgreSQL Source Code git master
Loading...
Searching...
No Matches
generic.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define pg_read_barrier_impl   pg_memory_barrier_impl
 
#define pg_write_barrier_impl   pg_memory_barrier_impl
 
#define PG_HAVE_ATOMIC_READ_U32
 
#define PG_HAVE_ATOMIC_WRITE_U32
 
#define PG_HAVE_ATOMIC_UNLOCKED_WRITE_U32
 
#define PG_HAVE_ATOMIC_INIT_U32
 
#define PG_HAVE_ATOMIC_WRITE_U64
 
#define PG_HAVE_ATOMIC_UNLOCKED_WRITE_U64
 
#define PG_HAVE_ATOMIC_READ_U64
 
#define PG_HAVE_ATOMIC_INIT_U64
 

Functions

static uint32 pg_atomic_read_u32_impl (volatile pg_atomic_uint32 *ptr)
 
static void pg_atomic_write_u32_impl (volatile pg_atomic_uint32 *ptr, uint32 val)
 
static void pg_atomic_unlocked_write_u32_impl (volatile pg_atomic_uint32 *ptr, uint32 val)
 
static void pg_atomic_init_u32_impl (volatile pg_atomic_uint32 *ptr, uint32 val_)
 
static void pg_atomic_write_u64_impl (volatile pg_atomic_uint64 *ptr, uint64 val)
 
static void pg_atomic_unlocked_write_u64_impl (volatile pg_atomic_uint64 *ptr, uint64 val)
 
static uint64 pg_atomic_read_u64_impl (volatile pg_atomic_uint64 *ptr)
 
static void pg_atomic_init_u64_impl (volatile pg_atomic_uint64 *ptr, uint64 val_)
 

Macro Definition Documentation

◆ PG_HAVE_ATOMIC_INIT_U32

#define PG_HAVE_ATOMIC_INIT_U32

Definition at line 143 of file generic.h.

◆ PG_HAVE_ATOMIC_INIT_U64

#define PG_HAVE_ATOMIC_INIT_U64

Definition at line 340 of file generic.h.

◆ PG_HAVE_ATOMIC_READ_U32

#define PG_HAVE_ATOMIC_READ_U32

Definition at line 38 of file generic.h.

◆ PG_HAVE_ATOMIC_READ_U64

#define PG_HAVE_ATOMIC_READ_U64

Definition at line 304 of file generic.h.

◆ PG_HAVE_ATOMIC_UNLOCKED_WRITE_U32

#define PG_HAVE_ATOMIC_UNLOCKED_WRITE_U32

Definition at line 56 of file generic.h.

◆ PG_HAVE_ATOMIC_UNLOCKED_WRITE_U64

#define PG_HAVE_ATOMIC_UNLOCKED_WRITE_U64

Definition at line 295 of file generic.h.

◆ PG_HAVE_ATOMIC_WRITE_U32

#define PG_HAVE_ATOMIC_WRITE_U32

Definition at line 47 of file generic.h.

◆ PG_HAVE_ATOMIC_WRITE_U64

#define PG_HAVE_ATOMIC_WRITE_U64

Definition at line 262 of file generic.h.

◆ pg_read_barrier_impl

#define pg_read_barrier_impl   pg_memory_barrier_impl

Definition at line 25 of file generic.h.

◆ pg_write_barrier_impl

#define pg_write_barrier_impl   pg_memory_barrier_impl

Definition at line 28 of file generic.h.

Function Documentation

◆ pg_atomic_init_u32_impl()

static void pg_atomic_init_u32_impl ( volatile pg_atomic_uint32 ptr,
uint32  val_ 
)
inlinestatic

Definition at line 145 of file generic.h.

146{
147 ptr->value = val_;
148}
static int fb(int x)

References fb(), and pg_atomic_uint32::value.

Referenced by pg_atomic_init_u32().

◆ pg_atomic_init_u64_impl()

static void pg_atomic_init_u64_impl ( volatile pg_atomic_uint64 ptr,
uint64  val_ 
)
inlinestatic

Definition at line 342 of file generic.h.

343{
344 ptr->value = val_;
345}

References fb(), and pg_atomic_uint64::value.

◆ pg_atomic_read_u32_impl()

static uint32 pg_atomic_read_u32_impl ( volatile pg_atomic_uint32 ptr)
inlinestatic

Definition at line 40 of file generic.h.

41{
42 return ptr->value;
43}

References pg_atomic_uint32::value.

Referenced by pg_atomic_read_u32().

◆ pg_atomic_read_u64_impl()

static uint64 pg_atomic_read_u64_impl ( volatile pg_atomic_uint64 ptr)
inlinestatic

Definition at line 322 of file generic.h.

323{
324 uint64 old = 0;
325
326 /*
327 * 64-bit reads aren't atomic on all platforms. In the generic
328 * implementation implement them as a compare/exchange with 0. That'll
329 * fail or succeed, but always return the old value. Possibly might store
330 * a 0, but only if the previous value also was a 0 - i.e. harmless.
331 */
333
334 return old;
335}
bool pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval)
Definition atomics.c:34
uint64_t uint64
Definition c.h:684

References fb(), and pg_atomic_compare_exchange_u64_impl().

Referenced by pg_atomic_monotonic_advance_u64(), and pg_atomic_read_u64().

◆ pg_atomic_unlocked_write_u32_impl()

static void pg_atomic_unlocked_write_u32_impl ( volatile pg_atomic_uint32 ptr,
uint32  val 
)
inlinestatic

Definition at line 58 of file generic.h.

59{
60 ptr->value = val;
61}
long val
Definition informix.c:689

References val, and pg_atomic_uint32::value.

Referenced by pg_atomic_unlocked_write_u32().

◆ pg_atomic_unlocked_write_u64_impl()

static void pg_atomic_unlocked_write_u64_impl ( volatile pg_atomic_uint64 ptr,
uint64  val 
)
inlinestatic

Definition at line 297 of file generic.h.

298{
299 ptr->value = val;
300}

References val, and pg_atomic_uint64::value.

Referenced by pg_atomic_unlocked_write_u64().

◆ pg_atomic_write_u32_impl()

static void pg_atomic_write_u32_impl ( volatile pg_atomic_uint32 ptr,
uint32  val 
)
inlinestatic

Definition at line 49 of file generic.h.

50{
51 ptr->value = val;
52}

References val, and pg_atomic_uint32::value.

Referenced by pg_atomic_write_u32().

◆ pg_atomic_write_u64_impl()

static void pg_atomic_write_u64_impl ( volatile pg_atomic_uint64 ptr,
uint64  val 
)
inlinestatic

Definition at line 282 of file generic.h.

283{
284 /*
285 * 64 bit writes aren't safe on all platforms. In the generic
286 * implementation implement them as an atomic exchange.
287 */
289}

References fb(), and val.

Referenced by pg_atomic_write_u64().