for first_subtype_local_name use
record [mod_clause]
{component_clause}
end record;
component_local_name at position range first_bit .. last_bit;
record
X : Integer;
end record;
X : constant := 31; --Same defining name as the component.
for T use
record
X at 0 range 0..X; --Illegal!
end record;
type Mode is (Fix, Dec, Exp, Signif);
type State_Mask is array (State) of Boolean;
type Mode_Mask is array (Mode) of Boolean;
record
System_Mask : Byte_Mask;
Protection_Key : Integer range 0 .. 3;
Machine_State : State_Mask;
Interrupt_Cause : Interruption_Code;
Ilc : Integer range 0 .. 3;
Cc : Integer range 0 .. 3;
Program_Mask : Mode_Mask;
Inst_Address : Address;
end record;
record
System_Mask at 0*Word range 0 .. 7;
Protection_Key at 0*Word range 10 .. 11; --bits 8, 9 unused
Machine_State at 0*Word range 12 .. 15;
Interrupt_Cause at 0*Word range 16 .. 31;
Ilc at 1*Word range 0 .. 1; --second word
Cc at 1*Word range 2 .. 3;
Program_Mask at 1*Word range 4 .. 7;
Inst_Address at 1*Word range 8 .. 31;
end record;
for Program_Status_Word'Alignment use 8;