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 |