summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg/specs/vfa2.ads
blob: 8ca9687a39e366e1ff3dd4a95e68d1976405779e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- { dg-do compile }
-- { dg-options "-O" }

package VFA2 is

   type Bit is mod 2**1
     with Size => 1;
   type UInt2 is mod 2**2
     with Size => 2;
   type UInt22 is mod 2**22
     with Size => 22;

   type MODE_ENUM is
     (
      Function_0_Default,
      Function_1,
      Function_2,
      Function_3,
      Function_4,
      Function_5,
      Function_6,
      Function_7)
     with Size => 3;

   type EPD_ENUM is
     (
      Disable_Pull_Down,
      Enable_Pull_Down)
     with Size => 1;

   type EPUN_ENUM is
     (
      Enable_Pull_Up,
      Disable_Pull_Up)
     with Size => 1;

   type EHS_ENUM is
     (
      Slow_Low_Noise_With,
      Fast_Medium_Noise_W)
     with Size => 1;

   type EZI_ENUM is
     (
      Disable_Input_Buffer,
      Enable_Input_Buffer)
     with Size => 1;

   type ZIF_ENUM is
     (
      Enable_Input_Glitch,
      Disable_Input_Glitch)
     with Size => 1;

   type EHD_ENUM is
     (
      Normal_Drive_4_Ma_D,
      Medium_Drive_8_Ma_D,
      High_Drive_14_Ma_Dr,
      Ultra_High_Drive_20)
     with Size => 2;

   type Pin_Type is (Normal_Drive, High_Drive, High_Speed);

   type SFS_Register(Pin : Pin_Type := Normal_Drive) is record
      MODE     : MODE_ENUM;
      EPD      : EPD_ENUM;
      EPUN     : EPUN_ENUM;
      EZI      : EZI_ENUM;
      ZIF      : ZIF_ENUM;
      RESERVED : UInt22;

      case Pin is
         when Normal_Drive =>

            ND_EHS_RESERVED : Bit;
            ND_EHD_RESERVED : UInt2;

         when High_Drive =>

            EHD : EHD_ENUM;
            HD_EHS_RESERVED : Bit;

         when High_Speed =>
            EHS    : EHS_ENUM;
            HS_EHD_RESERVED : UInt2;

      end case;
   end record
     with Unchecked_Union, Size => 32, Volatile_Full_Access;

   for SFS_Register use record
      MODE            at 0 range 0 .. 2;
      EPD             at 0 range 3 .. 3;
      EPUN            at 0 range 4 .. 4;
      ND_EHS_RESERVED at 0 range 5 .. 5;
      HD_EHS_RESERVED at 0 range 5 .. 5;
      EHS             at 0 range 5 .. 5;
      EZI             at 0 range 6 .. 6;
      ZIF             at 0 range 7 .. 7;
      ND_EHD_RESERVED at 0 range 8 .. 9;
      EHD             at 0 range 8 .. 9;
      HS_EHD_RESERVED at 0 range 8 .. 9;
      RESERVED        at 0 range 10 .. 31;
   end record;

   type Normal_Drive_Pins is array (Integer range <>)
     of SFS_Register(Normal_Drive) with Volatile;

end VFA2;