(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr108787.c
       1  /* PR target/108787 */
       2  /* { dg-do run { target int128 } } */
       3  /* { dg-options "-O2" } */
       4  
       5  __attribute__((noipa)) unsigned __int128
       6  foo (unsigned long long x, unsigned long long y, unsigned long long z, unsigned long long u, unsigned long long v, unsigned long long w)
       7  {
       8    unsigned __int128 r, d;
       9    r = ((unsigned __int128) x * u);
      10    d = ((unsigned __int128) y * w);
      11    r += d;
      12    d = ((unsigned __int128) z * v);
      13    r += d;
      14    return r;
      15  }
      16  
      17  int
      18  main ()
      19  {
      20    if (__CHAR_BIT__ != 8 || __SIZEOF_LONG_LONG__ != 8 || __SIZEOF_INT128__ != 16)
      21      return 0;
      22    unsigned __int128 x = foo (0x3efe88da491ULL, 0xd105e9b4a44ULL, 0x4efa677b3dbULL, 0x42c052bac7bULL, 0x99638a13199cULL, 0x56b640d064ULL);
      23    if ((unsigned long long) (x >> 64) != 0x000000000309ff93ULL
      24        || (unsigned long long) x != 0xbd5c98fdf2bdbcafULL)
      25      __builtin_abort ();
      26    return 0;
      27  }