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