1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun 4*4882a593SmuzhiyunATOMICDIR=$(dirname $0) 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun. ${ATOMICDIR}/atomic-tbl.sh 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun#gen_cast(arg, int, atomic) 9*4882a593Smuzhiyungen_cast() 10*4882a593Smuzhiyun{ 11*4882a593Smuzhiyun local arg="$1"; shift 12*4882a593Smuzhiyun local int="$1"; shift 13*4882a593Smuzhiyun local atomic="$1"; shift 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun [ "${arg%%:*}" = "p" ] || return 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun printf "($(gen_param_type "${arg}" "${int}" "${atomic}"))" 18*4882a593Smuzhiyun} 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun#gen_args_cast(int, atomic, arg...) 21*4882a593Smuzhiyungen_args_cast() 22*4882a593Smuzhiyun{ 23*4882a593Smuzhiyun local int="$1"; shift 24*4882a593Smuzhiyun local atomic="$1"; shift 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun while [ "$#" -gt 0 ]; do 27*4882a593Smuzhiyun local cast="$(gen_cast "$1" "${int}" "${atomic}")" 28*4882a593Smuzhiyun local arg="$(gen_param_name "$1")" 29*4882a593Smuzhiyun printf "${cast}${arg}" 30*4882a593Smuzhiyun [ "$#" -gt 1 ] && printf ", " 31*4882a593Smuzhiyun shift; 32*4882a593Smuzhiyun done 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun#gen_proto_order_variant(meta, pfx, name, sfx, order, atomic, int, arg...) 36*4882a593Smuzhiyungen_proto_order_variant() 37*4882a593Smuzhiyun{ 38*4882a593Smuzhiyun local meta="$1"; shift 39*4882a593Smuzhiyun local name="$1$2$3$4"; shift; shift; shift; shift 40*4882a593Smuzhiyun local atomic="$1"; shift 41*4882a593Smuzhiyun local int="$1"; shift 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun local ret="$(gen_ret_type "${meta}" "long")" 44*4882a593Smuzhiyun local params="$(gen_params "long" "atomic_long" "$@")" 45*4882a593Smuzhiyun local argscast="$(gen_args_cast "${int}" "${atomic}" "$@")" 46*4882a593Smuzhiyun local retstmt="$(gen_ret_stmt "${meta}")" 47*4882a593Smuzhiyun 48*4882a593Smuzhiyuncat <<EOF 49*4882a593Smuzhiyunstatic __always_inline ${ret} 50*4882a593Smuzhiyunatomic_long_${name}(${params}) 51*4882a593Smuzhiyun{ 52*4882a593Smuzhiyun ${retstmt}${atomic}_${name}(${argscast}); 53*4882a593Smuzhiyun} 54*4882a593Smuzhiyun 55*4882a593SmuzhiyunEOF 56*4882a593Smuzhiyun} 57*4882a593Smuzhiyun 58*4882a593Smuzhiyuncat << EOF 59*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun// Generated by $0 62*4882a593Smuzhiyun// DO NOT MODIFY THIS FILE DIRECTLY 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun#ifndef _ASM_GENERIC_ATOMIC_LONG_H 65*4882a593Smuzhiyun#define _ASM_GENERIC_ATOMIC_LONG_H 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun#include <linux/compiler.h> 68*4882a593Smuzhiyun#include <asm/types.h> 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun#ifdef CONFIG_64BIT 71*4882a593Smuzhiyuntypedef atomic64_t atomic_long_t; 72*4882a593Smuzhiyun#define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) 73*4882a593Smuzhiyun#define atomic_long_cond_read_acquire atomic64_cond_read_acquire 74*4882a593Smuzhiyun#define atomic_long_cond_read_relaxed atomic64_cond_read_relaxed 75*4882a593Smuzhiyun#else 76*4882a593Smuzhiyuntypedef atomic_t atomic_long_t; 77*4882a593Smuzhiyun#define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) 78*4882a593Smuzhiyun#define atomic_long_cond_read_acquire atomic_cond_read_acquire 79*4882a593Smuzhiyun#define atomic_long_cond_read_relaxed atomic_cond_read_relaxed 80*4882a593Smuzhiyun#endif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun#ifdef CONFIG_64BIT 83*4882a593Smuzhiyun 84*4882a593SmuzhiyunEOF 85*4882a593Smuzhiyun 86*4882a593Smuzhiyungrep '^[a-z]' "$1" | while read name meta args; do 87*4882a593Smuzhiyun gen_proto "${meta}" "${name}" "atomic64" "s64" ${args} 88*4882a593Smuzhiyundone 89*4882a593Smuzhiyun 90*4882a593Smuzhiyuncat <<EOF 91*4882a593Smuzhiyun#else /* CONFIG_64BIT */ 92*4882a593Smuzhiyun 93*4882a593SmuzhiyunEOF 94*4882a593Smuzhiyun 95*4882a593Smuzhiyungrep '^[a-z]' "$1" | while read name meta args; do 96*4882a593Smuzhiyun gen_proto "${meta}" "${name}" "atomic" "int" ${args} 97*4882a593Smuzhiyundone 98*4882a593Smuzhiyun 99*4882a593Smuzhiyuncat <<EOF 100*4882a593Smuzhiyun#endif /* CONFIG_64BIT */ 101*4882a593Smuzhiyun#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ 102*4882a593SmuzhiyunEOF 103