//go:nosplit
func goOr8(addr *uint8, v uint8) {
// Align down to 4 bytes and use 32-bit CAS.
- uaddr := uintptr(unsafe.Pointer(addr))
- addr32 := (*uint32)(unsafe.Pointer(uaddr &^ 3))
- word := uint32(v) << ((uaddr & 3) * 8) // little endian
+ addr32 := (*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(addr)) &^ 3))
+ word := uint32(v) << ((uintptr(unsafe.Pointer(addr)) & 3) * 8) // little endian
for {
old := *addr32
if Cas(addr32, old, old|word) {
//go:nosplit
func goAnd8(addr *uint8, v uint8) {
// Align down to 4 bytes and use 32-bit CAS.
- uaddr := uintptr(unsafe.Pointer(addr))
- addr32 := (*uint32)(unsafe.Pointer(uaddr &^ 3))
- word := uint32(v) << ((uaddr & 3) * 8) // little endian
- mask := uint32(0xFF) << ((uaddr & 3) * 8) // little endian
+ addr32 := (*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(addr)) &^ 3))
+ word := uint32(v) << ((uintptr(unsafe.Pointer(addr)) & 3) * 8) // little endian
+ mask := uint32(0xFF) << ((uintptr(unsafe.Pointer(addr)) & 3) * 8) // little endian
word |= ^mask
for {
old := *addr32