18c2ecf20Sopenharmony_cicat <<EOF
28c2ecf20Sopenharmony_cistatic __always_inline bool
38c2ecf20Sopenharmony_ci${arch}${atomic}_inc_unless_negative(${atomic}_t *v)
48c2ecf20Sopenharmony_ci{
58c2ecf20Sopenharmony_ci	${int} c = ${arch}${atomic}_read(v);
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci	do {
88c2ecf20Sopenharmony_ci		if (unlikely(c < 0))
98c2ecf20Sopenharmony_ci			return false;
108c2ecf20Sopenharmony_ci	} while (!${arch}${atomic}_try_cmpxchg(v, &c, c + 1));
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci	return true;
138c2ecf20Sopenharmony_ci}
148c2ecf20Sopenharmony_ciEOF
15