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