mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
No split to assembly and noasm functions on atomicbitops package
Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>
This commit is contained in:
@@ -16,28 +16,28 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·AndUint32(SB),$0-12
|
||||
TEXT ·AndUint32(SB),NOSPLIT,$0-12
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVL val+8(FP), AX
|
||||
LOCK
|
||||
ANDL AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·OrUint32(SB),$0-12
|
||||
TEXT ·OrUint32(SB),NOSPLIT,$0-12
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVL val+8(FP), AX
|
||||
LOCK
|
||||
ORL AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·XorUint32(SB),$0-12
|
||||
TEXT ·XorUint32(SB),NOSPLIT,$0-12
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVL val+8(FP), AX
|
||||
LOCK
|
||||
XORL AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·CompareAndSwapUint32(SB),$0-20
|
||||
TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-20
|
||||
MOVQ addr+0(FP), DI
|
||||
MOVL old+8(FP), AX
|
||||
MOVL new+12(FP), DX
|
||||
@@ -46,28 +46,28 @@ TEXT ·CompareAndSwapUint32(SB),$0-20
|
||||
MOVL AX, ret+16(FP)
|
||||
RET
|
||||
|
||||
TEXT ·AndUint64(SB),$0-16
|
||||
TEXT ·AndUint64(SB),NOSPLIT,$0-16
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVQ val+8(FP), AX
|
||||
LOCK
|
||||
ANDQ AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·OrUint64(SB),$0-16
|
||||
TEXT ·OrUint64(SB),NOSPLIT,$0-16
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVQ val+8(FP), AX
|
||||
LOCK
|
||||
ORQ AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·XorUint64(SB),$0-16
|
||||
TEXT ·XorUint64(SB),NOSPLIT,$0-16
|
||||
MOVQ addr+0(FP), BX
|
||||
MOVQ val+8(FP), AX
|
||||
LOCK
|
||||
XORQ AX, 0(BX)
|
||||
RET
|
||||
|
||||
TEXT ·CompareAndSwapUint64(SB),$0-32
|
||||
TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-32
|
||||
MOVQ addr+0(FP), DI
|
||||
MOVQ old+8(FP), AX
|
||||
MOVQ new+16(FP), DX
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
TEXT ·AndUint32(SB),$0-12
|
||||
TEXT ·AndUint32(SB),NOSPLIT,$0-12
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVW val+8(FP), R1
|
||||
again:
|
||||
@@ -26,7 +26,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·OrUint32(SB),$0-12
|
||||
TEXT ·OrUint32(SB),NOSPLIT,$0-12
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVW val+8(FP), R1
|
||||
again:
|
||||
@@ -36,7 +36,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·XorUint32(SB),$0-12
|
||||
TEXT ·XorUint32(SB),NOSPLIT,$0-12
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVW val+8(FP), R1
|
||||
again:
|
||||
@@ -46,7 +46,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·CompareAndSwapUint32(SB),$0-20
|
||||
TEXT ·CompareAndSwapUint32(SB),NOSPLIT,$0-20
|
||||
MOVD addr+0(FP), R0
|
||||
MOVW old+8(FP), R1
|
||||
MOVW new+12(FP), R2
|
||||
@@ -60,7 +60,7 @@ done:
|
||||
MOVW R3, prev+16(FP)
|
||||
RET
|
||||
|
||||
TEXT ·AndUint64(SB),$0-16
|
||||
TEXT ·AndUint64(SB),NOSPLIT,$0-16
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVD val+8(FP), R1
|
||||
again:
|
||||
@@ -70,7 +70,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·OrUint64(SB),$0-16
|
||||
TEXT ·OrUint64(SB),NOSPLIT,$0-16
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVD val+8(FP), R1
|
||||
again:
|
||||
@@ -80,7 +80,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·XorUint64(SB),$0-16
|
||||
TEXT ·XorUint64(SB),NOSPLIT,$0-16
|
||||
MOVD ptr+0(FP), R0
|
||||
MOVD val+8(FP), R1
|
||||
again:
|
||||
@@ -90,7 +90,7 @@ again:
|
||||
CBNZ R3, again
|
||||
RET
|
||||
|
||||
TEXT ·CompareAndSwapUint64(SB),$0-32
|
||||
TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-32
|
||||
MOVD addr+0(FP), R0
|
||||
MOVD old+8(FP), R1
|
||||
MOVD new+16(FP), R2
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
//go:nosplit
|
||||
func AndUint32(addr *uint32, val uint32) {
|
||||
for {
|
||||
o := atomic.LoadUint32(addr)
|
||||
@@ -31,6 +32,7 @@ func AndUint32(addr *uint32, val uint32) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func OrUint32(addr *uint32, val uint32) {
|
||||
for {
|
||||
o := atomic.LoadUint32(addr)
|
||||
@@ -41,6 +43,7 @@ func OrUint32(addr *uint32, val uint32) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func XorUint32(addr *uint32, val uint32) {
|
||||
for {
|
||||
o := atomic.LoadUint32(addr)
|
||||
@@ -51,6 +54,7 @@ func XorUint32(addr *uint32, val uint32) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func CompareAndSwapUint32(addr *uint32, old, new uint32) (prev uint32) {
|
||||
for {
|
||||
prev = atomic.LoadUint32(addr)
|
||||
@@ -63,6 +67,7 @@ func CompareAndSwapUint32(addr *uint32, old, new uint32) (prev uint32) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func AndUint64(addr *uint64, val uint64) {
|
||||
for {
|
||||
o := atomic.LoadUint64(addr)
|
||||
@@ -73,6 +78,7 @@ func AndUint64(addr *uint64, val uint64) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func OrUint64(addr *uint64, val uint64) {
|
||||
for {
|
||||
o := atomic.LoadUint64(addr)
|
||||
@@ -83,6 +89,7 @@ func OrUint64(addr *uint64, val uint64) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func XorUint64(addr *uint64, val uint64) {
|
||||
for {
|
||||
o := atomic.LoadUint64(addr)
|
||||
@@ -93,6 +100,7 @@ func XorUint64(addr *uint64, val uint64) {
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func CompareAndSwapUint64(addr *uint64, old, new uint64) (prev uint64) {
|
||||
for {
|
||||
prev = atomic.LoadUint64(addr)
|
||||
|
||||
Reference in New Issue
Block a user