COMPILATION LISTING OF SEGMENT stack_temp Compiled by: Multics PL/I Compiler, Release 28d, of September 14, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 10/03/83 1659.2 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* Procedure to manage allocation of temporaries in stack 12* 13* Modified: 23 April 1973 by RAB 14* Modified: 1 May 1977 by RAB to fix bug in assign_aggregate 15* Modified: 10 September 1977 by RAB to fix 1613 by setting temporary.last_freed 16* Modified 780717 by PG to count number of temporary nodes allocated 17* Modified 791016 by PG to check temporary.ref_count < 0 18**/ 19 20 stack_temp$assign_temp: proc(ref_pt) ; 21 22 /* parameters */ 23 24 dcl ref_pt ptr parameter; /* points at temp reference to be allocated */ 25 26 /* external static */ 27 28 dcl (cg_stat$cur_block,cg_stat$cur_statement,cg_stat$agg_temps) ptr ext, 29 cg_stat$max_stack_size fixed bin ext, 30 cg_stat$text_pos fixed bin(18) ext, 31 cg_stat$extended_stack bit(1) ext, 32 pl1_stat_$node_uses (18) fixed bin external static; 33 34 /* automatic */ 35 36 dcl (p,r,s,o) ptr, 37 atomic bit(1) aligned, 38 (size,bit_length) fixed bin; 39 40 /* entries */ 41 42 dcl error entry(fixed bin,ptr,ptr), 43 cg_error entry(fixed bin,fixed bin), 44 prepare_operand entry(ptr,fixed bin,bit(1) aligned) returns(ptr), 45 compile_exp entry(ptr), 46 expmac$zero entry(fixed bin(15)), 47 expmac entry(fixed bin(15),ptr), 48 c_a entry(fixed bin(18),fixed bin) returns(ptr); 49 50 /* internal static */ 51 52 dcl ( alloc_words init(91), 53 store_bp init(61)) fixed bin(15) int static; 54 55 /* builtins */ 56 57 dcl (bin, divide, mod, null) builtin; 58 59 /* include files */ 60 1 1 /* BEGIN INCLUDE FILE ... pl1_tree_areas.incl.pl1 */ 1 2 1 3 /* format: style3 */ 1 4 dcl tree_area area based (pl1_stat_$tree_area_ptr); 1 5 dcl xeq_tree_area area based (pl1_stat_$xeq_tree_area_ptr); 1 6 1 7 dcl pl1_stat_$tree_area_ptr 1 8 ptr ext static, 1 9 pl1_stat_$xeq_tree_area_ptr 1 10 ptr ext static; 1 11 1 12 /* END INCLUDE FILE ... op_codes.incl.pl1 */ 61 2 1 /* BEGIN INCLUDE FILE ... temporary.incl.pl1 */ 2 2 2 3 dcl 1 temporary based, 2 4 2 node_type bit(9), /* type is "000001010"b */ 2 5 2 size fixed bin(18), 2 6 2 next ptr, 2 7 2 location fixed bin(18), 2 8 2 ref_count fixed bin, 2 9 2 symbol ptr unal, 2 10 2 last_freed fixed bin(18); 2 11 2 12 /* END INCLUDE FILE ... temporary.incl.pl1 */ 62 3 1 /* BEGIN INCLUDE FILE ... nodes.incl.pl1 */ 3 2 3 3 /* Modified: 26 Dec 1979 by PCK to implement by name assignment */ 3 4 3 5 dcl ( block_node initial("000000001"b), 3 6 statement_node initial("000000010"b), 3 7 operator_node initial("000000011"b), 3 8 reference_node initial("000000100"b), 3 9 token_node initial("000000101"b), 3 10 symbol_node initial("000000110"b), 3 11 context_node initial("000000111"b), 3 12 array_node initial("000001000"b), 3 13 bound_node initial("000001001"b), 3 14 format_value_node initial("000001010"b), 3 15 list_node initial("000001011"b), 3 16 default_node initial("000001100"b), 3 17 machine_state_node initial("000001101"b), 3 18 source_node initial("000001110"b), 3 19 label_node initial("000001111"b), 3 20 cross_reference_node initial("000010000"b), 3 21 sf_par_node initial("000010001"b), 3 22 temporary_node initial("000010010"b), 3 23 label_array_element_node initial("000010011"b), 3 24 by_name_agg_node initial("000010100"b)) 3 25 bit(9) internal static aligned options(constant); 3 26 3 27 dcl 1 node based aligned, 3 28 2 type unal bit(9), 3 29 2 source_id unal structure, 3 30 3 file_number bit(8), 3 31 3 line_number bit(14), 3 32 3 statement_number bit(5); 3 33 3 34 /* END INCLUDE FILE ... nodes.incl.pl1 */ 63 4 1 /* BEGIN INCLUDE FILE ... block.incl.pl1 */ 4 2 /* Modified 22 Ocober 1980 by M. N. Davidoff to increase max block.number to 511 */ 4 3 /* format: style3,idind30 */ 4 4 4 5 declare 1 block aligned based, 4 6 2 node_type bit (9) unaligned, 4 7 2 source_id structure unaligned, 4 8 3 file_number bit (8), 4 9 3 line_number bit (14), 4 10 3 statement_number bit (5), 4 11 2 father ptr unaligned, 4 12 2 brother ptr unaligned, 4 13 2 son ptr unaligned, 4 14 2 declaration ptr unaligned, 4 15 2 end_declaration ptr unaligned, 4 16 2 default ptr unaligned, 4 17 2 end_default ptr unaligned, 4 18 2 context ptr unaligned, 4 19 2 prologue ptr unaligned, 4 20 2 end_prologue ptr unaligned, 4 21 2 main ptr unaligned, 4 22 2 end_main ptr unaligned, 4 23 2 return_values ptr unaligned, 4 24 2 return_count ptr unaligned, 4 25 2 plio_ps ptr unaligned, 4 26 2 plio_fa ptr unaligned, 4 27 2 plio_ffsb ptr unaligned, 4 28 2 plio_ssl ptr unaligned, 4 29 2 plio_fab2 ptr unaligned, 4 30 2 block_type bit (9) unaligned, 4 31 2 prefix bit (12) unaligned, 4 32 2 like_attribute bit (1) unaligned, 4 33 2 no_stack bit (1) unaligned, 4 34 2 get_data bit (1) unaligned, 4 35 2 flush_at_call bit (1) unaligned, 4 36 2 processed bit (1) unaligned, 4 37 2 text_displayed bit (1) unaligned, 4 38 2 number fixed bin (9) unsigned unaligned, 4 39 2 free_temps dimension (3) ptr, /* these fields are used by the code generator */ 4 40 2 temp_list ptr, 4 41 2 entry_list ptr, 4 42 2 o_and_s ptr, 4 43 2 why_nonquick aligned, 4 44 3 auto_adjustable_storage bit (1) unaligned, 4 45 3 returns_star_extents bit (1) unaligned, 4 46 3 stack_extended_by_args bit (1) unaligned, 4 47 3 invoked_by_format bit (1) unaligned, 4 48 3 format_statement bit (1) unaligned, 4 49 3 io_statements bit (1) unaligned, 4 50 3 assigned_to_entry_var bit (1) unaligned, 4 51 3 condition_statements bit (1) unaligned, 4 52 3 no_owner bit (1) unaligned, 4 53 3 recursive_call bit (1) unaligned, 4 54 3 options_non_quick bit (1) unaligned, 4 55 3 options_variable bit (1) unaligned, 4 56 3 never_referenced bit (1) unaligned, 4 57 3 pad_nonquick bit (5) unaligned, 4 58 2 prologue_flag bit (1) unaligned, 4 59 2 options_main bit (1) unaligned, 4 60 2 pad bit (16) unaligned, 4 61 2 number_of_entries fixed bin (17), 4 62 2 level fixed bin (17), 4 63 2 last_auto_loc fixed bin (17), 4 64 2 symbol_block fixed bin (17), 4 65 2 entry_info fixed bin (18), 4 66 2 enter structure unaligned, 4 67 3 start fixed bin (17), 4 68 3 end fixed bin (17), 4 69 2 leave structure unaligned, 4 70 3 start fixed bin (17), 4 71 3 end fixed bin (17), 4 72 2 owner ptr; 4 73 4 74 declare max_block_number fixed bin internal static options (constant) initial (511); 4 75 4 76 /* END INCLUDE FILE ... block.incl.pl1 */ 64 5 1 /* BEGIN INCLUDE FILE ... reference.incl.pl1 */ 5 2 5 3 dcl 1 reference based aligned, 5 4 2 node_type bit(9) unaligned, 5 5 2 array_ref bit(1) unaligned, 5 6 2 varying_ref bit(1) unaligned, 5 7 2 shared bit(1) unaligned, 5 8 2 put_data_sw bit(1) unaligned, 5 9 2 processed bit(1) unaligned, 5 10 2 units fixed(3) unaligned, 5 11 2 ref_count fixed(17) unaligned, 5 12 2 c_offset fixed(24), 5 13 2 c_length fixed(24), 5 14 2 symbol ptr unaligned, 5 15 2 qualifier ptr unaligned, 5 16 2 offset ptr unaligned, 5 17 2 length ptr unaligned, 5 18 2 subscript_list ptr unaligned, 5 19 /* these fields are used by the 645 code generator */ 5 20 2 address structure unaligned, 5 21 3 base bit(3), 5 22 3 offset bit(15), 5 23 3 op bit(9), 5 24 3 no_address bit(1), 5 25 3 inhibit bit(1), 5 26 3 ext_base bit(1), 5 27 3 tag bit(6), 5 28 2 info structure unaligned, 5 29 3 address_in structure, 5 30 4 b dimension(0:7) bit(1), 5 31 4 storage bit(1), 5 32 3 value_in structure, 5 33 4 a bit(1), 5 34 4 q bit(1), 5 35 4 aq bit(1), 5 36 4 string_aq bit(1), 5 37 4 complex_aq bit(1), 5 38 4 decimal_aq bit(1), 5 39 4 b dimension(0:7) bit(1), 5 40 4 storage bit(1), 5 41 4 indicators bit(1), 5 42 4 x dimension(0:7) bit(1), 5 43 3 other structure, 5 44 4 big_offset bit(1), 5 45 4 big_length bit(1), 5 46 4 modword_in_offset bit(1), 5 47 2 data_type fixed(5) unaligned, 5 48 2 bits structure unaligned, 5 49 3 padded_ref bit(1), 5 50 3 aligned_ref bit(1), 5 51 3 long_ref bit(1), 5 52 3 forward_ref bit(1), 5 53 3 ic_ref bit(1), 5 54 3 temp_ref bit(1), 5 55 3 defined_ref bit(1), 5 56 3 evaluated bit(1), 5 57 3 allocate bit(1), 5 58 3 allocated bit(1), 5 59 3 aliasable bit(1), 5 60 3 even bit(1), 5 61 3 perm_address bit(1), 5 62 3 aggregate bit(1), 5 63 3 hit_zero bit(1), 5 64 3 dont_save bit(1), 5 65 3 fo_in_qual bit(1), 5 66 3 hard_to_load bit(1), 5 67 2 relocation bit(12) unaligned, 5 68 2 more_bits structure unaligned, 5 69 3 substr bit(1), 5 70 3 padded_for_store_ref bit(1), 5 71 3 aligned_for_store_ref bit(1), 5 72 3 mbz bit(15), 5 73 2 store_ins bit(18) unaligned; 5 74 5 75 /* END INCLUDE FILE ... reference.incl.pl1 */ 65 6 1 /* BEGIN INCLUDE FILE ... symbol.incl.pl1 */ 6 2 6 3 dcl 1 symbol based aligned, 6 4 2 node_type bit(9) unal, 6 5 2 source_id structure unal, 6 6 3 file_number bit(8), 6 7 3 line_number bit(14), 6 8 3 statement_number bit(5), 6 9 2 location fixed(18) unal unsigned, 6 10 2 allocated bit(1) unal, 6 11 2 dcl_type bit(3) unal, 6 12 2 reserved bit(6) unal, 6 13 2 pix unal, 6 14 3 pic_fixed bit(1) unal, 6 15 3 pic_float bit(1) unal, 6 16 3 pic_char bit(1) unal, 6 17 3 pic_scale fixed(7) unal, 6 18 3 pic_size fixed(7) unal, 6 19 2 level fixed(8) unal, 6 20 2 boundary fixed(3) unal, 6 21 2 size_units fixed(3) unal, 6 22 2 scale fixed(7) unal, 6 23 2 runtime bit(18) unal, 6 24 2 runtime_offset bit(18) unal, 6 25 2 block_node ptr unal, 6 26 2 token ptr unal, 6 27 2 next ptr unal, 6 28 2 multi_use ptr unal, 6 29 2 cross_references ptr unal, 6 30 2 initial ptr unal, 6 31 2 array ptr unal, 6 32 2 descriptor ptr unal, 6 33 2 equivalence ptr unal, 6 34 2 reference ptr unal, 6 35 2 general ptr unal, 6 36 2 father ptr unal, 6 37 2 brother ptr unal, 6 38 2 son ptr unal, 6 39 2 word_size ptr unal, 6 40 2 bit_size ptr unal, 6 41 2 dcl_size ptr unal, 6 42 2 symtab_size ptr unal, 6 43 2 c_word_size fixed(24), 6 44 2 c_bit_size fixed(24), 6 45 2 c_dcl_size fixed(24), 6 46 6 47 2 attributes structure aligned, 6 48 3 data_type structure unal, 6 49 4 structure bit(1) , 6 50 4 fixed bit(1), 6 51 4 float bit(1), 6 52 4 bit bit(1), 6 53 4 char bit(1), 6 54 4 ptr bit(1), 6 55 4 offset bit(1), 6 56 4 area bit(1), 6 57 4 label bit(1), 6 58 4 entry bit(1), 6 59 4 file bit(1), 6 60 4 arg_descriptor bit(1), 6 61 4 storage_block bit(1), 6 62 4 explicit_packed bit(1), /* options(packed) */ 6 63 4 condition bit(1), 6 64 4 format bit(1), 6 65 4 builtin bit(1), 6 66 4 generic bit(1), 6 67 4 picture bit(1), 6 68 6 69 3 misc_attributes structure unal, 6 70 4 dimensioned bit(1), 6 71 4 initialed bit(1), 6 72 4 aligned bit(1), 6 73 4 unaligned bit(1), 6 74 4 signed bit(1), 6 75 4 unsigned bit(1), 6 76 4 precision bit(1), 6 77 4 varying bit(1), 6 78 4 local bit(1), 6 79 4 decimal bit(1), 6 80 4 binary bit(1), 6 81 4 real bit(1), 6 82 4 complex bit(1), 6 83 4 variable bit(1), 6 84 4 reducible bit(1), 6 85 4 irreducible bit(1), 6 86 4 returns bit(1), 6 87 4 position bit(1), 6 88 4 internal bit(1), 6 89 4 external bit(1), 6 90 4 like bit(1), 6 91 4 member bit(1), 6 92 4 non_varying bit(1), 6 93 4 options bit(1), 6 94 4 variable_arg_list bit(1), /* options(variable) */ 6 95 4 alloc_in_text bit(1), /* options(constant) */ 6 96 6 97 3 storage_class structure unal, 6 98 4 auto bit(1), 6 99 4 based bit(1), 6 100 4 static bit(1), 6 101 4 controlled bit(1), 6 102 4 defined bit(1), 6 103 4 parameter bit(1), 6 104 4 param_desc bit(1), 6 105 4 constant bit(1), 6 106 4 temporary bit(1), 6 107 4 return_value bit(1), 6 108 6 109 3 file_attributes structure unal, 6 110 4 print bit(1), 6 111 4 input bit(1), 6 112 4 output bit(1), 6 113 4 update bit(1), 6 114 4 stream bit(1), 6 115 4 reserved_1 bit(1), 6 116 4 record bit(1), 6 117 4 sequential bit(1), 6 118 4 direct bit(1), 6 119 4 interactive bit(1), /* env(interactive) */ 6 120 4 reserved_2 bit(1), 6 121 4 reserved_3 bit(1), 6 122 4 stringvalue bit(1), /* env(stringvalue) */ 6 123 4 keyed bit(1), 6 124 4 reserved_4 bit(1), 6 125 4 environment bit(1), 6 126 6 127 3 compiler_developed structure unal, 6 128 4 aliasable bit(1), 6 129 4 packed bit(1), 6 130 4 passed_as_arg bit(1), 6 131 4 allocate bit(1), 6 132 4 set bit(1), 6 133 4 exp_extents bit(1), 6 134 4 refer_extents bit(1), 6 135 4 star_extents bit(1), 6 136 4 isub bit(1), 6 137 4 put_in_symtab bit(1), 6 138 4 contiguous bit(1), 6 139 4 put_data bit(1), 6 140 4 overlayed bit(1), 6 141 4 error bit(1), 6 142 4 symtab_processed bit(1), 6 143 4 overlayed_by_builtin bit(1), 6 144 4 defaulted bit(1), 6 145 4 connected bit(1); 6 146 6 147 /* END INCLUDE FILE ... symbol.incl.pl1 */ 66 7 1 /* BEGIN INCLUDE FILE ... machine_state.incl.pl1 */ 7 2 7 3 dcl cg_static_$m_s_p ptr ext static, 7 4 m_s_p ptr init(cg_static_$m_s_p); 7 5 7 6 dcl 1 machine_state aligned based(m_s_p), 7 7 2 node_type bit(9), 7 8 2 indicators fixed bin, 7 9 2 next ptr unal, 7 10 2 a_reg, 7 11 3 variable(10) ptr unal, 7 12 3 number fixed bin(17), 7 13 3 size fixed bin(8), 7 14 3 length fixed bin(8), 7 15 3 offset fixed bin(8), 7 16 3 constant fixed bin(24), 7 17 3 changed fixed bin(18), 7 18 3 instruction bit(36), 7 19 3 locked bit(1) aligned, 7 20 3 number_h_o fixed bin, 7 21 3 has_offset(3) ptr unal, 7 22 2 q_reg, 7 23 3 variable(10) ptr unal, 7 24 3 number fixed bin(17), 7 25 3 size fixed bin(8), 7 26 3 length fixed bin(8), 7 27 3 offset fixed bin(8), 7 28 3 constant fixed bin(24), 7 29 3 changed fixed bin(18), 7 30 3 instruction bit(36), 7 31 3 locked bit(1) aligned, 7 32 3 number_h_o fixed bin, 7 33 3 has_offset(3) ptr unal, 7 34 2 string_reg, 7 35 3 variable ptr unal, 7 36 3 size fixed bin(8), 7 37 3 offset fixed bin(8), 7 38 2 complex_reg, 7 39 3 variable ptr unal, 7 40 3 size fixed bin(8), 7 41 3 scale fixed bin(8), 7 42 2 decimal_reg, 7 43 3 variable ptr unal, 7 44 3 size fixed bin(8), 7 45 3 scale fixed bin(8), 7 46 2 index_regs(0:7), 7 47 3 variable ptr unal, 7 48 3 constant fixed bin, 7 49 3 type fixed bin(8), 7 50 3 used fixed bin(18), 7 51 3 changed fixed bin(18), 7 52 3 instruction bit(36), 7 53 3 filler fixed bin, 7 54 2 base_regs(0:7), 7 55 3 variable ptr unal, 7 56 3 constant fixed bin, 7 57 3 type fixed bin(8), 7 58 3 pad (12) fixed bin, /* future...room to make 5 element array for variable, constant, type */ 7 59 3 number fixed bin (17), /* future...number of valid elements in array */ 7 60 3 used fixed bin(18), 7 61 3 changed fixed bin(18), 7 62 3 instruction bit(36), 7 63 3 locked fixed bin(2), 7 64 2 indicators_ref(2:3) ptr unal; 7 65 7 66 /* Permissible values for machine_state.indicators. */ 7 67 7 68 dcl ( ind_known_refs init (-2), /* set by comparison of known, nonzero, references */ 7 69 ind_invalid init (-1), 7 70 ind_string_aq init (0), /* logical value in storage */ 7 71 ind_logical init (1), /* logical value in A or AQ */ 7 72 ind_arithmetic init (2), /* arith value in Q, AQ, or EAQ */ 7 73 ind_x (0:7) init (6, 7, 8, 9, 10, 11, 12, 13), 7 74 ind_decimal_reg init (14) 7 75 ) fixed bin internal static options (constant); 7 76 7 77 /* END INCLUDE FILE ... machine_state.incl.pl1 */ 67 8 1 /* BEGIN INCLUDE FILE ... cgsystem.incl.pl1 */ 8 2 8 3 /* Modified: 25 Apr 1979 by PCK to implement 4-bit decimal */ 8 4 8 5 dcl ( bits_per_char init(9), 8 6 bits_per_half init(18), 8 7 bits_per_word init(36), 8 8 bits_per_two_words init(72), 8 9 bits_per_four_words init(144), 8 10 bits_per_words(2) init(36,72), 8 11 packed_digits_per_char init(2), 8 12 chars_per_word init(4), 8 13 packed_digits_per_word init(8), 8 14 8 15 break_even_bits init(216), 8 16 break_even_words init(6), 8 17 8 18 label_size init(4), 8 19 8 20 convert_size(13:14) init(9,1), 8 21 max_offset(13:14) init(27,35), 8 22 max_short_size(13:14) init(8,72), 8 23 8 24 units_per_word(0:5) init(1,36,8,4,2,1), 8 25 8 26 max_dec_scale init(32), 8 27 min_dec_scale init(-31), 8 28 max_p_xreg init(18), 8 29 max_p_fix_bin_1 init(35), 8 30 max_p_flt_bin_1 init(27), 8 31 max_p_fix_dec init(59), 8 32 max_length_p init(24), 8 33 default_fix_bin_p init(17)) fixed bin(8) int static options(constant); 8 34 8 35 dcl (convert_offset(0:5) init(36,1,4.5,9,18,36), 8 36 bits_per_packed_digit init(4.5)) fixed bin(8,1) int static options(constant); 8 37 8 38 dcl max_index_register_value init(262143) fixed bin(31) int static options(constant); 8 39 8 40 /* END INCLUDE FILE ... cgsystem.incl.pl1 */ 8 41 68 9 1 dcl ( real_fix_bin_1 init(1), 9 2 real_fix_bin_2 init(2), 9 3 real_flt_bin_1 init(3), 9 4 real_flt_bin_2 init(4), 9 5 complex_fix_bin_1 init(5), 9 6 complex_fix_bin_2 init(6), 9 7 complex_flt_bin_1 init(7), 9 8 complex_flt_bin_2 init(8), 9 9 real_fix_dec init(9), 9 10 real_flt_dec init(10), 9 11 complex_fix_dec init(11), 9 12 complex_flt_dec init(12), 9 13 char_string init(13), 9 14 bit_string init(14), 9 15 label_constant init(15), 9 16 local_label_variable init(16), 9 17 label_variable init(17), 9 18 entry_variable init(18), 9 19 ext_entry_in init(19), 9 20 ext_entry_out init(20), 9 21 int_entry init(21), 9 22 int_entry_other init(22), 9 23 unpacked_ptr init(23), 9 24 packed_ptr init(24)) fixed bin(15) int static options(constant); 69 70 71 /* program */ 72 73 r = ref_pt; 74 s = r -> reference.symbol; 75 76 if r -> reference.aggregate 77 then do; 78 79 /* this is aggregate temp so assign storage to level 1 ancestor 80* if none already assigned */ 81 82 r -> reference.allocated = "1"b; 83 84 do p = s repeat(p -> symbol.father) while(p -> symbol.father ^= null); 85 end; 86 87 if p -> symbol.initial = null then goto agg; else return; 88 end; 89 90 if s = null 91 then if r -> reference.data_type = 0 92 then size = r -> reference.c_length; 93 else go to get_length; 94 else if s -> symbol.temporary 95 then size = s -> symbol.c_word_size; 96 else do; 97 get_length: bit_length = r -> reference.c_length; 98 if r -> reference.data_type = char_string 99 then bit_length = bit_length * bits_per_char; 100 size = divide(bit_length+bits_per_word-1,bits_per_word,17,0); 101 end; 102 103 common: r -> reference.qualifier = get_temp(size); 104 r -> reference.qualifier -> temporary.ref_count = 1; 105 r -> reference.allocated = "1"b; 106 107 if ^ r -> reference.address_in.storage 108 then if r -> reference.varying_ref 109 then r -> reference.c_offset = r -> reference.c_offset + 1; 110 111 return; 112 113 stack_temp$assign_block: entry(ref_pt,amount); 114 115 dcl amount fixed bin; 116 117 r = ref_pt; 118 size = amount; 119 goto common; 120 121 stack_temp$free_temp: entry(ref_pt); 122 123 r = ref_pt; 124 125 s = r -> reference.qualifier; 126 if s = null then return; 127 128 if s -> node.type ^= temporary_node then return; 129 130 if (r -> reference.ref_count < 0) | (s -> temporary.ref_count < 0) 131 then do; 132 call error(314,cg_stat$cur_statement,r); 133 return; 134 end; 135 136 r -> reference.qualifier = null; 137 138 call put_temp(s); 139 return; 140 141 stack_temp$assign_return_value: entry(sym_pt); 142 143 p = sym_pt; 144 145 r = get_temp(2); 146 p -> symbol.initial = r; 147 148 go to chain_agg; 149 150 stack_temp$assign_aggregate: entry(sym_pt); 151 152 dcl sym_pt ptr; 153 154 p = sym_pt; 155 156 agg: if p -> symbol.word_size = null then size = p -> symbol.c_word_size; 157 else do; 158 o = p -> symbol.word_size; 159 r = prepare_operand(o,1,atomic); 160 call compile_exp(o); 161 call expmac$zero((alloc_words)); 162 cg_stat$extended_stack = "1"b; 163 size = 2; 164 end; 165 166 r = get_temp(size); 167 p -> symbol.initial = r; 168 169 if p -> symbol.word_size ^= null 170 then do; 171 call expmac((store_bp),c_a(r -> temporary.location,4)); 172 base_regs(1).type = 3; 173 base_regs(1).constant = r -> temporary.location; 174 end; 175 176 chain_agg: 177 r -> temporary.symbol = p; 178 r -> temporary.next = cg_stat$agg_temps; 179 cg_stat$agg_temps = r; 180 181 return; 182 183 stack_temp$free_aggregates: entry; 184 185 p = cg_stat$agg_temps; 186 do while(p ^= null); 187 p -> temporary.symbol -> symbol.initial = null; 188 r = p -> temporary.next; 189 call put_temp(p); 190 p = r; 191 end; 192 193 cg_stat$agg_temps = null; 194 return; 195 196 get_temp: proc(amount) returns(ptr); 197 198 dcl (amount,amt,loc,i) fixed bin, 199 (cb,s,prev,p) ptr; 200 201 cb = cg_stat$cur_block; 202 loc = cb -> block.last_auto_loc; 203 204 amt = amount; 205 if amt >= 3 then goto big; 206 207 if amt = 0 then amt = 1; 208 209 i = amt; 210 p = cb -> block.free_temps(i); 211 212 if p ^= null 213 then do; 214 l0: cb -> block.free_temps(i) = p -> temporary.next; 215 l1: return(p); 216 end; 217 218 if i = 1 219 then do; 220 l3: p = create_temp(amt); 221 cb -> block.last_auto_loc = loc + amt; 222 223 if cb -> block.last_auto_loc > cg_stat$max_stack_size 224 then call cg_error(308,cg_stat$max_stack_size); 225 226 goto l1; 227 end; 228 229 l4: if mod(loc,2) = 0 then goto l3; 230 231 p = create_temp(1); 232 p -> temporary.next = cb -> block.free_temps(1); 233 cb -> block.free_temps(1) = p; 234 loc = loc + 1; 235 goto l3; 236 237 big: prev = null; 238 i = 3; 239 p = cb -> block.free_temps(3); 240 241 do while(p ^= null); 242 243 if p -> temporary.size >= amt 244 then do; 245 if prev = null then goto l0; 246 prev -> temporary.next = p -> temporary.next; 247 goto l1; 248 end; 249 250 prev = p; 251 p = p -> temporary.next; 252 end; 253 254 goto l4; 255 256 put_temp: entry(temp); 257 258 dcl temp ptr; 259 260 cb = cg_stat$cur_block; 261 262 s = temp; 263 s -> temporary.last_freed = cg_stat$text_pos; 264 i, amt = s -> temporary.size; 265 266 if i < 3 267 then do; 268 l5: s -> temporary.next = cb -> block.free_temps(i); 269 cb -> block.free_temps(i) = s; 270 return; 271 end; 272 273 prev = null; 274 i = 3; 275 p = cb -> block.free_temps(3); 276 277 do while(p ^= null); 278 279 if amt < p -> temporary.size 280 then do; 281 l6: if prev = null then goto l5; 282 s -> temporary.next = prev -> temporary.next; 283 prev -> temporary.next = s; 284 return; 285 end; 286 287 prev = p; 288 p = p -> temporary.next; 289 end; 290 291 goto l6; 292 293 create_temp: proc(number) returns(ptr); 294 295 dcl number fixed bin, 296 q ptr; 297 298 allocate temporary in(xeq_tree_area) set(q); 299 pl1_stat_$node_uses (bin (temporary_node, 9)) = pl1_stat_$node_uses (bin (temporary_node, 9)) + 1; 300 q -> temporary.node_type = temporary_node; 301 q -> temporary.location = loc; 302 q -> temporary.size = number; 303 return(q); 304 305 end; 306 307 end; 308 309 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/03/83 1009.2 stack_temp.pl1 >spec>on>pl128d>stack_temp.pl1 61 1 07/21/80 1546.3 pl1_tree_areas.incl.pl1 >ldd>include>pl1_tree_areas.incl.pl1 62 2 11/30/78 1227.4 temporary.incl.pl1 >ldd>include>temporary.incl.pl1 63 3 07/21/80 1546.3 nodes.incl.pl1 >ldd>include>nodes.incl.pl1 64 4 08/13/81 2043.5 block.incl.pl1 >ldd>include>block.incl.pl1 65 5 07/21/80 1546.3 reference.incl.pl1 >ldd>include>reference.incl.pl1 66 6 10/02/83 0828.4 symbol.incl.pl1 >spec>on>pl128d>symbol.incl.pl1 67 7 11/13/79 1015.8 machine_state.incl.pl1 >ldd>include>machine_state.incl.pl1 68 8 10/25/79 1645.8 cgsystem.incl.pl1 >ldd>include>cgsystem.incl.pl1 69 9 05/03/76 1320.4 data_types.incl.pl1 >ldd>include>data_types.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. address_in 11 based structure level 3 packed unaligned dcl 5-3 aggregate 12(19) based bit(1) level 3 packed unaligned dcl 5-3 ref 76 alloc_words constant fixed bin(15,0) initial dcl 52 ref 161 allocated 12(15) based bit(1) level 3 packed unaligned dcl 5-3 set ref 82* 105* amount parameter fixed bin(17,0) dcl 198 in procedure "get_temp" ref 196 204 amount parameter fixed bin(17,0) dcl 115 in procedure "stack_temp$assign_temp" ref 113 118 amt 000124 automatic fixed bin(17,0) dcl 198 set ref 204* 205 207 207* 209 220* 221 243 264* 279 atomic 000110 automatic bit(1) dcl 36 set ref 159* attributes 31 based structure level 2 dcl 6-3 base_regs 160 based structure array level 2 dcl 7-6 bin builtin function dcl 57 ref 299 299 bit_length 000112 automatic fixed bin(17,0) dcl 36 set ref 97* 98* 98 100 bits 12(06) based structure level 2 packed unaligned dcl 5-3 bits_per_char constant fixed bin(8,0) initial dcl 8-5 ref 98 bits_per_word constant fixed bin(8,0) initial dcl 8-5 ref 100 100 block based structure level 1 dcl 4-5 c_a 000042 constant entry external dcl 42 ref 171 171 c_length 2 based fixed bin(24,0) level 2 dcl 5-3 ref 90 97 c_offset 1 based fixed bin(24,0) level 2 dcl 5-3 set ref 107* 107 c_word_size 26 based fixed bin(24,0) level 2 dcl 6-3 ref 94 156 cb 000130 automatic pointer dcl 198 set ref 201* 202 210 214 221 223 232 233 239 260* 268 269 275 cg_error 000030 constant entry external dcl 42 ref 223 cg_stat$agg_temps 000014 external static pointer dcl 28 set ref 178 179* 185 193* cg_stat$cur_block 000010 external static pointer dcl 28 ref 201 260 cg_stat$cur_statement 000012 external static pointer dcl 28 set ref 132* cg_stat$extended_stack 000022 external static bit(1) unaligned dcl 28 set ref 162* cg_stat$max_stack_size 000016 external static fixed bin(17,0) dcl 28 set ref 223 223* cg_stat$text_pos 000020 external static fixed bin(18,0) dcl 28 ref 263 cg_static_$m_s_p 000046 external static pointer dcl 7-3 ref 7-3 char_string constant fixed bin(15,0) initial dcl 9-1 ref 98 compile_exp 000034 constant entry external dcl 42 ref 160 constant 161 based fixed bin(17,0) array level 3 dcl 7-6 set ref 173* data_type 12 based fixed bin(5,0) level 2 packed unaligned dcl 5-3 ref 90 98 divide builtin function dcl 57 ref 100 error 000026 constant entry external dcl 42 ref 132 expmac 000040 constant entry external dcl 42 ref 171 expmac$zero 000036 constant entry external dcl 42 ref 161 father 17 based pointer level 2 packed unaligned dcl 6-3 ref 84 85 free_temps 26 based pointer array level 2 dcl 4-5 set ref 210 214* 232 233* 239 268 269* 275 i 000126 automatic fixed bin(17,0) dcl 198 set ref 209* 210 214 218 238* 264* 266 268 269 274* info 11 based structure level 2 packed unaligned dcl 5-3 initial 11 based pointer level 2 packed unaligned dcl 6-3 set ref 87 146* 167* 187* last_auto_loc 46 based fixed bin(17,0) level 2 dcl 4-5 set ref 202 221* 223 last_freed 7 based fixed bin(18,0) level 2 dcl 2-3 set ref 263* loc 000125 automatic fixed bin(17,0) dcl 198 set ref 202* 221 229 234* 234 301 location 4 based fixed bin(18,0) level 2 dcl 2-3 set ref 171* 171* 173 301* m_s_p 000114 automatic pointer initial dcl 7-3 set ref 172 173 7-3* machine_state based structure level 1 dcl 7-6 mod builtin function dcl 57 ref 229 next 2 based pointer level 2 dcl 2-3 set ref 178* 188 214 232* 246* 246 251 268* 282* 282 283* 288 node based structure level 1 dcl 3-27 node_type based bit(9) level 2 packed unaligned dcl 2-3 set ref 300* null builtin function dcl 57 ref 84 87 90 126 136 156 169 186 187 193 212 237 241 245 273 277 281 number parameter fixed bin(17,0) dcl 295 ref 293 302 o 000106 automatic pointer dcl 36 set ref 158* 159* 160* p 000136 automatic pointer dcl 198 in procedure "get_temp" set ref 210* 212 214 215 220* 231* 232 233 239* 241 243 246 250 251* 251 275* 277 279 287 288* 288 p 000100 automatic pointer dcl 36 in procedure "stack_temp$assign_temp" set ref 84* 84* 85 87 143* 146 154* 156 156 158 167 169 176 185* 186 187 188 189* 190* pl1_stat_$node_uses 000024 external static fixed bin(17,0) array dcl 28 set ref 299* 299 pl1_stat_$xeq_tree_area_ptr 000044 external static pointer dcl 1-7 ref 298 prepare_operand 000032 constant entry external dcl 42 ref 159 prev 000134 automatic pointer dcl 198 set ref 237* 245 246 250* 273* 281 282 283 287* q 000150 automatic pointer dcl 295 set ref 298* 300 301 302 303 qualifier 4 based pointer level 2 packed unaligned dcl 5-3 set ref 103* 104 125 136* r 000102 automatic pointer dcl 36 set ref 73* 74 76 82 90 90 97 98 103 104 105 107 107 107 107 117* 123* 125 130 132* 136 145* 146 159* 166* 167 171 171 173 176 178 179 188* 190 ref_count 0(18) based fixed bin(17,0) level 2 in structure "reference" packed unaligned dcl 5-3 in procedure "stack_temp$assign_temp" ref 130 ref_count 5 based fixed bin(17,0) level 2 in structure "temporary" dcl 2-3 in procedure "stack_temp$assign_temp" set ref 104* 130 ref_pt parameter pointer dcl 24 ref 20 73 113 117 121 123 reference based structure level 1 dcl 5-3 s 000104 automatic pointer dcl 36 in procedure "stack_temp$assign_temp" set ref 74* 84 90 94 94 125* 126 128 130 138* s 000132 automatic pointer dcl 198 in procedure "get_temp" set ref 262* 263 264 268 269 282 283 size 1 based fixed bin(18,0) level 2 in structure "temporary" dcl 2-3 in procedure "stack_temp$assign_temp" set ref 243 264 279 302* size 000111 automatic fixed bin(17,0) dcl 36 in procedure "stack_temp$assign_temp" set ref 90* 94* 100* 103* 118* 156* 163* 166* storage 11(08) based bit(1) level 4 packed unaligned dcl 5-3 ref 107 storage_class 32(09) based structure level 3 packed unaligned dcl 6-3 store_bp constant fixed bin(15,0) initial dcl 52 ref 171 sym_pt parameter pointer dcl 152 ref 141 143 150 154 symbol based structure level 1 dcl 6-3 in procedure "stack_temp$assign_temp" symbol 6 based pointer level 2 in structure "temporary" packed unaligned dcl 2-3 in procedure "stack_temp$assign_temp" set ref 176* 187 symbol 3 based pointer level 2 in structure "reference" packed unaligned dcl 5-3 in procedure "stack_temp$assign_temp" ref 74 temp parameter pointer dcl 258 ref 256 262 temporary 32(17) based bit(1) level 4 in structure "symbol" packed unaligned dcl 6-3 in procedure "stack_temp$assign_temp" ref 94 temporary based structure level 1 unaligned dcl 2-3 in procedure "stack_temp$assign_temp" set ref 298 temporary_node constant bit(9) initial dcl 3-5 ref 128 299 299 300 type 162 based fixed bin(8,0) array level 3 in structure "machine_state" dcl 7-6 in procedure "stack_temp$assign_temp" set ref 172* type based bit(9) level 2 in structure "node" packed unaligned dcl 3-27 in procedure "stack_temp$assign_temp" ref 128 varying_ref 0(10) based bit(1) level 2 packed unaligned dcl 5-3 ref 107 word_size 22 based pointer level 2 packed unaligned dcl 6-3 ref 156 158 169 xeq_tree_area based area(1024) dcl 1-5 ref 298 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. array_node internal static bit(9) initial dcl 3-5 bit_string internal static fixed bin(15,0) initial dcl 9-1 bits_per_four_words internal static fixed bin(8,0) initial dcl 8-5 bits_per_half internal static fixed bin(8,0) initial dcl 8-5 bits_per_packed_digit internal static fixed bin(8,1) initial dcl 8-35 bits_per_two_words internal static fixed bin(8,0) initial dcl 8-5 bits_per_words internal static fixed bin(8,0) initial array dcl 8-5 block_node internal static bit(9) initial dcl 3-5 bound_node internal static bit(9) initial dcl 3-5 break_even_bits internal static fixed bin(8,0) initial dcl 8-5 break_even_words internal static fixed bin(8,0) initial dcl 8-5 by_name_agg_node internal static bit(9) initial dcl 3-5 chars_per_word internal static fixed bin(8,0) initial dcl 8-5 complex_fix_bin_1 internal static fixed bin(15,0) initial dcl 9-1 complex_fix_bin_2 internal static fixed bin(15,0) initial dcl 9-1 complex_fix_dec internal static fixed bin(15,0) initial dcl 9-1 complex_flt_bin_1 internal static fixed bin(15,0) initial dcl 9-1 complex_flt_bin_2 internal static fixed bin(15,0) initial dcl 9-1 complex_flt_dec internal static fixed bin(15,0) initial dcl 9-1 context_node internal static bit(9) initial dcl 3-5 convert_offset internal static fixed bin(8,1) initial array dcl 8-35 convert_size internal static fixed bin(8,0) initial array dcl 8-5 cross_reference_node internal static bit(9) initial dcl 3-5 default_fix_bin_p internal static fixed bin(8,0) initial dcl 8-5 default_node internal static bit(9) initial dcl 3-5 entry_variable internal static fixed bin(15,0) initial dcl 9-1 ext_entry_in internal static fixed bin(15,0) initial dcl 9-1 ext_entry_out internal static fixed bin(15,0) initial dcl 9-1 format_value_node internal static bit(9) initial dcl 3-5 ind_arithmetic internal static fixed bin(17,0) initial dcl 7-68 ind_decimal_reg internal static fixed bin(17,0) initial dcl 7-68 ind_invalid internal static fixed bin(17,0) initial dcl 7-68 ind_known_refs internal static fixed bin(17,0) initial dcl 7-68 ind_logical internal static fixed bin(17,0) initial dcl 7-68 ind_string_aq internal static fixed bin(17,0) initial dcl 7-68 ind_x internal static fixed bin(17,0) initial array dcl 7-68 int_entry internal static fixed bin(15,0) initial dcl 9-1 int_entry_other internal static fixed bin(15,0) initial dcl 9-1 label_array_element_node internal static bit(9) initial dcl 3-5 label_constant internal static fixed bin(15,0) initial dcl 9-1 label_node internal static bit(9) initial dcl 3-5 label_size internal static fixed bin(8,0) initial dcl 8-5 label_variable internal static fixed bin(15,0) initial dcl 9-1 list_node internal static bit(9) initial dcl 3-5 local_label_variable internal static fixed bin(15,0) initial dcl 9-1 machine_state_node internal static bit(9) initial dcl 3-5 max_block_number internal static fixed bin(17,0) initial dcl 4-74 max_dec_scale internal static fixed bin(8,0) initial dcl 8-5 max_index_register_value internal static fixed bin(31,0) initial dcl 8-38 max_length_p internal static fixed bin(8,0) initial dcl 8-5 max_offset internal static fixed bin(8,0) initial array dcl 8-5 max_p_fix_bin_1 internal static fixed bin(8,0) initial dcl 8-5 max_p_fix_dec internal static fixed bin(8,0) initial dcl 8-5 max_p_flt_bin_1 internal static fixed bin(8,0) initial dcl 8-5 max_p_xreg internal static fixed bin(8,0) initial dcl 8-5 max_short_size internal static fixed bin(8,0) initial array dcl 8-5 min_dec_scale internal static fixed bin(8,0) initial dcl 8-5 operator_node internal static bit(9) initial dcl 3-5 packed_digits_per_char internal static fixed bin(8,0) initial dcl 8-5 packed_digits_per_word internal static fixed bin(8,0) initial dcl 8-5 packed_ptr internal static fixed bin(15,0) initial dcl 9-1 pl1_stat_$tree_area_ptr external static pointer dcl 1-7 real_fix_bin_1 internal static fixed bin(15,0) initial dcl 9-1 real_fix_bin_2 internal static fixed bin(15,0) initial dcl 9-1 real_fix_dec internal static fixed bin(15,0) initial dcl 9-1 real_flt_bin_1 internal static fixed bin(15,0) initial dcl 9-1 real_flt_bin_2 internal static fixed bin(15,0) initial dcl 9-1 real_flt_dec internal static fixed bin(15,0) initial dcl 9-1 reference_node internal static bit(9) initial dcl 3-5 sf_par_node internal static bit(9) initial dcl 3-5 source_node internal static bit(9) initial dcl 3-5 statement_node internal static bit(9) initial dcl 3-5 symbol_node internal static bit(9) initial dcl 3-5 token_node internal static bit(9) initial dcl 3-5 tree_area based area(1024) dcl 1-4 units_per_word internal static fixed bin(8,0) initial array dcl 8-5 unpacked_ptr internal static fixed bin(15,0) initial dcl 9-1 NAMES DECLARED BY EXPLICIT CONTEXT. agg 000300 constant label dcl 156 ref 87 big 000616 constant label dcl 237 ref 205 chain_agg 000423 constant label dcl 176 ref 148 common 000116 constant label dcl 103 ref 119 create_temp 000760 constant entry internal dcl 293 ref 220 231 get_length 000101 constant label dcl 97 ref 90 get_temp 000474 constant entry internal dcl 196 ref 103 145 166 l0 000527 constant label dcl 214 ref 245 l1 000535 constant label dcl 215 ref 226 247 l3 000552 constant label dcl 220 ref 229 235 l4 000576 constant label dcl 229 ref 254 l5 000673 constant label dcl 268 ref 281 l6 000732 constant label dcl 281 ref 291 put_temp 000651 constant entry internal dcl 256 ref 138 189 stack_temp$assign_aggregate 000266 constant entry external dcl 150 stack_temp$assign_block 000144 constant entry external dcl 113 stack_temp$assign_return_value 000242 constant entry external dcl 141 stack_temp$assign_temp 000024 constant entry external dcl 20 stack_temp$free_aggregates 000435 constant entry external dcl 183 stack_temp$free_temp 000163 constant entry external dcl 121 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1416 1466 1060 1426 Length 2054 1060 50 352 335 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME stack_temp$assign_temp 141 external procedure is an external procedure. get_temp internal procedure shares stack frame of external procedure stack_temp$assign_temp. create_temp internal procedure shares stack frame of external procedure stack_temp$assign_temp. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME stack_temp$assign_temp 000100 p stack_temp$assign_temp 000102 r stack_temp$assign_temp 000104 s stack_temp$assign_temp 000106 o stack_temp$assign_temp 000110 atomic stack_temp$assign_temp 000111 size stack_temp$assign_temp 000112 bit_length stack_temp$assign_temp 000114 m_s_p stack_temp$assign_temp 000124 amt get_temp 000125 loc get_temp 000126 i get_temp 000130 cb get_temp 000132 s get_temp 000134 prev get_temp 000136 p get_temp 000150 q create_temp THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return mod_fx1 signal ext_entry alloc_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. c_a cg_error compile_exp error expmac expmac$zero prepare_operand THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. cg_stat$agg_temps cg_stat$cur_block cg_stat$cur_statement cg_stat$extended_stack cg_stat$max_stack_size cg_stat$text_pos cg_static_$m_s_p pl1_stat_$node_uses pl1_stat_$xeq_tree_area_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 7 3 000013 20 000021 73 000032 74 000036 76 000040 82 000043 84 000045 85 000052 87 000055 87 000060 90 000061 94 000073 97 000101 98 000103 100 000112 103 000116 104 000123 105 000126 107 000130 111 000137 113 000140 117 000152 118 000156 119 000160 121 000161 123 000171 125 000175 126 000177 128 000203 130 000207 132 000215 133 000232 136 000233 138 000235 139 000237 141 000240 143 000250 145 000254 146 000260 148 000263 150 000264 154 000274 156 000300 158 000307 159 000311 160 000330 161 000337 162 000350 163 000353 166 000355 167 000357 169 000362 171 000365 172 000415 173 000420 176 000423 178 000426 179 000432 181 000433 183 000434 185 000443 186 000447 187 000454 188 000460 189 000463 190 000465 191 000467 193 000470 194 000473 196 000474 201 000500 202 000504 204 000507 205 000511 207 000513 209 000517 210 000520 212 000523 214 000527 215 000535 218 000547 220 000552 221 000554 223 000560 226 000575 229 000576 231 000602 232 000606 233 000612 234 000614 235 000615 237 000616 238 000620 239 000622 241 000624 243 000630 245 000634 246 000640 247 000643 250 000644 251 000645 252 000647 254 000650 256 000651 260 000654 262 000660 263 000664 264 000666 266 000671 268 000673 269 000701 270 000703 273 000712 274 000714 275 000716 277 000721 279 000726 281 000732 282 000736 283 000742 284 000744 287 000753 288 000754 289 000756 291 000757 293 000760 298 000762 299 000771 300 000776 301 001000 302 001002 303 001005 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved