2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.c-torture / unsorted / udivmod4.c
blob40d2fa8d07c0fd6b460a19242459b289e2a9c43a
1 long long
2 xlrandom ()
4 long long x;
5 unsigned a;
6 int bits = 64;
7 unsigned b;
9 do
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;
19 while (bits >= 0);
20 return x;
24 unsigned long long __udivmoddi4();
26 main ()
28 int i;
29 unsigned long long n, d, q, r, rr;
31 for (i = 0; ;i++)
33 n = xlrandom ();
34 d = xlrandom ();
35 if (d == 0)
36 continue;
38 q = __udivmoddi4 (n, d, &r);
40 if (i % 1000000 == 0)
41 printf ("Testing udivmoddi4: %d iterations made\n", i);
43 rr = n - q * d;
44 if (rr != r || r >= d)
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 ();