1# name meta args... 2# 3# Where meta contains a string of variants to generate. 4# Upper-case implies _{acquire,release,relaxed} variants. 5# Valid meta values are: 6# * B/b - bool: returns bool 7# * v - void: returns void 8# * I/i - int: returns base type 9# * R - return: returns base type (has _return variants) 10# * F/f - fetch: returns base type (has fetch_ variants) 11# * l - load: returns base type (has _acquire order variant) 12# * s - store: returns void (has _release order variant) 13# 14# Where args contains list of type[:name], where type is: 15# * cv - const pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) 16# * v - pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) 17# * i - base type (int/s64/long) 18# * p - pointer to base type (int/s64/long) 19# 20read l cv 21set s v i 22add vRF i v 23sub vRF i v 24inc vRF v 25dec vRF v 26and vF i v 27andnot vF i v 28or vF i v 29xor vF i v 30xchg I v i 31cmpxchg I v i:old i:new 32try_cmpxchg B v p:old i:new 33sub_and_test b i v 34dec_and_test b v 35inc_and_test b v 36add_negative b i v 37add_unless fb v i:a i:u 38inc_not_zero b v 39inc_unless_negative b v 40dec_unless_positive b v 41dec_if_positive i v 42