// SPDX-License-Identifier: GPL-2.0

// Generated by scripts/atomic/gen-rust-atomic-helpers.sh
// DO NOT MODIFY THIS FILE DIRECTLY

/*
 * This file provides helpers for the various atomic functions for Rust.
 */
#ifndef _RUST_ATOMIC_API_H
#define _RUST_ATOMIC_API_H

#include <linux/atomic.h>

__rust_helper int
rust_helper_atomic_read(const atomic_t *v)
{
	return atomic_read(v);
}

__rust_helper int
rust_helper_atomic_read_acquire(const atomic_t *v)
{
	return atomic_read_acquire(v);
}

__rust_helper void
rust_helper_atomic_set(atomic_t *v, int i)
{
	atomic_set(v, i);
}

__rust_helper void
rust_helper_atomic_set_release(atomic_t *v, int i)
{
	atomic_set_release(v, i);
}

__rust_helper void
rust_helper_atomic_add(int i, atomic_t *v)
{
	atomic_add(i, v);
}

__rust_helper int
rust_helper_atomic_add_return(int i, atomic_t *v)
{
	return atomic_add_return(i, v);
}

__rust_helper int
rust_helper_atomic_add_return_acquire(int i, atomic_t *v)
{
	return atomic_add_return_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_add_return_release(int i, atomic_t *v)
{
	return atomic_add_return_release(i, v);
}

__rust_helper int
rust_helper_atomic_add_return_relaxed(int i, atomic_t *v)
{
	return atomic_add_return_relaxed(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_add(int i, atomic_t *v)
{
	return atomic_fetch_add(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_add_acquire(int i, atomic_t *v)
{
	return atomic_fetch_add_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_add_release(int i, atomic_t *v)
{
	return atomic_fetch_add_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_add_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_add_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic_sub(int i, atomic_t *v)
{
	atomic_sub(i, v);
}

__rust_helper int
rust_helper_atomic_sub_return(int i, atomic_t *v)
{
	return atomic_sub_return(i, v);
}

__rust_helper int
rust_helper_atomic_sub_return_acquire(int i, atomic_t *v)
{
	return atomic_sub_return_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_sub_return_release(int i, atomic_t *v)
{
	return atomic_sub_return_release(i, v);
}

__rust_helper int
rust_helper_atomic_sub_return_relaxed(int i, atomic_t *v)
{
	return atomic_sub_return_relaxed(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_sub(int i, atomic_t *v)
{
	return atomic_fetch_sub(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_sub_acquire(int i, atomic_t *v)
{
	return atomic_fetch_sub_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_sub_release(int i, atomic_t *v)
{
	return atomic_fetch_sub_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_sub_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_sub_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic_inc(atomic_t *v)
{
	atomic_inc(v);
}

__rust_helper int
rust_helper_atomic_inc_return(atomic_t *v)
{
	return atomic_inc_return(v);
}

__rust_helper int
rust_helper_atomic_inc_return_acquire(atomic_t *v)
{
	return atomic_inc_return_acquire(v);
}

__rust_helper int
rust_helper_atomic_inc_return_release(atomic_t *v)
{
	return atomic_inc_return_release(v);
}

__rust_helper int
rust_helper_atomic_inc_return_relaxed(atomic_t *v)
{
	return atomic_inc_return_relaxed(v);
}

__rust_helper int
rust_helper_atomic_fetch_inc(atomic_t *v)
{
	return atomic_fetch_inc(v);
}

__rust_helper int
rust_helper_atomic_fetch_inc_acquire(atomic_t *v)
{
	return atomic_fetch_inc_acquire(v);
}

__rust_helper int
rust_helper_atomic_fetch_inc_release(atomic_t *v)
{
	return atomic_fetch_inc_release(v);
}

__rust_helper int
rust_helper_atomic_fetch_inc_relaxed(atomic_t *v)
{
	return atomic_fetch_inc_relaxed(v);
}

__rust_helper void
rust_helper_atomic_dec(atomic_t *v)
{
	atomic_dec(v);
}

__rust_helper int
rust_helper_atomic_dec_return(atomic_t *v)
{
	return atomic_dec_return(v);
}

__rust_helper int
rust_helper_atomic_dec_return_acquire(atomic_t *v)
{
	return atomic_dec_return_acquire(v);
}

__rust_helper int
rust_helper_atomic_dec_return_release(atomic_t *v)
{
	return atomic_dec_return_release(v);
}

__rust_helper int
rust_helper_atomic_dec_return_relaxed(atomic_t *v)
{
	return atomic_dec_return_relaxed(v);
}

__rust_helper int
rust_helper_atomic_fetch_dec(atomic_t *v)
{
	return atomic_fetch_dec(v);
}

__rust_helper int
rust_helper_atomic_fetch_dec_acquire(atomic_t *v)
{
	return atomic_fetch_dec_acquire(v);
}

__rust_helper int
rust_helper_atomic_fetch_dec_release(atomic_t *v)
{
	return atomic_fetch_dec_release(v);
}

__rust_helper int
rust_helper_atomic_fetch_dec_relaxed(atomic_t *v)
{
	return atomic_fetch_dec_relaxed(v);
}

__rust_helper void
rust_helper_atomic_and(int i, atomic_t *v)
{
	atomic_and(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_and(int i, atomic_t *v)
{
	return atomic_fetch_and(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_and_acquire(int i, atomic_t *v)
{
	return atomic_fetch_and_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_and_release(int i, atomic_t *v)
{
	return atomic_fetch_and_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_and_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_and_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic_andnot(int i, atomic_t *v)
{
	atomic_andnot(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_andnot(int i, atomic_t *v)
{
	return atomic_fetch_andnot(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_andnot_acquire(int i, atomic_t *v)
{
	return atomic_fetch_andnot_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_andnot_release(int i, atomic_t *v)
{
	return atomic_fetch_andnot_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_andnot_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_andnot_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic_or(int i, atomic_t *v)
{
	atomic_or(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_or(int i, atomic_t *v)
{
	return atomic_fetch_or(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_or_acquire(int i, atomic_t *v)
{
	return atomic_fetch_or_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_or_release(int i, atomic_t *v)
{
	return atomic_fetch_or_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_or_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_or_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic_xor(int i, atomic_t *v)
{
	atomic_xor(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_xor(int i, atomic_t *v)
{
	return atomic_fetch_xor(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_xor_acquire(int i, atomic_t *v)
{
	return atomic_fetch_xor_acquire(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_xor_release(int i, atomic_t *v)
{
	return atomic_fetch_xor_release(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_xor_relaxed(int i, atomic_t *v)
{
	return atomic_fetch_xor_relaxed(i, v);
}

__rust_helper int
rust_helper_atomic_xchg(atomic_t *v, int new)
{
	return atomic_xchg(v, new);
}

__rust_helper int
rust_helper_atomic_xchg_acquire(atomic_t *v, int new)
{
	return atomic_xchg_acquire(v, new);
}

__rust_helper int
rust_helper_atomic_xchg_release(atomic_t *v, int new)
{
	return atomic_xchg_release(v, new);
}

__rust_helper int
rust_helper_atomic_xchg_relaxed(atomic_t *v, int new)
{
	return atomic_xchg_relaxed(v, new);
}

__rust_helper int
rust_helper_atomic_cmpxchg(atomic_t *v, int old, int new)
{
	return atomic_cmpxchg(v, old, new);
}

__rust_helper int
rust_helper_atomic_cmpxchg_acquire(atomic_t *v, int old, int new)
{
	return atomic_cmpxchg_acquire(v, old, new);
}

__rust_helper int
rust_helper_atomic_cmpxchg_release(atomic_t *v, int old, int new)
{
	return atomic_cmpxchg_release(v, old, new);
}

__rust_helper int
rust_helper_atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)
{
	return atomic_cmpxchg_relaxed(v, old, new);
}

__rust_helper bool
rust_helper_atomic_try_cmpxchg(atomic_t *v, int *old, int new)
{
	return atomic_try_cmpxchg(v, old, new);
}

__rust_helper bool
rust_helper_atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)
{
	return atomic_try_cmpxchg_acquire(v, old, new);
}

__rust_helper bool
rust_helper_atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)
{
	return atomic_try_cmpxchg_release(v, old, new);
}

__rust_helper bool
rust_helper_atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)
{
	return atomic_try_cmpxchg_relaxed(v, old, new);
}

__rust_helper bool
rust_helper_atomic_sub_and_test(int i, atomic_t *v)
{
	return atomic_sub_and_test(i, v);
}

__rust_helper bool
rust_helper_atomic_dec_and_test(atomic_t *v)
{
	return atomic_dec_and_test(v);
}

__rust_helper bool
rust_helper_atomic_inc_and_test(atomic_t *v)
{
	return atomic_inc_and_test(v);
}

__rust_helper bool
rust_helper_atomic_add_negative(int i, atomic_t *v)
{
	return atomic_add_negative(i, v);
}

__rust_helper bool
rust_helper_atomic_add_negative_acquire(int i, atomic_t *v)
{
	return atomic_add_negative_acquire(i, v);
}

__rust_helper bool
rust_helper_atomic_add_negative_release(int i, atomic_t *v)
{
	return atomic_add_negative_release(i, v);
}

__rust_helper bool
rust_helper_atomic_add_negative_relaxed(int i, atomic_t *v)
{
	return atomic_add_negative_relaxed(i, v);
}

__rust_helper int
rust_helper_atomic_fetch_add_unless(atomic_t *v, int a, int u)
{
	return atomic_fetch_add_unless(v, a, u);
}

__rust_helper bool
rust_helper_atomic_add_unless(atomic_t *v, int a, int u)
{
	return atomic_add_unless(v, a, u);
}

__rust_helper bool
rust_helper_atomic_inc_not_zero(atomic_t *v)
{
	return atomic_inc_not_zero(v);
}

__rust_helper bool
rust_helper_atomic_inc_unless_negative(atomic_t *v)
{
	return atomic_inc_unless_negative(v);
}

__rust_helper bool
rust_helper_atomic_dec_unless_positive(atomic_t *v)
{
	return atomic_dec_unless_positive(v);
}

__rust_helper int
rust_helper_atomic_dec_if_positive(atomic_t *v)
{
	return atomic_dec_if_positive(v);
}

__rust_helper s64
rust_helper_atomic64_read(const atomic64_t *v)
{
	return atomic64_read(v);
}

__rust_helper s64
rust_helper_atomic64_read_acquire(const atomic64_t *v)
{
	return atomic64_read_acquire(v);
}

__rust_helper void
rust_helper_atomic64_set(atomic64_t *v, s64 i)
{
	atomic64_set(v, i);
}

__rust_helper void
rust_helper_atomic64_set_release(atomic64_t *v, s64 i)
{
	atomic64_set_release(v, i);
}

__rust_helper void
rust_helper_atomic64_add(s64 i, atomic64_t *v)
{
	atomic64_add(i, v);
}

__rust_helper s64
rust_helper_atomic64_add_return(s64 i, atomic64_t *v)
{
	return atomic64_add_return(i, v);
}

__rust_helper s64
rust_helper_atomic64_add_return_acquire(s64 i, atomic64_t *v)
{
	return atomic64_add_return_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_add_return_release(s64 i, atomic64_t *v)
{
	return atomic64_add_return_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_add_return_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_add_return_relaxed(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_add(s64 i, atomic64_t *v)
{
	return atomic64_fetch_add(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_add_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_add_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_add_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_add_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_add_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_add_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic64_sub(s64 i, atomic64_t *v)
{
	atomic64_sub(i, v);
}

__rust_helper s64
rust_helper_atomic64_sub_return(s64 i, atomic64_t *v)
{
	return atomic64_sub_return(i, v);
}

__rust_helper s64
rust_helper_atomic64_sub_return_acquire(s64 i, atomic64_t *v)
{
	return atomic64_sub_return_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_sub_return_release(s64 i, atomic64_t *v)
{
	return atomic64_sub_return_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_sub_return_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_sub_return_relaxed(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_sub(s64 i, atomic64_t *v)
{
	return atomic64_fetch_sub(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_sub_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_sub_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_sub_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_sub_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_sub_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic64_inc(atomic64_t *v)
{
	atomic64_inc(v);
}

__rust_helper s64
rust_helper_atomic64_inc_return(atomic64_t *v)
{
	return atomic64_inc_return(v);
}

__rust_helper s64
rust_helper_atomic64_inc_return_acquire(atomic64_t *v)
{
	return atomic64_inc_return_acquire(v);
}

__rust_helper s64
rust_helper_atomic64_inc_return_release(atomic64_t *v)
{
	return atomic64_inc_return_release(v);
}

__rust_helper s64
rust_helper_atomic64_inc_return_relaxed(atomic64_t *v)
{
	return atomic64_inc_return_relaxed(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_inc(atomic64_t *v)
{
	return atomic64_fetch_inc(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_inc_acquire(atomic64_t *v)
{
	return atomic64_fetch_inc_acquire(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_inc_release(atomic64_t *v)
{
	return atomic64_fetch_inc_release(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_inc_relaxed(atomic64_t *v)
{
	return atomic64_fetch_inc_relaxed(v);
}

__rust_helper void
rust_helper_atomic64_dec(atomic64_t *v)
{
	atomic64_dec(v);
}

__rust_helper s64
rust_helper_atomic64_dec_return(atomic64_t *v)
{
	return atomic64_dec_return(v);
}

__rust_helper s64
rust_helper_atomic64_dec_return_acquire(atomic64_t *v)
{
	return atomic64_dec_return_acquire(v);
}

__rust_helper s64
rust_helper_atomic64_dec_return_release(atomic64_t *v)
{
	return atomic64_dec_return_release(v);
}

__rust_helper s64
rust_helper_atomic64_dec_return_relaxed(atomic64_t *v)
{
	return atomic64_dec_return_relaxed(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_dec(atomic64_t *v)
{
	return atomic64_fetch_dec(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_dec_acquire(atomic64_t *v)
{
	return atomic64_fetch_dec_acquire(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_dec_release(atomic64_t *v)
{
	return atomic64_fetch_dec_release(v);
}

__rust_helper s64
rust_helper_atomic64_fetch_dec_relaxed(atomic64_t *v)
{
	return atomic64_fetch_dec_relaxed(v);
}

__rust_helper void
rust_helper_atomic64_and(s64 i, atomic64_t *v)
{
	atomic64_and(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_and(s64 i, atomic64_t *v)
{
	return atomic64_fetch_and(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_and_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_and_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_and_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_and_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_and_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_and_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic64_andnot(s64 i, atomic64_t *v)
{
	atomic64_andnot(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_andnot(s64 i, atomic64_t *v)
{
	return atomic64_fetch_andnot(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_andnot_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_andnot_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_andnot_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_andnot_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_andnot_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_andnot_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic64_or(s64 i, atomic64_t *v)
{
	atomic64_or(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_or(s64 i, atomic64_t *v)
{
	return atomic64_fetch_or(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_or_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_or_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_or_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_or_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_or_relaxed(i, v);
}

__rust_helper void
rust_helper_atomic64_xor(s64 i, atomic64_t *v)
{
	atomic64_xor(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_xor(s64 i, atomic64_t *v)
{
	return atomic64_fetch_xor(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_xor_acquire(s64 i, atomic64_t *v)
{
	return atomic64_fetch_xor_acquire(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_xor_release(s64 i, atomic64_t *v)
{
	return atomic64_fetch_xor_release(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_fetch_xor_relaxed(i, v);
}

__rust_helper s64
rust_helper_atomic64_xchg(atomic64_t *v, s64 new)
{
	return atomic64_xchg(v, new);
}

__rust_helper s64
rust_helper_atomic64_xchg_acquire(atomic64_t *v, s64 new)
{
	return atomic64_xchg_acquire(v, new);
}

__rust_helper s64
rust_helper_atomic64_xchg_release(atomic64_t *v, s64 new)
{
	return atomic64_xchg_release(v, new);
}

__rust_helper s64
rust_helper_atomic64_xchg_relaxed(atomic64_t *v, s64 new)
{
	return atomic64_xchg_relaxed(v, new);
}

__rust_helper s64
rust_helper_atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)
{
	return atomic64_cmpxchg(v, old, new);
}

__rust_helper s64
rust_helper_atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)
{
	return atomic64_cmpxchg_acquire(v, old, new);
}

__rust_helper s64
rust_helper_atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)
{
	return atomic64_cmpxchg_release(v, old, new);
}

__rust_helper s64
rust_helper_atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)
{
	return atomic64_cmpxchg_relaxed(v, old, new);
}

__rust_helper bool
rust_helper_atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)
{
	return atomic64_try_cmpxchg(v, old, new);
}

__rust_helper bool
rust_helper_atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)
{
	return atomic64_try_cmpxchg_acquire(v, old, new);
}

__rust_helper bool
rust_helper_atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)
{
	return atomic64_try_cmpxchg_release(v, old, new);
}

__rust_helper bool
rust_helper_atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)
{
	return atomic64_try_cmpxchg_relaxed(v, old, new);
}

__rust_helper bool
rust_helper_atomic64_sub_and_test(s64 i, atomic64_t *v)
{
	return atomic64_sub_and_test(i, v);
}

__rust_helper bool
rust_helper_atomic64_dec_and_test(atomic64_t *v)
{
	return atomic64_dec_and_test(v);
}

__rust_helper bool
rust_helper_atomic64_inc_and_test(atomic64_t *v)
{
	return atomic64_inc_and_test(v);
}

__rust_helper bool
rust_helper_atomic64_add_negative(s64 i, atomic64_t *v)
{
	return atomic64_add_negative(i, v);
}

__rust_helper bool
rust_helper_atomic64_add_negative_acquire(s64 i, atomic64_t *v)
{
	return atomic64_add_negative_acquire(i, v);
}

__rust_helper bool
rust_helper_atomic64_add_negative_release(s64 i, atomic64_t *v)
{
	return atomic64_add_negative_release(i, v);
}

__rust_helper bool
rust_helper_atomic64_add_negative_relaxed(s64 i, atomic64_t *v)
{
	return atomic64_add_negative_relaxed(i, v);
}

__rust_helper s64
rust_helper_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)
{
	return atomic64_fetch_add_unless(v, a, u);
}

__rust_helper bool
rust_helper_atomic64_add_unless(atomic64_t *v, s64 a, s64 u)
{
	return atomic64_add_unless(v, a, u);
}

__rust_helper bool
rust_helper_atomic64_inc_not_zero(atomic64_t *v)
{
	return atomic64_inc_not_zero(v);
}

__rust_helper bool
rust_helper_atomic64_inc_unless_negative(atomic64_t *v)
{
	return atomic64_inc_unless_negative(v);
}

__rust_helper bool
rust_helper_atomic64_dec_unless_positive(atomic64_t *v)
{
	return atomic64_dec_unless_positive(v);
}

__rust_helper s64
rust_helper_atomic64_dec_if_positive(atomic64_t *v)
{
	return atomic64_dec_if_positive(v);
}

#endif /* _RUST_ATOMIC_API_H */
// e4edb6174dd42a265284958f00a7cea7ddb464b1
