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