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