67 lines
1.3 KiB
Ada
67 lines
1.3 KiB
Ada
package OCONST4 is
|
|
|
|
type bit is (zero, one);
|
|
type u2 is mod 2**2;
|
|
type u5 is mod 2**5;
|
|
type u8 is mod 2**8;
|
|
|
|
type Base is record
|
|
f1 : bit;
|
|
f2 : u2;
|
|
f3 : u5;
|
|
f4 : u8;
|
|
end record;
|
|
|
|
for Base use record
|
|
f1 at 0 range 0 .. 0;
|
|
f2 at 0 range 1 .. 2;
|
|
f3 at 0 range 3 .. 7;
|
|
f4 at 1 range 0 .. 7;
|
|
end record;
|
|
|
|
type Derived is record
|
|
f1 : u5;
|
|
b : Base;
|
|
f2 : bit;
|
|
f3 : u2;
|
|
f4 : u8;
|
|
i1 : Integer;
|
|
i2 : Integer;
|
|
end record;
|
|
|
|
for Derived use record
|
|
f1 at 0 range 0 .. 4;
|
|
b at 0 range 5 .. 20; -- unaligned HImode bitfield
|
|
f2 at 0 range 21 .. 21;
|
|
f3 at 0 range 22 .. 23;
|
|
f4 at 0 range 24 .. 31;
|
|
i1 at 4 range 0 .. 31;
|
|
i2 at 8 range 0 .. 31;
|
|
end record;
|
|
|
|
type R is record
|
|
u : u8;
|
|
d : Derived;
|
|
end record;
|
|
|
|
for R use record
|
|
u at 0 range 0 .. 7;
|
|
d at 1 range 0 .. 95; -- BLKmode bitfield
|
|
end record;
|
|
|
|
My_R : constant R := (u=>1,
|
|
d=>(f1=>17,
|
|
b=>(f1=>one,
|
|
f2=>2,
|
|
f3=>17,
|
|
f4=>42),
|
|
f2=>one,
|
|
f3=>1,
|
|
f4=>111,
|
|
i1=>2,
|
|
i2=>3));
|
|
|
|
procedure check (arg : R);
|
|
|
|
end;
|