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