github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/runtime/internal/atomic/asm_amd64p32.s (about) 1 // Copyright 2015 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 #include "textflag.h" 6 7 // bool Cas(int32 *val, int32 old, int32 new) 8 // Atomically: 9 // if(*val == old){ 10 // *val = new; 11 // return 1; 12 // } else 13 // return 0; 14 TEXT runtime∕internal∕atomic·Cas(SB), NOSPLIT, $0-17 15 MOVL ptr+0(FP), BX 16 MOVL old+4(FP), AX 17 MOVL new+8(FP), CX 18 LOCK 19 CMPXCHGL CX, 0(BX) 20 SETEQ ret+16(FP) 21 RET 22 23 TEXT runtime∕internal∕atomic·Casuintptr(SB), NOSPLIT, $0-17 24 JMP runtime∕internal∕atomic·Cas(SB) 25 26 TEXT runtime∕internal∕atomic·CasRel(SB), NOSPLIT, $0-17 27 JMP runtime∕internal∕atomic·Cas(SB) 28 29 TEXT runtime∕internal∕atomic·Loaduintptr(SB), NOSPLIT, $0-12 30 JMP runtime∕internal∕atomic·Load(SB) 31 32 TEXT runtime∕internal∕atomic·Loaduint(SB), NOSPLIT, $0-12 33 JMP runtime∕internal∕atomic·Load(SB) 34 35 TEXT runtime∕internal∕atomic·Storeuintptr(SB), NOSPLIT, $0-8 36 JMP runtime∕internal∕atomic·Store(SB) 37 38 TEXT runtime∕internal∕atomic·Loadint64(SB), NOSPLIT, $0-16 39 JMP runtime∕internal∕atomic·Load64(SB) 40 41 TEXT runtime∕internal∕atomic·Xaddint64(SB), NOSPLIT, $0-24 42 JMP runtime∕internal∕atomic·Xadd64(SB) 43 44 // bool runtime∕internal∕atomic·cas64(uint64 *val, uint64 old, uint64 new) 45 // Atomically: 46 // if(*val == *old){ 47 // *val = new; 48 // return 1; 49 // } else { 50 // return 0; 51 // } 52 TEXT runtime∕internal∕atomic·Cas64(SB), NOSPLIT, $0-25 53 MOVL ptr+0(FP), BX 54 MOVQ old+8(FP), AX 55 MOVQ new+16(FP), CX 56 LOCK 57 CMPXCHGQ CX, 0(BX) 58 SETEQ ret+24(FP) 59 RET 60 61 // bool Casp1(void **val, void *old, void *new) 62 // Atomically: 63 // if(*val == old){ 64 // *val = new; 65 // return 1; 66 // } else 67 // return 0; 68 TEXT runtime∕internal∕atomic·Casp1(SB), NOSPLIT, $0-17 69 MOVL ptr+0(FP), BX 70 MOVL old+4(FP), AX 71 MOVL new+8(FP), CX 72 LOCK 73 CMPXCHGL CX, 0(BX) 74 SETEQ ret+16(FP) 75 RET 76 77 // uint32 Xadd(uint32 volatile *val, int32 delta) 78 // Atomically: 79 // *val += delta; 80 // return *val; 81 TEXT runtime∕internal∕atomic·Xadd(SB), NOSPLIT, $0-12 82 MOVL ptr+0(FP), BX 83 MOVL delta+4(FP), AX 84 MOVL AX, CX 85 LOCK 86 XADDL AX, 0(BX) 87 ADDL CX, AX 88 MOVL AX, ret+8(FP) 89 RET 90 91 TEXT runtime∕internal∕atomic·Xadd64(SB), NOSPLIT, $0-24 92 MOVL ptr+0(FP), BX 93 MOVQ delta+8(FP), AX 94 MOVQ AX, CX 95 LOCK 96 XADDQ AX, 0(BX) 97 ADDQ CX, AX 98 MOVQ AX, ret+16(FP) 99 RET 100 101 TEXT runtime∕internal∕atomic·Xadduintptr(SB), NOSPLIT, $0-12 102 JMP runtime∕internal∕atomic·Xadd(SB) 103 104 TEXT runtime∕internal∕atomic·Xchg(SB), NOSPLIT, $0-12 105 MOVL ptr+0(FP), BX 106 MOVL new+4(FP), AX 107 XCHGL AX, 0(BX) 108 MOVL AX, ret+8(FP) 109 RET 110 111 TEXT runtime∕internal∕atomic·Xchg64(SB), NOSPLIT, $0-24 112 MOVL ptr+0(FP), BX 113 MOVQ new+8(FP), AX 114 TESTL $7, BX 115 JZ 2(PC) 116 MOVL 0, BX // crash when unaligned 117 XCHGQ AX, 0(BX) 118 MOVQ AX, ret+16(FP) 119 RET 120 121 TEXT runtime∕internal∕atomic·Xchguintptr(SB), NOSPLIT, $0-12 122 JMP runtime∕internal∕atomic·Xchg(SB) 123 124 TEXT runtime∕internal∕atomic·StorepNoWB(SB), NOSPLIT, $0-8 125 MOVL ptr+0(FP), BX 126 MOVL val+4(FP), AX 127 XCHGL AX, 0(BX) 128 RET 129 130 TEXT runtime∕internal∕atomic·Store(SB), NOSPLIT, $0-8 131 MOVL ptr+0(FP), BX 132 MOVL val+4(FP), AX 133 XCHGL AX, 0(BX) 134 RET 135 136 TEXT runtime∕internal∕atomic·StoreRel(SB), NOSPLIT, $0-8 137 JMP runtime∕internal∕atomic·Store(SB) 138 139 TEXT runtime∕internal∕atomic·Store64(SB), NOSPLIT, $0-16 140 MOVL ptr+0(FP), BX 141 MOVQ val+8(FP), AX 142 XCHGQ AX, 0(BX) 143 RET 144 145 // void runtime∕internal∕atomic·Or8(byte volatile*, byte); 146 TEXT runtime∕internal∕atomic·Or8(SB), NOSPLIT, $0-5 147 MOVL ptr+0(FP), BX 148 MOVB val+4(FP), AX 149 LOCK 150 ORB AX, 0(BX) 151 RET 152 153 // void runtime∕internal∕atomic·And8(byte volatile*, byte); 154 TEXT runtime∕internal∕atomic·And8(SB), NOSPLIT, $0-5 155 MOVL ptr+0(FP), BX 156 MOVB val+4(FP), AX 157 LOCK 158 ANDB AX, 0(BX) 159 RET