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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [testsuite/] [gcc.dg/] [torture/] [pr44806.c] - Blame information for rev 826

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 298 jeremybenn
/* { dg-do run } */
2
 
3
#include <stdint.h>
4
 
5
extern void abort (void);
6
 
7
#define N_DEV_BITS_4 5
8
#define N_INO_BITS_4 (32 - N_DEV_BITS_4 - 2 - 1)
9
 
10
#define N_DEV_BITS_8 8
11
#define N_INO_BITS_8 (64 - N_DEV_BITS_8 - 2 - 1)
12
 
13
struct dev_ino_4
14
{
15
  uint32_t mode:2;
16
  uint32_t short_ino:N_INO_BITS_4;
17
  uint32_t mapped_dev:N_DEV_BITS_4;
18
  uint32_t always_set:1;
19
};
20
 
21
struct dev_ino_8
22
{
23
  uint32_t mode:2;
24
  uint64_t short_ino:N_INO_BITS_8;
25
  uint32_t mapped_dev:N_DEV_BITS_8;
26
  uint32_t always_set:1;
27
};
28
 
29
struct dev_ino_full
30
{
31
  uint32_t mode:2;
32
  uint32_t dev;
33
  uint32_t ino;
34
};
35
 
36
enum di_mode
37
{
38
  DI_MODE_4 = 1,
39
  DI_MODE_8 = 2,
40
  DI_MODE_FULL = 3
41
};
42
 
43
struct di_ent
44
{
45
  union
46
  {
47
    struct dev_ino_4 di4;
48
    struct dev_ino_8 di8;
49
    struct dev_ino_full full;
50
    uint32_t u32;
51
    uint64_t u64;
52
    void *ptr;
53
  } u;
54
};
55
 
56
static struct di_ent
57
decode_ptr (struct di_ent const *v)
58
{
59
  struct di_ent di;
60
  di.u.ptr = (void *) v;
61
  return di;
62
}
63
 
64
static int
65
di_ent_equal (void const *x, void const *y)
66
{
67
  struct di_ent a = decode_ptr (x);
68
  struct di_ent b = decode_ptr (y);
69
  if (a.u.di4.mode != b.u.di4.mode)
70
    return 0;
71
 
72
  if (a.u.di4.mode == DI_MODE_4)
73
    return (a.u.di4.short_ino == b.u.di4.short_ino
74
            && a.u.di4.mapped_dev == b.u.di4.mapped_dev);
75
 
76
  if (a.u.di8.mode == DI_MODE_8)
77
    return (a.u.di8.short_ino == b.u.di8.short_ino
78
            && a.u.di8.mapped_dev == b.u.di8.mapped_dev);
79
 
80
  return (a.u.full.ino == b.u.full.ino
81
          && a.u.full.dev == b.u.full.dev);
82
}
83
 
84
int
85
main ()
86
{
87
  if (di_ent_equal ((void *) 0x80143c4d, (void *) 0x80173851) != 0)
88
    abort ();
89
  return 0;
90
}

powered by: WebSVN 2.1.0

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