18c2ecf20Sopenharmony_cicat <<EOF 28c2ecf20Sopenharmony_cistatic __always_inline bool 38c2ecf20Sopenharmony_ci${arch}${atomic}_dec_unless_positive(${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