PostgreSQL Source Code git master
generic-msvc.h File Reference
#include <intrin.h>
Include dependency graph for generic-msvc.h:

Go to the source code of this file.

Data Structures

struct  pg_atomic_uint32
 

Macros

#define pg_compiler_barrier_impl()   _ReadWriteBarrier()
 
#define pg_memory_barrier_impl()   MemoryBarrier()
 
#define PG_HAVE_ATOMIC_U32_SUPPORT
 
#define PG_HAVE_ATOMIC_U64_SUPPORT
 
#define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32
 
#define PG_HAVE_ATOMIC_EXCHANGE_U32
 
#define PG_HAVE_ATOMIC_FETCH_ADD_U32
 
#define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64
 

Typedefs

typedef struct pg_atomic_uint32 pg_atomic_uint32
 

Functions

struct pg_attribute_aligned (8) pg_atomic_uint64
 
static bool pg_atomic_compare_exchange_u32_impl (volatile pg_atomic_uint32 *ptr, uint32 *expected, uint32 newval)
 
static uint32 pg_atomic_exchange_u32_impl (volatile pg_atomic_uint32 *ptr, uint32 newval)
 
static uint32 pg_atomic_fetch_add_u32_impl (volatile pg_atomic_uint32 *ptr, int32 add_)
 
static bool pg_atomic_compare_exchange_u64_impl (volatile pg_atomic_uint64 *ptr, uint64 *expected, uint64 newval)
 

Variables

 pg_atomic_uint64
 

Macro Definition Documentation

◆ pg_compiler_barrier_impl

#define pg_compiler_barrier_impl ( )    _ReadWriteBarrier()

Definition at line 27 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32

#define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32

Definition at line 46 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64

#define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64

Definition at line 81 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_EXCHANGE_U32

#define PG_HAVE_ATOMIC_EXCHANGE_U32

Definition at line 59 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_FETCH_ADD_U32

#define PG_HAVE_ATOMIC_FETCH_ADD_U32

Definition at line 66 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_U32_SUPPORT

#define PG_HAVE_ATOMIC_U32_SUPPORT

Definition at line 33 of file generic-msvc.h.

◆ PG_HAVE_ATOMIC_U64_SUPPORT

#define PG_HAVE_ATOMIC_U64_SUPPORT

Definition at line 39 of file generic-msvc.h.

◆ pg_memory_barrier_impl

#define pg_memory_barrier_impl ( )    MemoryBarrier()

Definition at line 30 of file generic-msvc.h.

Typedef Documentation

◆ pg_atomic_uint32

Function Documentation

◆ pg_atomic_compare_exchange_u32_impl()

static bool pg_atomic_compare_exchange_u32_impl ( volatile pg_atomic_uint32 ptr,
uint32 expected,
uint32  newval 
)
inlinestatic

Definition at line 48 of file generic-msvc.h.

50{
51 bool ret;
52 uint32 current;
53 current = InterlockedCompareExchange(&ptr->value, newval, *expected);
54 ret = current == *expected;
55 *expected = current;
56 return ret;
57}
uint32_t uint32
Definition: c.h:488
#define newval

References newval, and pg_atomic_uint32::value.

◆ pg_atomic_compare_exchange_u64_impl()

static bool pg_atomic_compare_exchange_u64_impl ( volatile pg_atomic_uint64 ptr,
uint64 expected,
uint64  newval 
)
inlinestatic

Definition at line 83 of file generic-msvc.h.

85{
86 bool ret;
87 uint64 current;
88 current = _InterlockedCompareExchange64(&ptr->value, newval, *expected);
89 ret = current == *expected;
90 *expected = current;
91 return ret;
92}
uint64_t uint64
Definition: c.h:489

References newval, and pg_atomic_uint64::value.

◆ pg_atomic_exchange_u32_impl()

static uint32 pg_atomic_exchange_u32_impl ( volatile pg_atomic_uint32 ptr,
uint32  newval 
)
inlinestatic

Definition at line 61 of file generic-msvc.h.

62{
63 return InterlockedExchange(&ptr->value, newval);
64}

References newval, and pg_atomic_uint32::value.

Referenced by pg_atomic_exchange_u32().

◆ pg_atomic_fetch_add_u32_impl()

static uint32 pg_atomic_fetch_add_u32_impl ( volatile pg_atomic_uint32 ptr,
int32  add_ 
)
inlinestatic

Definition at line 68 of file generic-msvc.h.

69{
70 return InterlockedExchangeAdd(&ptr->value, add_);
71}

References pg_atomic_uint32::value.

◆ pg_attribute_aligned()

struct pg_attribute_aligned ( )

Definition at line 1 of file generic-msvc.h.

41{
42 volatile uint64 value;
pg_atomic_uint64
Definition: generic-msvc.h:43
static struct @162 value

Variable Documentation

◆ pg_atomic_uint64

Definition at line 43 of file generic-msvc.h.