OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [torture/] [pr52060.c] - Blame information for rev 698

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 689 jeremybenn
/* PR rtl-optimization/52060 */
2
/* { dg-do run { target int32plus } } */
3
 
4
extern void abort (void);
5
union U { float f; unsigned int i; };
6
 
7
static inline __attribute__((always_inline)) unsigned int
8
foo (float x)
9
{
10
  union U u;
11
  unsigned int a, b, c;
12
  int d;
13
  int e;
14
  u.f = x;
15
  d = ((unsigned) u.i >> 23) & 0xFF;
16
  c = d < 126 ? 0 : ~0;
17
  e = 127 + 30 - d;
18
  a = (u.i << 8) | 0x80000000U;
19
  b = a & ((1 << e) - 1);
20
  a = a >> e;
21
  c &= (b | (a & 2)) ? ~0 : ~1;
22
  a = ((a + 1U) >> 1) & c;
23
  return a;
24
}
25
 
26
__attribute__((noinline)) unsigned int
27
bar (float x)
28
{
29
  unsigned int a, b, c;
30
  static const unsigned int d[128] =
31
  {
32
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
33
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
35
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
36
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
37
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
38
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
39
    3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 7
40
  };
41
  a = foo (1048575.0f * x);
42
  c = d[a >> 13];
43
  b = (c << 13) | ((a >> (7 - c)) & 0x1fff);
44
  return b;
45
}
46
 
47
int
48
main ()
49
{
50
  union U u;
51
  u.f = 1048575.0f;
52
  if (sizeof (u.i) == sizeof (u.f)
53
      && u.i == 0x497ffff0U
54
      && bar (1.0f) != 65535)
55
    abort ();
56
  return 0;
57
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.