1ace9bad4SMark Rutlandcat << EOF 2765dcd20SMarco Elverstatic __always_inline ${int} 3*9257959aSMark Rutlandraw_${atomic}_fetch_add_unless(${atomic}_t *v, ${int} a, ${int} u) 4ace9bad4SMark Rutland{ 5*9257959aSMark Rutland ${int} c = raw_${atomic}_read(v); 6ace9bad4SMark Rutland 7ace9bad4SMark Rutland do { 8ace9bad4SMark Rutland if (unlikely(c == u)) 9ace9bad4SMark Rutland break; 10*9257959aSMark Rutland } while (!raw_${atomic}_try_cmpxchg(v, &c, c + a)); 11ace9bad4SMark Rutland 12ace9bad4SMark Rutland return c; 13ace9bad4SMark Rutland} 14ace9bad4SMark RutlandEOF 15