162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciATOMICDIR=$(dirname $0)
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci. ${ATOMICDIR}/atomic-tbl.sh
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#gen_cast(arg, int, atomic)
962306a36Sopenharmony_cigen_cast()
1062306a36Sopenharmony_ci{
1162306a36Sopenharmony_ci	local arg="$1"; shift
1262306a36Sopenharmony_ci	local int="$1"; shift
1362306a36Sopenharmony_ci	local atomic="$1"; shift
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	[ "${arg%%:*}" = "p" ] || return
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci	printf "($(gen_param_type "${arg}" "${int}" "${atomic}"))"
1862306a36Sopenharmony_ci}
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#gen_args_cast(int, atomic, arg...)
2162306a36Sopenharmony_cigen_args_cast()
2262306a36Sopenharmony_ci{
2362306a36Sopenharmony_ci	local int="$1"; shift
2462306a36Sopenharmony_ci	local atomic="$1"; shift
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	while [ "$#" -gt 0 ]; do
2762306a36Sopenharmony_ci		local cast="$(gen_cast "$1" "${int}" "${atomic}")"
2862306a36Sopenharmony_ci		local arg="$(gen_param_name "$1")"
2962306a36Sopenharmony_ci		printf "${cast}${arg}"
3062306a36Sopenharmony_ci		[ "$#" -gt 1 ] && printf ", "
3162306a36Sopenharmony_ci		shift;
3262306a36Sopenharmony_ci	done
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#gen_proto_order_variant(meta, pfx, name, sfx, order, arg...)
3662306a36Sopenharmony_cigen_proto_order_variant()
3762306a36Sopenharmony_ci{
3862306a36Sopenharmony_ci	local meta="$1"; shift
3962306a36Sopenharmony_ci	local pfx="$1"; shift
4062306a36Sopenharmony_ci	local name="$1"; shift
4162306a36Sopenharmony_ci	local sfx="$1"; shift
4262306a36Sopenharmony_ci	local order="$1"; shift
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	local atomicname="${pfx}${name}${sfx}${order}"
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	local ret="$(gen_ret_type "${meta}" "long")"
4762306a36Sopenharmony_ci	local params="$(gen_params "long" "atomic_long" "$@")"
4862306a36Sopenharmony_ci	local argscast_32="$(gen_args_cast "int" "atomic" "$@")"
4962306a36Sopenharmony_ci	local argscast_64="$(gen_args_cast "s64" "atomic64" "$@")"
5062306a36Sopenharmony_ci	local retstmt="$(gen_ret_stmt "${meta}")"
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	gen_kerneldoc "raw_" "${meta}" "${pfx}" "${name}" "${sfx}" "${order}" "atomic_long" "long" "$@"
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cicat <<EOF
5562306a36Sopenharmony_cistatic __always_inline ${ret}
5662306a36Sopenharmony_ciraw_atomic_long_${atomicname}(${params})
5762306a36Sopenharmony_ci{
5862306a36Sopenharmony_ci#ifdef CONFIG_64BIT
5962306a36Sopenharmony_ci	${retstmt}raw_atomic64_${atomicname}(${argscast_64});
6062306a36Sopenharmony_ci#else
6162306a36Sopenharmony_ci	${retstmt}raw_atomic_${atomicname}(${argscast_32});
6262306a36Sopenharmony_ci#endif
6362306a36Sopenharmony_ci}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciEOF
6662306a36Sopenharmony_ci}
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cicat << EOF
6962306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci// Generated by $0
7262306a36Sopenharmony_ci// DO NOT MODIFY THIS FILE DIRECTLY
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci#ifndef _LINUX_ATOMIC_LONG_H
7562306a36Sopenharmony_ci#define _LINUX_ATOMIC_LONG_H
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#include <linux/compiler.h>
7862306a36Sopenharmony_ci#include <asm/types.h>
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci#ifdef CONFIG_64BIT
8162306a36Sopenharmony_citypedef atomic64_t atomic_long_t;
8262306a36Sopenharmony_ci#define ATOMIC_LONG_INIT(i)		ATOMIC64_INIT(i)
8362306a36Sopenharmony_ci#define atomic_long_cond_read_acquire	atomic64_cond_read_acquire
8462306a36Sopenharmony_ci#define atomic_long_cond_read_relaxed	atomic64_cond_read_relaxed
8562306a36Sopenharmony_ci#else
8662306a36Sopenharmony_citypedef atomic_t atomic_long_t;
8762306a36Sopenharmony_ci#define ATOMIC_LONG_INIT(i)		ATOMIC_INIT(i)
8862306a36Sopenharmony_ci#define atomic_long_cond_read_acquire	atomic_cond_read_acquire
8962306a36Sopenharmony_ci#define atomic_long_cond_read_relaxed	atomic_cond_read_relaxed
9062306a36Sopenharmony_ci#endif
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciEOF
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cigrep '^[a-z]' "$1" | while read name meta args; do
9562306a36Sopenharmony_ci	gen_proto "${meta}" "${name}" ${args}
9662306a36Sopenharmony_cidone
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cicat <<EOF
9962306a36Sopenharmony_ci#endif /* _LINUX_ATOMIC_LONG_H */
10062306a36Sopenharmony_ciEOF
101