gcc/
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / pr24627.c
blobc065eef84f44040e1ff299086fb580b2e4ab22f1
1 /* { dg-do run } */
2 /* { dg-options "-O" } */
3 /* { dg-require-effective-target int32plus } */
5 extern void abort (void);
6 typedef unsigned int u_int32;
8 typedef struct {
9 union {u_int32 Xl_ui;} Ul_i;
10 union {u_int32 Xl_uf;} Ul_f;
11 } l_fp;
13 void
14 dolfptoa (short ndec)
16 l_fp work, ftmp;
18 work.Ul_i.Xl_ui = 0;
19 work.Ul_f.Xl_uf = 0x535f3d8;
21 while (ndec > 0)
23 u_int32 lo_tmp;
24 u_int32 hi_tmp;
26 ndec--;
27 work.Ul_i.Xl_ui = 0;
28 work.Ul_i.Xl_ui <<= 1;
29 if ((work.Ul_f.Xl_uf) & 0x80000000)
30 (work.Ul_i.Xl_ui) |= 0x1;
31 (work.Ul_f.Xl_uf) <<= 1;
33 ftmp = work;
34 (work.Ul_i.Xl_ui) <<= 1;
35 if ((work.Ul_f.Xl_uf) & 0x80000000)
36 (work.Ul_i.Xl_ui) |= 0x1;
37 (work.Ul_f.Xl_uf) <<= 1;
39 (work.Ul_i.Xl_ui) <<= 1;
40 if ((work.Ul_f.Xl_uf) & 0x80000000)
41 (work.Ul_i.Xl_ui) |= 0x1;
42 (work.Ul_f.Xl_uf) <<= 1;
44 lo_tmp = ((work.Ul_f.Xl_uf) & 0xffff) + ((ftmp.Ul_f.Xl_uf) & 0xffff);
45 hi_tmp = (((work.Ul_f.Xl_uf) >> 16) & 0xffff)
46 + (((ftmp.Ul_f.Xl_uf) >> 16) & 0xffff);
48 if (lo_tmp & 0x10000)
49 hi_tmp++;
51 (work.Ul_f.Xl_uf) = ((hi_tmp & 0xffff) << 16) | (lo_tmp & 0xffff);
52 (work.Ul_i.Xl_ui) += (ftmp.Ul_i.Xl_ui);
54 if (hi_tmp & 0x10000)
55 (work.Ul_i.Xl_ui)++;
58 if (!(work.Ul_i.Xl_ui < 10))
59 abort ();
63 int main()
65 dolfptoa(6);
66 return 0;