github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/runtime/internal/atomic/atomic_andor_generic.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build arm || mips || mipsle || mips64 || mips64le || wasm 6 7 package atomic 8 9 //go:nosplit 10 func And32(ptr *uint32, val uint32) uint32 { 11 for { 12 old := *ptr 13 if Cas(ptr, old, old&val) { 14 return old 15 } 16 } 17 } 18 19 //go:nosplit 20 func Or32(ptr *uint32, val uint32) uint32 { 21 for { 22 old := *ptr 23 if Cas(ptr, old, old|val) { 24 return old 25 } 26 } 27 } 28 29 //go:nosplit 30 func And64(ptr *uint64, val uint64) uint64 { 31 for { 32 old := *ptr 33 if Cas64(ptr, old, old&val) { 34 return old 35 } 36 } 37 } 38 39 //go:nosplit 40 func Or64(ptr *uint64, val uint64) uint64 { 41 for { 42 old := *ptr 43 if Cas64(ptr, old, old|val) { 44 return old 45 } 46 } 47 } 48 49 //go:nosplit 50 func Anduintptr(ptr *uintptr, val uintptr) uintptr { 51 for { 52 old := *ptr 53 if Casuintptr(ptr, old, old&val) { 54 return old 55 } 56 } 57 } 58 59 //go:nosplit 60 func Oruintptr(ptr *uintptr, val uintptr) uintptr { 61 for { 62 old := *ptr 63 if Casuintptr(ptr, old, old|val) { 64 return old 65 } 66 } 67 }