View | Details | Raw Unified | Return to bug 63566
Collapse All | Expand All

(-)configure.in (-12 / +49 lines)
Lines 457-473 case "$host:$CC" in Link Here
457
        ;;
457
        ;;
458
esac
458
esac
459
459
460
AC_CACHE_CHECK([whether the compiler provides atomic builtins], [ap_cv_atomic_builtins],
460
AC_CACHE_CHECK([whether the compiler provides 32bit atomic builtins], [ap_cv_atomic_builtins],
461
[AC_TRY_RUN([
461
[AC_TRY_RUN([
462
int main()
462
#if HAVE_STDINT_H
463
#include <stdint.h>
464
#endif
465
int main(int argc, const char *const *argv)
463
{
466
{
464
    unsigned long val = 1010, tmp, *mem = &val;
467
#if HAVE_STDINT_H
468
    uint32_t val = 1010, tmp, *mem = &val;
469
#else
470
    unsigned int val = 1010, tmp, *mem = &val;
471
#endif
465
472
466
    if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020)
473
    if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020)
467
        return 1;
474
        return 1;
468
475
469
    tmp = val;
476
    tmp = val;
470
471
    if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010)
477
    if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010)
472
        return 1;
478
        return 1;
473
479
Lines 475-502 esac Link Here
475
        return 1;
481
        return 1;
476
482
477
    tmp = 3030;
483
    tmp = 3030;
478
479
    if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp)
484
    if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp)
480
        return 1;
485
        return 1;
481
486
487
    __sync_synchronize();
482
    if (__sync_lock_test_and_set(&val, 4040) != 3030)
488
    if (__sync_lock_test_and_set(&val, 4040) != 3030)
483
        return 1;
489
        return 1;
484
490
485
    mem = &tmp;
491
    if (__sync_val_compare_and_swap(&mem, &val, &tmp) != &val || mem != &tmp)
492
        return 1;
486
493
487
    if (__sync_val_compare_and_swap(&mem, &tmp, &val) != &tmp)
494
    return 0;
495
}], [ap_cv_atomic_builtins=yes], [ap_cv_atomic_builtins=no], [ap_cv_atomic_builtins=no])])
496
497
if test "$ap_cv_atomic_builtins" = "yes"; then
498
    AC_DEFINE(HAVE_ATOMIC_BUILTINS, 1, [Define if compiler provides 32bit atomic builtins])
499
fi
500
501
AC_CACHE_CHECK([whether the compiler provides 64bit atomic builtins], [ap_cv_atomic_builtins64],
502
[AC_TRY_RUN([
503
#if HAVE_STDINT_H
504
#include <stdint.h>
505
#endif
506
int main(int argc, const char *const *argv)
507
{
508
#if HAVE_STDINT_H
509
    uint64_t val = 1010, tmp, *mem = &val;
510
#else
511
    unsigned long long val = 1010, tmp, *mem = &val;
512
#endif
513
514
    if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020)
488
        return 1;
515
        return 1;
489
516
490
    __sync_synchronize();
517
    tmp = val;
518
    if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010)
519
        return 1;
491
520
492
    if (mem != &val)
521
    if (__sync_sub_and_fetch(&val, 1010) != 0 || val != 0)
493
        return 1;
522
        return 1;
494
523
524
    tmp = 3030;
525
    if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp)
526
        return 1;
527
528
    __sync_synchronize();
529
    if (__sync_lock_test_and_set(&val, 4040) != 3030)
530
        return 1;
531
495
    return 0;
532
    return 0;
496
}], [ap_cv_atomic_builtins=yes], [ap_cv_atomic_builtins=no], [ap_cv_atomic_builtins=no])])
533
}], [ap_cv_atomic_builtins64=yes], [ap_cv_atomic_builtins64=no], [ap_cv_atomic_builtins64=no])])
497
534
498
if test "$ap_cv_atomic_builtins" = "yes"; then
535
if test "$ap_cv_atomic_builtins64" = "yes"; then
499
    AC_DEFINE(HAVE_ATOMIC_BUILTINS, 1, [Define if compiler provides atomic builtins])
536
    AC_DEFINE(HAVE_ATOMIC_BUILTINS64, 1, [Define if compiler provides 64bit atomic builtins])
500
fi
537
fi
501
538
502
case $host in
539
case $host in
(-)include/arch/unix/apr_arch_atomic.h (-1 / +8 lines)
Lines 26-31 Link Here
26
/* noop */
26
/* noop */
27
#elif HAVE_ATOMIC_BUILTINS
27
#elif HAVE_ATOMIC_BUILTINS
28
#   define USE_ATOMICS_BUILTINS
28
#   define USE_ATOMICS_BUILTINS
29
#   if HAVE_ATOMIC_BUILTINS64
30
#   define USE_ATOMICS_BUILTINS64
31
#   else
32
#   define NEED_ATOMICS_GENERIC64
33
#   endif
29
#elif defined(SOLARIS2) && SOLARIS2 >= 10
34
#elif defined(SOLARIS2) && SOLARIS2 >= 10
30
#   define USE_ATOMICS_SOLARIS
35
#   define USE_ATOMICS_SOLARIS
31
#   define NEED_ATOMICS_GENERIC64
36
#   define NEED_ATOMICS_GENERIC64
Lines 36-42 Link Here
36
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
41
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
37
#   define USE_ATOMICS_IA32
42
#   define USE_ATOMICS_IA32
38
#   define NEED_ATOMICS_GENERIC64
43
#   define NEED_ATOMICS_GENERIC64
39
#elif defined(__GNUC__) && (defined(__PPC__) || defined(__ppc__))
44
#elif defined(__GNUC__) && (defined(__powerpc__) \
45
                            || defined(__PPC__) \
46
                            || defined(__ppc__))
40
#   define USE_ATOMICS_PPC
47
#   define USE_ATOMICS_PPC
41
#   define NEED_ATOMICS_GENERIC64
48
#   define NEED_ATOMICS_GENERIC64
42
#elif defined(__GNUC__) && (defined(__s390__) || defined(__s390x__))
49
#elif defined(__GNUC__) && (defined(__s390__) || defined(__s390x__))
(-)atomic/unix/builtins64.c (-2 / +2 lines)
Lines 16-22 Link Here
16
16
17
#include "apr_arch_atomic.h"
17
#include "apr_arch_atomic.h"
18
18
19
#ifdef USE_ATOMICS_BUILTINS
19
#ifdef USE_ATOMICS_BUILTINS64
20
20
21
APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem)
21
APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem)
22
{
22
{
Lines 61-64 APR_DECLARE(apr_uint64_t) apr_atomic_xchg64(volati Link Here
61
    return __sync_lock_test_and_set(mem, val);
61
    return __sync_lock_test_and_set(mem, val);
62
}
62
}
63
63
64
#endif /* USE_ATOMICS_BUILTINS */
64
#endif /* USE_ATOMICS_BUILTINS64 */

Return to bug 63566