(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
rotate-5.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  
       4  extern
       5  #ifdef __cplusplus
       6  "C"
       7  #endif
       8  void abort (void);
       9  
      10  #if __CHAR_BIT__ * __SIZEOF_LONG_LONG__ == 64
      11  __attribute__((noinline, noclone))
      12  unsigned long long
      13  f1 (unsigned long long x, unsigned int y)
      14  {
      15    return (x << y) | (x >> ((-y) & 63));
      16  }
      17  
      18  __attribute__((noinline, noclone))
      19  unsigned long long
      20  f2 (unsigned long long x, unsigned int y)
      21  {
      22    return (x << y) + (x >> ((-y) & 63));
      23  }
      24  
      25  __attribute__((noinline, noclone))
      26  unsigned long long
      27  f3 (unsigned long long x, unsigned int y)
      28  {
      29    return (x << y) ^ (x >> ((-y) & 63));
      30  }
      31  
      32  #if __CHAR_BIT__ * __SIZEOF_INT128__ == 128
      33  __attribute__((noinline, noclone))
      34  unsigned __int128
      35  f4 (unsigned __int128 x, unsigned int y)
      36  {
      37    return (x << y) | (x >> ((-y) & 127));
      38  }
      39  
      40  __attribute__((noinline, noclone))
      41  unsigned __int128
      42  f5 (unsigned __int128 x, unsigned int y)
      43  {
      44    return (x << y) + (x >> ((-y) & 127));
      45  }
      46  
      47  __attribute__((noinline, noclone))
      48  unsigned __int128
      49  f6 (unsigned __int128 x, unsigned int y)
      50  {
      51    return (x << y) ^ (x >> ((-y) & 127));
      52  }
      53  #endif
      54  #endif
      55  
      56  int
      57  main ()
      58  {
      59  #if __CHAR_BIT__ * __SIZEOF_LONG_LONG__ == 64
      60    if (f1 (0x123456789abcdef0ULL, 0) != 0x123456789abcdef0ULL)
      61      abort ();
      62    if (f2 (0x123456789abcdef0ULL, 0) != 0x2468acf13579bde0ULL)
      63      abort ();
      64    if (f3 (0x123456789abcdef0ULL, 0) != 0)
      65      abort ();
      66    if (f1 (0x123456789abcdef0ULL, 1) != 0x2468acf13579bde0ULL)
      67      abort ();
      68    if (f2 (0x123456789abcdef0ULL, 1) != 0x2468acf13579bde0ULL)
      69      abort ();
      70    if (f3 (0x123456789abcdef0ULL, 1) != 0x2468acf13579bde0ULL)
      71      abort ();
      72  #if __CHAR_BIT__ * __SIZEOF_INT128__ == 128
      73    if (f4 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      74  	  | 0x0fedcba987654321ULL, 0)
      75        != ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      76            | 0x0fedcba987654321ULL))
      77      abort ();
      78    if (f5 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      79  	  | 0x0fedcba987654321ULL, 0)
      80        != ((((unsigned __int128) 0x2468acf13579bde0ULL) << 64)
      81            | 0x1fdb97530eca8642ULL))
      82      abort ();
      83    if (f6 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      84  	  | 0x0fedcba987654321ULL, 0) != 0)
      85      abort ();
      86    if (f4 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      87  	  | 0x0fedcba987654321ULL, 1)
      88        != ((((unsigned __int128) 0x2468acf13579bde0ULL) << 64)
      89            | 0x1fdb97530eca8642ULL))
      90      abort ();
      91    if (f5 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      92  	  | 0x0fedcba987654321ULL, 1)
      93        != ((((unsigned __int128) 0x2468acf13579bde0ULL) << 64)
      94            | 0x1fdb97530eca8642ULL))
      95      abort ();
      96    if (f6 ((((unsigned __int128) 0x123456789abcdef0ULL) << 64)
      97  	  | 0x0fedcba987654321ULL, 1)
      98        != ((((unsigned __int128) 0x2468acf13579bde0ULL) << 64)
      99            | 0x1fdb97530eca8642ULL))
     100      abort ();
     101  #endif
     102  #endif
     103    return 0;
     104  }