]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nptl: Remove ATOMIC_EXCHANGE_USES_CAS usage azanella/atomic-cleanup
authorWilco Dijkstra <Wilco.Dijkstra@arm.com>
Thu, 11 Sep 2025 11:26:33 +0000 (08:26 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 11 Sep 2025 17:44:03 +0000 (14:44 -0300)
The only usage was for pthread_spin_lock, introduced by 12d2dd706099aa4,
as a way to optimize the code for certain architectures. Now that atomic
builtins are used by default, let the compiler use the best code sequence
for the atomic exchange.

Co-authored-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
23 files changed:
include/atomic.h
nptl/pthread_spin_lock.c
nptl/pthread_spin_trylock.c
sysdeps/aarch64/atomic-machine.h [deleted file]
sysdeps/alpha/atomic-machine.h
sysdeps/arc/atomic-machine.h [deleted file]
sysdeps/arm/atomic-machine.h [deleted file]
sysdeps/csky/atomic-machine.h [deleted file]
sysdeps/generic/atomic-machine.h
sysdeps/hppa/atomic-machine.h [deleted file]
sysdeps/loongarch/atomic-machine.h [deleted file]
sysdeps/m68k/atomic-machine.h [deleted file]
sysdeps/microblaze/atomic-machine.h [deleted file]
sysdeps/mips/atomic-machine.h [deleted file]
sysdeps/or1k/atomic-machine.h [deleted file]
sysdeps/powerpc/atomic-machine.h [deleted file]
sysdeps/powerpc/nptl/pthread_spin_lock.c
sysdeps/powerpc/nptl/pthread_spin_trylock.c
sysdeps/riscv/atomic-machine.h
sysdeps/s390/atomic-machine.h [deleted file]
sysdeps/sh/atomic-machine.h [deleted file]
sysdeps/sparc/atomic-machine.h
sysdeps/x86/atomic-machine.h

index 44abd95d7eb8fbf147be0e5479afe3cb4f1819bc..a6eb37671167cad8724e3c28bc9cbe9ce9cbcc55 100644 (file)
@@ -252,13 +252,4 @@ void __atomic_link_error (void);
 # define atomic_write_barrier() atomic_thread_fence_release ()
 #endif
 
-
-/* ATOMIC_EXCHANGE_USES_CAS is non-zero if atomic_exchange operations
-   are implemented based on a CAS loop; otherwise, this is zero and we assume
-   that the atomic_exchange operations could provide better performance
-   than a CAS loop.  */
-#ifndef ATOMIC_EXCHANGE_USES_CAS
-# error ATOMIC_EXCHANGE_USES_CAS has to be defined.
-#endif
-
 #endif /* atomic.h */
index 0e49e3b6ec984fe9ef8d544cef25a38352df495c..5edd4466555bda8050ed2622a8e524608c4f4aa1 100644 (file)
@@ -26,29 +26,12 @@ __pthread_spin_lock (pthread_spinlock_t *lock)
   int val = 0;
 
   /* We assume that the first try mostly will be successful, thus we use
-     atomic_exchange if it is not implemented by a CAS loop (we also assume
-     that atomic_exchange can be faster if it succeeds, see
-     ATOMIC_EXCHANGE_USES_CAS).  Otherwise, we use a weak CAS and not an
-     exchange so we bail out after the first failed attempt to change the
-     state.  For the subsequent attempts we use atomic_compare_and_exchange
-     after we observe that the lock is not acquired.
-     See also comment in pthread_spin_trylock.
+     atomic_exchange.
      We use acquire MO to synchronize-with the release MO store in
      pthread_spin_unlock, and thus ensure that prior critical sections
      happen-before this critical section.  */
-#if ! ATOMIC_EXCHANGE_USES_CAS
-  /* Try to acquire the lock with an exchange instruction as this architecture
-     has such an instruction and we assume it is faster than a CAS.
-     The acquisition succeeds if the lock is not in an acquired state.  */
   if (__glibc_likely (atomic_exchange_acquire (lock, 1) == 0))
     return 0;
-#else
-  /* Try to acquire the lock with a CAS instruction as this architecture
-     has no exchange instruction.  The acquisition succeeds if the lock is not
-     acquired.  */
-  if (__glibc_likely (atomic_compare_exchange_weak_acquire (lock, &val, 1)))
-    return 0;
-#endif
 
   do
     {
index cb828e15390c5a79a57fe0fa2b50b173ccc2a0a2..5a6a2e5f225f51970fc4d5a24b01db665d7dce43 100644 (file)
 int
 __pthread_spin_trylock (pthread_spinlock_t *lock)
 {
-  /* For the spin try lock, we have the following possibilities:
-
-     1) If we assume that trylock will most likely succeed in practice:
-     * We just do an exchange.
-
-     2) If we want to bias towards cases where trylock succeeds, but don't
-     rule out contention:
-     * If exchange is not implemented by a CAS loop, and exchange is faster
-     than CAS, do an exchange.
-     * If exchange is implemented by a CAS loop, use a weak CAS and not an
-     exchange so we bail out after the first failed attempt to change the state.
-
-     3) If we expect contention to be likely:
-     * If CAS always brings the cache line into an exclusive state even if the
-     spinlock is already acquired, then load the value first with
-     atomic_load_relaxed and test if lock is not acquired. Then do 2).
-
-     We assume that 2) is the common case, and that this won't be slower than
-     1) in the common case.
-
-     We use acquire MO to synchronize-with the release MO store in
-     pthread_spin_unlock, and thus ensure that prior critical sections
-     happen-before this critical section.  */
-#if ! ATOMIC_EXCHANGE_USES_CAS
-  /* Try to acquire the lock with an exchange instruction as this architecture
-     has such an instruction and we assume it is faster than a CAS.
-     The acquisition succeeds if the lock is not in an acquired state.  */
   if (atomic_exchange_acquire (lock, 1) == 0)
     return 0;
-#else
-  /* Try to acquire the lock with a CAS instruction as this architecture
-     has no exchange instruction.  The acquisition succeeds if the lock is not
-     acquired.  */
-  do
-    {
-      int val = 0;
-      if (atomic_compare_exchange_weak_acquire (lock, &val, 1))
-       return 0;
-    }
-  /* atomic_compare_exchange_weak_acquire can fail spuriously.  Whereas
-     C++11 and C11 make it clear that trylock operations can fail spuriously,
-     POSIX does not explicitly specify this; it only specifies that failing
-     synchronization operations do not need to have synchronization effects
-     themselves, but a spurious failure is something that could contradict a
-     happens-before established earlier (e.g., that we need to observe that
-     the lock is acquired).  Therefore, we emulate a strong CAS by simply
-     checking with a relaxed MO load that the lock is really acquired before
-     returning EBUSY; the additional overhead this may cause is on the slow
-     path.  */
-  while (atomic_load_relaxed (lock) == 0);
-#endif
 
   return EBUSY;
 }
diff --git a/sysdeps/aarch64/atomic-machine.h b/sysdeps/aarch64/atomic-machine.h
deleted file mode 100644 (file)
index 002a800..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 2003-2025 Free Software Foundation, Inc.
-
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _AARCH64_ATOMIC_MACHINE_H
-#define _AARCH64_ATOMIC_MACHINE_H      1
-
-#define ATOMIC_EXCHANGE_USES_CAS 0
-
-#endif
index 9844f130799044b8a8bdb69fbea0850950af25bc..9aec23174881f2396be65aa9619742387b7ca726 100644 (file)
@@ -17,7 +17,4 @@
 
 #include <stdint.h>
 
-/* XXX Is this actually correct?  */
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
 #define atomic_write_barrier() __asm ("wmb" : : : "memory");
diff --git a/sysdeps/arc/atomic-machine.h b/sysdeps/arc/atomic-machine.h
deleted file mode 100644 (file)
index 69b9328..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Low-level functions for atomic operations. ARC version.
-   Copyright (C) 2020-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _ARC_BITS_ATOMIC_H
-#define _ARC_BITS_ATOMIC_H 1
-
-/* ARC does have legacy atomic EX reg, [mem] instruction but the micro-arch
-   is not as optimal as LLOCK/SCOND specially for SMP.  */
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-#endif /* _ARC_BITS_ATOMIC_H */
diff --git a/sysdeps/arm/atomic-machine.h b/sysdeps/arm/atomic-machine.h
deleted file mode 100644 (file)
index 7aee873..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Atomic operations.  Pure ARM version.
-   Copyright (C) 2002-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define ATOMIC_EXCHANGE_USES_CAS 1
diff --git a/sysdeps/csky/atomic-machine.h b/sysdeps/csky/atomic-machine.h
deleted file mode 100644 (file)
index 84468cd..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Atomic operations.  C-SKY version.
-   Copyright (C) 2018-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef __CSKY_ATOMIC_H_
-#define __CSKY_ATOMIC_H_
-
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-#endif /* atomic-machine.h */
index 3ef5eb60d75b93d062f8b73d20c6d857f85af4f2..9f8528c1f2a7943405d83296760bfe9c7a7d6a65 100644 (file)
 #ifndef _ATOMIC_MACHINE_H
 #define _ATOMIC_MACHINE_H      1
 
-/* We have by default no support for atomic operations.  So define
-   them non-atomic.  If this is a problem somebody will have to come
-   up with real definitions.  */
-
-/* The only basic operation needed is compare and exchange.  */
-#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
-  ({ __typeof (mem) __gmemp = (mem);                                 \
-     __typeof (*mem) __gret = *__gmemp;                                      \
-     __typeof (*mem) __gnewval = (newval);                           \
-                                                                     \
-     if (__gret == (oldval))                                         \
-       *__gmemp = __gnewval;                                         \
-     __gret; })
-
-#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
-  ({ __typeof (mem) __gmemp = (mem);                                 \
-     __typeof (*mem) __gnewval = (newval);                           \
-                                                                     \
-     *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; })
+/* Some macros can be overridden if the architecture requires some specific
+   atomic operations or provides extra optimizations.
+
+   * atomic_max (mem, value): atomically set the maximum value of *mem
+     and value to *mem.  Used on malloc statistics collection.
+
+   * atomic_full_barrier: defaults to __atomic_thread_fence (__ATOMIC_SEQ_CST)
+
+   * atomic_read_barrier: defaults to __atomic_thread_fence (__ATOMIC_ACQUIRE)
+
+   * atomic_write_barrier: defaults to __atomic_thread_fence (__ATOMIC_RELEASE)
+
+   * atomic_spin_nop: arch-specific instruction used on pthread spin lock
+     and adaptive mutexes to optimize spin-wait loops.
+*/
 
 #endif /* atomic-machine.h */
diff --git a/sysdeps/hppa/atomic-machine.h b/sysdeps/hppa/atomic-machine.h
deleted file mode 100644 (file)
index 92d386b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 2003-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _ATOMIC_MACHINE_H
-#define _ATOMIC_MACHINE_H      1
-
-/* XXX Is this actually correct?  */
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-#endif
diff --git a/sysdeps/loongarch/atomic-machine.h b/sysdeps/loongarch/atomic-machine.h
deleted file mode 100644 (file)
index 20cc170..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Atomic operations.
-   Copyright (C) 2022-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _LINUX_LOONGARCH_BITS_ATOMIC_H
-#define _LINUX_LOONGARCH_BITS_ATOMIC_H 1
-
-#define ATOMIC_EXCHANGE_USES_CAS 0
-
-#endif /* bits/atomic.h */
diff --git a/sysdeps/m68k/atomic-machine.h b/sysdeps/m68k/atomic-machine.h
deleted file mode 100644 (file)
index 8542aff..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 2003-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _M68K_ATOMIC_MACHINE_H
-#define _M68K_ATOMIC_MACHINE_H 1
-
-#if defined __mc68020__ || defined __mcoldfire__
-/* XXX Is this actually correct?  */
-# define ATOMIC_EXCHANGE_USES_CAS 1
-#else
-# error "ISAs does not support atomic operations"
-#endif
-
-#endif
diff --git a/sysdeps/microblaze/atomic-machine.h b/sysdeps/microblaze/atomic-machine.h
deleted file mode 100644 (file)
index 8c04235..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2003-2025 Free Software Foundation, Inc.
-
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-/* XXX Is this actually correct?  */
-#define ATOMIC_EXCHANGE_USES_CAS 1
diff --git a/sysdeps/mips/atomic-machine.h b/sysdeps/mips/atomic-machine.h
deleted file mode 100644 (file)
index 9294fb7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Low-level functions for atomic operations. Mips version.
-   Copyright (C) 2005-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _MIPS_ATOMIC_MACHINE_H
-#define _MIPS_ATOMIC_MACHINE_H 1
-
-#include <sgidefs.h>
-
-#if _MIPS_SIM == _ABIO32 && __mips < 2
-#define MIPS_PUSH_MIPS2 ".set  mips2\n\t"
-#else
-#define MIPS_PUSH_MIPS2
-#endif
-
-/* MIPS is an LL/SC machine.  However, XLP has a direct atomic exchange
-   instruction which will be used by __atomic_exchange_n.  */
-#ifdef _MIPS_ARCH_XLP
-# define ATOMIC_EXCHANGE_USES_CAS 0
-#else
-# define ATOMIC_EXCHANGE_USES_CAS 1
-#endif
-
-#endif /* atomic-machine.h */
diff --git a/sysdeps/or1k/atomic-machine.h b/sysdeps/or1k/atomic-machine.h
deleted file mode 100644 (file)
index 51bc8a0..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Atomic operations.  OpenRISC version.
-   Copyright (C) 2022-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef __OR1K_ATOMIC_H_
-#define __OR1K_ATOMIC_H_
-
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-#endif /* atomic-machine.h */
diff --git a/sysdeps/powerpc/atomic-machine.h b/sysdeps/powerpc/atomic-machine.h
deleted file mode 100644 (file)
index 988cc4f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Atomic operations.  PowerPC Common version.
-   Copyright (C) 2003-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#ifndef _POWERPC_ATOMIC_MACHINE_H
-#define _POWERPC_ATOMIC_MACHINE_H       1
-
-#define ATOMIC_EXCHANGE_USES_CAS 1
-
-/* Used on pthread_spin_{try}lock.  */
-#define __ARCH_ACQ_INSTR        "isync"
-#if defined _ARCH_PWR6 || defined _ARCH_PWR6X
-# define MUTEX_HINT_ACQ        ",1"
-# define MUTEX_HINT_REL        ",0"
-#else
-# define MUTEX_HINT_ACQ
-# define MUTEX_HINT_REL
-#endif
-
-#endif
index b4be60f533f43268c9d63f89011335372e876fc4..4317c033364b3c10f4665d14dba0fc5508138549 100644 (file)
 #include "pthreadP.h"
 #include <shlib-compat.h>
 
+#define __ARCH_ACQ_INSTR        "isync"
+#if defined _ARCH_PWR6 || defined _ARCH_PWR6X
+# define MUTEX_HINT_ACQ        ",1"
+# define MUTEX_HINT_REL        ",0"
+#else
+# define MUTEX_HINT_ACQ
+# define MUTEX_HINT_REL
+#endif
+
 int
 __pthread_spin_lock (pthread_spinlock_t *lock)
 {
index 457e61397cb939344cd55022915dcbc622169193..fd5f89ed989101c04c767a3c2ea10666e48becab 100644 (file)
 #include "pthreadP.h"
 #include <shlib-compat.h>
 
+#define __ARCH_ACQ_INSTR        "isync"
+#if defined _ARCH_PWR6 || defined _ARCH_PWR6X
+# define MUTEX_HINT_ACQ        ",1"
+# define MUTEX_HINT_REL        ",0"
+#else
+# define MUTEX_HINT_ACQ
+# define MUTEX_HINT_REL
+#endif
+
 int
 __pthread_spin_trylock (pthread_spinlock_t *lock)
 {
index 5d2ad331cc97a58c1f997501d6f9f8903440742b..b6494b3c83703b46c40e8a47e9011d96202dd770 100644 (file)
@@ -21,8 +21,6 @@
 
 #ifdef __riscv_atomic
 
-# define ATOMIC_EXCHANGE_USES_CAS 0
-
 /* Miscellaneous.  */
 
 # define asm_amo(which, ordering, mem, value) ({               \
diff --git a/sysdeps/s390/atomic-machine.h b/sysdeps/s390/atomic-machine.h
deleted file mode 100644 (file)
index b1646d1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (C) 2003-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#define ATOMIC_EXCHANGE_USES_CAS 1
diff --git a/sysdeps/sh/atomic-machine.h b/sysdeps/sh/atomic-machine.h
deleted file mode 100644 (file)
index b012d6f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Atomic operations used inside libc.  Linux/SH version.
-   Copyright (C) 2003-2025 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-/* XXX Is this actually correct?  */
-#define ATOMIC_EXCHANGE_USES_CAS 1
index a16f18fe571e65be1e533cbe2b5e8139663b3e35..b8c1e96eb468a659f8cfab682f73894f42ddff76 100644 (file)
@@ -19,9 +19,6 @@
 #ifndef _ATOMIC_MACHINE_H
 #define _ATOMIC_MACHINE_H      1
 
-/* XXX Is this actually correct?  */
-#define ATOMIC_EXCHANGE_USES_CAS     __HAVE_64B_ATOMICS
-
 #ifdef __sparc_v9__
 # define atomic_full_barrier() \
   __asm __volatile ("membar #LoadLoad | #LoadStore"                          \
index 7c2ebfcee1891c31af36d716b31c6048253dacaf..0681f57987939ee44a6cfc2e2cee0c573435b1e2 100644 (file)
@@ -19,8 +19,6 @@
 #ifndef _X86_ATOMIC_MACHINE_H
 #define _X86_ATOMIC_MACHINE_H 1
 
-#define ATOMIC_EXCHANGE_USES_CAS       0
-
 #define atomic_spin_nop() __asm ("pause")
 
 #endif /* atomic-machine.h */