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