(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
compile/
udivmod4.c
       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  }