summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/pr63542-1.c
blob: 98a4007306314fc7e632e69ff4e175c0569b7c9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* PR target/63542 */
/* { dg-do compile } */
/* { dg-options "-O2 -g -dA" } */
/* { dg-additional-options "-fpic" { target fpic } } */

float
foo (long long u)
{
  if (!(-(1LL << 53) < u && u < (1LL << 53)))
    {
      if ((unsigned long long) u & ((1ULL << 11) - 1))
	{
	  u &= ~((1ULL << 11) - 1);
	  u |= (1ULL << 11);
	}
    }
  double f = (int) (u >> (32));
  f *= 0x1p32f;
  f += (unsigned int) u;
  return (float) f;
}