1 1.8 riastrad /* $NetBSD: atomic_op_namespace.h,v 1.8 2025/03/04 00:40:42 riastradh Exp $ */ 2 1.2 ad 3 1.2 ad /*- 4 1.4 ad * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. 5 1.2 ad * All rights reserved. 6 1.2 ad * 7 1.2 ad * This code is derived from software contributed to The NetBSD Foundation 8 1.2 ad * by Jason R. Thorpe. 9 1.2 ad * 10 1.2 ad * Redistribution and use in source and binary forms, with or without 11 1.2 ad * modification, are permitted provided that the following conditions 12 1.2 ad * are met: 13 1.2 ad * 1. Redistributions of source code must retain the above copyright 14 1.2 ad * notice, this list of conditions and the following disclaimer. 15 1.2 ad * 2. Redistributions in binary form must reproduce the above copyright 16 1.2 ad * notice, this list of conditions and the following disclaimer in the 17 1.2 ad * documentation and/or other materials provided with the distribution. 18 1.2 ad * 19 1.2 ad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.2 ad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.2 ad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.2 ad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.2 ad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.2 ad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.2 ad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.2 ad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.2 ad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.2 ad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.2 ad * POSSIBILITY OF SUCH DAMAGE. 30 1.2 ad */ 31 1.2 ad 32 1.2 ad #ifndef _ATOMIC_OP_NAMESPACE_H_ 33 1.2 ad #define _ATOMIC_OP_NAMESPACE_H_ 34 1.2 ad 35 1.2 ad #include <sys/cdefs.h> 36 1.2 ad 37 1.2 ad #if !defined(__lint__) 38 1.2 ad 39 1.2 ad #define atomic_add_32 _atomic_add_32 40 1.2 ad #define atomic_add_int _atomic_add_int 41 1.2 ad #define atomic_add_long _atomic_add_long 42 1.2 ad #define atomic_add_ptr _atomic_add_ptr 43 1.2 ad #define atomic_add_64 _atomic_add_64 44 1.2 ad 45 1.2 ad #define atomic_add_32_nv _atomic_add_32_nv 46 1.2 ad #define atomic_add_int_nv _atomic_add_int_nv 47 1.2 ad #define atomic_add_long_nv _atomic_add_long_nv 48 1.2 ad #define atomic_add_ptr_nv _atomic_add_ptr_nv 49 1.2 ad #define atomic_add_64_nv _atomic_add_64_nv 50 1.2 ad 51 1.2 ad #define atomic_and_32 _atomic_and_32 52 1.2 ad #define atomic_and_uint _atomic_and_uint 53 1.2 ad #define atomic_and_ulong _atomic_and_ulong 54 1.2 ad #define atomic_and_64 _atomic_and_64 55 1.2 ad 56 1.2 ad #define atomic_and_32_nv _atomic_and_32_nv 57 1.2 ad #define atomic_and_uint_nv _atomic_and_uint_nv 58 1.2 ad #define atomic_and_ulong_nv _atomic_and_ulong_nv 59 1.2 ad #define atomic_and_64_nv _atomic_and_64_nv 60 1.7 martin #define atomic_and_16_nv _atomic_and_16_nv 61 1.7 martin #define atomic_and_8_nv _atomic_and_8_nv 62 1.2 ad 63 1.2 ad #define atomic_or_32 _atomic_or_32 64 1.2 ad #define atomic_or_uint _atomic_or_uint 65 1.2 ad #define atomic_or_ulong _atomic_or_ulong 66 1.2 ad #define atomic_or_64 _atomic_or_64 67 1.2 ad 68 1.2 ad #define atomic_or_32_nv _atomic_or_32_nv 69 1.2 ad #define atomic_or_uint_nv _atomic_or_uint_nv 70 1.2 ad #define atomic_or_ulong_nv _atomic_or_ulong_nv 71 1.2 ad #define atomic_or_64_nv _atomic_or_64_nv 72 1.2 ad 73 1.2 ad #define atomic_cas_32 _atomic_cas_32 74 1.2 ad #define atomic_cas_uint _atomic_cas_uint 75 1.2 ad #define atomic_cas_ulong _atomic_cas_ulong 76 1.2 ad #define atomic_cas_ptr _atomic_cas_ptr 77 1.2 ad #define atomic_cas_64 _atomic_cas_64 78 1.5 martin #define atomic_cas_16 _atomic_cas_16 79 1.5 martin #define atomic_cas_8 _atomic_cas_8 80 1.2 ad 81 1.4 ad #define atomic_cas_32_ni _atomic_cas_32_ni 82 1.4 ad #define atomic_cas_uint_ni _atomic_cas_uint_ni 83 1.4 ad #define atomic_cas_ulong_ni _atomic_cas_ulong_ni 84 1.4 ad #define atomic_cas_ptr_ni _atomic_cas_ptr_ni 85 1.4 ad #define atomic_cas_64_ni _atomic_cas_64_ni 86 1.4 ad 87 1.2 ad #define atomic_swap_32 _atomic_swap_32 88 1.2 ad #define atomic_swap_uint _atomic_swap_uint 89 1.2 ad #define atomic_swap_ulong _atomic_swap_ulong 90 1.2 ad #define atomic_swap_ptr _atomic_swap_ptr 91 1.2 ad #define atomic_swap_64 _atomic_swap_64 92 1.2 ad 93 1.2 ad #define atomic_dec_32 _atomic_dec_32 94 1.2 ad #define atomic_dec_uint _atomic_dec_uint 95 1.2 ad #define atomic_dec_ulong _atomic_dec_ulong 96 1.2 ad #define atomic_dec_ptr _atomic_dec_ptr 97 1.2 ad #define atomic_dec_64 _atomic_dec_64 98 1.2 ad 99 1.2 ad #define atomic_dec_32_nv _atomic_dec_32_nv 100 1.2 ad #define atomic_dec_uint_nv _atomic_dec_uint_nv 101 1.2 ad #define atomic_dec_ptr_nv _atomic_dec_ptr_nv 102 1.2 ad #define atomic_dec_64_nv _atomic_dec_64_nv 103 1.2 ad 104 1.2 ad #define atomic_inc_32 _atomic_inc_32 105 1.2 ad #define atomic_inc_uint _atomic_inc_uint 106 1.2 ad #define atomic_inc_ulong _atomic_inc_ulong 107 1.2 ad #define atomic_inc_ptr _atomic_inc_ptr 108 1.2 ad #define atomic_inc_64 _atomic_inc_64 109 1.2 ad 110 1.2 ad #define atomic_inc_32_nv _atomic_inc_32_nv 111 1.2 ad #define atomic_inc_uint_nv _atomic_inc_uint_nv 112 1.2 ad #define atomic_inc_ptr_nv _atomic_inc_ptr_nv 113 1.2 ad #define atomic_inc_64_nv _atomic_inc_64_nv 114 1.2 ad 115 1.8 riastrad #define membar_acquire _membar_acquire 116 1.8 riastrad #define membar_release _membar_release 117 1.2 ad #define membar_enter _membar_enter 118 1.2 ad #define membar_exit _membar_exit 119 1.2 ad #define membar_producer _membar_producer 120 1.2 ad #define membar_consumer _membar_consumer 121 1.2 ad #define membar_sync _membar_sync 122 1.2 ad 123 1.2 ad #endif /* __lint__ */ 124 1.2 ad 125 1.2 ad #if defined(_KERNEL) 126 1.2 ad #define atomic_op_alias(a,s) __strong_alias(a,s) 127 1.6 martin #ifdef _HARDKERNEL 128 1.6 martin #define crt_alias(a,s) __strong_alias(a,s) 129 1.6 martin #endif 130 1.2 ad #else 131 1.2 ad #define atomic_op_alias(a,s) __weak_alias(a,s) 132 1.6 martin #ifdef _LIBC 133 1.6 martin #define crt_alias(a,s) __strong_alias(a,s) 134 1.6 martin #endif 135 1.2 ad #endif /* _KERNEL */ 136 1.2 ad 137 1.6 martin #ifndef crt_alias 138 1.6 martin #define crt_alias(a,s) 139 1.6 martin #endif 140 1.6 martin 141 1.2 ad #endif /* _ATOMIC_OP_NAMESPACE_H_ */ 142