1*4882a593Smuzhiyun# name meta args... 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Where meta contains a string of variants to generate. 4*4882a593Smuzhiyun# Upper-case implies _{acquire,release,relaxed} variants. 5*4882a593Smuzhiyun# Valid meta values are: 6*4882a593Smuzhiyun# * B/b - bool: returns bool 7*4882a593Smuzhiyun# * v - void: returns void 8*4882a593Smuzhiyun# * I/i - int: returns base type 9*4882a593Smuzhiyun# * R - return: returns base type (has _return variants) 10*4882a593Smuzhiyun# * F/f - fetch: returns base type (has fetch_ variants) 11*4882a593Smuzhiyun# * l - load: returns base type (has _acquire order variant) 12*4882a593Smuzhiyun# * s - store: returns void (has _release order variant) 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun# Where args contains list of type[:name], where type is: 15*4882a593Smuzhiyun# * cv - const pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) 16*4882a593Smuzhiyun# * v - pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) 17*4882a593Smuzhiyun# * i - base type (int/s64/long) 18*4882a593Smuzhiyun# * p - pointer to base type (int/s64/long) 19*4882a593Smuzhiyun# 20*4882a593Smuzhiyunread l cv 21*4882a593Smuzhiyunset s v i 22*4882a593Smuzhiyunadd vRF i v 23*4882a593Smuzhiyunsub vRF i v 24*4882a593Smuzhiyuninc vRF v 25*4882a593Smuzhiyundec vRF v 26*4882a593Smuzhiyunand vF i v 27*4882a593Smuzhiyunandnot vF i v 28*4882a593Smuzhiyunor vF i v 29*4882a593Smuzhiyunxor vF i v 30*4882a593Smuzhiyunxchg I v i 31*4882a593Smuzhiyuncmpxchg I v i:old i:new 32*4882a593Smuzhiyuntry_cmpxchg B v p:old i:new 33*4882a593Smuzhiyunsub_and_test b i v 34*4882a593Smuzhiyundec_and_test b v 35*4882a593Smuzhiyuninc_and_test b v 36*4882a593Smuzhiyunadd_negative b i v 37*4882a593Smuzhiyunadd_unless fb v i:a i:u 38*4882a593Smuzhiyuninc_not_zero b v 39*4882a593Smuzhiyuninc_unless_negative b v 40*4882a593Smuzhiyundec_unless_positive b v 41*4882a593Smuzhiyundec_if_positive i v 42