Home | History | Annotate | Download | only in atomic
      1 // Copyright 2011 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 // +build !race
      6 
      7 #include "textflag.h"
      8 
      9 TEXT SwapInt32(SB),NOSPLIT,$0-20
     10 	JMP	SwapUint32(SB)
     11 
     12 TEXT SwapUint32(SB),NOSPLIT,$0-20
     13 	MOVQ	addr+0(FP), BP
     14 	MOVL	new+8(FP), AX
     15 	XCHGL	AX, 0(BP)
     16 	MOVL	AX, old+16(FP)
     17 	RET
     18 
     19 TEXT SwapInt64(SB),NOSPLIT,$0-24
     20 	JMP	SwapUint64(SB)
     21 
     22 TEXT SwapUint64(SB),NOSPLIT,$0-24
     23 	MOVQ	addr+0(FP), BP
     24 	MOVQ	new+8(FP), AX
     25 	XCHGQ	AX, 0(BP)
     26 	MOVQ	AX, old+16(FP)
     27 	RET
     28 
     29 TEXT SwapUintptr(SB),NOSPLIT,$0-24
     30 	JMP	SwapUint64(SB)
     31 
     32 TEXT CompareAndSwapInt32(SB),NOSPLIT,$0-17
     33 	JMP	CompareAndSwapUint32(SB)
     34 
     35 TEXT CompareAndSwapUint32(SB),NOSPLIT,$0-17
     36 	MOVQ	addr+0(FP), BP
     37 	MOVL	old+8(FP), AX
     38 	MOVL	new+12(FP), CX
     39 	LOCK
     40 	CMPXCHGL	CX, 0(BP)
     41 	SETEQ	swapped+16(FP)
     42 	RET
     43 
     44 TEXT CompareAndSwapUintptr(SB),NOSPLIT,$0-25
     45 	JMP	CompareAndSwapUint64(SB)
     46 
     47 TEXT CompareAndSwapInt64(SB),NOSPLIT,$0-25
     48 	JMP	CompareAndSwapUint64(SB)
     49 
     50 TEXT CompareAndSwapUint64(SB),NOSPLIT,$0-25
     51 	MOVQ	addr+0(FP), BP
     52 	MOVQ	old+8(FP), AX
     53 	MOVQ	new+16(FP), CX
     54 	LOCK
     55 	CMPXCHGQ	CX, 0(BP)
     56 	SETEQ	swapped+24(FP)
     57 	RET
     58 
     59 TEXT AddInt32(SB),NOSPLIT,$0-20
     60 	JMP	AddUint32(SB)
     61 
     62 TEXT AddUint32(SB),NOSPLIT,$0-20
     63 	MOVQ	addr+0(FP), BP
     64 	MOVL	delta+8(FP), AX
     65 	MOVL	AX, CX
     66 	LOCK
     67 	XADDL	AX, 0(BP)
     68 	ADDL	AX, CX
     69 	MOVL	CX, new+16(FP)
     70 	RET
     71 
     72 TEXT AddUintptr(SB),NOSPLIT,$0-24
     73 	JMP	AddUint64(SB)
     74 
     75 TEXT AddInt64(SB),NOSPLIT,$0-24
     76 	JMP	AddUint64(SB)
     77 
     78 TEXT AddUint64(SB),NOSPLIT,$0-24
     79 	MOVQ	addr+0(FP), BP
     80 	MOVQ	delta+8(FP), AX
     81 	MOVQ	AX, CX
     82 	LOCK
     83 	XADDQ	AX, 0(BP)
     84 	ADDQ	AX, CX
     85 	MOVQ	CX, new+16(FP)
     86 	RET
     87 
     88 TEXT LoadInt32(SB),NOSPLIT,$0-12
     89 	JMP	LoadUint32(SB)
     90 
     91 TEXT LoadUint32(SB),NOSPLIT,$0-12
     92 	MOVQ	addr+0(FP), AX
     93 	MOVL	0(AX), AX
     94 	MOVL	AX, val+8(FP)
     95 	RET
     96 
     97 TEXT LoadInt64(SB),NOSPLIT,$0-16
     98 	JMP	LoadUint64(SB)
     99 
    100 TEXT LoadUint64(SB),NOSPLIT,$0-16
    101 	MOVQ	addr+0(FP), AX
    102 	MOVQ	0(AX), AX
    103 	MOVQ	AX, val+8(FP)
    104 	RET
    105 
    106 TEXT LoadUintptr(SB),NOSPLIT,$0-16
    107 	JMP	LoadPointer(SB)
    108 
    109 TEXT LoadPointer(SB),NOSPLIT,$0-16
    110 	MOVQ	addr+0(FP), AX
    111 	MOVQ	0(AX), AX
    112 	MOVQ	AX, val+8(FP)
    113 	RET
    114 
    115 TEXT StoreInt32(SB),NOSPLIT,$0-12
    116 	JMP	StoreUint32(SB)
    117 
    118 TEXT StoreUint32(SB),NOSPLIT,$0-12
    119 	MOVQ	addr+0(FP), BP
    120 	MOVL	val+8(FP), AX
    121 	XCHGL	AX, 0(BP)
    122 	RET
    123 
    124 TEXT StoreInt64(SB),NOSPLIT,$0-16
    125 	JMP	StoreUint64(SB)
    126 
    127 TEXT StoreUint64(SB),NOSPLIT,$0-16
    128 	MOVQ	addr+0(FP), BP
    129 	MOVQ	val+8(FP), AX
    130 	XCHGQ	AX, 0(BP)
    131 	RET
    132 
    133 TEXT StoreUintptr(SB),NOSPLIT,$0-16
    134 	JMP	StoreUint64(SB)
    135