(root)/
glibc-2.38/
sysdeps/
generic/
atomic-machine.h
       1  /* Copyright (C) 2003-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifndef _ATOMIC_MACHINE_H
      19  #define _ATOMIC_MACHINE_H	1
      20  
      21  /* We have by default no support for atomic operations.  So define
      22     them non-atomic.  If this is a problem somebody will have to come
      23     up with real definitions.  */
      24  
      25  /* The only basic operation needed is compare and exchange.  */
      26  #define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
      27    ({ __typeof (mem) __gmemp = (mem);				      \
      28       __typeof (*mem) __gret = *__gmemp;				      \
      29       __typeof (*mem) __gnewval = (newval);			      \
      30  								      \
      31       if (__gret == (oldval))					      \
      32         *__gmemp = __gnewval;					      \
      33       __gret; })
      34  
      35  #define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
      36    ({ __typeof (mem) __gmemp = (mem);				      \
      37       __typeof (*mem) __gnewval = (newval);			      \
      38  								      \
      39       *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; })
      40  
      41  #endif	/* atomic-machine.h */