@@ -65,12 +65,14 @@ internal func _swift_stdlib_atomicCompareExchangeStrongInt(
6565 object target: UnsafeMutablePointer<Int>,
6666 expected: UnsafeMutablePointer<Int>,
6767 desired: Int) -> Bool {
68- #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) || arch(powerpc)
69- let (oldValue, won) = Builtin.cmpxchg_seqcst_seqcst_Int32(
70- target._rawValue, expected.pointee._value, desired._value)
71- #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64)
68+ #if _pointerBitWidth(_64)
7269 let (oldValue, won) = Builtin.cmpxchg_seqcst_seqcst_Int64(
7370 target._rawValue, expected.pointee._value, desired._value)
71+ #elseif _pointerBitWidth(_32)
72+ let (oldValue, won) = Builtin.cmpxchg_seqcst_seqcst_Int32(
73+ target._rawValue, expected.pointee._value, desired._value)
74+ #else
75+ #error("Unknown platform")
7476#endif
7577 expected.pointee._value = oldValue
7678 return Bool(won)
@@ -82,23 +84,27 @@ internal func _swift_stdlib_atomicCompareExchangeStrongInt(
8284public // Existing uses outside stdlib
8385func _swift_stdlib_atomicLoadInt(
8486 object target: UnsafeMutablePointer<Int>) -> Int {
85- #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) || arch(powerpc)
86- let value = Builtin.atomicload_seqcst_Int32(target._rawValue)
87- return Int(value)
88- #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64)
87+ #if _pointerBitWidth(_64)
8988 let value = Builtin.atomicload_seqcst_Int64(target._rawValue)
9089 return Int(value)
90+ #elseif _pointerBitWidth(_32)
91+ let value = Builtin.atomicload_seqcst_Int32(target._rawValue)
92+ return Int(value)
93+ #else
94+ #error("Unknown platform")
9195#endif
9296}
9397
9498@usableFromInline // used by SwiftPrivate._stdlib_AtomicInt
9599internal func _swift_stdlib_atomicStoreInt(
96100 object target: UnsafeMutablePointer<Int>,
97101 desired: Int) {
98- #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) || arch(powerpc)
99- Builtin.atomicstore_seqcst_Int32(target._rawValue, desired._value)
100- #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64)
102+ #if _pointerBitWidth(_64)
101103 Builtin.atomicstore_seqcst_Int64(target._rawValue, desired._value)
104+ #elseif _pointerBitWidth(_32)
105+ Builtin.atomicstore_seqcst_Int32(target._rawValue, desired._value)
106+ #else
107+ #error("Unknown platform")
102108#endif
103109}
104110
@@ -111,14 +117,16 @@ func _swift_stdlib_atomicFetch${operation}Int(
111117 object target: UnsafeMutablePointer<Int>,
112118 operand: Int) -> Int {
113119 let rawTarget = UnsafeMutableRawPointer(target)
114- #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) || arch(powerpc)
115- let value = _swift_stdlib_atomicFetch${operation}Int32(
116- object: rawTarget.assumingMemoryBound(to: Int32.self),
117- operand: Int32(operand))
118- #elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64)
120+ #if _pointerBitWidth(_64)
119121 let value = _swift_stdlib_atomicFetch${operation}Int64(
120122 object: rawTarget.assumingMemoryBound(to: Int64.self),
121123 operand: Int64(operand))
124+ #elseif _pointerBitWidth(_32)
125+ let value = _swift_stdlib_atomicFetch${operation}Int32(
126+ object: rawTarget.assumingMemoryBound(to: Int32.self),
127+ operand: Int32(operand))
128+ #else
129+ #error("Unknown platform")
122130#endif
123131 return Int(value)
124132}
0 commit comments