1TEXT ainc(SB), 1, $0 /* long ainc(long *); */ 2ainclp: 3 MOVL (RARG), AX /* exp */ 4 MOVL AX, BX 5 INCL BX /* new */ 6 LOCK; CMPXCHGL BX, (RARG) 7 JNZ ainclp 8 MOVL BX, AX 9 RET 10 11TEXT adec(SB), 1, $0 /* long adec(long*); */ 12adeclp: 13 MOVL (RARG), AX 14 MOVL AX, BX 15 DECL BX 16 LOCK; CMPXCHGL BX, (RARG) 17 JNZ adeclp 18 MOVL BX, AX 19 RET 20 21/* 22 * int cas32(u32int *p, u32int ov, u32int nv); 23 * int cas(uint *p, int ov, int nv); 24 * int casul(ulong *p, ulong ov, ulong nv); 25 */ 26 27TEXT cas32(SB), 1, $0 28TEXT cas(SB), 1, $0 29TEXT casul(SB), 1, $0 30TEXT casl(SB), 1, $0 /* back compat */ 31 MOVL exp+8(FP), AX 32 MOVL new+16(FP), BX 33 LOCK; CMPXCHGL BX, (RARG) 34 MOVL $1, AX /* use CMOVLEQ etc. here? */ 35 JNZ _cas32r0 36_cas32r1: 37 RET 38_cas32r0: 39 DECL AX 40 RET 41 42/* 43 * int cas64(u64int *p, u64int ov, u64int nv); 44 * int casp(void **p, void *ov, void *nv); 45 */ 46 47TEXT cas64(SB), 1, $0 48TEXT casp(SB), 1, $0 49 MOVQ exp+8(FP), AX 50 MOVQ new+16(FP), BX 51 LOCK; CMPXCHGQ BX, (RARG) 52 MOVL $1, AX /* use CMOVLEQ etc. here? */ 53 JNZ _cas64r0 54_cas64r1: 55 RET 56_cas64r0: 57 DECL AX 58 RET 59 60/* 61 * void mfence(void); 62 */ 63TEXT mfence(SB),0,$0 64 MFENCE 65 RET 66 67