Blame tests/test_atomic_include.template

Packit fe9d6e
/*
Packit fe9d6e
 * Copyright (c) 2003 by Hewlett-Packard Company.  All rights reserved.
Packit fe9d6e
 *
Packit fe9d6e
 * This file is covered by the GNU general public license, version 2.
Packit fe9d6e
 * see COPYING for details.
Packit fe9d6e
 */
Packit fe9d6e
Packit fe9d6e
/* Some basic sanity tests.  These do not test the barrier semantics. */
Packit fe9d6e
Packit fe9d6e
#undef TA_assert
Packit fe9d6e
#define TA_assert(e) \
Packit fe9d6e
  if (!(e)) { fprintf(stderr, "Assertion failed %s:%d (barrier: XX)\n", \
Packit fe9d6e
                    __FILE__, __LINE__), exit(1); }
Packit fe9d6e
Packit fe9d6e
#undef MISSING
Packit fe9d6e
#define MISSING(name) \
Packit fe9d6e
  printf("Missing: %s\n", #name "XX")
Packit fe9d6e
Packit fe9d6e
#if defined(CPPCHECK)
Packit fe9d6e
  void list_atomicXX(void);
Packit fe9d6e
  void char_list_atomicXX(void);
Packit fe9d6e
  void short_list_atomicXX(void);
Packit fe9d6e
  void int_list_atomicXX(void);
Packit fe9d6e
  void double_list_atomicXX(void);
Packit fe9d6e
#endif
Packit fe9d6e
Packit fe9d6e
void test_atomicXX(void)
Packit fe9d6e
{
Packit fe9d6e
  AO_t x;
Packit fe9d6e
  unsigned char b;
Packit fe9d6e
  unsigned short s;
Packit fe9d6e
  unsigned int zz;
Packit fe9d6e
# if defined(AO_HAVE_test_and_setXX)
Packit fe9d6e
    AO_TS_t z = AO_TS_INITIALIZER;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_double_compare_and_swapXX) \
Packit fe9d6e
     || defined(AO_HAVE_double_loadXX) \
Packit fe9d6e
     || defined(AO_HAVE_double_storeXX)
Packit fe9d6e
    static AO_double_t old_w; /* static to avoid misalignment */
Packit fe9d6e
    AO_double_t new_w;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_compare_and_swap_doubleXX) \
Packit fe9d6e
     || defined(AO_HAVE_compare_double_and_swap_doubleXX) \
Packit fe9d6e
     || defined(AO_HAVE_double_compare_and_swapXX)
Packit fe9d6e
    static AO_double_t w; /* static to avoid misalignment */
Packit fe9d6e
    w.AO_val1 = 0;
Packit fe9d6e
    w.AO_val2 = 0;
Packit fe9d6e
# endif
Packit fe9d6e
Packit fe9d6e
# if defined(CPPCHECK)
Packit fe9d6e
    list_atomicXX();
Packit fe9d6e
    char_list_atomicXX();
Packit fe9d6e
    short_list_atomicXX();
Packit fe9d6e
    int_list_atomicXX();
Packit fe9d6e
    double_list_atomicXX();
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_nopXX)
Packit fe9d6e
    AO_nopXX();
Packit fe9d6e
# elif !defined(AO_HAVE_nop) || !defined(AO_HAVE_nop_full) \
Packit fe9d6e
       || !defined(AO_HAVE_nop_read) || !defined(AO_HAVE_nop_write)
Packit fe9d6e
    MISSING(AO_nop);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_storeXX)
Packit fe9d6e
#   if (defined(AO_MEMORY_SANITIZER) || defined(LINT2)) \
Packit fe9d6e
       && defined(AO_PREFER_GENERALIZED)
Packit fe9d6e
      *(volatile AO_t *)&x = 0; /* initialize to avoid false warning */
Packit fe9d6e
#   endif
Packit fe9d6e
    AO_storeXX(&x, 13);
Packit fe9d6e
    TA_assert(x == 13);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_store) || !defined(AO_HAVE_store_full) \
Packit fe9d6e
       || !defined(AO_HAVE_store_release) \
Packit fe9d6e
       || !defined(AO_HAVE_store_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_store_write)
Packit fe9d6e
      MISSING(AO_store);
Packit fe9d6e
#   endif
Packit fe9d6e
    x = 13;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_loadXX)
Packit fe9d6e
    TA_assert(AO_loadXX(&x) == 13);
Packit fe9d6e
# elif !defined(AO_HAVE_load) || !defined(AO_HAVE_load_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_load_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_load_dd_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_load_full) || !defined(AO_HAVE_load_read)
Packit fe9d6e
    MISSING(AO_load);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_test_and_setXX)
Packit fe9d6e
    TA_assert(AO_test_and_setXX(&z) == AO_TS_CLEAR);
Packit fe9d6e
    TA_assert(AO_test_and_setXX(&z) == AO_TS_SET);
Packit fe9d6e
    TA_assert(AO_test_and_setXX(&z) == AO_TS_SET);
Packit fe9d6e
    AO_CLEAR(&z);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_test_and_set);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_fetch_and_addXX)
Packit fe9d6e
    TA_assert(AO_fetch_and_addXX(&x, 42) == 13);
Packit fe9d6e
    TA_assert(AO_fetch_and_addXX(&x, (AO_t)(-42)) == 55);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_fetch_and_add);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_fetch_and_add1XX)
Packit fe9d6e
    TA_assert(AO_fetch_and_add1XX(&x) == 13);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_fetch_and_add1);
Packit fe9d6e
    ++x;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_fetch_and_sub1XX)
Packit fe9d6e
    TA_assert(AO_fetch_and_sub1XX(&x) == 14);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_fetch_and_sub1);
Packit fe9d6e
    --x;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_storeXX)
Packit fe9d6e
#   if (defined(AO_MEMORY_SANITIZER) || defined(LINT2)) \
Packit fe9d6e
       && defined(AO_PREFER_GENERALIZED)
Packit fe9d6e
      *(volatile short *)&s = 0;
Packit fe9d6e
#   endif
Packit fe9d6e
    AO_short_storeXX(&s, 13);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_short_store) || !defined(AO_HAVE_short_store_full) \
Packit fe9d6e
       || !defined(AO_HAVE_short_store_release) \
Packit fe9d6e
       || !defined(AO_HAVE_short_store_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_short_store_write)
Packit fe9d6e
      MISSING(AO_short_store);
Packit fe9d6e
#   endif
Packit fe9d6e
    s = 13;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_loadXX)
Packit fe9d6e
    TA_assert(AO_short_load(&s) == 13);
Packit fe9d6e
# elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_short_load_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_load_dd_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_load_full) \
Packit fe9d6e
       || !defined(AO_HAVE_short_load_read)
Packit fe9d6e
    MISSING(AO_short_load);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_fetch_and_addXX)
Packit fe9d6e
    TA_assert(AO_short_fetch_and_addXX(&s, 42) == 13);
Packit fe9d6e
    TA_assert(AO_short_fetch_and_addXX(&s, (unsigned short)-42) == 55);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_short_fetch_and_add);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_fetch_and_add1XX)
Packit fe9d6e
    TA_assert(AO_short_fetch_and_add1XX(&s) == 13);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_short_fetch_and_add1);
Packit fe9d6e
    ++s;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_fetch_and_sub1XX)
Packit fe9d6e
    TA_assert(AO_short_fetch_and_sub1XX(&s) == 14);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_short_fetch_and_sub1);
Packit fe9d6e
    --s;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(*(volatile short *)&s == 13);
Packit fe9d6e
# if defined(AO_HAVE_char_storeXX)
Packit fe9d6e
#   if (defined(AO_MEMORY_SANITIZER) || defined(LINT2)) \
Packit fe9d6e
       && defined(AO_PREFER_GENERALIZED)
Packit fe9d6e
      *(volatile char *)&b = 0;
Packit fe9d6e
#   endif
Packit fe9d6e
    AO_char_storeXX(&b, 13);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_char_store) || !defined(AO_HAVE_char_store_full) \
Packit fe9d6e
       || !defined(AO_HAVE_char_store_release) \
Packit fe9d6e
       || !defined(AO_HAVE_char_store_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_char_store_write)
Packit fe9d6e
      MISSING(AO_char_store);
Packit fe9d6e
#   endif
Packit fe9d6e
    b = 13;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_loadXX)
Packit fe9d6e
    TA_assert(AO_char_load(&b) == 13);
Packit fe9d6e
# elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_char_load_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_load_dd_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_load_full) || !defined(AO_HAVE_char_load_read)
Packit fe9d6e
    MISSING(AO_char_load);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_fetch_and_addXX)
Packit fe9d6e
    TA_assert(AO_char_fetch_and_addXX(&b, 42) == 13);
Packit fe9d6e
    TA_assert(AO_char_fetch_and_addXX(&b, (unsigned char)-42) == 55);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_char_fetch_and_add);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_fetch_and_add1XX)
Packit fe9d6e
    TA_assert(AO_char_fetch_and_add1XX(&b) == 13);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_char_fetch_and_add1);
Packit fe9d6e
    ++b;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_fetch_and_sub1XX)
Packit fe9d6e
    TA_assert(AO_char_fetch_and_sub1XX(&b) == 14);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_char_fetch_and_sub1);
Packit fe9d6e
    --b;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(*(volatile char *)&b == 13);
Packit fe9d6e
# if defined(AO_HAVE_int_storeXX)
Packit fe9d6e
#   if (defined(AO_MEMORY_SANITIZER) || defined(LINT2)) \
Packit fe9d6e
       && defined(AO_PREFER_GENERALIZED)
Packit fe9d6e
      *(volatile int *)&zz = 0;
Packit fe9d6e
#   endif
Packit fe9d6e
    AO_int_storeXX(&zz, 13);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_int_store) || !defined(AO_HAVE_int_store_full) \
Packit fe9d6e
       || !defined(AO_HAVE_int_store_release) \
Packit fe9d6e
       || !defined(AO_HAVE_int_store_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_int_store_write)
Packit fe9d6e
      MISSING(AO_int_store);
Packit fe9d6e
#   endif
Packit fe9d6e
    zz = 13;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_loadXX)
Packit fe9d6e
    TA_assert(AO_int_load(&zz) == 13);
Packit fe9d6e
# elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_int_load_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_load_dd_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_load_full) || !defined(AO_HAVE_int_load_read)
Packit fe9d6e
    MISSING(AO_int_load);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_fetch_and_addXX)
Packit fe9d6e
    TA_assert(AO_int_fetch_and_addXX(&zz, 42) == 13);
Packit fe9d6e
    TA_assert(AO_int_fetch_and_addXX(&zz, (unsigned int)-42) == 55);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_int_fetch_and_add);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_fetch_and_add1XX)
Packit fe9d6e
    TA_assert(AO_int_fetch_and_add1XX(&zz) == 13);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_int_fetch_and_add1);
Packit fe9d6e
    ++zz;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_fetch_and_sub1XX)
Packit fe9d6e
    TA_assert(AO_int_fetch_and_sub1XX(&zz) == 14);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_int_fetch_and_sub1);
Packit fe9d6e
    --zz;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(*(volatile int *)&zz == 13);
Packit fe9d6e
# if defined(AO_HAVE_compare_and_swapXX)
Packit fe9d6e
    TA_assert(!AO_compare_and_swapXX(&x, 14, 42));
Packit fe9d6e
    TA_assert(x == 13);
Packit fe9d6e
    TA_assert(AO_compare_and_swapXX(&x, 13, 42));
Packit fe9d6e
    TA_assert(x == 42);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_compare_and_swap);
Packit fe9d6e
    if (*(volatile AO_t *)&x == 13) x = 42;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_orXX)
Packit fe9d6e
    AO_orXX(&x, 66);
Packit fe9d6e
    TA_assert(x == 106);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_or) || !defined(AO_HAVE_or_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_or_acquire_read) || !defined(AO_HAVE_or_full) \
Packit fe9d6e
       || !defined(AO_HAVE_or_read) || !defined(AO_HAVE_or_release) \
Packit fe9d6e
       || !defined(AO_HAVE_or_release_write) || !defined(AO_HAVE_or_write)
Packit fe9d6e
      MISSING(AO_or);
Packit fe9d6e
#   endif
Packit fe9d6e
    x |= 66;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_xorXX)
Packit fe9d6e
    AO_xorXX(&x, 181);
Packit fe9d6e
    TA_assert(x == 223);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_xor) || !defined(AO_HAVE_xor_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_xor_acquire_read) || !defined(AO_HAVE_xor_full) \
Packit fe9d6e
       || !defined(AO_HAVE_xor_read) || !defined(AO_HAVE_xor_release) \
Packit fe9d6e
       || !defined(AO_HAVE_xor_release_write) || !defined(AO_HAVE_xor_write)
Packit fe9d6e
      MISSING(AO_xor);
Packit fe9d6e
#   endif
Packit fe9d6e
    x ^= 181;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_andXX)
Packit fe9d6e
    AO_andXX(&x, 57);
Packit fe9d6e
    TA_assert(x == 25);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_and) || !defined(AO_HAVE_and_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_and_acquire_read) || !defined(AO_HAVE_and_full) \
Packit fe9d6e
       || !defined(AO_HAVE_and_read) || !defined(AO_HAVE_and_release) \
Packit fe9d6e
       || !defined(AO_HAVE_and_release_write) || !defined(AO_HAVE_and_write)
Packit fe9d6e
      MISSING(AO_and);
Packit fe9d6e
#   endif
Packit fe9d6e
    x &= 57;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_fetch_compare_and_swapXX)
Packit fe9d6e
    TA_assert(AO_fetch_compare_and_swapXX(&x, 14, 117) == 25);
Packit fe9d6e
    TA_assert(x == 25);
Packit fe9d6e
    TA_assert(AO_fetch_compare_and_swapXX(&x, 25, 117) == 25);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_fetch_compare_and_swap);
Packit fe9d6e
    if (x == 25) x = 117;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(x == 117);
Packit fe9d6e
# if defined(AO_HAVE_short_compare_and_swapXX)
Packit fe9d6e
    TA_assert(!AO_short_compare_and_swapXX(&s, 14, 42));
Packit fe9d6e
    TA_assert(s == 13);
Packit fe9d6e
    TA_assert(AO_short_compare_and_swapXX(&s, 13, 42));
Packit fe9d6e
    TA_assert(s == 42);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_short_compare_and_swap);
Packit fe9d6e
    if (*(volatile short *)&s == 13) s = 42;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_orXX)
Packit fe9d6e
    AO_short_orXX(&s, 66);
Packit fe9d6e
    TA_assert(s == 106);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_short_or) || !defined(AO_HAVE_short_or_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_short_or_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_or_full) || !defined(AO_HAVE_short_or_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_or_release) \
Packit fe9d6e
       || !defined(AO_HAVE_short_or_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_short_or_write)
Packit fe9d6e
      MISSING(AO_short_or);
Packit fe9d6e
#   endif
Packit fe9d6e
    s |= 66;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_xorXX)
Packit fe9d6e
    AO_short_xorXX(&s, 181);
Packit fe9d6e
    TA_assert(s == 223);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_short_xor) || !defined(AO_HAVE_short_xor_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_full) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_release) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_short_xor_write)
Packit fe9d6e
      MISSING(AO_short_xor);
Packit fe9d6e
#   endif
Packit fe9d6e
    s ^= 181;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_andXX)
Packit fe9d6e
    AO_short_andXX(&s, 57);
Packit fe9d6e
    TA_assert(s == 25);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_short_and) || !defined(AO_HAVE_short_and_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_full) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_read) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_release) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_short_and_write)
Packit fe9d6e
      MISSING(AO_short_and);
Packit fe9d6e
#   endif
Packit fe9d6e
    s &= 57;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_short_fetch_compare_and_swapXX)
Packit fe9d6e
    TA_assert(AO_short_fetch_compare_and_swapXX(&s, 14, 117) == 25);
Packit fe9d6e
    TA_assert(s == 25);
Packit fe9d6e
    TA_assert(AO_short_fetch_compare_and_swapXX(&s, 25, 117) == 25);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_short_fetch_compare_and_swap);
Packit fe9d6e
    if (s == 25) s = 117;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(s == 117);
Packit fe9d6e
# if defined(AO_HAVE_char_compare_and_swapXX)
Packit fe9d6e
    TA_assert(!AO_char_compare_and_swapXX(&b, 14, 42));
Packit fe9d6e
    TA_assert(b == 13);
Packit fe9d6e
    TA_assert(AO_char_compare_and_swapXX(&b, 13, 42));
Packit fe9d6e
    TA_assert(b == 42);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_char_compare_and_swap);
Packit fe9d6e
    if (*(volatile char *)&b == 13) b = 42;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_orXX)
Packit fe9d6e
    AO_char_orXX(&b, 66);
Packit fe9d6e
    TA_assert(b == 106);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_char_or) || !defined(AO_HAVE_char_or_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_char_or_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_or_full) || !defined(AO_HAVE_char_or_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_or_release) \
Packit fe9d6e
       || !defined(AO_HAVE_char_or_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_char_or_write)
Packit fe9d6e
      MISSING(AO_char_or);
Packit fe9d6e
#   endif
Packit fe9d6e
    b |= 66;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_xorXX)
Packit fe9d6e
    AO_char_xorXX(&b, 181);
Packit fe9d6e
    TA_assert(b == 223);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_char_xor) || !defined(AO_HAVE_char_xor_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_char_xor_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_xor_full) || !defined(AO_HAVE_char_xor_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_xor_release) \
Packit fe9d6e
       || !defined(AO_HAVE_char_xor_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_char_xor_write)
Packit fe9d6e
      MISSING(AO_char_xor);
Packit fe9d6e
#   endif
Packit fe9d6e
    b ^= 181;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_andXX)
Packit fe9d6e
    AO_char_andXX(&b, 57);
Packit fe9d6e
    TA_assert(b == 25);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_char_and) || !defined(AO_HAVE_char_and_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_char_and_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_and_full) || !defined(AO_HAVE_char_and_read) \
Packit fe9d6e
       || !defined(AO_HAVE_char_and_release) \
Packit fe9d6e
       || !defined(AO_HAVE_char_and_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_char_and_write)
Packit fe9d6e
      MISSING(AO_char_and);
Packit fe9d6e
#   endif
Packit fe9d6e
    b &= 57;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_char_fetch_compare_and_swapXX)
Packit fe9d6e
    TA_assert(AO_char_fetch_compare_and_swapXX(&b, 14, 117) == 25);
Packit fe9d6e
    TA_assert(b == 25);
Packit fe9d6e
    TA_assert(AO_char_fetch_compare_and_swapXX(&b, 25, 117) == 25);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_char_fetch_compare_and_swap);
Packit fe9d6e
    if (b == 25) b = 117;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(b == 117);
Packit fe9d6e
# if defined(AO_HAVE_int_compare_and_swapXX)
Packit fe9d6e
    TA_assert(!AO_int_compare_and_swapXX(&zz, 14, 42));
Packit fe9d6e
    TA_assert(zz == 13);
Packit fe9d6e
    TA_assert(AO_int_compare_and_swapXX(&zz, 13, 42));
Packit fe9d6e
    TA_assert(zz == 42);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_int_compare_and_swap);
Packit fe9d6e
    if (*(volatile int *)&zz == 13) zz = 42;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_orXX)
Packit fe9d6e
    AO_int_orXX(&zz, 66);
Packit fe9d6e
    TA_assert(zz == 106);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_int_or) || !defined(AO_HAVE_int_or_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_int_or_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_or_full) || !defined(AO_HAVE_int_or_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_or_release) \
Packit fe9d6e
       || !defined(AO_HAVE_int_or_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_int_or_write)
Packit fe9d6e
      MISSING(AO_int_or);
Packit fe9d6e
#   endif
Packit fe9d6e
    zz |= 66;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_xorXX)
Packit fe9d6e
    AO_int_xorXX(&zz, 181);
Packit fe9d6e
    TA_assert(zz == 223);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_int_xor) || !defined(AO_HAVE_int_xor_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_int_xor_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_xor_full) || !defined(AO_HAVE_int_xor_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_xor_release) \
Packit fe9d6e
       || !defined(AO_HAVE_int_xor_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_int_xor_write)
Packit fe9d6e
      MISSING(AO_int_xor);
Packit fe9d6e
#   endif
Packit fe9d6e
    zz ^= 181;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_andXX)
Packit fe9d6e
    AO_int_andXX(&zz, 57);
Packit fe9d6e
    TA_assert(zz == 25);
Packit fe9d6e
# else
Packit fe9d6e
#   if !defined(AO_HAVE_int_and) || !defined(AO_HAVE_int_and_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_int_and_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_and_full) || !defined(AO_HAVE_int_and_read) \
Packit fe9d6e
       || !defined(AO_HAVE_int_and_release) \
Packit fe9d6e
       || !defined(AO_HAVE_int_and_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_int_and_write)
Packit fe9d6e
      MISSING(AO_int_and);
Packit fe9d6e
#   endif
Packit fe9d6e
    zz &= 57;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_int_fetch_compare_and_swapXX)
Packit fe9d6e
    TA_assert(AO_int_fetch_compare_and_swapXX(&zz, 14, 117) == 25);
Packit fe9d6e
    TA_assert(zz == 25);
Packit fe9d6e
    TA_assert(AO_int_fetch_compare_and_swapXX(&zz, 25, 117) == 25);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_int_fetch_compare_and_swap);
Packit fe9d6e
    if (zz == 25) zz = 117;
Packit fe9d6e
# endif
Packit fe9d6e
  TA_assert(zz == 117);
Packit fe9d6e
# if defined(AO_HAVE_double_loadXX) || defined(AO_HAVE_double_storeXX)
Packit fe9d6e
    /* Initialize old_w even for store to workaround MSan warning.      */
Packit fe9d6e
    old_w.AO_val1 = 3316;
Packit fe9d6e
    old_w.AO_val2 = 2921;
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_double_loadXX)
Packit fe9d6e
    new_w = AO_double_loadXX(&old_w);
Packit fe9d6e
    TA_assert(new_w.AO_val1 == 3316 && new_w.AO_val2 == 2921);
Packit fe9d6e
# elif !defined(AO_HAVE_double_load) \
Packit fe9d6e
       || !defined(AO_HAVE_double_load_acquire) \
Packit fe9d6e
       || !defined(AO_HAVE_double_load_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_double_load_dd_acquire_read) \
Packit fe9d6e
       || !defined(AO_HAVE_double_load_full) \
Packit fe9d6e
       || !defined(AO_HAVE_double_load_read)
Packit fe9d6e
    MISSING(AO_double_load);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_double_storeXX)
Packit fe9d6e
    new_w.AO_val1 = 1375;
Packit fe9d6e
    new_w.AO_val2 = 8243;
Packit fe9d6e
    AO_double_storeXX(&old_w, new_w);
Packit fe9d6e
    TA_assert(old_w.AO_val1 == 1375 && old_w.AO_val2 == 8243);
Packit fe9d6e
    AO_double_storeXX(&old_w, new_w);
Packit fe9d6e
    TA_assert(old_w.AO_val1 == 1375 && old_w.AO_val2 == 8243);
Packit fe9d6e
    new_w.AO_val1 ^= old_w.AO_val1;
Packit fe9d6e
    new_w.AO_val2 ^= old_w.AO_val2;
Packit fe9d6e
    AO_double_storeXX(&old_w, new_w);
Packit fe9d6e
    TA_assert(old_w.AO_val1 == 0 && old_w.AO_val2 == 0);
Packit fe9d6e
# elif !defined(AO_HAVE_double_store) \
Packit fe9d6e
       || !defined(AO_HAVE_double_store_full) \
Packit fe9d6e
       || !defined(AO_HAVE_double_store_release) \
Packit fe9d6e
       || !defined(AO_HAVE_double_store_release_write) \
Packit fe9d6e
       || !defined(AO_HAVE_double_store_write)
Packit fe9d6e
    MISSING(AO_double_store);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_compare_double_and_swap_doubleXX)
Packit fe9d6e
    TA_assert(!AO_compare_double_and_swap_doubleXX(&w, 17, 42, 12, 13));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
    TA_assert(AO_compare_double_and_swap_doubleXX(&w, 0, 0, 12, 13));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(!AO_compare_double_and_swap_doubleXX(&w, 12, 14, 64, 33));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(!AO_compare_double_and_swap_doubleXX(&w, 11, 13, 85, 82));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(!AO_compare_double_and_swap_doubleXX(&w, 13, 12, 17, 42));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(AO_compare_double_and_swap_doubleXX(&w, 12, 13, 17, 42));
Packit fe9d6e
    TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42);
Packit fe9d6e
    TA_assert(AO_compare_double_and_swap_doubleXX(&w, 17, 42, 0, 0));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_compare_double_and_swap_double);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_compare_and_swap_doubleXX)
Packit fe9d6e
    TA_assert(!AO_compare_and_swap_doubleXX(&w, 17, 12, 13));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
    TA_assert(AO_compare_and_swap_doubleXX(&w, 0, 12, 13));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(!AO_compare_and_swap_doubleXX(&w, 13, 12, 33));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(!AO_compare_and_swap_doubleXX(&w, 1213, 48, 86));
Packit fe9d6e
    TA_assert(w.AO_val1 == 12 && w.AO_val2 == 13);
Packit fe9d6e
    TA_assert(AO_compare_and_swap_doubleXX(&w, 12, 17, 42));
Packit fe9d6e
    TA_assert(w.AO_val1 == 17 && w.AO_val2 == 42);
Packit fe9d6e
    TA_assert(AO_compare_and_swap_doubleXX(&w, 17, 0, 0));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_compare_and_swap_double);
Packit fe9d6e
# endif
Packit fe9d6e
# if defined(AO_HAVE_double_compare_and_swapXX)
Packit fe9d6e
    old_w.AO_val1 = 4116;
Packit fe9d6e
    old_w.AO_val2 = 2121;
Packit fe9d6e
    new_w.AO_val1 = 8537;
Packit fe9d6e
    new_w.AO_val2 = 6410;
Packit fe9d6e
    TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
    TA_assert(AO_double_compare_and_swapXX(&w, w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410);
Packit fe9d6e
    old_w.AO_val1 = new_w.AO_val1;
Packit fe9d6e
    old_w.AO_val2 = 29;
Packit fe9d6e
    new_w.AO_val1 = 820;
Packit fe9d6e
    new_w.AO_val2 = 5917;
Packit fe9d6e
    TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410);
Packit fe9d6e
    old_w.AO_val1 = 11;
Packit fe9d6e
    old_w.AO_val2 = 6410;
Packit fe9d6e
    new_w.AO_val1 = 3552;
Packit fe9d6e
    new_w.AO_val2 = 1746;
Packit fe9d6e
    TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410);
Packit fe9d6e
    old_w.AO_val1 = old_w.AO_val2;
Packit fe9d6e
    old_w.AO_val2 = 8537;
Packit fe9d6e
    new_w.AO_val1 = 4116;
Packit fe9d6e
    new_w.AO_val2 = 2121;
Packit fe9d6e
    TA_assert(!AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 8537 && w.AO_val2 == 6410);
Packit fe9d6e
    old_w.AO_val1 = old_w.AO_val2;
Packit fe9d6e
    old_w.AO_val2 = 6410;
Packit fe9d6e
    new_w.AO_val1 = 1;
Packit fe9d6e
    TA_assert(AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 1 && w.AO_val2 == 2121);
Packit fe9d6e
    old_w.AO_val1 = new_w.AO_val1;
Packit fe9d6e
    old_w.AO_val2 = w.AO_val2;
Packit fe9d6e
    new_w.AO_val1--;
Packit fe9d6e
    new_w.AO_val2 = 0;
Packit fe9d6e
    TA_assert(AO_double_compare_and_swapXX(&w, old_w, new_w));
Packit fe9d6e
    TA_assert(w.AO_val1 == 0 && w.AO_val2 == 0);
Packit fe9d6e
# else
Packit fe9d6e
    MISSING(AO_double_compare_and_swap);
Packit fe9d6e
# endif
Packit fe9d6e
}