(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr108862.c
       1  /* PR target/108862 */
       2  /* { dg-do run { target int128 } } */
       3  /* { dg-options "-O2" } */
       4  
       5  unsigned long long a[2] = { 0x04a13945d898c296ULL, 0x0000100000000fffULL };
       6  unsigned long long b[4] = { 0x04a13945d898c296ULL, 0, 0, 0x0000100000000fffULL };
       7  
       8  __attribute__((noipa)) unsigned __int128
       9  foo (int x, unsigned long long *y, unsigned long long *z)
      10  {
      11    unsigned __int128 w = 0;
      12    for (int i = 0; i < x; i++)
      13      w += (unsigned __int128)*y++ * (unsigned __int128)*z--;
      14    return w;
      15  }
      16  
      17  int
      18  main ()
      19  {
      20    unsigned __int128 x = foo (1, &a[0], &a[1]);
      21    unsigned __int128 y = foo (2, &b[0], &b[3]);
      22    if ((unsigned long long) (x >> 64) != 0x0000004a13945dd3ULL
      23        || (unsigned long long) x != 0x9b1c8443b3909d6aULL
      24        || x != y)
      25      __builtin_abort ();
      26    return 0;
      27  }