@@ -100,8 +100,8 @@ SWIFT_ENUM(CASType, closed)
100
100
101
101
// atomic integer generation
102
102
103
- #define CLANG_ATOMICS_STRUCT (swiftType , atomicType , alignment ) \
104
- typedef struct { volatile atomicType a __attribute__ ((aligned(alignment))); } swiftType;
103
+ #define CLANG_ATOMICS_STRUCT (swiftType , atomicType , atomName , alignment ) \
104
+ typedef struct { volatile atomicType atomName __attribute__ ((aligned(alignment))); } swiftType;
105
105
106
106
#define CLANG_ATOMICS_IS_LOCK_FREE (swiftType ) \
107
107
static __inline__ __attribute__((__always_inline__)) \
@@ -168,7 +168,7 @@ SWIFT_ENUM(CASType, closed)
168
168
}
169
169
170
170
#define CLANG_ATOMICS_GENERATE (swiftType , atomicType , parameterType , alignment ) \
171
- CLANG_ATOMICS_STRUCT(swiftType, atomicType, alignment) \
171
+ CLANG_ATOMICS_STRUCT(swiftType, atomicType, a, alignment) \
172
172
CLANG_ATOMICS_IS_LOCK_FREE(swiftType) \
173
173
CLANG_ATOMICS_INITIALIZE(swiftType, parameterType) \
174
174
CLANG_ATOMICS_CREATE(swiftType, parameterType) \
@@ -213,9 +213,9 @@ CLANG_ATOMICS_INT_GENERATE(AtomicUInt64, atomic_ullong, unsigned long long, _Ali
213
213
CLANG_ATOMICS_BOOL_GENERATE (AtomicBool , atomic_bool , _Bool , _Alignof(atomic_bool ))
214
214
215
215
#ifdef __CACHE_LINE_WIDTH
216
- CLANG_ATOMICS_INT_GENERATE (AtomicCacheLineAlignedInt , atomic_intptr_t , intptr_t , __CACHE_LINE_WIDTH )
217
- CLANG_ATOMICS_INT_GENERATE (AtomicCacheLineAlignedUInt , atomic_uintptr_t , uintptr_t , __CACHE_LINE_WIDTH )
218
- CLANG_ATOMICS_BOOL_GENERATE (AtomicCacheLineAlignedBool , atomic_bool , _Bool , __CACHE_LINE_WIDTH )
216
+ CLANG_ATOMICS_INT_GENERATE (AtomicCacheAlignedInt , atomic_intptr_t , intptr_t , __CACHE_LINE_WIDTH )
217
+ CLANG_ATOMICS_INT_GENERATE (AtomicCacheAlignedUInt , atomic_uintptr_t , uintptr_t , __CACHE_LINE_WIDTH )
218
+ CLANG_ATOMICS_BOOL_GENERATE (AtomicCacheAlignedBool , atomic_bool , _Bool , __CACHE_LINE_WIDTH )
219
219
#endif
220
220
221
221
// pointer atomics
@@ -273,7 +273,7 @@ CLANG_ATOMICS_BOOL_GENERATE(AtomicCacheLineAlignedBool, atomic_bool, _Bool, __CA
273
273
}
274
274
275
275
#define CLANG_ATOMICS_POINTER_GENERATE (swiftType , atomicType , parameterType , nullability , alignment ) \
276
- CLANG_ATOMICS_STRUCT(swiftType, atomicType, alignment) \
276
+ CLANG_ATOMICS_STRUCT(swiftType, atomicType, a, alignment) \
277
277
CLANG_ATOMICS_IS_LOCK_FREE(swiftType) \
278
278
CLANG_ATOMICS_POINTER_INITIALIZE(swiftType, parameterType, nullability) \
279
279
CLANG_ATOMICS_POINTER_CREATE(swiftType, parameterType, nullability) \
@@ -290,10 +290,10 @@ CLANG_ATOMICS_POINTER_GENERATE(AtomicNonNullRawPointer, atomic_uintptr_t, const
290
290
CLANG_ATOMICS_POINTER_GENERATE (AtomicOptionalRawPointer , atomic_uintptr_t , const void * , _Nullable , _Alignof(atomic_uintptr_t ))
291
291
292
292
#ifdef __CACHE_LINE_WIDTH
293
- CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheLineAlignedMutableRawPointer , atomic_uintptr_t , void * , _Nonnull , __CACHE_LINE_WIDTH )
294
- CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheLineAlignedOptionalMutableRawPointer , atomic_uintptr_t , void * , _Nullable , __CACHE_LINE_WIDTH )
295
- CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheLineAlignedRawPointer , atomic_uintptr_t , const void * , _Nonnull , __CACHE_LINE_WIDTH )
296
- CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheLineAlignedOptionalRawPointer , atomic_uintptr_t , const void * , _Nullable , __CACHE_LINE_WIDTH )
293
+ CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheAlignedMutableRawPointer , atomic_uintptr_t , void * , _Nonnull , __CACHE_LINE_WIDTH )
294
+ CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheAlignedOptionalMutableRawPointer , atomic_uintptr_t , void * , _Nullable , __CACHE_LINE_WIDTH )
295
+ CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheAlignedRawPointer , atomic_uintptr_t , const void * , _Nonnull , __CACHE_LINE_WIDTH )
296
+ CLANG_ATOMICS_POINTER_GENERATE (AtomicCacheAlignedOptionalRawPointer , atomic_uintptr_t , const void * , _Nullable , __CACHE_LINE_WIDTH )
297
297
#endif
298
298
299
299
struct opaque ;
@@ -394,7 +394,7 @@ CLANG_ATOMICS_POINTER_GENERATE(AtomicOptionalOpaquePointer, atomic_uintptr_t, st
394
394
CLANG_ATOMICS_TAGGED_POINTER_INCREMENT(swiftType, pointerType, nullability)
395
395
396
396
#define CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (atomicType , structType , alignment ) \
397
- CLANG_ATOMICS_STRUCT(atomicType, _Atomic(__UNION_TYPE), alignment) \
397
+ CLANG_ATOMICS_STRUCT(atomicType, _Atomic(__UNION_TYPE), a, alignment) \
398
398
CLANG_ATOMICS_IS_LOCK_FREE(atomicType) \
399
399
CLANG_ATOMICS_TAGGED_POINTER_INITIALIZE(atomicType, structType) \
400
400
CLANG_ATOMICS_TAGGED_POINTER_LOAD(atomicType, structType) \
@@ -404,19 +404,31 @@ CLANG_ATOMICS_POINTER_GENERATE(AtomicOptionalOpaquePointer, atomic_uintptr_t, st
404
404
405
405
CLANG_ATOMICS_TAGGED_POINTER_GENERATE (TaggedRawPointer , const void * , _Nonnull )
406
406
CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicTaggedRawPointer , TaggedRawPointer , _Alignof(_Atomic (__UNION_TYPE )))
407
- CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheLineAlignedTaggedRawPointer , TaggedRawPointer , __CACHE_LINE_WIDTH )
408
407
409
408
CLANG_ATOMICS_TAGGED_POINTER_GENERATE (TaggedOptionalRawPointer , const void * , _Nullable )
410
409
CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicTaggedOptionalRawPointer , TaggedOptionalRawPointer , _Alignof(_Atomic (__UNION_TYPE )))
411
- CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheLineAlignedTaggedOptionalRawPointer , TaggedOptionalRawPointer , __CACHE_LINE_WIDTH )
412
410
413
411
CLANG_ATOMICS_TAGGED_POINTER_GENERATE (TaggedMutableRawPointer , void * , _Nonnull )
414
412
CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicTaggedMutableRawPointer , TaggedMutableRawPointer , _Alignof(_Atomic (__UNION_TYPE )))
415
- CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheLineAlignedTaggedMutableRawPointer , TaggedMutableRawPointer , __CACHE_LINE_WIDTH )
416
413
417
414
CLANG_ATOMICS_TAGGED_POINTER_GENERATE (TaggedOptionalMutableRawPointer , void * , _Nullable )
418
415
CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicTaggedOptionalMutableRawPointer , TaggedOptionalMutableRawPointer , _Alignof(_Atomic (__UNION_TYPE )))
419
- CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheLineAlignedTaggedOptionalMutableRawPointer , TaggedOptionalMutableRawPointer , __CACHE_LINE_WIDTH )
416
+
417
+ #ifdef __CACHE_LINE_WIDTH
418
+ CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheAlignedTaggedRawPointer , TaggedRawPointer , __CACHE_LINE_WIDTH )
419
+ CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheAlignedTaggedOptionalRawPointer , TaggedOptionalRawPointer , __CACHE_LINE_WIDTH )
420
+ CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheAlignedTaggedMutableRawPointer , TaggedMutableRawPointer , __CACHE_LINE_WIDTH )
421
+ CLANG_ATOMICS_ATOMIC_TAGGED_POINTER_GENERATE (AtomicCacheAlignedTaggedOptionalMutableRawPointer , TaggedOptionalMutableRawPointer , __CACHE_LINE_WIDTH )
422
+ #endif
423
+
424
+ // non-atomic padded pointer wrappers
425
+
426
+ #ifdef __CACHE_LINE_WIDTH
427
+ CLANG_ATOMICS_STRUCT (CacheAlignedRawPointer , const void * _Nonnull , pointer , __CACHE_LINE_WIDTH )
428
+ CLANG_ATOMICS_STRUCT (CacheAlignedOptionalRawPointer , const void * _Nullable , pointer , __CACHE_LINE_WIDTH )
429
+ CLANG_ATOMICS_STRUCT (CacheAlignedMutableRawPointer , void * _Nonnull , pointer , __CACHE_LINE_WIDTH )
430
+ CLANG_ATOMICS_STRUCT (CacheAlignedOptionalMutableRawPointer , void * _Nullable , pointer , __CACHE_LINE_WIDTH )
431
+ #endif
420
432
421
433
// fence
422
434
@@ -431,7 +443,7 @@ void CAtomicsThreadFence(enum MemoryOrder order)
431
443
#define __OPAQUE_UNMANAGED_LOCKED (uintptr_t)0x7
432
444
#define __OPAQUE_UNMANAGED_SPINMASK (char)0xc0
433
445
434
- CLANG_ATOMICS_STRUCT (OpaqueUnmanagedHelper , atomic_uintptr_t , _Alignof(atomic_uintptr_t ))
446
+ CLANG_ATOMICS_STRUCT (OpaqueUnmanagedHelper , atomic_uintptr_t , a , _Alignof(atomic_uintptr_t ))
435
447
CLANG_ATOMICS_IS_LOCK_FREE (OpaqueUnmanagedHelper )
436
448
CLANG_ATOMICS_POINTER_INITIALIZE (OpaqueUnmanagedHelper , const void * , _Nullable )
437
449
0 commit comments