Lines Matching refs:pu64

413  * @returns Current *pu64 value
414 * @param pu64 Pointer to the 64-bit variable to update.
415 * @param u64 The 64-bit value to assign to *pu64.
419 DECLASM(uint64_t) ASMAtomicXchgU64(volatile uint64_t *pu64, uint64_t u64);
421 DECLINLINE(uint64_t) ASMAtomicXchgU64(volatile uint64_t *pu64, uint64_t u64)
425 u64 = _InterlockedExchange64((__int64 *)pu64, u64);
429 : "=m" (*pu64),
432 "m" (*pu64));
436 mov rdx, [pu64]
454 "=m" (*pu64)
455 : "0" (*pu64),
458 "S" (pu64));
464 "=m" (*pu64)
465 : "0" (*pu64),
474 mov edi, pu64
803 * @param pu64 Pointer to the 64-bit variable to update.
804 * @param u64New The 64-bit value to assign to *pu64.
809 DECLASM(bool) ASMAtomicCmpXchgU64(volatile uint64_t *pu64, const uint64_t u64New, const uint64_t u64Old);
811 DECLINLINE(bool) ASMAtomicCmpXchgU64(volatile uint64_t *pu64, uint64_t u64New, uint64_t u64Old)
814 return (uint64_t)_InterlockedCompareExchange64((__int64 *)pu64, u64New, u64Old) == u64Old;
821 : "=m" (*pu64),
826 "m" (*pu64));
855 "+m" (*pu64)
857 "=m" (*pu64)
862 "S" (pu64));
870 "+m" (*pu64)
881 mov edi, [pu64]
903 * @param i64 The 64-bit value to assign to *pu64.
1100 * @param pu64 Pointer to the 64-bit variable to update.
1101 * @param u64New The 64-bit value to assign to *pu64.
1107 DECLASM(bool) ASMAtomicCmpXchgExU64(volatile uint64_t *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t *pu64Old);
1109 DECLINLINE(bool) ASMAtomicCmpXchgExU64(volatile uint64_t *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t *pu64Old)
1112 return (*pu64Old =_InterlockedCompareExchange64((__int64 *)pu64, u64New, u64Old)) == u64Old;
1119 : "=m" (*pu64),
1124 "m" (*pu64));
1146 * solution with an output value for *pu64 makes gcc run out of registers.
1155 "m" (*pu64),
1161 "=m" (*pu64)
1164 "m" (*pu64),
1175 mov edi, [pu64]
1202 * @param i64 The 64-bit value to assign to *pu64.
1561 * @returns Current *pu64 value
1562 * @param pu64 Pointer to the 64-bit variable to read.
1568 DECLASM(uint64_t) ASMAtomicReadU64(volatile uint64_t *pu64);
1570 DECLINLINE(uint64_t) ASMAtomicReadU64(volatile uint64_t *pu64)
1574 Assert(!((uintptr_t)pu64 & 7));
1579 : "m" (*pu64));
1584 mov rdx, [pu64]
1590 u64 = *pu64;
1595 Assert(!((uintptr_t)pu64 & 7));
1601 "+m" (*pu64)
1603 "=m" (*pu64)
1608 "S" (pu64));
1612 "+m" (*pu64)
1618 Assert(!((uintptr_t)pu64 & 7));
1623 mov edi, pu64
1640 * @returns Current *pu64 value
1641 * @param pu64 Pointer to the 64-bit variable to read.
1648 DECLASM(uint64_t) ASMAtomicUoReadU64(volatile uint64_t *pu64);
1650 DECLINLINE(uint64_t) ASMAtomicUoReadU64(volatile uint64_t *pu64)
1654 Assert(!((uintptr_t)pu64 & 7));
1656 Assert(!((uintptr_t)pu64 & 7));
1659 : "m" (*pu64));
1663 mov rdx, [pu64]
1668 u64 = *pu64;
1674 Assert(!((uintptr_t)pu64 & 7));
1683 "+m" (*pu64),
1685 "=m" (*pu64),
1689 "S" (pu64));
1693 "+m" (*pu64)
1699 Assert(!((uintptr_t)pu64 & 7));
1704 mov edi, pu64
2133 * @param pu64 Pointer to the 64-bit variable to write.
2134 * @param u64 The 64-bit value to assign to *pu64.
2136 DECLINLINE(void) ASMAtomicWriteU64(volatile uint64_t *pu64, uint64_t u64)
2138 ASMAtomicXchgU64(pu64, u64);
2145 * @param pu64 Pointer to the 64-bit variable to write.
2146 * @param u64 The 64-bit value to assign to *pu64.
2148 DECLINLINE(void) ASMAtomicUoWriteU64(volatile uint64_t *pu64, uint64_t u64)
2150 Assert(!((uintptr_t)pu64 & 7));
2152 *pu64 = u64;
2154 ASMAtomicXchgU64(pu64, u64);
2504 * @param pu64 Pointer to the value.
2508 DECLASM(uint64_t) ASMAtomicAddU64(uint64_t volatile *pu64, uint64_t u64);
2510 DECLINLINE(uint64_t) ASMAtomicAddU64(uint64_t volatile *pu64, uint64_t u64)
2513 u64 = _InterlockedExchangeAdd64((__int64 *)pu64, u64);
2519 "=m" (*pu64)
2521 "m" (*pu64)
2529 u64Old = ASMAtomicUoReadU64(pu64);
2531 if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old))
2621 * @param pu64 Pointer to the value.
2624 DECLINLINE(uint64_t) ASMAtomicSubU64(uint64_t volatile *pu64, uint64_t u64)
2626 return ASMAtomicAddU64(pu64, (uint64_t)-(int64_t)u64);
2739 * @param pu64 Pointer to the value to increment.
2742 DECLASM(uint64_t) ASMAtomicIncU64(uint64_t volatile *pu64);
2744 DECLINLINE(uint64_t) ASMAtomicIncU64(uint64_t volatile *pu64)
2748 u64 = _InterlockedIncrement64((__int64 *)pu64);
2755 "=m" (*pu64)
2757 "m" (*pu64)
2761 return ASMAtomicAddU64(pu64, 1) + 1;
2856 * @param pu64 Pointer to the value to decrement.
2859 DECLASM(uint64_t) ASMAtomicDecU64(uint64_t volatile *pu64);
2861 DECLINLINE(uint64_t) ASMAtomicDecU64(uint64_t volatile *pu64)
2864 uint64_t u64 = _InterlockedDecrement64((__int64 volatile *)pu64);
2871 "=m" (*pu64)
2873 "m" (*pu64)
2877 return ASMAtomicAddU64(pu64, UINT64_MAX) - 1;
2964 * @param pu64 Pointer to the pointer variable to OR u64 with.
2965 * @param u64 The value to OR *pu64 with.
2968 DECLASM(void) ASMAtomicOrU64(uint64_t volatile *pu64, uint64_t u64);
2970 DECLINLINE(void) ASMAtomicOrU64(uint64_t volatile *pu64, uint64_t u64)
2973 _InterlockedOr64((__int64 volatile *)pu64, (__int64)u64);
2977 : "=m" (*pu64)
2979 "m" (*pu64));
2983 uint64_t u64Old = ASMAtomicUoReadU64(pu64);
2985 if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old))
2998 * @param i64 The value to OR *pu64 with.
3057 * @param pu64 Pointer to the pointer variable to AND u64 with.
3058 * @param u64 The value to AND *pu64 with.
3061 DECLASM(void) ASMAtomicAndU64(uint64_t volatile *pu64, uint64_t u64);
3063 DECLINLINE(void) ASMAtomicAndU64(uint64_t volatile *pu64, uint64_t u64)
3066 _InterlockedAnd64((__int64 volatile *)pu64, u64);
3070 : "=m" (*pu64)
3072 "m" (*pu64));
3076 uint64_t u64Old = ASMAtomicUoReadU64(pu64);
3078 if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old))
3147 * @param pu64 Pointer to the pointer variable to OR u64 with.
3148 * @param u64 The value to OR *pu64 with.
3151 DECLASM(void) ASMAtomicUoOrU64(uint64_t volatile *pu64, uint64_t u64);
3153 DECLINLINE(void) ASMAtomicUoOrU64(uint64_t volatile *pu64, uint64_t u64)
3157 : "=m" (*pu64)
3159 "m" (*pu64));
3163 uint64_t u64Old = ASMAtomicUoReadU64(pu64);
3165 if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old))
3178 * @param i64 The value to OR *pu64 with.
3234 * @param pu64 Pointer to the pointer variable to AND u64 with.
3235 * @param u64 The value to AND *pu64 with.
3238 DECLASM(void) ASMAtomicUoAndU64(uint64_t volatile *pu64, uint64_t u64);
3240 DECLINLINE(void) ASMAtomicUoAndU64(uint64_t volatile *pu64, uint64_t u64)
3244 : "=m" (*pu64)
3246 "m" (*pu64));
3250 uint64_t u64Old = ASMAtomicUoReadU64(pu64);
3252 if (ASMAtomicCmpXchgU64(pu64, u64New, u64Old))