1*4882a593Smuzhiyuncat <<EOF 2*4882a593Smuzhiyunstatic __always_inline bool 3*4882a593Smuzhiyun${arch}${atomic}_inc_unless_negative(${atomic}_t *v) 4*4882a593Smuzhiyun{ 5*4882a593Smuzhiyun ${int} c = ${arch}${atomic}_read(v); 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun do { 8*4882a593Smuzhiyun if (unlikely(c < 0)) 9*4882a593Smuzhiyun return false; 10*4882a593Smuzhiyun } while (!${arch}${atomic}_try_cmpxchg(v, &c, c + 1)); 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun return true; 13*4882a593Smuzhiyun} 14*4882a593SmuzhiyunEOF 15