PAPI 7.1.0.0
Loading...
Searching...
No Matches
arm64.h File Reference
Include dependency graph for arm64.h:

Go to the source code of this file.

Macros

#define AO_USE_INTERLOCKED_INTRINSICS
 
#define AO_HAVE_compare_double_and_swap_double
 
#define AO_HAVE_compare_double_and_swap_double_acquire
 
#define AO_HAVE_compare_double_and_swap_double_release
 
#define AO_HAVE_compare_double_and_swap_double_full
 

Functions

AO_INLINE int AO_compare_double_and_swap_double (volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
 
AO_INLINE int AO_compare_double_and_swap_double_acquire (volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
 
AO_INLINE int AO_compare_double_and_swap_double_release (volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
 
AO_INLINE int AO_compare_double_and_swap_double_full (volatile AO_double_t *addr, AO_t old_val1, AO_t old_val2, AO_t new_val1, AO_t new_val2)
 

Macro Definition Documentation

◆ AO_HAVE_compare_double_and_swap_double

#define AO_HAVE_compare_double_and_swap_double

Definition at line 63 of file arm64.h.

◆ AO_HAVE_compare_double_and_swap_double_acquire

#define AO_HAVE_compare_double_and_swap_double_acquire

Definition at line 80 of file arm64.h.

◆ AO_HAVE_compare_double_and_swap_double_full

#define AO_HAVE_compare_double_and_swap_double_full

Definition at line 114 of file arm64.h.

◆ AO_HAVE_compare_double_and_swap_double_release

#define AO_HAVE_compare_double_and_swap_double_release

Definition at line 97 of file arm64.h.

◆ AO_USE_INTERLOCKED_INTRINSICS

#define AO_USE_INTERLOCKED_INTRINSICS

Definition at line 30 of file arm64.h.

Function Documentation

◆ AO_compare_double_and_swap_double()

AO_INLINE int AO_compare_double_and_swap_double ( volatile AO_double_t addr,
AO_t  old_val1,
AO_t  old_val2,
AO_t  new_val1,
AO_t  new_val2 
)

Definition at line 49 of file arm64.h.

52 {
53 __int64 comparandResult[2];
54
56 comparandResult[0] = old_val1; /* low */
57 comparandResult[1] = old_val2; /* high */
58 return _InterlockedCompareExchange128_nf((volatile __int64 *)addr,
59 new_val2 /* high */,
60 new_val1 /* low */,
61 comparandResult);
62 }
#define AO_ASSERT_ADDR_ALIGNED(addr)
Definition: atomic_ops.h:266

◆ AO_compare_double_and_swap_double_acquire()

AO_INLINE int AO_compare_double_and_swap_double_acquire ( volatile AO_double_t addr,
AO_t  old_val1,
AO_t  old_val2,
AO_t  new_val1,
AO_t  new_val2 
)

Definition at line 66 of file arm64.h.

69 {
70 __int64 comparandResult[2];
71
73 comparandResult[0] = old_val1; /* low */
74 comparandResult[1] = old_val2; /* high */
75 return _InterlockedCompareExchange128_acq((volatile __int64 *)addr,
76 new_val2 /* high */,
77 new_val1 /* low */,
78 comparandResult);
79 }

◆ AO_compare_double_and_swap_double_full()

AO_INLINE int AO_compare_double_and_swap_double_full ( volatile AO_double_t addr,
AO_t  old_val1,
AO_t  old_val2,
AO_t  new_val1,
AO_t  new_val2 
)

Definition at line 100 of file arm64.h.

103 {
104 __int64 comparandResult[2];
105
107 comparandResult[0] = old_val1; /* low */
108 comparandResult[1] = old_val2; /* high */
109 return _InterlockedCompareExchange128((volatile __int64 *)addr,
110 new_val2 /* high */,
111 new_val1 /* low */,
112 comparandResult);
113 }

◆ AO_compare_double_and_swap_double_release()

AO_INLINE int AO_compare_double_and_swap_double_release ( volatile AO_double_t addr,
AO_t  old_val1,
AO_t  old_val2,
AO_t  new_val1,
AO_t  new_val2 
)

Definition at line 83 of file arm64.h.

86 {
87 __int64 comparandResult[2];
88
90 comparandResult[0] = old_val1; /* low */
91 comparandResult[1] = old_val2; /* high */
92 return _InterlockedCompareExchange128_rel((volatile __int64 *)addr,
93 new_val2 /* high */,
94 new_val1 /* low */,
95 comparandResult);
96 }