|
21 | 21 | #if ATOMICS_NATIVE_BUILTINS |
22 | 22 | import Builtin |
23 | 23 |
|
24 | | -#if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) |
25 | | -@frozen |
26 | | -@_alignment(8) |
27 | | -public struct DoubleWord { |
28 | | - @usableFromInline |
29 | | - internal typealias _Builtin = Builtin.Int64 |
30 | | - |
31 | | - public var first: UInt |
32 | | - public var second: UInt |
33 | | - |
34 | | - @inlinable @inline(__always) |
35 | | - public init(first: UInt, second: UInt) { |
36 | | - self.first = first |
37 | | - self.second = second |
38 | | - } |
39 | | -} |
40 | | -#else |
41 | | -@frozen |
42 | | -@_alignment(16) |
43 | | -public struct DoubleWord { |
44 | | - @usableFromInline |
45 | | - internal typealias _Builtin = Builtin.Int128 |
46 | | - |
47 | | - public var first: UInt |
48 | | - public var second: UInt |
49 | | - |
50 | | - @inlinable @inline(__always) |
51 | | - public init(first: UInt, second: UInt) { |
52 | | - self.first = first |
53 | | - self.second = second |
54 | | - } |
55 | | -} |
56 | | -#endif |
57 | | - |
58 | | -extension DoubleWord { |
59 | | - @_alwaysEmitIntoClient |
60 | | - @inline(__always) |
61 | | - internal init(_ builtin: _Builtin) { |
62 | | - self = unsafeBitCast(builtin, to: DoubleWord.self) |
63 | | - } |
64 | | - |
65 | | - @_alwaysEmitIntoClient |
66 | | - @inline(__always) |
67 | | - internal var _value: _Builtin { |
68 | | - unsafeBitCast(self, to: _Builtin.self) |
69 | | - } |
70 | | -} |
71 | | - |
72 | | -extension Bool { |
73 | | - @_alwaysEmitIntoClient |
74 | | - @inline(__always) |
75 | | - internal init(_ builtin: Builtin.Int1) { |
76 | | - self = unsafeBitCast(builtin, to: Bool.self) |
77 | | - } |
78 | | -} |
79 | | - |
80 | 24 | @_alwaysEmitIntoClient |
81 | 25 | @_transparent |
82 | 26 | internal func _atomicMemoryFence( |
@@ -2150,7 +2094,7 @@ extension UnsafeMutablePointer where Pointee == Int64 { |
2150 | 2094 | } |
2151 | 2095 | } |
2152 | 2096 |
|
2153 | | -#if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) |
| 2097 | +#if (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) |
2154 | 2098 | extension UnsafeMutablePointer where Pointee == Int { |
2155 | 2099 | /// Atomically loads a word starting at this address with the specified |
2156 | 2100 | /// memory ordering. |
@@ -2663,7 +2607,7 @@ extension UnsafeMutablePointer where Pointee == Int { |
2663 | 2607 | } |
2664 | 2608 | } |
2665 | 2609 |
|
2666 | | -#else /* arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) */ |
| 2610 | +#else /* (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) */ |
2667 | 2611 | extension UnsafeMutablePointer where Pointee == Int { |
2668 | 2612 | /// Atomically loads a word starting at this address with the specified |
2669 | 2613 | /// memory ordering. |
@@ -3175,8 +3119,8 @@ extension UnsafeMutablePointer where Pointee == Int { |
3175 | 3119 | } |
3176 | 3120 | } |
3177 | 3121 | } |
3178 | | -#endif /* arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) */ |
3179 | | -#if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) |
| 3122 | +#endif /* (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) */ |
| 3123 | +#if (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) |
3180 | 3124 | extension UnsafeMutablePointer where Pointee == DoubleWord { |
3181 | 3125 | /// Atomically loads a word starting at this address with the specified |
3182 | 3126 | /// memory ordering. |
@@ -3493,7 +3437,7 @@ extension UnsafeMutablePointer where Pointee == DoubleWord { |
3493 | 3437 |
|
3494 | 3438 | } |
3495 | 3439 |
|
3496 | | -#else /* arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) */ |
| 3440 | +#else /* (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) */ |
3497 | 3441 | extension UnsafeMutablePointer where Pointee == DoubleWord { |
3498 | 3442 | /// Atomically loads a word starting at this address with the specified |
3499 | 3443 | /// memory ordering. |
@@ -3809,5 +3753,5 @@ extension UnsafeMutablePointer where Pointee == DoubleWord { |
3809 | 3753 | } |
3810 | 3754 |
|
3811 | 3755 | } |
3812 | | -#endif /* arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) */ |
| 3756 | +#endif /* (compiler(>=5.9) && _pointerBitWidth(_32)) || (compiler(<5.9) && (arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32))) */ |
3813 | 3757 | #endif // ATOMICS_NATIVE_BUILTINS |
0 commit comments