# name meta args... # # Where meta contains a string of variants to generate. # Upper-case implies _{acquire,release,relaxed} variants. # Valid meta values are: # * B/b - bool: returns bool # * v - void: returns void # * I/i - int: returns base type # * R - return: returns base type (has _return variants) # * F/f - fetch: returns base type (has fetch_ variants) # * l - load: returns base type (has _acquire order variant) # * s - store: returns void (has _release order variant) # # Where args contains list of type[:name], where type is: # * cv - const pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) # * v - pointer to atomic base type (atomic_t/atomic64_t/atomic_long_t) # * i - base type (int/s64/long) # * p - pointer to base type (int/s64/long) # read l cv set s v i add vRF i v sub vRF i v inc vRF v dec vRF v and vF i v andnot vF i v or vF i v xor vF i v xchg I v i:new cmpxchg I v i:old i:new try_cmpxchg B v p:old i:new sub_and_test b i v dec_and_test b v inc_and_test b v add_negative B i v add_unless fb v i:a i:u inc_not_zero b v inc_unless_negative b v dec_unless_positive b v dec_if_positive i v