Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / gcc / testsuite / gcc.c-torture / execute / ieee / mul-subnormal-single-1.c
blobd5f3fb45b6e44c72b98a054ca5cbcc2b574b7810
1 /* Check that certain subnormal numbers (formerly known as denormalized
2 numbers) are rounded to within 0.5 ulp. PR other/14354. */
4 /* This test requires that float and unsigned int are the same size and
5 that the sign-bit of the float is at MSB of the unsigned int. */
7 #if __INT_MAX__ != 2147483647L
8 int main () { exit (0); }
9 #else
11 union uf
13 unsigned int u;
14 float f;
17 static float
18 u2f (unsigned int v)
20 union uf u;
21 u.u = v;
22 return u.f;
25 static unsigned int
26 f2u (float v)
28 union uf u;
29 u.f = v;
30 return u.u;
33 int ok = 1;
35 static void
36 tstmul (unsigned int ux, unsigned int uy, unsigned int ur)
38 float x = u2f (ux);
39 float y = u2f (uy);
41 if (f2u (x * y) != ur)
42 /* Set a variable rather than aborting here, to simplify tracing when
43 several computations are wrong. */
44 ok = 0;
47 /* We don't want to make this const and static, or else we risk inlining
48 causing the test to fold as constants at compile-time. */
49 struct
51 unsigned int p1, p2, res;
52 } expected[] =
54 {0xfff, 0x3f800400, 0xfff},
55 {0xf, 0x3fc88888, 0x17},
56 {0xf, 0x3f844444, 0xf}
59 int
60 main (int argc, char *argv[], char *envp[])
62 unsigned int i;
64 for (i = 0; i < sizeof (expected) / sizeof (expected[0]); i++)
66 tstmul (expected[i].p1, expected[i].p2, expected[i].res);
67 tstmul (expected[i].p2, expected[i].p1, expected[i].res);
70 if (!ok)
71 abort ();
73 exit (0);
75 #endif