diff options
Diffstat (limited to 'src/pkg/sync/atomic/asm_amd64.s')
-rw-r--r-- | src/pkg/sync/atomic/asm_amd64.s | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/pkg/sync/atomic/asm_amd64.s b/src/pkg/sync/atomic/asm_amd64.s new file mode 100644 index 000000000..a260902a7 --- /dev/null +++ b/src/pkg/sync/atomic/asm_amd64.s @@ -0,0 +1,59 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +TEXT ·CompareAndSwapInt32(SB),7,$0 + JMP ·CompareAndSwapUint32(SB) + +TEXT ·CompareAndSwapUint32(SB),7,$0 + MOVQ valptr+0(FP), BP + MOVL old+8(FP), AX + MOVL new+12(FP), CX + LOCK + CMPXCHGL CX, 0(BP) + SETEQ ret+16(FP) + RET + +TEXT ·CompareAndSwapUintptr(SB),7,$0 + JMP ·CompareAndSwapUint64(SB) + +TEXT ·CompareAndSwapInt64(SB),7,$0 + JMP ·CompareAndSwapUint64(SB) + +TEXT ·CompareAndSwapUint64(SB),7,$0 + MOVQ valptr+0(FP), BP + MOVQ old+8(FP), AX + MOVQ new+16(FP), CX + LOCK + CMPXCHGQ CX, 0(BP) + SETEQ ret+24(FP) + RET + +TEXT ·AddInt32(SB),7,$0 + JMP ·AddUint32(SB) + +TEXT ·AddUint32(SB),7,$0 + MOVQ valptr+0(FP), BP + MOVL delta+8(FP), AX + MOVL AX, CX + LOCK + XADDL AX, 0(BP) + ADDL AX, CX + MOVL CX, ret+16(FP) + RET + +TEXT ·AddUintptr(SB),7,$0 + JMP ·AddUint64(SB) + +TEXT ·AddInt64(SB),7,$0 + JMP ·AddUint64(SB) + +TEXT ·AddUint64(SB),7,$0 + MOVQ valptr+0(FP), BP + MOVQ delta+8(FP), AX + MOVQ AX, CX + LOCK + XADDQ AX, 0(BP) + ADDQ AX, CX + MOVQ CX, ret+16(FP) + RET |