Skip to content

Commit b99124a

Browse files
committed
use Cas64 in And64/Or64
1 parent 37c127f commit b99124a

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

src/runtime/internal/atomic/atomic_mipsx.go

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -111,24 +111,22 @@ func Store64(addr *uint64, val uint64) {
111111

112112
//go:nosplit
113113
func Or64(addr *uint64, val uint64) (old uint64) {
114-
lockAndCheck(addr)
115-
116-
old = *addr
117-
*addr = old | val
118-
119-
unlockNoFence()
120-
return old
114+
for {
115+
old = *addr
116+
if Cas64(addr, old, old|val) {
117+
return old
118+
}
119+
}
121120
}
122121

123122
//go:nosplit
124123
func And64(addr *uint64, val uint64) (old uint64) {
125-
lockAndCheck(addr)
126-
127-
old = *addr
128-
*addr = old & val
129-
130-
unlockNoFence()
131-
return old
124+
for {
125+
old = *addr
126+
if Cas64(addr, old, old&val) {
127+
return old
128+
}
129+
}
132130
}
133131

134132
//go:noescape

0 commit comments

Comments
 (0)