(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
ia64-sync-2.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target sync_int_long } */
       3  /* { dg-options } */
       4  /* { dg-options "-march=i486" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
       5  /* { dg-options "-mcpu=v9" { target sparc*-*-* } } */
       6  
       7  /* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */
       8  /* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "nand_and_fetch" { target *-*-* } 0 } */
       9  
      10  /* Test basic functionality of the intrinsics.  */
      11  
      12  __extension__ typedef __SIZE_TYPE__ size_t;
      13  
      14  extern void abort (void);
      15  extern void *memcpy (void *, const void *, size_t);
      16  extern int memcmp (const void *, const void *, size_t);
      17  
      18  static int AI[18];
      19  static int init_si[18] = { 0,0,0,1,0,0, 0,0  ,-1,0,0,-1,0,0  ,-1,0,0,-1 };
      20  static int test_si[18] = { 1,1,1,1,1,4,22,-12,7 ,8,9,~7,1,-12,7 ,8,9,~7 };
      21  
      22  static void
      23  do_si (void)
      24  {
      25    if (__sync_val_compare_and_swap(AI+0, 0, 1) != 0)
      26      abort ();
      27    if (__sync_val_compare_and_swap(AI+0, 0, 1) != 1)
      28      abort ();
      29    if (__sync_bool_compare_and_swap(AI+1, 0, 1) != 1)
      30      abort ();
      31    if (__sync_bool_compare_and_swap(AI+1, 0, 1) != 0)
      32      abort ();
      33  
      34    if (__sync_lock_test_and_set(AI+2, 1) != 0)
      35      abort ();
      36  
      37    if (__sync_fetch_and_add(AI+4, 1) != 0)
      38      abort ();
      39    if (__sync_fetch_and_add(AI+5, 4) != 0)
      40      abort ();
      41    if (__sync_fetch_and_add(AI+6, 22) != 0)
      42      abort ();
      43    if (__sync_fetch_and_sub(AI+7, 12) != 0)
      44      abort ();
      45    if (__sync_fetch_and_and(AI+8, 7) != -1)
      46      abort ();
      47    if (__sync_fetch_and_or(AI+9, 8) != 0)
      48      abort ();
      49    if (__sync_fetch_and_xor(AI+10, 9) != 0)
      50      abort ();
      51    if (__sync_fetch_and_nand(AI+11, 7) != -1)
      52      abort ();
      53  
      54    if (__sync_add_and_fetch(AI+12, 1) != 1)
      55      abort ();
      56    if (__sync_sub_and_fetch(AI+13, 12) != -12)
      57      abort ();
      58    if (__sync_and_and_fetch(AI+14, 7) != 7)
      59      abort ();
      60    if (__sync_or_and_fetch(AI+15, 8) != 8)
      61      abort ();
      62    if (__sync_xor_and_fetch(AI+16, 9) != 9)
      63      abort ();
      64    if (__sync_nand_and_fetch(AI+17, 7) != ~7)
      65      abort ();
      66  }
      67  
      68  static long AL[18];
      69  static long init_di[18] = { 0,0,0,1,0,0, 0,0  ,-1,0,0,-1,0,0  ,-1,0,0,-1 };
      70  static long test_di[18] = { 1,1,1,1,1,4,22,-12,7 ,8,9,~7,1,-12,7 ,8,9,~7 };
      71  
      72  static void
      73  do_di (void)
      74  {
      75    if (__sync_val_compare_and_swap(AL+0, 0, 1) != 0)
      76      abort ();
      77    if (__sync_val_compare_and_swap(AL+0, 0, 1) != 1)
      78      abort ();
      79    if (__sync_bool_compare_and_swap(AL+1, 0, 1) != 1)
      80      abort ();
      81    if (__sync_bool_compare_and_swap(AL+1, 0, 1) != 0)
      82      abort ();
      83  
      84    if (__sync_lock_test_and_set(AL+2, 1) != 0)
      85      abort ();
      86  
      87    if (__sync_fetch_and_add(AL+4, 1) != 0)
      88      abort ();
      89    if (__sync_fetch_and_add(AL+5, 4) != 0)
      90      abort ();
      91    if (__sync_fetch_and_add(AL+6, 22) != 0)
      92      abort ();
      93    if (__sync_fetch_and_sub(AL+7, 12) != 0)
      94      abort ();
      95    if (__sync_fetch_and_and(AL+8, 7) != -1)
      96      abort ();
      97    if (__sync_fetch_and_or(AL+9, 8) != 0)
      98      abort ();
      99    if (__sync_fetch_and_xor(AL+10, 9) != 0)
     100      abort ();
     101    if (__sync_fetch_and_nand(AL+11, 7) != -1)
     102      abort ();
     103  
     104    if (__sync_add_and_fetch(AL+12, 1) != 1)
     105      abort ();
     106    if (__sync_sub_and_fetch(AL+13, 12) != -12)
     107      abort ();
     108    if (__sync_and_and_fetch(AL+14, 7) != 7)
     109      abort ();
     110    if (__sync_or_and_fetch(AL+15, 8) != 8)
     111      abort ();
     112    if (__sync_xor_and_fetch(AL+16, 9) != 9)
     113      abort ();
     114    if (__sync_nand_and_fetch(AL+17, 7) != ~7)
     115      abort ();
     116  }
     117  
     118  int main()
     119  {
     120    memcpy(AI, init_si, sizeof(init_si));
     121    memcpy(AL, init_di, sizeof(init_di));
     122  
     123    do_si ();
     124    do_di ();
     125  
     126    if (memcmp (AI, test_si, sizeof(test_si)))
     127      abort ();
     128    if (memcmp (AL, test_di, sizeof(test_di)))
     129      abort ();
     130  
     131    return 0;
     132  }