diff mbox series

[FFmpeg-devel,01/23] compat: drop gcc, suncc, and pthreads stdatomic emulation

Message ID 20240914111036.17164-2-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel,01/23] compat: drop gcc, suncc, and pthreads stdatomic emulation | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov Sept. 14, 2024, 10:45 a.m. UTC
Since we now require a C11-compliant compiler, there should be no
supported configurations where any of these is used.
---
 compat/atomics/gcc/stdatomic.h     | 173 -------------------------
 compat/atomics/pthread/stdatomic.c |  39 ------
 compat/atomics/pthread/stdatomic.h | 197 -----------------------------
 compat/atomics/suncc/stdatomic.h   | 186 ---------------------------
 configure                          |  19 +--
 5 files changed, 1 insertion(+), 613 deletions(-)
 delete mode 100644 compat/atomics/gcc/stdatomic.h
 delete mode 100644 compat/atomics/pthread/stdatomic.c
 delete mode 100644 compat/atomics/pthread/stdatomic.h
 delete mode 100644 compat/atomics/suncc/stdatomic.h

Comments

James Almer Sept. 15, 2024, 8:31 p.m. UTC | #1
On 9/14/2024 7:45 AM, Anton Khirnov wrote:
> Since we now require a C11-compliant compiler, there should be no
> supported configurations where any of these is used.
> ---
>   compat/atomics/gcc/stdatomic.h     | 173 -------------------------
>   compat/atomics/pthread/stdatomic.c |  39 ------
>   compat/atomics/pthread/stdatomic.h | 197 -----------------------------
>   compat/atomics/suncc/stdatomic.h   | 186 ---------------------------

Is there any SunCC version we support now? Because there's a lot of 
bitrotting checks for it in configure.

>   configure                          |  19 +--
>   5 files changed, 1 insertion(+), 613 deletions(-)
>   delete mode 100644 compat/atomics/gcc/stdatomic.h
>   delete mode 100644 compat/atomics/pthread/stdatomic.c
>   delete mode 100644 compat/atomics/pthread/stdatomic.h
>   delete mode 100644 compat/atomics/suncc/stdatomic.h

Ok.
Anton Khirnov Sept. 15, 2024, 8:44 p.m. UTC | #2
Quoting James Almer (2024-09-15 22:31:47)
> On 9/14/2024 7:45 AM, Anton Khirnov wrote:
> > Since we now require a C11-compliant compiler, there should be no
> > supported configurations where any of these is used.
> > ---
> >   compat/atomics/gcc/stdatomic.h     | 173 -------------------------
> >   compat/atomics/pthread/stdatomic.c |  39 ------
> >   compat/atomics/pthread/stdatomic.h | 197 -----------------------------
> >   compat/atomics/suncc/stdatomic.h   | 186 ---------------------------
> 
> Is there any SunCC version we support now? Because there's a lot of 
> bitrotting checks for it in configure.

Latest Oracle studio documentation does mention C11 support, so in
theory it should provide native atomics. No idea about those other
checks.
diff mbox series

Patch

diff --git a/compat/atomics/gcc/stdatomic.h b/compat/atomics/gcc/stdatomic.h
deleted file mode 100644
index e13ed0e068..0000000000
--- a/compat/atomics/gcc/stdatomic.h
+++ /dev/null
@@ -1,173 +0,0 @@ 
-/*
- * This file is part of FFmpeg.
- *
- * FFmpeg 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.
- *
- * FFmpeg 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 FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*
- * based on vlc_atomic.h from VLC
- * Copyright (C) 2010 Rémi Denis-Courmont
- */
-
-#ifndef COMPAT_ATOMICS_GCC_STDATOMIC_H
-#define COMPAT_ATOMICS_GCC_STDATOMIC_H
-
-#include <stddef.h>
-#include <stdint.h>
-
-#define ATOMIC_FLAG_INIT 0
-
-#define ATOMIC_VAR_INIT(value) (value)
-
-#define atomic_init(obj, value) \
-do {                            \
-    *(obj) = (value);           \
-} while(0)
-
-#define kill_dependency(y) ((void)0)
-
-#define atomic_thread_fence(order) \
-    __sync_synchronize()
-
-#define atomic_signal_fence(order) \
-    ((void)0)
-
-#define atomic_is_lock_free(obj) 0
-
-typedef         _Bool      atomic_flag;
-typedef         _Bool      atomic_bool;
-typedef          char      atomic_char;
-typedef   signed char      atomic_schar;
-typedef unsigned char      atomic_uchar;
-typedef          short     atomic_short;
-typedef unsigned short     atomic_ushort;
-typedef          int       atomic_int;
-typedef unsigned int       atomic_uint;
-typedef          long      atomic_long;
-typedef unsigned long      atomic_ulong;
-typedef          long long atomic_llong;
-typedef unsigned long long atomic_ullong;
-typedef          wchar_t   atomic_wchar_t;
-typedef       int_least8_t atomic_int_least8_t;
-typedef      uint_least8_t atomic_uint_least8_t;
-typedef      int_least16_t atomic_int_least16_t;
-typedef     uint_least16_t atomic_uint_least16_t;
-typedef      int_least32_t atomic_int_least32_t;
-typedef     uint_least32_t atomic_uint_least32_t;
-typedef      int_least64_t atomic_int_least64_t;
-typedef     uint_least64_t atomic_uint_least64_t;
-typedef       int_fast8_t atomic_int_fast8_t;
-typedef      uint_fast8_t atomic_uint_fast8_t;
-typedef      int_fast16_t atomic_int_fast16_t;
-typedef     uint_fast16_t atomic_uint_fast16_t;
-typedef      int_fast32_t atomic_int_fast32_t;
-typedef     uint_fast32_t atomic_uint_fast32_t;
-typedef      int_fast64_t atomic_int_fast64_t;
-typedef     uint_fast64_t atomic_uint_fast64_t;
-typedef          intptr_t atomic_intptr_t;
-typedef         uintptr_t atomic_uintptr_t;
-typedef            size_t atomic_size_t;
-typedef         ptrdiff_t atomic_ptrdiff_t;
-typedef          intmax_t atomic_intmax_t;
-typedef         uintmax_t atomic_uintmax_t;
-
-#define atomic_store(object, desired)   \
-do {                                    \
-    *(object) = (desired);              \
-    __sync_synchronize();               \
-} while (0)
-
-#define atomic_store_explicit(object, desired, order) \
-    atomic_store(object, desired)
-
-#define atomic_load(object) \
-    (__sync_synchronize(), *(object))
-
-#define atomic_load_explicit(object, order) \
-    atomic_load(object)
-
-#define atomic_exchange(object, desired)                            \
-({                                                                  \
-    __typeof__(object) _obj = (object);                             \
-    __typeof__(*object) _old;                                       \
-    do                                                              \
-        _old = atomic_load(_obj);                                   \
-    while (!__sync_bool_compare_and_swap(_obj, _old, (desired)));   \
-    _old;                                                           \
-})
-
-#define atomic_exchange_explicit(object, desired, order) \
-    atomic_exchange(object, desired)
-
-#define atomic_compare_exchange_strong(object, expected, desired)   \
-({                                                                  \
-    __typeof__(object) _exp = (expected);                           \
-    __typeof__(*object) _old = *_exp;                               \
-    *_exp = __sync_val_compare_and_swap((object), _old, (desired)); \
-    *_exp == _old;                                                  \
-})
-
-#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak(object, expected, desired) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_weak(object, expected, desired)
-
-#define atomic_fetch_add(object, operand) \
-    __sync_fetch_and_add(object, operand)
-
-#define atomic_fetch_add_explicit(object, operand, order) \
-    atomic_fetch_add(object, operand)
-
-#define atomic_fetch_sub(object, operand) \
-    __sync_fetch_and_sub(object, operand)
-
-#define atomic_fetch_sub_explicit(object, operand, order) \
-    atomic_fetch_sub(object, operand)
-
-#define atomic_fetch_or(object, operand) \
-    __sync_fetch_and_or(object, operand)
-
-#define atomic_fetch_or_explicit(object, operand, order) \
-    atomic_fetch_or(object, operand)
-
-#define atomic_fetch_xor(object, operand) \
-    __sync_fetch_and_xor(object, operand)
-
-#define atomic_fetch_xor_explicit(object, operand, order) \
-    atomic_fetch_xor(object, operand)
-
-#define atomic_fetch_and(object, operand) \
-    __sync_fetch_and_and(object, operand)
-
-#define atomic_fetch_and_explicit(object, operand, order) \
-    atomic_fetch_and(object, operand)
-
-#define atomic_flag_test_and_set(object) \
-    atomic_exchange(object, 1)
-
-#define atomic_flag_test_and_set_explicit(object, order) \
-    atomic_flag_test_and_set(object)
-
-#define atomic_flag_clear(object) \
-    atomic_store(object, 0)
-
-#define atomic_flag_clear_explicit(object, order) \
-    atomic_flag_clear(object)
-
-#endif /* COMPAT_ATOMICS_GCC_STDATOMIC_H */
diff --git a/compat/atomics/pthread/stdatomic.c b/compat/atomics/pthread/stdatomic.c
deleted file mode 100644
index 9fca98980b..0000000000
--- a/compat/atomics/pthread/stdatomic.c
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/*
- * This file is part of FFmpeg.
- *
- * FFmpeg 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.
- *
- * FFmpeg 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 FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*
- * based on vlc_atomic.h from VLC
- * Copyright (C) 2010 Rémi Denis-Courmont
- */
-
-#include <pthread.h>
-#include <stdint.h>
-
-#include "stdatomic.h"
-
-static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER;
-
-void avpriv_atomic_lock(void)
-{
-    pthread_mutex_lock(&atomic_lock);
-}
-
-void avpriv_atomic_unlock(void)
-{
-    pthread_mutex_unlock(&atomic_lock);
-}
diff --git a/compat/atomics/pthread/stdatomic.h b/compat/atomics/pthread/stdatomic.h
deleted file mode 100644
index 81a60f102b..0000000000
--- a/compat/atomics/pthread/stdatomic.h
+++ /dev/null
@@ -1,197 +0,0 @@ 
-/*
- * This file is part of FFmpeg.
- *
- * FFmpeg 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.
- *
- * FFmpeg 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 FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/*
- * based on vlc_atomic.h from VLC
- * Copyright (C) 2010 Rémi Denis-Courmont
- */
-
-#ifndef COMPAT_ATOMICS_PTHREAD_STDATOMIC_H
-#define COMPAT_ATOMICS_PTHREAD_STDATOMIC_H
-
-#include <stdint.h>
-
-#define ATOMIC_FLAG_INIT 0
-
-#define ATOMIC_VAR_INIT(value) (value)
-
-#define atomic_init(obj, value) \
-do {                            \
-    *(obj) = (value);           \
-} while(0)
-
-#define kill_dependency(y) ((void)0)
-
-#define atomic_signal_fence(order) \
-    ((void)0)
-
-#define atomic_is_lock_free(obj) 0
-
-typedef intptr_t atomic_flag;
-typedef intptr_t atomic_bool;
-typedef intptr_t atomic_char;
-typedef intptr_t atomic_schar;
-typedef intptr_t atomic_uchar;
-typedef intptr_t atomic_short;
-typedef intptr_t atomic_ushort;
-typedef intptr_t atomic_int;
-typedef intptr_t atomic_uint;
-typedef intptr_t atomic_long;
-typedef intptr_t atomic_ulong;
-typedef intptr_t atomic_llong;
-typedef intptr_t atomic_ullong;
-typedef intptr_t atomic_wchar_t;
-typedef intptr_t atomic_int_least8_t;
-typedef intptr_t atomic_uint_least8_t;
-typedef intptr_t atomic_int_least16_t;
-typedef intptr_t atomic_uint_least16_t;
-typedef intptr_t atomic_int_least32_t;
-typedef intptr_t atomic_uint_least32_t;
-typedef intptr_t atomic_int_least64_t;
-typedef intptr_t atomic_uint_least64_t;
-typedef intptr_t atomic_int_fast8_t;
-typedef intptr_t atomic_uint_fast8_t;
-typedef intptr_t atomic_int_fast16_t;
-typedef intptr_t atomic_uint_fast16_t;
-typedef intptr_t atomic_int_fast32_t;
-typedef intptr_t atomic_uint_fast32_t;
-typedef intptr_t atomic_int_fast64_t;
-typedef intptr_t atomic_uint_fast64_t;
-typedef intptr_t atomic_intptr_t;
-typedef intptr_t atomic_uintptr_t;
-typedef intptr_t atomic_size_t;
-typedef intptr_t atomic_ptrdiff_t;
-typedef intptr_t atomic_intmax_t;
-typedef intptr_t atomic_uintmax_t;
-
-void avpriv_atomic_lock(void);
-void avpriv_atomic_unlock(void);
-
-static inline void atomic_thread_fence(int order)
-{
-    avpriv_atomic_lock();
-    avpriv_atomic_unlock();
-}
-
-static inline void atomic_store(intptr_t *object, intptr_t desired)
-{
-    avpriv_atomic_lock();
-    *object = desired;
-    avpriv_atomic_unlock();
-}
-
-#define atomic_store_explicit(object, desired, order) \
-    atomic_store(object, desired)
-
-static inline intptr_t atomic_load(intptr_t *object)
-{
-    intptr_t ret;
-    avpriv_atomic_lock();
-    ret = *object;
-    avpriv_atomic_unlock();
-    return ret;
-}
-
-#define atomic_load_explicit(object, order) \
-    atomic_load(object)
-
-static inline intptr_t atomic_exchange(intptr_t *object, intptr_t desired)
-{
-    intptr_t ret;
-    avpriv_atomic_lock();
-    ret     = *object;
-    *object = desired;
-    avpriv_atomic_unlock();
-    return ret;
-}
-
-#define atomic_exchange_explicit(object, desired, order) \
-    atomic_exchange(object, desired)
-
-static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
-                                                 intptr_t desired)
-{
-    int ret;
-    avpriv_atomic_lock();
-    if (*object == *expected) {
-        ret     = 1;
-        *object = desired;
-    } else {
-        ret = 0;
-        *expected = *object;
-    }
-    avpriv_atomic_unlock();
-    return ret;
-}
-
-#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak(object, expected, desired) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_weak(object, expected, desired)
-
-#define FETCH_MODIFY(opname, op)                                                   \
-static inline intptr_t atomic_fetch_ ## opname(intptr_t *object, intptr_t operand) \
-{                                                                                  \
-    intptr_t ret;                                                                  \
-    avpriv_atomic_lock();                                                          \
-    ret = *object;                                                                 \
-    *object = *object op operand;                                                  \
-    avpriv_atomic_unlock();                                                        \
-    return ret;                                                                    \
-}
-
-FETCH_MODIFY(add, +)
-FETCH_MODIFY(sub, -)
-FETCH_MODIFY(or,  |)
-FETCH_MODIFY(xor, ^)
-FETCH_MODIFY(and, &)
-
-#undef FETCH_MODIFY
-
-#define atomic_fetch_add_explicit(object, operand, order) \
-    atomic_fetch_add(object, operand)
-
-#define atomic_fetch_sub_explicit(object, operand, order) \
-    atomic_fetch_sub(object, operand)
-
-#define atomic_fetch_or_explicit(object, operand, order) \
-    atomic_fetch_or(object, operand)
-
-#define atomic_fetch_xor_explicit(object, operand, order) \
-    atomic_fetch_xor(object, operand)
-
-#define atomic_fetch_and_explicit(object, operand, order) \
-    atomic_fetch_and(object, operand)
-
-#define atomic_flag_test_and_set(object) \
-    atomic_exchange(object, 1)
-
-#define atomic_flag_test_and_set_explicit(object, order) \
-    atomic_flag_test_and_set(object)
-
-#define atomic_flag_clear(object) \
-    atomic_store(object, 0)
-
-#define atomic_flag_clear_explicit(object, order) \
-    atomic_flag_clear(object)
-
-#endif /* COMPAT_ATOMICS_PTHREAD_STDATOMIC_H */
diff --git a/compat/atomics/suncc/stdatomic.h b/compat/atomics/suncc/stdatomic.h
deleted file mode 100644
index 0cf89e0f78..0000000000
--- a/compat/atomics/suncc/stdatomic.h
+++ /dev/null
@@ -1,186 +0,0 @@ 
-/*
- * This file is part of FFmpeg.
- *
- * FFmpeg 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.
- *
- * FFmpeg 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 FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef COMPAT_ATOMICS_SUNCC_STDATOMIC_H
-#define COMPAT_ATOMICS_SUNCC_STDATOMIC_H
-
-#include <atomic.h>
-#include <mbarrier.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#define ATOMIC_FLAG_INIT 0
-
-#define ATOMIC_VAR_INIT(value) (value)
-
-#define atomic_init(obj, value) \
-do {                            \
-    *(obj) = (value);           \
-} while(0)
-
-#define kill_dependency(y) ((void)0)
-
-#define atomic_thread_fence(order) \
-    __machine_rw_barrier();
-
-#define atomic_signal_fence(order) \
-    ((void)0)
-
-#define atomic_is_lock_free(obj) 0
-
-typedef intptr_t atomic_flag;
-typedef intptr_t atomic_bool;
-typedef intptr_t atomic_char;
-typedef intptr_t atomic_schar;
-typedef intptr_t atomic_uchar;
-typedef intptr_t atomic_short;
-typedef intptr_t atomic_ushort;
-typedef intptr_t atomic_int;
-typedef intptr_t atomic_uint;
-typedef intptr_t atomic_long;
-typedef intptr_t atomic_ulong;
-typedef intptr_t atomic_llong;
-typedef intptr_t atomic_ullong;
-typedef intptr_t atomic_wchar_t;
-typedef intptr_t atomic_int_least8_t;
-typedef intptr_t atomic_uint_least8_t;
-typedef intptr_t atomic_int_least16_t;
-typedef intptr_t atomic_uint_least16_t;
-typedef intptr_t atomic_int_least32_t;
-typedef intptr_t atomic_uint_least32_t;
-typedef intptr_t atomic_int_least64_t;
-typedef intptr_t atomic_uint_least64_t;
-typedef intptr_t atomic_int_fast8_t;
-typedef intptr_t atomic_uint_fast8_t;
-typedef intptr_t atomic_int_fast16_t;
-typedef intptr_t atomic_uint_fast16_t;
-typedef intptr_t atomic_int_fast32_t;
-typedef intptr_t atomic_uint_fast32_t;
-typedef intptr_t atomic_int_fast64_t;
-typedef intptr_t atomic_uint_fast64_t;
-typedef intptr_t atomic_intptr_t;
-typedef intptr_t atomic_uintptr_t;
-typedef intptr_t atomic_size_t;
-typedef intptr_t atomic_ptrdiff_t;
-typedef intptr_t atomic_intmax_t;
-typedef intptr_t atomic_uintmax_t;
-
-static inline void atomic_store(intptr_t *object, intptr_t desired)
-{
-    *object = desired;
-    __machine_rw_barrier();
-}
-
-#define atomic_store_explicit(object, desired, order) \
-    atomic_store(object, desired)
-
-static inline intptr_t atomic_load(intptr_t *object)
-{
-    __machine_rw_barrier();
-    return *object;
-}
-
-#define atomic_load_explicit(object, order) \
-    atomic_load(object)
-
-#define atomic_exchange(object, desired) \
-    atomic_swap_ptr(object, desired)
-
-#define atomic_exchange_explicit(object, desired, order) \
-    atomic_exchange(object, desired)
-
-static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
-                                                 intptr_t desired)
-{
-    intptr_t  old = *expected;
-    *expected = (intptr_t)atomic_cas_ptr(object, (void *)old, (void *)desired);
-    return *expected == old;
-}
-
-#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak(object, expected, desired) \
-    atomic_compare_exchange_strong(object, expected, desired)
-
-#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
-    atomic_compare_exchange_weak(object, expected, desired)
-
-static inline intptr_t atomic_fetch_add(intptr_t *object, intptr_t operand)
-{
-    return atomic_add_ptr_nv(object, operand) - operand;
-}
-
-#define atomic_fetch_sub(object, operand) \
-    atomic_fetch_add(object, -(operand))
-
-static inline intptr_t atomic_fetch_or(intptr_t *object, intptr_t operand)
-{
-    intptr_t old;
-    do {
-        old = atomic_load(object);
-    } while (!atomic_compare_exchange_strong(object, old, old | operand));
-    return old;
-}
-
-static inline intptr_t atomic_fetch_xor(intptr_t *object, intptr_t operand)
-{
-    intptr_t old;
-    do {
-        old = atomic_load(object);
-    } while (!atomic_compare_exchange_strong(object, old, old ^ operand));
-    return old;
-}
-
-static inline intptr_t atomic_fetch_and(intptr_t *object, intptr_t operand)
-{
-    intptr_t old;
-    do {
-        old = atomic_load(object);
-    } while (!atomic_compare_exchange_strong(object, old, old & operand));
-    return old;
-}
-
-#define atomic_fetch_add_explicit(object, operand, order) \
-    atomic_fetch_add(object, operand)
-
-#define atomic_fetch_sub_explicit(object, operand, order) \
-    atomic_fetch_sub(object, operand)
-
-#define atomic_fetch_or_explicit(object, operand, order) \
-    atomic_fetch_or(object, operand)
-
-#define atomic_fetch_xor_explicit(object, operand, order) \
-    atomic_fetch_xor(object, operand)
-
-#define atomic_fetch_and_explicit(object, operand, order) \
-    atomic_fetch_and(object, operand)
-
-#define atomic_flag_test_and_set(object) \
-    atomic_exchange(object, 1)
-
-#define atomic_flag_test_and_set_explicit(object, order) \
-    atomic_flag_test_and_set(object)
-
-#define atomic_flag_clear(object) \
-    atomic_store(object, 0)
-
-#define atomic_flag_clear_explicit(object, order) \
-    atomic_flag_clear(object)
-
-#endif /* COMPAT_ATOMICS_SUNCC_STDATOMIC_H */
diff --git a/configure b/configure
index d3bd46f382..337172a6c6 100755
--- a/configure
+++ b/configure
@@ -2117,8 +2117,6 @@  THREADS_LIST="
 "
 
 ATOMICS_LIST="
-    atomics_gcc
-    atomics_suncc
     atomics_win32
 "
 
@@ -2249,13 +2247,10 @@  ARCH_FEATURES="
 "
 
 BUILTIN_LIST="
-    atomic_cas_ptr
-    machine_rw_barrier
     MemoryBarrier
     mm_empty
     rdtsc
     sem_timedwait
-    sync_val_compare_and_swap
 "
 HAVE_LIST_CMDLINE="
     inline_asm
@@ -2834,8 +2829,6 @@  valgrind_backtrace_conflict="optimizations"
 valgrind_backtrace_deps="valgrind_valgrind_h"
 
 # threading support
-atomics_gcc_if="sync_val_compare_and_swap"
-atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
 atomics_win32_if="MemoryBarrier"
 atomics_native_if_any="$ATOMICS_LIST"
 w32threads_deps="atomics_native"
@@ -6507,10 +6500,7 @@  if ! disabled network; then
     fi
 fi
 
-check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
-check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
 check_builtin MemoryBarrier windows.h "MemoryBarrier()"
-check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
 check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
 check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
 
@@ -7768,15 +7758,8 @@  for thread in $THREADS_LIST; do
 done
 
 if disabled stdatomic; then
-    if enabled atomics_gcc; then
-        add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
-    elif enabled atomics_win32; then
+    if enabled atomics_win32; then
         add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
-    elif enabled atomics_suncc; then
-        add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
-    elif enabled pthreads; then
-        add_compat atomics/pthread/stdatomic.o
-        add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
     else
         enabled threads && die "Threading is enabled, but no atomics are available"
         add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'