1*0a6a1f1dSLionel Sambuc/* $NetBSD: atomic.S,v 1.22 2014/05/23 03:17:31 uebayasi Exp $ */ 2b6cbf720SGianluca Guida 3b6cbf720SGianluca Guida/*- 4b6cbf720SGianluca Guida * Copyright (c) 2007 The NetBSD Foundation, Inc. 5b6cbf720SGianluca Guida * All rights reserved. 6b6cbf720SGianluca Guida * 7b6cbf720SGianluca Guida * This code is derived from software contributed to The NetBSD Foundation 8b6cbf720SGianluca Guida * by Jason R. Thorpe, and by Andrew Doran. 9b6cbf720SGianluca Guida * 10b6cbf720SGianluca Guida * Redistribution and use in source and binary forms, with or without 11b6cbf720SGianluca Guida * modification, are permitted provided that the following conditions 12b6cbf720SGianluca Guida * are met: 13b6cbf720SGianluca Guida * 1. Redistributions of source code must retain the above copyright 14b6cbf720SGianluca Guida * notice, this list of conditions and the following disclaimer. 15b6cbf720SGianluca Guida * 2. Redistributions in binary form must reproduce the above copyright 16b6cbf720SGianluca Guida * notice, this list of conditions and the following disclaimer in the 17b6cbf720SGianluca Guida * documentation and/or other materials provided with the distribution. 18b6cbf720SGianluca Guida * 19b6cbf720SGianluca Guida * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20b6cbf720SGianluca Guida * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21b6cbf720SGianluca Guida * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22b6cbf720SGianluca Guida * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23b6cbf720SGianluca Guida * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24b6cbf720SGianluca Guida * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25b6cbf720SGianluca Guida * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26b6cbf720SGianluca Guida * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27b6cbf720SGianluca Guida * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28b6cbf720SGianluca Guida * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29b6cbf720SGianluca Guida * POSSIBILITY OF SUCH DAMAGE. 30b6cbf720SGianluca Guida */ 31b6cbf720SGianluca Guida 32b6cbf720SGianluca Guida#include <sys/param.h> 33b6cbf720SGianluca Guida#include <machine/asm.h> 34*0a6a1f1dSLionel Sambuc/* 35*0a6a1f1dSLionel Sambuc * __HAVE_ constants should not be in <machine/types.h> 36*0a6a1f1dSLionel Sambuc * because we can't use them from assembly. OTOH we 37*0a6a1f1dSLionel Sambuc * only need __HAVE_ATOMIC64_OPS here, and we don't. 38*0a6a1f1dSLionel Sambuc */ 39b6cbf720SGianluca Guida#ifdef _KERNEL 40b6cbf720SGianluca Guida#define ALIAS(f, t) STRONG_ALIAS(f,t) 41b6cbf720SGianluca Guida#else 42b6cbf720SGianluca Guida#define ALIAS(f, t) WEAK_ALIAS(f,t) 43b6cbf720SGianluca Guida#endif 44b6cbf720SGianluca Guida 45b6cbf720SGianluca Guida#ifdef _HARDKERNEL 46b6cbf720SGianluca Guida#define LOCK(n) .Lpatch ## n: lock 47b6cbf720SGianluca Guida#define ENDLABEL(a) _ALIGN_TEXT; LABEL(a) 48b6cbf720SGianluca Guida#else 49b6cbf720SGianluca Guida#define LOCK(n) lock 50b6cbf720SGianluca Guida#define ENDLABEL(a) /* nothing */ 51b6cbf720SGianluca Guida#endif 52b6cbf720SGianluca Guida 53b6cbf720SGianluca Guida .text 54b6cbf720SGianluca Guida 55b6cbf720SGianluca GuidaENTRY(_atomic_add_32) 56b6cbf720SGianluca Guida movl 4(%esp), %edx 57b6cbf720SGianluca Guida movl 8(%esp), %eax 58b6cbf720SGianluca Guida LOCK(1) 59b6cbf720SGianluca Guida addl %eax, (%edx) 60b6cbf720SGianluca Guida ret 61*0a6a1f1dSLionel SambucEND(_atomic_add_32) 62b6cbf720SGianluca Guida 63b6cbf720SGianluca GuidaENTRY(_atomic_add_32_nv) 64b6cbf720SGianluca Guida movl 4(%esp), %edx 65b6cbf720SGianluca Guida movl 8(%esp), %eax 66b6cbf720SGianluca Guida movl %eax, %ecx 67b6cbf720SGianluca Guida LOCK(2) 68b6cbf720SGianluca Guida xaddl %eax, (%edx) 69b6cbf720SGianluca Guida addl %ecx, %eax 70b6cbf720SGianluca Guida ret 71*0a6a1f1dSLionel SambucEND(_atomic_add_32_nv) 72b6cbf720SGianluca Guida 73b6cbf720SGianluca GuidaENTRY(_atomic_and_32) 74b6cbf720SGianluca Guida movl 4(%esp), %edx 75b6cbf720SGianluca Guida movl 8(%esp), %eax 76b6cbf720SGianluca Guida LOCK(3) 77b6cbf720SGianluca Guida andl %eax, (%edx) 78b6cbf720SGianluca Guida ret 79*0a6a1f1dSLionel SambucEND(_atomic_and_32) 80b6cbf720SGianluca Guida 81b6cbf720SGianluca GuidaENTRY(_atomic_and_32_nv) 82b6cbf720SGianluca Guida movl 4(%esp), %edx 83b6cbf720SGianluca Guida movl (%edx), %eax 84b6cbf720SGianluca Guida0: 85b6cbf720SGianluca Guida movl %eax, %ecx 86b6cbf720SGianluca Guida andl 8(%esp), %ecx 87b6cbf720SGianluca Guida LOCK(4) 88b6cbf720SGianluca Guida cmpxchgl %ecx, (%edx) 89b6cbf720SGianluca Guida jnz 1f 90b6cbf720SGianluca Guida movl %ecx, %eax 91b6cbf720SGianluca Guida ret 92b6cbf720SGianluca Guida1: 93b6cbf720SGianluca Guida jmp 0b 94*0a6a1f1dSLionel SambucEND(_atomic_and_32_nv) 95b6cbf720SGianluca Guida 96b6cbf720SGianluca GuidaENTRY(_atomic_dec_32) 97b6cbf720SGianluca Guida movl 4(%esp), %edx 98b6cbf720SGianluca Guida LOCK(5) 99b6cbf720SGianluca Guida decl (%edx) 100b6cbf720SGianluca Guida ret 101*0a6a1f1dSLionel SambucEND(_atomic_dec_32) 102b6cbf720SGianluca Guida 103b6cbf720SGianluca GuidaENTRY(_atomic_dec_32_nv) 104b6cbf720SGianluca Guida movl 4(%esp), %edx 105b6cbf720SGianluca Guida movl $-1, %eax 106b6cbf720SGianluca Guida LOCK(6) 107b6cbf720SGianluca Guida xaddl %eax, (%edx) 108b6cbf720SGianluca Guida decl %eax 109b6cbf720SGianluca Guida ret 110*0a6a1f1dSLionel SambucEND(_atomic_dec_32_nv) 111b6cbf720SGianluca Guida 112b6cbf720SGianluca GuidaENTRY(_atomic_inc_32) 113b6cbf720SGianluca Guida movl 4(%esp), %edx 114b6cbf720SGianluca Guida LOCK(7) 115b6cbf720SGianluca Guida incl (%edx) 116b6cbf720SGianluca Guida ret 117*0a6a1f1dSLionel SambucEND(_atomic_inc_32) 118b6cbf720SGianluca Guida 119b6cbf720SGianluca GuidaENTRY(_atomic_inc_32_nv) 120b6cbf720SGianluca Guida movl 4(%esp), %edx 121b6cbf720SGianluca Guida movl $1, %eax 122b6cbf720SGianluca Guida LOCK(8) 123b6cbf720SGianluca Guida xaddl %eax, (%edx) 124b6cbf720SGianluca Guida incl %eax 125b6cbf720SGianluca Guida ret 126*0a6a1f1dSLionel SambucEND(_atomic_inc_32_nv) 127b6cbf720SGianluca Guida 128b6cbf720SGianluca GuidaENTRY(_atomic_or_32) 129b6cbf720SGianluca Guida movl 4(%esp), %edx 130b6cbf720SGianluca Guida movl 8(%esp), %eax 131b6cbf720SGianluca Guida LOCK(9) 132b6cbf720SGianluca Guida orl %eax, (%edx) 133b6cbf720SGianluca Guida ret 134*0a6a1f1dSLionel SambucEND(_atomic_or_32) 135b6cbf720SGianluca Guida 136b6cbf720SGianluca GuidaENTRY(_atomic_or_32_nv) 137b6cbf720SGianluca Guida movl 4(%esp), %edx 138b6cbf720SGianluca Guida movl (%edx), %eax 139b6cbf720SGianluca Guida0: 140b6cbf720SGianluca Guida movl %eax, %ecx 141b6cbf720SGianluca Guida orl 8(%esp), %ecx 142b6cbf720SGianluca Guida LOCK(10) 143b6cbf720SGianluca Guida cmpxchgl %ecx, (%edx) 144b6cbf720SGianluca Guida jnz 1f 145b6cbf720SGianluca Guida movl %ecx, %eax 146b6cbf720SGianluca Guida ret 147b6cbf720SGianluca Guida1: 148b6cbf720SGianluca Guida jmp 0b 149*0a6a1f1dSLionel SambucEND(_atomic_or_32_nv) 150b6cbf720SGianluca Guida 151b6cbf720SGianluca GuidaENTRY(_atomic_swap_32) 152b6cbf720SGianluca Guida movl 4(%esp), %edx 153b6cbf720SGianluca Guida movl 8(%esp), %eax 154b6cbf720SGianluca Guida xchgl %eax, (%edx) 155b6cbf720SGianluca Guida ret 156*0a6a1f1dSLionel SambucEND(_atomic_swap_32) 157b6cbf720SGianluca Guida 158b6cbf720SGianluca GuidaENTRY(_atomic_cas_32) 159b6cbf720SGianluca Guida movl 4(%esp), %edx 160b6cbf720SGianluca Guida movl 8(%esp), %eax 161b6cbf720SGianluca Guida movl 12(%esp), %ecx 162b6cbf720SGianluca Guida LOCK(12) 163b6cbf720SGianluca Guida cmpxchgl %ecx, (%edx) 164b6cbf720SGianluca Guida /* %eax now contains the old value */ 165b6cbf720SGianluca Guida ret 166*0a6a1f1dSLionel SambucEND(_atomic_cas_32) 167b6cbf720SGianluca Guida 168b6cbf720SGianluca GuidaENTRY(_atomic_cas_32_ni) 169b6cbf720SGianluca Guida movl 4(%esp), %edx 170b6cbf720SGianluca Guida movl 8(%esp), %eax 171b6cbf720SGianluca Guida movl 12(%esp), %ecx 172b6cbf720SGianluca Guida cmpxchgl %ecx, (%edx) 173b6cbf720SGianluca Guida /* %eax now contains the old value */ 174b6cbf720SGianluca Guida ret 175*0a6a1f1dSLionel SambucEND(_atomic_cas_32_ni) 176b6cbf720SGianluca Guida 177b6cbf720SGianluca GuidaENTRY(_membar_consumer) 178b6cbf720SGianluca Guida LOCK(13) 179b6cbf720SGianluca Guida addl $0, -4(%esp) 180b6cbf720SGianluca Guida ret 181*0a6a1f1dSLionel SambucEND(_membar_consumer) 182b6cbf720SGianluca GuidaENDLABEL(membar_consumer_end) 183b6cbf720SGianluca Guida 184b6cbf720SGianluca GuidaENTRY(_membar_producer) 185b6cbf720SGianluca Guida /* A store is enough */ 186b6cbf720SGianluca Guida movl $0, -4(%esp) 187b6cbf720SGianluca Guida ret 188*0a6a1f1dSLionel SambucEND(_membar_producer) 189b6cbf720SGianluca GuidaENDLABEL(membar_producer_end) 190b6cbf720SGianluca Guida 191b6cbf720SGianluca GuidaENTRY(_membar_sync) 192b6cbf720SGianluca Guida LOCK(14) 193b6cbf720SGianluca Guida addl $0, -4(%esp) 194b6cbf720SGianluca Guida ret 195*0a6a1f1dSLionel SambucEND(_membar_sync) 196b6cbf720SGianluca GuidaENDLABEL(membar_sync_end) 197b6cbf720SGianluca Guida 198*0a6a1f1dSLionel Sambuc#if defined(__HAVE_ATOMIC64_OPS) || defined(_KERNEL) 199b6cbf720SGianluca GuidaENTRY(_atomic_cas_64) 200*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL 201b6cbf720SGianluca Guida pushf 202b6cbf720SGianluca Guida cli 203*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */ 204b6cbf720SGianluca Guida pushl %edi 205b6cbf720SGianluca Guida pushl %ebx 206b6cbf720SGianluca Guida movl 12(%esp), %edi 207b6cbf720SGianluca Guida movl 16(%esp), %eax 208b6cbf720SGianluca Guida movl 20(%esp), %edx 209b6cbf720SGianluca Guida movl 24(%esp), %ebx 210b6cbf720SGianluca Guida movl 28(%esp), %ecx 211b6cbf720SGianluca Guida cmpl 0(%edi), %eax 212b6cbf720SGianluca Guida jne 2f 213b6cbf720SGianluca Guida cmpl 4(%edi), %edx 214b6cbf720SGianluca Guida jne 2f 215b6cbf720SGianluca Guida movl %ebx, 0(%edi) 216b6cbf720SGianluca Guida movl %ecx, 4(%edi) 217b6cbf720SGianluca Guida1: 218b6cbf720SGianluca Guida popl %ebx 219b6cbf720SGianluca Guida popl %edi 220*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL 221b6cbf720SGianluca Guida popf 222*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */ 223b6cbf720SGianluca Guida ret 224b6cbf720SGianluca Guida2: 225b6cbf720SGianluca Guida movl 0(%edi), %eax 226b6cbf720SGianluca Guida movl 4(%edi), %edx 227b6cbf720SGianluca Guida jmp 1b 228*0a6a1f1dSLionel SambucEND(_atomic_cas_64) 229b6cbf720SGianluca GuidaENDLABEL(_atomic_cas_64_end) 230b6cbf720SGianluca Guida 231b6cbf720SGianluca GuidaENTRY(_atomic_cas_cx8) 232b6cbf720SGianluca Guida pushl %edi 233b6cbf720SGianluca Guida pushl %ebx 234b6cbf720SGianluca Guida movl 12(%esp), %edi 235b6cbf720SGianluca Guida movl 16(%esp), %eax 236b6cbf720SGianluca Guida movl 20(%esp), %edx 237b6cbf720SGianluca Guida movl 24(%esp), %ebx 238b6cbf720SGianluca Guida movl 28(%esp), %ecx 239b6cbf720SGianluca Guida LOCK(15) 240b6cbf720SGianluca Guida cmpxchg8b (%edi) 241b6cbf720SGianluca Guida popl %ebx 242b6cbf720SGianluca Guida popl %edi 243b6cbf720SGianluca Guida ret 244*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL 245b6cbf720SGianluca Guida#ifdef GPROF 246b6cbf720SGianluca Guida .space 16, 0x90 247b6cbf720SGianluca Guida#else 248b6cbf720SGianluca Guida .space 32, 0x90 249b6cbf720SGianluca Guida#endif 250*0a6a1f1dSLionel Sambuc#endif /* _HARDKERNEL */ 251*0a6a1f1dSLionel SambucEND(_atomic_cas_cx8) 252b6cbf720SGianluca GuidaENDLABEL(_atomic_cas_cx8_end) 253*0a6a1f1dSLionel Sambuc#endif /* __HAVE_ATOMIC64_OPS || _KERNEL */ 254b6cbf720SGianluca Guida 255*0a6a1f1dSLionel Sambuc#ifdef _HARDKERNEL 256b6cbf720SGianluca GuidaENTRY(sse2_lfence) 257b6cbf720SGianluca Guida lfence 258b6cbf720SGianluca Guida ret 259*0a6a1f1dSLionel SambucEND(sse2_lfence) 260b6cbf720SGianluca GuidaENDLABEL(sse2_lfence_end) 261b6cbf720SGianluca Guida 262b6cbf720SGianluca GuidaENTRY(sse2_mfence) 263b6cbf720SGianluca Guida mfence 264b6cbf720SGianluca Guida ret 265*0a6a1f1dSLionel SambucEND(sse2_mfence) 266b6cbf720SGianluca GuidaENDLABEL(sse2_mfence_end) 267b6cbf720SGianluca Guida 268b6cbf720SGianluca Guidaatomic_lockpatch: 269b6cbf720SGianluca Guida .globl atomic_lockpatch 270b6cbf720SGianluca Guida .long .Lpatch1, .Lpatch2, .Lpatch3, .Lpatch4, .Lpatch5 271b6cbf720SGianluca Guida .long .Lpatch6, .Lpatch7, .Lpatch8, .Lpatch9, .Lpatch10 272b6cbf720SGianluca Guida .long .Lpatch12, .Lpatch13, .Lpatch14, .Lpatch15, 0 273b6cbf720SGianluca Guida#endif /* _HARDKERNEL */ 274b6cbf720SGianluca Guida 275b6cbf720SGianluca GuidaALIAS(atomic_add_32,_atomic_add_32) 276b6cbf720SGianluca GuidaALIAS(atomic_add_int,_atomic_add_32) 277b6cbf720SGianluca GuidaALIAS(atomic_add_long,_atomic_add_32) 278b6cbf720SGianluca GuidaALIAS(atomic_add_ptr,_atomic_add_32) 279b6cbf720SGianluca Guida 280b6cbf720SGianluca GuidaALIAS(atomic_add_32_nv,_atomic_add_32_nv) 281b6cbf720SGianluca GuidaALIAS(atomic_add_int_nv,_atomic_add_32_nv) 282b6cbf720SGianluca GuidaALIAS(atomic_add_long_nv,_atomic_add_32_nv) 283b6cbf720SGianluca GuidaALIAS(atomic_add_ptr_nv,_atomic_add_32_nv) 284b6cbf720SGianluca Guida 285b6cbf720SGianluca GuidaALIAS(atomic_and_32,_atomic_and_32) 286b6cbf720SGianluca GuidaALIAS(atomic_and_uint,_atomic_and_32) 287b6cbf720SGianluca GuidaALIAS(atomic_and_ulong,_atomic_and_32) 288b6cbf720SGianluca GuidaALIAS(atomic_and_ptr,_atomic_and_32) 289b6cbf720SGianluca Guida 290b6cbf720SGianluca GuidaALIAS(atomic_and_32_nv,_atomic_and_32_nv) 291b6cbf720SGianluca GuidaALIAS(atomic_and_uint_nv,_atomic_and_32_nv) 292b6cbf720SGianluca GuidaALIAS(atomic_and_ulong_nv,_atomic_and_32_nv) 293b6cbf720SGianluca GuidaALIAS(atomic_and_ptr_nv,_atomic_and_32_nv) 294b6cbf720SGianluca Guida 295b6cbf720SGianluca GuidaALIAS(atomic_dec_32,_atomic_dec_32) 296b6cbf720SGianluca GuidaALIAS(atomic_dec_uint,_atomic_dec_32) 297b6cbf720SGianluca GuidaALIAS(atomic_dec_ulong,_atomic_dec_32) 298b6cbf720SGianluca GuidaALIAS(atomic_dec_ptr,_atomic_dec_32) 299b6cbf720SGianluca Guida 300b6cbf720SGianluca GuidaALIAS(atomic_dec_32_nv,_atomic_dec_32_nv) 301b6cbf720SGianluca GuidaALIAS(atomic_dec_uint_nv,_atomic_dec_32_nv) 302b6cbf720SGianluca GuidaALIAS(atomic_dec_ulong_nv,_atomic_dec_32_nv) 303b6cbf720SGianluca GuidaALIAS(atomic_dec_ptr_nv,_atomic_dec_32_nv) 304b6cbf720SGianluca Guida 305b6cbf720SGianluca GuidaALIAS(atomic_inc_32,_atomic_inc_32) 306b6cbf720SGianluca GuidaALIAS(atomic_inc_uint,_atomic_inc_32) 307b6cbf720SGianluca GuidaALIAS(atomic_inc_ulong,_atomic_inc_32) 308b6cbf720SGianluca GuidaALIAS(atomic_inc_ptr,_atomic_inc_32) 309b6cbf720SGianluca Guida 310b6cbf720SGianluca GuidaALIAS(atomic_inc_32_nv,_atomic_inc_32_nv) 311b6cbf720SGianluca GuidaALIAS(atomic_inc_uint_nv,_atomic_inc_32_nv) 312b6cbf720SGianluca GuidaALIAS(atomic_inc_ulong_nv,_atomic_inc_32_nv) 313b6cbf720SGianluca GuidaALIAS(atomic_inc_ptr_nv,_atomic_inc_32_nv) 314b6cbf720SGianluca Guida 315b6cbf720SGianluca GuidaALIAS(atomic_or_32,_atomic_or_32) 316b6cbf720SGianluca GuidaALIAS(atomic_or_uint,_atomic_or_32) 317b6cbf720SGianluca GuidaALIAS(atomic_or_ulong,_atomic_or_32) 318b6cbf720SGianluca GuidaALIAS(atomic_or_ptr,_atomic_or_32) 319b6cbf720SGianluca Guida 320b6cbf720SGianluca GuidaALIAS(atomic_or_32_nv,_atomic_or_32_nv) 321b6cbf720SGianluca GuidaALIAS(atomic_or_uint_nv,_atomic_or_32_nv) 322b6cbf720SGianluca GuidaALIAS(atomic_or_ulong_nv,_atomic_or_32_nv) 323b6cbf720SGianluca GuidaALIAS(atomic_or_ptr_nv,_atomic_or_32_nv) 324b6cbf720SGianluca Guida 325b6cbf720SGianluca GuidaALIAS(atomic_swap_32,_atomic_swap_32) 326b6cbf720SGianluca GuidaALIAS(atomic_swap_uint,_atomic_swap_32) 327b6cbf720SGianluca GuidaALIAS(atomic_swap_ulong,_atomic_swap_32) 328b6cbf720SGianluca GuidaALIAS(atomic_swap_ptr,_atomic_swap_32) 329b6cbf720SGianluca Guida 330b6cbf720SGianluca GuidaALIAS(atomic_cas_32,_atomic_cas_32) 331b6cbf720SGianluca GuidaALIAS(atomic_cas_uint,_atomic_cas_32) 332b6cbf720SGianluca GuidaALIAS(atomic_cas_ulong,_atomic_cas_32) 333b6cbf720SGianluca GuidaALIAS(atomic_cas_ptr,_atomic_cas_32) 334b6cbf720SGianluca Guida 335b6cbf720SGianluca GuidaALIAS(atomic_cas_32_ni,_atomic_cas_32_ni) 336b6cbf720SGianluca GuidaALIAS(atomic_cas_uint_ni,_atomic_cas_32_ni) 337b6cbf720SGianluca GuidaALIAS(atomic_cas_ulong_ni,_atomic_cas_32_ni) 338b6cbf720SGianluca GuidaALIAS(atomic_cas_ptr_ni,_atomic_cas_32_ni) 339b6cbf720SGianluca Guida 340*0a6a1f1dSLionel Sambuc#if defined(__HAVE_ATOMIC64_OPS) || defined(_KERNEL) 341b6cbf720SGianluca GuidaALIAS(atomic_cas_64,_atomic_cas_64) 342b6cbf720SGianluca GuidaALIAS(atomic_cas_64_ni,_atomic_cas_64) 343*0a6a1f1dSLionel SambucALIAS(__sync_val_compare_and_swap_8,_atomic_cas_64) 344*0a6a1f1dSLionel Sambuc#endif /* __HAVE_ATOMIC64_OPS || _KERNEL */ 345b6cbf720SGianluca Guida 346b6cbf720SGianluca GuidaALIAS(membar_consumer,_membar_consumer) 347b6cbf720SGianluca GuidaALIAS(membar_producer,_membar_producer) 348b6cbf720SGianluca GuidaALIAS(membar_enter,_membar_consumer) 349b6cbf720SGianluca GuidaALIAS(membar_exit,_membar_producer) 350b6cbf720SGianluca GuidaALIAS(membar_sync,_membar_sync) 351b6cbf720SGianluca Guida 352b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_int,_atomic_add_32) 353b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_long,_atomic_add_32) 354b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_ptr,_atomic_add_32) 355b6cbf720SGianluca Guida 356b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_int_nv,_atomic_add_32_nv) 357b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_long_nv,_atomic_add_32_nv) 358b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_add_ptr_nv,_atomic_add_32_nv) 359b6cbf720SGianluca Guida 360b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_uint,_atomic_and_32) 361b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ulong,_atomic_and_32) 362b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ptr,_atomic_and_32) 363b6cbf720SGianluca Guida 364b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_uint_nv,_atomic_and_32_nv) 365b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ulong_nv,_atomic_and_32_nv) 366b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_and_ptr_nv,_atomic_and_32_nv) 367b6cbf720SGianluca Guida 368b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_uint,_atomic_dec_32) 369b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ulong,_atomic_dec_32) 370b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ptr,_atomic_dec_32) 371b6cbf720SGianluca Guida 372b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_uint_nv,_atomic_dec_32_nv) 373b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ulong_nv,_atomic_dec_32_nv) 374b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_dec_ptr_nv,_atomic_dec_32_nv) 375b6cbf720SGianluca Guida 376b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_uint,_atomic_inc_32) 377b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ulong,_atomic_inc_32) 378b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ptr,_atomic_inc_32) 379b6cbf720SGianluca Guida 380b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_uint_nv,_atomic_inc_32_nv) 381b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ulong_nv,_atomic_inc_32_nv) 382b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_inc_ptr_nv,_atomic_inc_32_nv) 383b6cbf720SGianluca Guida 384b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_uint,_atomic_or_32) 385b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ulong,_atomic_or_32) 386b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ptr,_atomic_or_32) 387b6cbf720SGianluca Guida 388b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_uint_nv,_atomic_or_32_nv) 389b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ulong_nv,_atomic_or_32_nv) 390b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_or_ptr_nv,_atomic_or_32_nv) 391b6cbf720SGianluca Guida 392b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32) 393b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_32) 394b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_32) 395b6cbf720SGianluca Guida 396b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_uint,_atomic_cas_32) 397b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ulong,_atomic_cas_32) 398b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_32) 399b6cbf720SGianluca Guida 400b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_32_ni) 401b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_32_ni) 402b6cbf720SGianluca GuidaSTRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_32_ni) 403b6cbf720SGianluca Guida 404b6cbf720SGianluca GuidaSTRONG_ALIAS(_membar_enter,_membar_consumer) 405b6cbf720SGianluca GuidaSTRONG_ALIAS(_membar_exit,_membar_producer) 406