/* { dg-do run } */

/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "" { target mips_llsc } 0 } */

extern void abort (void);
extern void exit (int);

NOMIPS16 int main ()
{
#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
  unsigned v = 0;
  __sync_synchronize ();

  if (!__sync_bool_compare_and_swap (&v, 0, 30000))
    abort();
  if (30000 != __sync_val_compare_and_swap (&v, 30000, 100001))
    abort();
  __sync_sub_and_fetch (&v, 0x8001);
  __sync_sub_and_fetch (&v, 0x7fff);
  if (v != 34465)
    abort();
  if (__sync_nand_and_fetch (&v, 0xff) != -162)
    abort();
  if (__sync_fetch_and_add (&v, 262) != -162)
    abort();
  if (v != 100)
    abort();
  if (__sync_or_and_fetch (&v, 0xf001) != 0xf065)
    abort();
  if (__sync_and_and_fetch (&v, 0x1000) != 0x1000)
    abort();
  if (__sync_xor_and_fetch (&v, 0xa51040) != 0xa50040)
    abort();
  __sync_and_and_fetch (&v, 7);
  if (__sync_lock_test_and_set(&v, 1) != 0)
    abort();
  if (v != 1)
    abort();
  __sync_lock_release (&v);
  if (v != 0)
    abort();
#endif
  exit(0);
}
