//---------------------------------------------------------------- // Example of sizes of various types //---------------------------------------------------------------- main module SIZES arm X_range_error use TEXTIO declare I_Range is 1..2 // Range is predefined integer, size = 3 I_Integer_Range is integer range 1..2 // Range of predefined integer, size = 3 I_5_bit_range is 5 bit integer range 1..2 // User defined 5 bit integer I_8_bit_range is 8 bit integer range 1..4 // User defined 8 bit integer I_16_bit_range is 16 bit integer range 1..4 // User defined 16 bit integer I_32_bit_range is 32 bit integer range 1..4 // NO C_Cardinal_Range is cardinal range 1..2 // Range of predefined cardinal, size = 3 C_5_bit_range is 5 bit cardinal range 1..2 // User defined 5 bit cardinal C_8_bit_range is 8 bit cardinal range 1..4 // User defined 8 bit cardinal C_16_bit_range is 16 bit cardinal range 1..4 // User defined 16 bit cardinal C_32_bit_range is 32 bit cardinal range 1..4 // NO Enum is [a, b, c, d, e, f, g, h] sub_enum_of_4 is enum range c..f // Now set up unpacked and packed structures of each size // to show how they pack. Unpacked_I_Range is structure A_I_Range : I_Range endstructure Packed_I_Range is packed structure A_I_Range : I_Range endstructure //------------------------ integers Unpacked_I_Integer_Range is structure A_I_Integer_Range : I_Integer_Range endstructure Packed_I_Integer_Range is packed structure A_I_Integer_Range : I_Integer_Range endstructure Unpacked_I_5_bit_range is structure A_I_5_bit_range : I_5_bit_range endstructure Packed_I_5_bit_range is packed structure A_I_5_bit_range : I_5_bit_range endstructure Unpacked_I_8_bit_range is structure A_I_8_bit_range : I_8_bit_range endstructure Packed_I_8_bit_range is packed structure A_I_8_bit_range : I_8_bit_range endstructure Unpacked_I_16_bit_range is structure A_I_16_bit_range : I_16_bit_range endstructure Packed_I_16_bit_range is packed structure A_I_16_bit_range : I_16_bit_range endstructure Unpacked_I_32_bit_range is structure A_I_32_bit_range : I_32_bit_range endstructure Packed_I_32_bit_range is packed structure A_I_32_bit_range : I_32_bit_range endstructure //---------------cardinals Unpacked_C_cardinal_Range is structure A_C_cardinal_Range : C_cardinal_Range endstructure Packed_C_cardinal_Range is packed structure C_I_cardinal_Range : C_cardinal_Range endstructure Unpacked_C_5_bit_range is structure A_C_5_bit_range : C_5_bit_range endstructure Packed_C_5_bit_range is packed structure A_C_5_bit_range : C_5_bit_range endstructure Unpacked_C_8_bit_range is structure A_C_8_bit_range : C_8_bit_range endstructure Packed_C_8_bit_range is packed structure A_C_8_bit_range : C_8_bit_range endstructure Unpacked_C_16_bit_range is structure A_C_16_bit_range : C_16_bit_range endstructure Packed_C_16_bit_range is packed structure A_C_16_bit_range : C_16_bit_range endstructure Unpacked_C_32_bit_range is structure A_C_32_bit_range : C_32_bit_range endstructure Packed_C_32_bit_range is packed structure A_C_32_bit_range : C_32_bit_range endstructure //------------- enumerations Unpacked_sub_enum_of_4 is structure A_sub_enum_of_4 : sub_enum_of_4 endstructure Packed_sub_enum_of_4 is packed structure A_sub_enum_of_4 : sub_enum_of_4 endstructure enddeclare procedure Print_Sizes param Name : in ref packed array [1..?N] of char A : cardinal B : cardinal C : cardinal endparam out_string (TTY, Name) out_string (TTY, "") out_integer (TTY, integer (A)) out_string (TTY, "") out_integer (TTY, integer (B)) out_string (TTY, "") out_integer (TTY, integer (C)) out_record (TTY) endprocedure tty_line ("object SIZE UNPACK PACKED") tty_line ("----------------- ------ ------- ------") Print_Sizes ( "I_Range ", sizeof(I_Range), sizeof (Unpacked_I_Range), sizeof(Packed_I_Range)) Print_Sizes ( "I_Integer_Range ", sizeof(I_Integer_Range), sizeof (Unpacked_I_Integer_Range), sizeof(Packed_I_Integer_Range)) Print_Sizes ( "I_5_bit_range ", sizeof(I_5_bit_range), sizeof (Unpacked_I_5_bit_range), sizeof(Packed_I_5_bit_range)) Print_Sizes ( "I_8_bit_range ", sizeof(I_8_bit_range), sizeof (Unpacked_I_8_bit_range), sizeof(Packed_I_8_bit_range)) Print_Sizes ( "I_16_bit_range ", sizeof(I_16_bit_range), sizeof (Unpacked_I_16_bit_range), sizeof(Packed_I_16_bit_range)) Print_Sizes ( "I_32_bit_range ", sizeof(I_32_bit_range), sizeof (Unpacked_I_32_bit_range), sizeof(Packed_I_32_bit_range)) Print_Sizes ( "C_Cardinal_Range", sizeof(C_Cardinal_Range), sizeof (Unpacked_C_Cardinal_Range), sizeof(Packed_C_Cardinal_Range)) Print_Sizes ( "C_5_bit_range ", sizeof(C_5_bit_range), sizeof (Unpacked_C_5_bit_range), sizeof(Packed_C_5_bit_range)) Print_Sizes ( "C_8_bit_range ", sizeof(C_8_bit_range), sizeof (Unpacked_C_8_bit_range), sizeof(Packed_C_8_bit_range)) Print_Sizes ( "C_16_bit_range ", sizeof(C_16_bit_range), sizeof (Unpacked_C_16_bit_range), sizeof(Packed_C_16_bit_range)) Print_Sizes ( "C_32_bit_range ", sizeof(C_32_bit_range), sizeof (Unpacked_C_32_bit_range), sizeof(Packed_C_32_bit_range)) Print_Sizes ( "sub_enum_of_4 ", sizeof(sub_enum_of_4), sizeof (Unpacked_sub_enum_of_4), sizeof(Packed_sub_enum_of_4)) endmodule