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