modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/udivmod4.c (about)

     1  long long
     2  xlrandom ()
     3  {
     4    long long x;
     5    unsigned a;
     6    int bits = 64;
     7    unsigned b;
     8  
     9    do
    10      {
    11        a = random ();
    12        b = (a & 15) + 1;
    13        x <<= b;				/* shift up 1-16 steps */
    14        a = (a >> 18) & 1;
    15        if (a)
    16  	x |= (unsigned) (1 << b) - 1;
    17        bits -= b;
    18      }
    19    while (bits >= 0);
    20    return x;
    21  }
    22  
    23  
    24  unsigned long long __udivmoddi4();
    25  
    26  main ()
    27  {
    28    int i;
    29    unsigned long long n, d, q, r, rr;
    30  
    31    for (i = 0; ;i++)
    32      {
    33        n = xlrandom ();
    34        d = xlrandom ();
    35        if (d == 0)
    36  	continue;
    37  
    38        q = __udivmoddi4 (n, d, &r);
    39  
    40        if (i % 1000000 == 0)
    41  	printf ("Testing udivmoddi4: %d iterations made\n", i);
    42  
    43        rr = n - q * d;
    44        if (rr != r || r >= d)
    45  	{
    46  	  printf ("Testing udivmoddi4: failure after %d iterations\n", i);
    47  	  printf ("n=%lX%08lX\n", (unsigned) (n >> 32), (unsigned) n);
    48  	  printf ("d=%lX%08lX\n", (unsigned) (d >> 32), (unsigned) d);
    49  	  printf ("q=%lX%08lX\n", (unsigned) (q >> 32), (unsigned) q);
    50  	  printf ("r=%lX%08lX\n", (unsigned) (r >> 32), (unsigned) r);
    51  	  printf ("rr=%lX%08lX\n", (unsigned) (rr >> 32), (unsigned) rr);
    52  	  abort ();
    53  	}
    54      }
    55  
    56  }