summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2023-04-21 12:24:53 +0000
committerYann Ylavic <ylavic@apache.org>2023-04-21 12:24:53 +0000
commit805904fe295efa5f480b067d8c60777675ea7368 (patch)
treeb669398f4ac8c38c5a8355e475ffdcf8269c3123
parent4ab133489c13382e13aea8d34aa0ec404c409f07 (diff)
downloadapr-805904fe295efa5f480b067d8c60777675ea7368.tar.gz
atomics: Disentangle 32bit and 64bit atomics configuration.
Allow for --enable-nonportable-atomics=upto32bit to disable 64bit atomic builtins while still allowing for 32bit ones. yes/no still enables/disables both (if available in the first place..). By default (no --enable-nonportable-atomics setting), generic 64bit atomics are forced for 32bit CPUs/systems, until we figure out how to properly align apr_uint64_t (at least i[56]86 CPUs which could work with 64bit builtins actually don't if the data is not 64bit aligned, assuming the same for other 32bit CPUs is safer). git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1909321 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--atomic/netware/apr_atomic.c2
-rw-r--r--atomic/os390/atomic.c2
-rw-r--r--atomic/unix/ia32.c2
-rw-r--r--atomic/unix/mutex64.c2
-rw-r--r--atomic/unix/ppc.c2
-rw-r--r--atomic/unix/s390.c2
-rw-r--r--atomic/unix/solaris.c2
-rw-r--r--atomic/win32/apr_atomic.c2
-rw-r--r--configure.in29
-rw-r--r--include/arch/unix/apr_arch_atomic.h20
10 files changed, 37 insertions, 28 deletions
diff --git a/atomic/netware/apr_atomic.c b/atomic/netware/apr_atomic.c
index d4168edf1..3df3a04d7 100644
--- a/atomic/netware/apr_atomic.c
+++ b/atomic/netware/apr_atomic.c
@@ -20,7 +20,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *pool)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/os390/atomic.c b/atomic/os390/atomic.c
index f7318aee9..6aed0196e 100644
--- a/atomic/os390/atomic.c
+++ b/atomic/os390/atomic.c
@@ -20,7 +20,7 @@
apr_status_t apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/unix/ia32.c b/atomic/unix/ia32.c
index df23d823e..22036983b 100644
--- a/atomic/unix/ia32.c
+++ b/atomic/unix/ia32.c
@@ -20,7 +20,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/unix/mutex64.c b/atomic/unix/mutex64.c
index a6a7ceb0b..4ea4d8fc8 100644
--- a/atomic/unix/mutex64.c
+++ b/atomic/unix/mutex64.c
@@ -17,7 +17,7 @@
#include "apr_arch_atomic.h"
#include "apr_thread_mutex.h"
-#if defined(USE_ATOMICS_GENERIC) || defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
#include <stdlib.h>
diff --git a/atomic/unix/ppc.c b/atomic/unix/ppc.c
index ffba3c27a..513c6013e 100644
--- a/atomic/unix/ppc.c
+++ b/atomic/unix/ppc.c
@@ -26,7 +26,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/unix/s390.c b/atomic/unix/s390.c
index d20de5987..663a9ce52 100644
--- a/atomic/unix/s390.c
+++ b/atomic/unix/s390.c
@@ -20,7 +20,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/unix/solaris.c b/atomic/unix/solaris.c
index 4a2e1b8ad..5fc55ba6c 100644
--- a/atomic/unix/solaris.c
+++ b/atomic/unix/solaris.c
@@ -22,7 +22,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/atomic/win32/apr_atomic.c b/atomic/win32/apr_atomic.c
index 3bd42f7f5..c349ad97f 100644
--- a/atomic/win32/apr_atomic.c
+++ b/atomic/win32/apr_atomic.c
@@ -18,7 +18,7 @@
APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p)
{
-#if defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
return apr__atomic_generic64_init(p);
#else
return APR_SUCCESS;
diff --git a/configure.in b/configure.in
index ea9a9337a..8edcb0845 100644
--- a/configure.in
+++ b/configure.in
@@ -836,21 +836,28 @@ void main(void)
fi
fi
+force_generic_atomics=no
+force_generic_atomics64=no
+AC_CHECK_SIZEOF(void*, 4)
+if test "x$ac_cv_sizeof_voidp" = "x"; then
+ force_generic_atomics64=yes
+elif test $ac_cv_sizeof_voidp -lt 8; then
+ force_generic_atomics64=yes
+fi
AC_ARG_ENABLE(nonportable-atomics,
[ --enable-nonportable-atomics Use optimized atomic code which may produce nonportable binaries],
-[if test $enableval = yes; then
- force_generic_atomics=no
- else
+[if test "$enableval" = "upto32bit"; then
+ force_generic_atomics64=yes
+ elif test "$enableval" != "yes"; then
force_generic_atomics=yes
fi
],
-[force_generic_atomics=no
-case $host_cpu in
- i[[34]]86) force_generic_atomics=yes;;
+[case $host_cpu in
+ i[[34]]86)
+ force_generic_atomics=yes
+ ;;
i[[56]]86)
- if test $has_atomic_builtins != yes; then
- force_generic_atomics=yes
- fi
+ force_generic_atomics64=yes
;;
*) case $host in
*solaris2.10*)
@@ -871,6 +878,10 @@ if test $force_generic_atomics = yes; then
AC_DEFINE([USE_ATOMICS_GENERIC], 1,
[Define if use of generic atomics is requested])
fi
+if test $force_generic_atomics = yes -o $force_generic_atomics64 = yes; then
+ AC_DEFINE([USE_ATOMICS_GENERIC64], 1,
+ [Define if use of 64bit generic atomics is requested])
+fi
AC_SUBST(proc_mutex_is_global)
AC_SUBST(eolstr)
diff --git a/include/arch/unix/apr_arch_atomic.h b/include/arch/unix/apr_arch_atomic.h
index ce771ad9c..a443b9dd1 100644
--- a/include/arch/unix/apr_arch_atomic.h
+++ b/include/arch/unix/apr_arch_atomic.h
@@ -23,37 +23,35 @@
#include "apr_atomic.h"
#if defined(USE_ATOMICS_GENERIC)
-/* noop */
+ /* noop */
#elif HAVE_ATOMIC_BUILTINS
# define USE_ATOMICS_BUILTINS
-# if HAVE_ATOMIC_BUILTINS64
-# define USE_ATOMICS_BUILTINS64
-# else
-# define NEED_ATOMICS_GENERIC64
-# endif
#elif defined(SOLARIS2) && SOLARIS2 >= 10
# define USE_ATOMICS_SOLARIS
-# define NEED_ATOMICS_GENERIC64
#elif defined(__GNUC__) && defined(__STRICT_ANSI__)
/* force use of generic atomics if building e.g. with -std=c89, which
* doesn't allow inline asm */
# define USE_ATOMICS_GENERIC
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
# define USE_ATOMICS_IA32
-# define NEED_ATOMICS_GENERIC64
#elif defined(__GNUC__) && (defined(__powerpc__) \
|| defined(__PPC__) \
|| defined(__ppc__))
# define USE_ATOMICS_PPC
-# define NEED_ATOMICS_GENERIC64
#elif defined(__GNUC__) && (defined(__s390__) || defined(__s390x__))
# define USE_ATOMICS_S390
-# define NEED_ATOMICS_GENERIC64
#else
# define USE_ATOMICS_GENERIC
#endif
-#if defined(USE_ATOMICS_GENERIC) || defined (NEED_ATOMICS_GENERIC64)
+#if defined(USE_ATOMICS_GENERIC64)
+ /* noop */
+#elif HAVE_ATOMIC_BUILTINS64
+# define USE_ATOMICS_BUILTINS64
+#else
+# define USE_ATOMICS_GENERIC64
+#endif
+#if defined(USE_ATOMICS_GENERIC64)
apr_status_t apr__atomic_generic64_init(apr_pool_t *p);
#endif