# 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 cvset s v iadd vRF i vsub vRF i vinc vRF vdec vRF vand vF i vandnot vF i vor vF i vxor vF i vxchg I v i:newcmpxchg I v i:old i:newtry_cmpxchg B v p:old i:newsub_and_test b i vdec_and_test b vinc_and_test b vadd_negative B i vadd_unless fb v i:a i:uinc_not_zero b vinc_unless_negative b vdec_unless_positive b vdec_if_positive i v
# 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