1*ace9bad4SMark Rutlandcat <<EOF
2*ace9bad4SMark Rutlandstatic inline ${ret}
3*ace9bad4SMark Rutland${atomic}_dec_if_positive(${atomic}_t *v)
4*ace9bad4SMark Rutland{
5*ace9bad4SMark Rutland	${int} dec, c = ${atomic}_read(v);
6*ace9bad4SMark Rutland
7*ace9bad4SMark Rutland	do {
8*ace9bad4SMark Rutland		dec = c - 1;
9*ace9bad4SMark Rutland		if (unlikely(dec < 0))
10*ace9bad4SMark Rutland			break;
11*ace9bad4SMark Rutland	} while (!${atomic}_try_cmpxchg(v, &c, dec));
12*ace9bad4SMark Rutland
13*ace9bad4SMark Rutland	return dec;
14*ace9bad4SMark Rutland}
15*ace9bad4SMark RutlandEOF
16