COMPILATION LISTING OF SEGMENT min_max Compiled by: Multics PL/I Compiler, Release 28d, of September 14, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 10/03/83 1650.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 /* program to compile min and max functions for pl/1 12* 13* Note: The min and max macros generated by this program make 2 references 14* to their input argument. Hence, the reference count on the reference node 15* returned by compile_exp$save must be increased by 1, and the reference 16* counts for the 3rd thru last temporary in the case of more than 3 operands 17* must be 3 instead of 2 as might be expected. Since the first temporary 18* is merely loaded, a reference count of 2 is sufficient. 19* 20* Initial Version: 1 April, 1969 by BLW 21* Modified: 5 May, 1971 by BLW for Version II 22* Modified: 25 October, 1972 by, BLW 23* Modified: 17 October, 1973 by RAB for EIS 24* Modified: 10 September, 1975 by RAB to fix 1416 25* Modified: 9 December 1976 by RAB to fix pos_dif_fun bug 26* Modified: 30 January 1977 by RAB to fix 1570 27* Modified: 19 March 1977 by RAB to fix 1597 28* Modified: 1 June 1977 by RAB to improve min(atm,exp) 29* Modified: 2 June 1977 by RAB to improve register management for 2 args 30* Modified 780830 by PG to remove pos_dif_fun 31**/ 32 33 min_max: 34 procedure (pt); 35 36 /* parameters */ 37 38 dcl pt ptr parameter; /* points at operator node */ 39 40 /* automatic */ 41 42 dcl (p,op_pt,p2,p3,s1,ref(128)) ptr, 43 (i,n_rands,type(128),scale(128)) fixed bin, 44 op_code bit(9) aligned, 45 which fixed bin(15), 46 (p1_fx2,b1,check_scale) bit(1) aligned, 47 atom(128) bit(1) aligned; 48 49 /* entries */ 50 51 dcl compile_exp entry(ptr), 52 compile_exp$save entry(ptr) returns(ptr), 53 decimal_op entry(ptr,(128) ptr,(128) bit(1) aligned), 54 compile_exp$save_fix_scaled entry(ptr,fixed bin,fixed bin) returns(ptr), 55 adjust_ref_count entry(ptr,fixed bin), 56 state_man$erase_reg entry(bit(19) aligned), 57 aq_man$fix_scale entry(ptr,fixed bin,fixed bin), 58 load entry(ptr,fixed bin), 59 expmac entry(fixed bin(15),ptr), 60 expmac$zero entry(fixed bin(15)), 61 prepare_operand entry(ptr,fixed bin,bit(1) aligned) returns(ptr); 62 63 /* external static */ 64 65 dcl cg_stat$temp_ref ptr ext; 66 67 /* internal static */ 68 69 dcl ( rfb1_to_rfb2 init(88), 70 min_fx1 init(247), 71 max_fx1 init(251)) fixed bin(15) int static; 72 73 /* include files */ 74 1 1 /* BEGIN INCLUDE FILE ... operator.incl.pl1 */ 1 2 1 3 /* Modified: 2 Apr 1980 by PCK to add max_number_of_operands */ 1 4 1 5 /* format: style3 */ 1 6 dcl 1 operator based aligned, 1 7 2 node_type bit (9) unaligned, 1 8 2 op_code bit (9) unaligned, 1 9 2 shared bit (1) unaligned, 1 10 2 processed bit (1) unaligned, 1 11 2 optimized bit (1) unaligned, 1 12 2 number fixed (14) unaligned, 1 13 2 operand dimension (n refer (operator.number)) ptr unaligned; 1 14 1 15 dcl max_number_of_operands 1 16 fixed bin (15) int static options (constant) initial (32767); 1 17 1 18 /* END INCLUDE FILE ... operator.incl.pl1 */ 75 2 1 /* BEGIN INCLUDE FILE ... reference.incl.pl1 */ 2 2 2 3 dcl 1 reference based aligned, 2 4 2 node_type bit(9) unaligned, 2 5 2 array_ref bit(1) unaligned, 2 6 2 varying_ref bit(1) unaligned, 2 7 2 shared bit(1) unaligned, 2 8 2 put_data_sw bit(1) unaligned, 2 9 2 processed bit(1) unaligned, 2 10 2 units fixed(3) unaligned, 2 11 2 ref_count fixed(17) unaligned, 2 12 2 c_offset fixed(24), 2 13 2 c_length fixed(24), 2 14 2 symbol ptr unaligned, 2 15 2 qualifier ptr unaligned, 2 16 2 offset ptr unaligned, 2 17 2 length ptr unaligned, 2 18 2 subscript_list ptr unaligned, 2 19 /* these fields are used by the 645 code generator */ 2 20 2 address structure unaligned, 2 21 3 base bit(3), 2 22 3 offset bit(15), 2 23 3 op bit(9), 2 24 3 no_address bit(1), 2 25 3 inhibit bit(1), 2 26 3 ext_base bit(1), 2 27 3 tag bit(6), 2 28 2 info structure unaligned, 2 29 3 address_in structure, 2 30 4 b dimension(0:7) bit(1), 2 31 4 storage bit(1), 2 32 3 value_in structure, 2 33 4 a bit(1), 2 34 4 q bit(1), 2 35 4 aq bit(1), 2 36 4 string_aq bit(1), 2 37 4 complex_aq bit(1), 2 38 4 decimal_aq bit(1), 2 39 4 b dimension(0:7) bit(1), 2 40 4 storage bit(1), 2 41 4 indicators bit(1), 2 42 4 x dimension(0:7) bit(1), 2 43 3 other structure, 2 44 4 big_offset bit(1), 2 45 4 big_length bit(1), 2 46 4 modword_in_offset bit(1), 2 47 2 data_type fixed(5) unaligned, 2 48 2 bits structure unaligned, 2 49 3 padded_ref bit(1), 2 50 3 aligned_ref bit(1), 2 51 3 long_ref bit(1), 2 52 3 forward_ref bit(1), 2 53 3 ic_ref bit(1), 2 54 3 temp_ref bit(1), 2 55 3 defined_ref bit(1), 2 56 3 evaluated bit(1), 2 57 3 allocate bit(1), 2 58 3 allocated bit(1), 2 59 3 aliasable bit(1), 2 60 3 even bit(1), 2 61 3 perm_address bit(1), 2 62 3 aggregate bit(1), 2 63 3 hit_zero bit(1), 2 64 3 dont_save bit(1), 2 65 3 fo_in_qual bit(1), 2 66 3 hard_to_load bit(1), 2 67 2 relocation bit(12) unaligned, 2 68 2 more_bits structure unaligned, 2 69 3 substr bit(1), 2 70 3 padded_for_store_ref bit(1), 2 71 3 aligned_for_store_ref bit(1), 2 72 3 mbz bit(15), 2 73 2 store_ins bit(18) unaligned; 2 74 2 75 /* END INCLUDE FILE ... reference.incl.pl1 */ 76 3 1 /* BEGIN INCLUDE FILE ... symbol.incl.pl1 */ 3 2 3 3 dcl 1 symbol based aligned, 3 4 2 node_type bit(9) unal, 3 5 2 source_id structure unal, 3 6 3 file_number bit(8), 3 7 3 line_number bit(14), 3 8 3 statement_number bit(5), 3 9 2 location fixed(18) unal unsigned, 3 10 2 allocated bit(1) unal, 3 11 2 dcl_type bit(3) unal, 3 12 2 reserved bit(6) unal, 3 13 2 pix unal, 3 14 3 pic_fixed bit(1) unal, 3 15 3 pic_float bit(1) unal, 3 16 3 pic_char bit(1) unal, 3 17 3 pic_scale fixed(7) unal, 3 18 3 pic_size fixed(7) unal, 3 19 2 level fixed(8) unal, 3 20 2 boundary fixed(3) unal, 3 21 2 size_units fixed(3) unal, 3 22 2 scale fixed(7) unal, 3 23 2 runtime bit(18) unal, 3 24 2 runtime_offset bit(18) unal, 3 25 2 block_node ptr unal, 3 26 2 token ptr unal, 3 27 2 next ptr unal, 3 28 2 multi_use ptr unal, 3 29 2 cross_references ptr unal, 3 30 2 initial ptr unal, 3 31 2 array ptr unal, 3 32 2 descriptor ptr unal, 3 33 2 equivalence ptr unal, 3 34 2 reference ptr unal, 3 35 2 general ptr unal, 3 36 2 father ptr unal, 3 37 2 brother ptr unal, 3 38 2 son ptr unal, 3 39 2 word_size ptr unal, 3 40 2 bit_size ptr unal, 3 41 2 dcl_size ptr unal, 3 42 2 symtab_size ptr unal, 3 43 2 c_word_size fixed(24), 3 44 2 c_bit_size fixed(24), 3 45 2 c_dcl_size fixed(24), 3 46 3 47 2 attributes structure aligned, 3 48 3 data_type structure unal, 3 49 4 structure bit(1) , 3 50 4 fixed bit(1), 3 51 4 float bit(1), 3 52 4 bit bit(1), 3 53 4 char bit(1), 3 54 4 ptr bit(1), 3 55 4 offset bit(1), 3 56 4 area bit(1), 3 57 4 label bit(1), 3 58 4 entry bit(1), 3 59 4 file bit(1), 3 60 4 arg_descriptor bit(1), 3 61 4 storage_block bit(1), 3 62 4 explicit_packed bit(1), /* options(packed) */ 3 63 4 condition bit(1), 3 64 4 format bit(1), 3 65 4 builtin bit(1), 3 66 4 generic bit(1), 3 67 4 picture bit(1), 3 68 3 69 3 misc_attributes structure unal, 3 70 4 dimensioned bit(1), 3 71 4 initialed bit(1), 3 72 4 aligned bit(1), 3 73 4 unaligned bit(1), 3 74 4 signed bit(1), 3 75 4 unsigned bit(1), 3 76 4 precision bit(1), 3 77 4 varying bit(1), 3 78 4 local bit(1), 3 79 4 decimal bit(1), 3 80 4 binary bit(1), 3 81 4 real bit(1), 3 82 4 complex bit(1), 3 83 4 variable bit(1), 3 84 4 reducible bit(1), 3 85 4 irreducible bit(1), 3 86 4 returns bit(1), 3 87 4 position bit(1), 3 88 4 internal bit(1), 3 89 4 external bit(1), 3 90 4 like bit(1), 3 91 4 member bit(1), 3 92 4 non_varying bit(1), 3 93 4 options bit(1), 3 94 4 variable_arg_list bit(1), /* options(variable) */ 3 95 4 alloc_in_text bit(1), /* options(constant) */ 3 96 3 97 3 storage_class structure unal, 3 98 4 auto bit(1), 3 99 4 based bit(1), 3 100 4 static bit(1), 3 101 4 controlled bit(1), 3 102 4 defined bit(1), 3 103 4 parameter bit(1), 3 104 4 param_desc bit(1), 3 105 4 constant bit(1), 3 106 4 temporary bit(1), 3 107 4 return_value bit(1), 3 108 3 109 3 file_attributes structure unal, 3 110 4 print bit(1), 3 111 4 input bit(1), 3 112 4 output bit(1), 3 113 4 update bit(1), 3 114 4 stream bit(1), 3 115 4 reserved_1 bit(1), 3 116 4 record bit(1), 3 117 4 sequential bit(1), 3 118 4 direct bit(1), 3 119 4 interactive bit(1), /* env(interactive) */ 3 120 4 reserved_2 bit(1), 3 121 4 reserved_3 bit(1), 3 122 4 stringvalue bit(1), /* env(stringvalue) */ 3 123 4 keyed bit(1), 3 124 4 reserved_4 bit(1), 3 125 4 environment bit(1), 3 126 3 127 3 compiler_developed structure unal, 3 128 4 aliasable bit(1), 3 129 4 packed bit(1), 3 130 4 passed_as_arg bit(1), 3 131 4 allocate bit(1), 3 132 4 set bit(1), 3 133 4 exp_extents bit(1), 3 134 4 refer_extents bit(1), 3 135 4 star_extents bit(1), 3 136 4 isub bit(1), 3 137 4 put_in_symtab bit(1), 3 138 4 contiguous bit(1), 3 139 4 put_data bit(1), 3 140 4 overlayed bit(1), 3 141 4 error bit(1), 3 142 4 symtab_processed bit(1), 3 143 4 overlayed_by_builtin bit(1), 3 144 4 defaulted bit(1), 3 145 4 connected bit(1); 3 146 3 147 /* END INCLUDE FILE ... symbol.incl.pl1 */ 77 4 1 /* BEGIN INCLUDE FILE ... machine_state.incl.pl1 */ 4 2 4 3 dcl cg_static_$m_s_p ptr ext static, 4 4 m_s_p ptr init(cg_static_$m_s_p); 4 5 4 6 dcl 1 machine_state aligned based(m_s_p), 4 7 2 node_type bit(9), 4 8 2 indicators fixed bin, 4 9 2 next ptr unal, 4 10 2 a_reg, 4 11 3 variable(10) ptr unal, 4 12 3 number fixed bin(17), 4 13 3 size fixed bin(8), 4 14 3 length fixed bin(8), 4 15 3 offset fixed bin(8), 4 16 3 constant fixed bin(24), 4 17 3 changed fixed bin(18), 4 18 3 instruction bit(36), 4 19 3 locked bit(1) aligned, 4 20 3 number_h_o fixed bin, 4 21 3 has_offset(3) ptr unal, 4 22 2 q_reg, 4 23 3 variable(10) ptr unal, 4 24 3 number fixed bin(17), 4 25 3 size fixed bin(8), 4 26 3 length fixed bin(8), 4 27 3 offset fixed bin(8), 4 28 3 constant fixed bin(24), 4 29 3 changed fixed bin(18), 4 30 3 instruction bit(36), 4 31 3 locked bit(1) aligned, 4 32 3 number_h_o fixed bin, 4 33 3 has_offset(3) ptr unal, 4 34 2 string_reg, 4 35 3 variable ptr unal, 4 36 3 size fixed bin(8), 4 37 3 offset fixed bin(8), 4 38 2 complex_reg, 4 39 3 variable ptr unal, 4 40 3 size fixed bin(8), 4 41 3 scale fixed bin(8), 4 42 2 decimal_reg, 4 43 3 variable ptr unal, 4 44 3 size fixed bin(8), 4 45 3 scale fixed bin(8), 4 46 2 index_regs(0:7), 4 47 3 variable ptr unal, 4 48 3 constant fixed bin, 4 49 3 type fixed bin(8), 4 50 3 used fixed bin(18), 4 51 3 changed fixed bin(18), 4 52 3 instruction bit(36), 4 53 3 filler fixed bin, 4 54 2 base_regs(0:7), 4 55 3 variable ptr unal, 4 56 3 constant fixed bin, 4 57 3 type fixed bin(8), 4 58 3 pad (12) fixed bin, /* future...room to make 5 element array for variable, constant, type */ 4 59 3 number fixed bin (17), /* future...number of valid elements in array */ 4 60 3 used fixed bin(18), 4 61 3 changed fixed bin(18), 4 62 3 instruction bit(36), 4 63 3 locked fixed bin(2), 4 64 2 indicators_ref(2:3) ptr unal; 4 65 4 66 /* Permissible values for machine_state.indicators. */ 4 67 4 68 dcl ( ind_known_refs init (-2), /* set by comparison of known, nonzero, references */ 4 69 ind_invalid init (-1), 4 70 ind_string_aq init (0), /* logical value in storage */ 4 71 ind_logical init (1), /* logical value in A or AQ */ 4 72 ind_arithmetic init (2), /* arith value in Q, AQ, or EAQ */ 4 73 ind_x (0:7) init (6, 7, 8, 9, 10, 11, 12, 13), 4 74 ind_decimal_reg init (14) 4 75 ) fixed bin internal static options (constant); 4 76 4 77 /* END INCLUDE FILE ... machine_state.incl.pl1 */ 78 5 1 dcl ( real_fix_bin_1 init(1), 5 2 real_fix_bin_2 init(2), 5 3 real_flt_bin_1 init(3), 5 4 real_flt_bin_2 init(4), 5 5 complex_fix_bin_1 init(5), 5 6 complex_fix_bin_2 init(6), 5 7 complex_flt_bin_1 init(7), 5 8 complex_flt_bin_2 init(8), 5 9 real_fix_dec init(9), 5 10 real_flt_dec init(10), 5 11 complex_fix_dec init(11), 5 12 complex_flt_dec init(12), 5 13 char_string init(13), 5 14 bit_string init(14), 5 15 label_constant init(15), 5 16 local_label_variable init(16), 5 17 label_variable init(17), 5 18 entry_variable init(18), 5 19 ext_entry_in init(19), 5 20 ext_entry_out init(20), 5 21 int_entry init(21), 5 22 int_entry_other init(22), 5 23 unpacked_ptr init(23), 5 24 packed_ptr init(24)) fixed bin(15) int static options(constant); 79 6 1 /* BEGIN INCLUDE FILE ... op_codes.incl.pl1 */ 6 2 6 3 /* Modified: 25 Apr 1979 by PCK 4-bit decimal */ 6 4 /* Modified: 6 Jun 1979 by PG to add rank and byte */ 6 5 /* Modified: 26 Dec 1979 by PCK to add assign_by_name */ 6 6 /* Modified: 26 July 82 BIM wordno, segno */ 6 7 6 8 dcl ( add initial("000010001"b), /* opnd(1) <- opnd(2)+opnd(3) */ 6 9 sub initial("000010010"b), /* opnd(1) <- opnd(2)-opnd(3) */ 6 10 mult initial("000010011"b), /* opnd(1) <- opnd(2)*opnd(3) */ 6 11 div initial("000010100"b), /* opnd(1) <- opnd(2)/opnd(3) */ 6 12 negate initial("000010101"b), /* opnd(1) <- -opnd(2) */ 6 13 exp initial("000010110"b), /* opnd(1) <- opnd(2) ** opnd(3) */ 6 14 6 15 and_bits initial("000100001"b), /* opnd(1) <- opnd(2) & opnd(3) */ 6 16 or_bits initial("000100010"b), /* opnd(1) <- opnd(2)|opnd(3) */ 6 17 xor_bits initial("000100011"b), /* opnd(1) <- opnd(2) xor opnd(3) */ 6 18 not_bits initial("000100100"b), /* opnd(1) <- ^opnd(2) */ 6 19 cat_string initial("000100101"b), /* opnd(1) <- opnd(2)||opnd(3) */ 6 20 bool_fun initial("000100110"b), /* opnd(1) <- bool(opnd(2),opnd(3),opnd(4)) */ 6 21 6 22 assign initial("000110001"b), /* opnd(1) <- opnd(2) */ 6 23 assign_size_ck initial("000110010"b), /* opnd(1) <- opnd(2) */ 6 24 assign_zero initial("000110011"b), /* opnd(1) <- 0 */ 6 25 copy_words initial("000110100"b), /* move opnd(2) to opnd(1) by opnd(3) words */ 6 26 copy_string initial("000110101"b), /* move opnd(2) to opnd(1) by opnd(3) units */ 6 27 make_desc initial("000110110"b), /* opnd(1) <- descriptor(opnd(2),opnd(3)) */ 6 28 assign_round initial("000110111"b), /* opnd(1) <- opnd(2) rounded */ 6 29 pack initial("000111000"b), /* opnd(1) <- encode to picture opnd(2) */ 6 30 unpack initial("000111001"b), /* opnd(1) <- decode from picture opnd(2) */ 6 31 6 32 less_than initial("001000100"b), /* opnd(1) <- opnd(2) < opnd(3) */ 6 33 greater_than initial("001000101"b), /* opnd(1) <- opnd(2) > opnd(3) */ 6 34 equal initial("001000110"b), /* opnd(1) <- opnd(2) = opnd(3) */ 6 35 not_equal initial("001000111"b), /* opnd(1) <- opnd(2) ^= opnd(3) */ 6 36 less_or_equal initial("001001000"b), /* opnd(1) <- opnd(2) <= opnd(3) */ 6 37 greater_or_equal initial("001001001"b), /* opnd(1) <- opnd(2) >= opnd(3) */ 6 38 6 39 jump initial("001010001"b), /* go to opnd(1) unconditionally */ 6 40 jump_true initial("001010010"b), /* go to opnd(1) if opnd(2) is not 0 */ 6 41 jump_false initial("001010011"b), /* go to opnd(1) if opnd(2) is all 0 */ 6 42 jump_if_lt initial("001010100"b), /* go to opnd(1) if opnd(2) < opnd(3) */ 6 43 jump_if_gt initial("001010101"b), /* go to opnd(1) if opnd(2) > opnd(3) */ 6 44 jump_if_eq initial("001010110"b), /* go to opnd(1) if opnd(2) = opnd(3) */ 6 45 jump_if_ne initial("001010111"b), /* go to opnd(1) if opnd(2) ^= opnd(3) */ 6 46 jump_if_le initial("001011000"b), /* go to opnd(1) if opnd(2) <= opnd(3) */ 6 47 jump_if_ge initial("001011001"b), /* go to opnd(1) if opnd(2) >= opnd(3) */ 6 48 6 49 std_arg_list initial("001100001"b), /* opnd(1) <- arglist(opnd(2) desclist(opnd(3))) */ 6 50 return_words initial("001100010"b), /* return aggregate opnd(1), opnd(2) is length in words */ 6 51 std_call initial("001100011"b), /* opnd(1) <- call opnd(2) with opnd(3) */ 6 52 return_bits initial("001100100"b), /* return aggregate opnd(1), opnd(2) is length in bits */ 6 53 std_entry initial("001100101"b), /* entry(opnd(1)... opnd(n)) */ 6 54 return_string initial("001100110"b), /* return string opnd(1) */ 6 55 ex_prologue initial("001100111"b), /* execute the prologue -no operands- */ 6 56 allot_auto initial("001101000"b), /* opnd(1) <- addrel(stack,opnd(2)) */ 6 57 param_ptr initial("001101001"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ 6 58 param_desc_ptr initial("001101010"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ 6 59 std_return initial("001101011"b), /* return -no arguments- */ 6 60 allot_ctl initial("001101100"b), /* allocate opnd(1) , length in words is opnd(2) */ 6 61 free_ctl initial("001101101"b), /* free opnd(1) */ 6 62 stop initial("001101110"b), /* stop - terminate run unit */ 6 63 6 64 mod_bit initial("001110000"b), /* opnd(1) <- mod(opnd(3),36), 6 65* opnd(2) <- opnd(3) / 36 */ 6 66 mod_byte initial("001110001"b), /* opnd(1) <- mod(opnd(3),4), 6 67* opnd(2) <- opnd(3) / 4 */ 6 68 mod_half initial("001110010"b), /* opnd(1) <- mod(opnd(3),2), 6 69* opnd(2) <- opnd(3) / 2 */ 6 70 mod_word initial("001110011"b), /* TO BE DEFINED BY BLW */ 6 71 6 72 bit_to_char initial("010000000"b), /* opnd(1) <- (opnd(2)+8)/9 */ 6 73 bit_to_word initial("010000001"b), /* opnd(1) <- (opnd(2)+35)/36 */ 6 74 char_to_word initial("010000010"b), /* opnd(1) <- (opnd(2)+3)/4 */ 6 75 half_to_word initial("010000011"b), /* opnd(1) <- (opnd(2)+1)/2 */ 6 76 word_to_mod2 initial("010000100"b), /* opnd(1) <- (opnd(2)+1)/2*2 */ 6 77 word_to_mod4 initial("010000101"b), /* opnd(1) <- (opnd(2)+3)/4*4 */ 6 78 word_to_mod8 initial("010000110"b), /* opnd(1) <- (opnd(2)+7)/8*8 */ 6 79 rel_fun initial("010000111"b), /* opnd(1) <- rel(opnd(2)) */ 6 80 baseno_fun initial("010001000"b), /* opnd(1) <- baseno(opnd(2)) */ 6 81 desc_size initial("010001001"b), /* opnd(1) <- substr(opnd(2),13,24) */ 6 82 bit_pointer initial("010001010"b), /* opnd(1) <- bit offset of opnd(2) */ 6 83 index_before_fun initial("010001011"b), /* opnd(1) <- length of before(opnd(2),opnd(3)) */ 6 84 index_after_fun initial("010001100"b), /* opnd(1) <- offset of after(opnd(2),opnd(3)) in opnd(2) */ 6 85 verify_ltrim_fun initial("010001101"b), /* opnd(1) <- offset of ltrim(opnd(2),opnd(3)) in opnd(2) */ 6 86 verify_rtrim_fun initial("010001110"b), /* opnd(1) <- length(opnd(2))-length(rtrim(opnd(2),opnd(3))) */ 6 87 digit_to_bit initial("010001111"b), /* opnd(1) <- 9*opnd(2)/2 */ 6 88 6 89 ceil_fun initial("010010000"b), /* opnd(1) <- ceil(opnd(2)) */ 6 90 floor_fun initial("010010001"b), /* opnd(1) <- floor(opnd(2)) */ 6 91 round_fun initial("010010010"b), /* opnd(1) <- round(opnd(2)) */ 6 92 sign_fun initial("010010011"b), /* opnd(1) <- sign(opnd(2)) */ 6 93 abs_fun initial("010010100"b), /* opnd(1) <- abs(opnd(2)) */ 6 94 trunc_fun initial("010010101"b), /* opnd(1) <- trunc(opnd(2)) */ 6 95 byte_fun initial("010010110"b), /* opnd(1) <- byte(opnd(2)) */ 6 96 rank_fun initial("010010111"b), /* opnd(1) <- rank(opnd(2)) */ 6 97 index_rev_fun initial("010011000"b), /* opnd(1) <- index(reverse(opnd(2)),reverse(opnd(3))) */ 6 98 search_rev_fun initial("010011001"b), /* opnd(1) <- search(reverse(opnd(2)),opnd(3)) */ 6 99 verify_rev_fun initial("010011010"b), /* opnd(1) <- verify(reverse(opnd(2)),opnd(3)) */ 6 100 wordno_fun initial("010011011"b), /* opnd(1) <- wordno (opnd(2)) */ 6 101 segno_fun initial("010011100"b), /* opnd(1) <- segno (opnd(2)) */ 6 102 bitno_fun initial("010011101"b), /* opnd(1) <- bitno (opnd(2)) */ 6 103 charno_fun initial("010011110"b), /* opnd(1) <- charno (opnd(2)) */ 6 104 6 105 index_fun initial("010100000"b), /* opnd(1) <- index(opnd(2),opnd(3)) */ 6 106 off_fun initial("010100001"b), /* opnd(1) <- offset(opnd(2),opnd(3)) */ 6 107 complex_fun initial("010100010"b), /* opnd(1) <- complex(opnd(2),opnd(3)) */ 6 108 conjg_fun initial("010100011"b), /* opnd(1) <- conjg(opnd(2),opnd(3)) */ 6 109 mod_fun initial("010100100"b), /* opnd(1) <- mod(opnd(2),opnd(3)) */ 6 110 repeat_fun initial("010100101"b), /* opnd(1) <- repeat(opnd(2),opnd(3)) */ 6 111 verify_fun initial("010100110"b), /* opnd(1) <- verify(opnd(2),opnd(3)) */ 6 112 translate_fun initial("010100111"b), /* opnd(1) <- translate(opnd(2),opnd(3))*/ 6 113 real_fun initial("010101001"b), /* opnd(1) <- real(opnd(2)) */ 6 114 imag_fun initial("010101010"b), /* opnd(1) <- imag(opnd(2)) */ 6 115 length_fun initial("010101011"b), /* opnd(1) <- length(opnd(2)) */ 6 116 pl1_mod_fun initial("010101100"b), /* opnd(1) <- mod(opnd(2)) */ 6 117 search_fun initial("010101101"b), /* opnd(1) <- search(opnd(2),opnd(3)) */ 6 118 allocation_fun initial("010101110"b), /* opnd(1) <- allocation(opnd(2)) */ 6 119 reverse_fun initial("010101111"b), /* opnd(1) <- reverse(opnd(2)) */ 6 120 6 121 addr_fun initial("010110000"b), /* opnd(1) <- addr(opnd(2)) */ 6 122 addr_fun_bits initial("010110001"b), /* opnd(1) <- addr(opnd(2)) */ 6 123 ptr_fun initial("010110010"b), /* opnd(1) <- ptr(opnd(2),opnd(3)) */ 6 124 baseptr_fun initial("010110011"b), /* opnd(1) <- baseptr(opnd(2)) */ 6 125 addrel_fun initial("010110100"b), /* opnd(1) <- addrel(opnd(2),opnd(3)) */ 6 126 codeptr_fun initial("010110101"b), /* opnd(1) <- codeptr(opnd(2)) */ 6 127 environmentptr_fun initial("010110110"b), /* opnd(1) <- environmentptr(opnd(2)) */ 6 128 stackbaseptr_fun initial("010110111"b), /* opnd(1) is ptr to base of current stack */ 6 129 stackframeptr_fun initial("010111000"b), /* opnd(1) is ptr to current block's stack frame */ 6 130 setcharno_fun initial("010111001"b), /* opnd(1) <- opnd(2) with charno opnd(3) */ 6 131 addcharno_fun initial("010111010"b), /* opnd(1) <- opnd(2) with charno = charno + opnd(3) */ 6 132 setbitno_fun initial("010111011"b), /* setcharno for bitsno */ 6 133 addbitno_fun initial("010111100"b), /* addcharno for bitno */ 6 134 6 135 min_fun initial("011000000"b), /* opnd(1) <- min(opnd(1),opnd(2),...) */ 6 136 max_fun initial("011000001"b), /* opnd(1) <- max(opnd(1),opnd(2),...) */ 6 137 6 138 stack_ptr initial("011010001"b), /* opnd(1) <- stack frame ptr */ 6 139 empty_area initial("011010010"b), /* empty opnd(1), length in words is opnd(2) */ 6 140 enable_on initial("011010100"b), /* opnd(1) is the cond name 6 141* opnd(2) is the file name 6 142* opnd(3) is the block */ 6 143 revert_on initial("011010101"b), /* opnd(1) is the cond name, 6 144* opnd(2) is the file name */ 6 145 signal_on initial("011010110"b), /* opnd(1) is the cond name 6 146* opnd(2) is the file name */ 6 147 6 148 lock_fun initial("011010111"b), /* opnd(1) <- stac(opnd(2),opnd(3)) */ 6 149 stacq_fun initial("011011000"b), /* opnd(1) is result, opnd(2) is ptr to lock word, 6 150* opnd(3) is old value, (4) is new value. */ 6 151 clock_fun initial("011011001"b), /* opnd(1) is the clock time */ 6 152 vclock_fun initial("011011010"b), /* opnd(1) is the virtual clock time */ 6 153 6 154 bound_ck initial("011100000"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ 6 155 range_ck initial("011100001"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ 6 156 loop initial("011100010"b), /* do opnd(1) for opnd(2) from opnd(3) to opnd(4) by 1, 6 157* opnd(5) is the list */ 6 158 join initial("011100011"b), /* do opnd(1), opnd(2) ... opnd(n) */ 6 159 allot_based initial("011100100"b), /* allocate opnd(2) words in opnd(3), set opnd(1) */ 6 160 free_based initial("011100101"b), /* free opnd(1) in opnd(3), length is opnd(2) words */ 6 161 6 162 r_parn initial("011110001"b), /* format op code */ 6 163 l_parn initial("011110010"b), 6 164 r_format initial("011110011"b), 6 165 c_format initial("011110100"b), 6 166 f_format initial("011110101"b), 6 167 e_format initial("011110110"b), 6 168 b_format initial("011110111"b), 6 169 a_format initial("011111000"b), 6 170 x_format initial("011111001"b), 6 171 skip_format initial("011111010"b), 6 172 column_format initial("011111011"b), 6 173 page_format initial("011111100"b), 6 174 line_format initial("011111101"b), 6 175 picture_format initial("011111110"b), 6 176 bn_format initial("011111111"b), /* bit format, length(opnd(2)), radix factor(opnd(3)) */ 6 177 6 178 get_list_trans initial("100000000"b), /* getlist(opnd(2) with desc(opnd(1))) */ 6 179 get_edit_trans initial("100000001"b), /* getedit(opnd(2) with desc(opnd(1))) */ 6 180 get_data_trans initial("100000010"b), /* getdata(opnd(1) to opnd(n)) */ 6 181 put_list_trans initial("100000011"b), /* putlist(opnd(2) with desc(opnd(1))) */ 6 182 put_edit_trans initial("100000100"b), /* putedit(opnd(2) with desc(opnd(1))) */ 6 183 put_data_trans initial("100000101"b), /* putdata(opnd(2)) with subscript-list opnd(1) */ 6 184 terminate_trans initial("100000110"b), /* terminate stream transmission */ 6 185 stream_prep initial("100000111"b), /* initiate stream transmission */ 6 186 record_io initial("100001000"b), /* perform record io operation */ 6 187 fortran_read initial("100001001"b), /* A complete read statement */ 6 188 fortran_write initial("100001010"b), /* A complete write statement */ 6 189 ftn_file_manip initial("100001011"b), /* endfile,backspace,rewind,etc. */ 6 190 ftn_trans_loop initial("100001100"b), /* An implied do in i/o list */ 6 191 put_control initial("100001101"b), /* put control opnd(1) opnd(2) times */ 6 192 put_field initial("100001110"b), /* putlist(opnd(2)) of length(opnd(1)) */ 6 193 put_field_chk initial("100001111"b), /* putlist(op(2)) of len(op(1)) check char index(op(3)) */ 6 194 6 195 /* These operators are produced by the parse but are not used as input to the code generator. */ 6 196 /* They are processed by the semantic translator. */ 6 197 6 198 return_value initial("100010010"b), /* return(opnd(1)) */ 6 199 allot_var initial("100010011"b), /* allot opnd(1) in opnd(2) */ 6 200 free_var initial("100010100"b), /* free opnd(1) out of opnd(2) */ 6 201 get_file initial("100010101"b), /* opnd(1) is filename,opnd(2) is copy */ 6 202 /* opnd(3) is skip, opnd(4) is list */ 6 203 get_string initial("100010110"b), /* opnd(1) is string,opnd(2) is list */ 6 204 put_file initial("100010111"b), /* opnd(1) is filename,opnd(2) is page */ 6 205 /* opnd(3) is skip,opnd(4) is line */ 6 206 put_string initial("100011000"b), /* opnd(1) is string,opnd(2) is list */ 6 207 open_file initial("100011001"b), 6 208 close_file initial("100011010"b), 6 209 read_file initial("100011011"b), 6 210 write_file initial("100011100"b), 6 211 locate_file initial("100011101"b), 6 212 do_fun initial("100011110"b), /* opnd(1) is join of a list */ 6 213 /* opnd(2) is control variable ref */ 6 214 /* opnd(3) is specification operator */ 6 215 do_spec initial("100011111"b), /* opnd(1) to opnd(2) by opnd(3) */ 6 216 /* repeat opnd(4) while opnd(5) */ 6 217 /* opnd(6) is next specification */ 6 218 6 219 rewrite_file initial("100100000"b), 6 220 delete_file initial("100100001"b), 6 221 unlock_file initial("100100010"b), 6 222 lock_file initial("100100011"b), 6 223 refer initial("100100101"b), /* opnd(1) refer(opnd(2)) */ 6 224 prefix_plus initial("100100110"b), /* opnd(1) <- +opnd(2) */ 6 225 nop initial("100100111"b), /* no-op */ 6 226 assign_by_name initial("100101000"b), /* opnd(1) <- opnd(2),by name */ 6 227 6 228 /* These operators are produced by the semantic translator in processing the math 6 229* builtin functions and are used as input to the code generator */ 6 230 6 231 sqrt_fun initial("100110000"b), /* opnd(1) <- sqrt(opnd(2)) */ 6 232 sin_fun initial("100110001"b), /* opnd(1) <- sin(opnd(2)) */ 6 233 sind_fun initial("100110010"b), /* opnd(1) <- sind(opnd(2)) */ 6 234 cos_fun initial("100110011"b), /* opnd(1) <- cos(opnd(2)) */ 6 235 cosd_fun initial("100110100"b), /* opnd(1) <- cosd(opnd(2)) */ 6 236 tan_fun initial("100110101"b), /* opnd(1) <- tan(opnd(2)) */ 6 237 tand_fun initial("100110110"b), /* opnd(1) <- tand(opnd(2)) */ 6 238 asin_fun initial("100110111"b), /* opnd(1) <- asin(opnd(2)) */ 6 239 asind_fun initial("100111000"b), /* opnd(1) <- asind(opnd(2)) */ 6 240 acos_fun initial("100111001"b), /* opnd(1) <- acos(opnd(2)) */ 6 241 acosd_fun initial("100111010"b), /* opnd(1) <- acosd(opnd(2)) */ 6 242 atan_fun initial("100111011"b), /* opnd(1) <- atan(opnd(2)[,opnd(3)]) */ 6 243 atand_fun initial("100111100"b), /* opnd(1) <- atand(opnd(2)[,opnd(3)]) */ 6 244 log2_fun initial("100111101"b), /* opnd(1) <- log2(opnd(2)) */ 6 245 log_fun initial("100111110"b), /* opnd(1) <- log(opnd(2)) */ 6 246 log10_fun initial("100111111"b), /* opnd(1) <- log10(opnd(2)) */ 6 247 6 248 exp_fun initial("101000000"b)) /* opnd(1) <- exp(opnd(2)) */ 6 249 6 250 bit(9) aligned internal static options(constant); 6 251 6 252 /* END INCLUDE FILE ... op_codes.incl.pl1 */ 80 81 82 /* program */ 83 84 op_pt = pt; 85 86 n_rands = op_pt -> operator.number; 87 do i = 1 to n_rands; 88 ref(i) = prepare_operand((op_pt -> operand(i)),1,b1); 89 type(i) = ref(i) -> reference.data_type; 90 scale(i) = ref(i) -> reference.symbol -> symbol.scale; 91 atom(i) = b1; 92 end; 93 94 op_code = op_pt -> operator.op_code; 95 96 s1 = ref(1) -> reference.symbol; 97 98 if s1 -> symbol.decimal 99 then do; 100 call decimal_op(op_pt,ref,atom); 101 goto done; 102 end; 103 104 check_scale = "0"b; 105 p1_fx2 = type(1) = real_fix_bin_2; 106 107 if s1 -> symbol.fixed 108 then do i = 2 to n_rands; 109 if scale(i) ^= scale(1) 110 then do; 111 atom(i) = "0"b; 112 check_scale = "1"b; 113 end; 114 115 if p1_fx2 116 then if n_rands > 3 117 then if type(i) = real_fix_bin_1 118 then atom(i) = "0"b; 119 end; 120 121 if op_code = min_fun then which = min_fx1; 122 else which = max_fx1; 123 124 if n_rands > 3 then goto mm_long; 125 126 p2 = op_pt -> operand(2); 127 p3 = op_pt -> operand(3); 128 129 /* if both operands are the same, compile one & decrement ref_count */ 130 131 if p2 = p3 132 then do; 133 call compile_exp(p2); 134 if ^ ref(3) -> reference.shared 135 then call adjust_ref_count(ref(3),-1); 136 137 /* since compile_exp will call state_man$update_ref, 138* we must flush the q if we are putting in a temp */ 139 140 if ref(2) -> reference.temp_ref 141 then call state_man$erase_reg("01"b); 142 goto done; 143 end; 144 145 /* put longer of two operands on right */ 146 147 if type(2) > type(3) 148 then call flip_rands; 149 150 if atom(2) 151 then do; 152 if atom(3) then goto mm_aa; 153 154 /* have f(atm,exp) */ 155 156 if type(2) >= type(3) 157 then do; 158 call flip_rands; 159 go to mm_ea; 160 end; 161 162 if check_scale & scale(1) ^= scale(3) 163 then do; 164 ref(3) = compile_exp$save_fix_scaled(p3,scale(1),type(1)); 165 type(3) = type(1); 166 end; 167 else ref(3) = compile_exp$save(p3); 168 169 /* have f(atm,atm) */ 170 171 mm_aa: if ref(3) -> reference.value_in.q 172 then if type(2) >= type(3) 173 then call flip_rands; 174 175 call load(ref(2),0); 176 end; 177 else do; 178 if atom(3) then goto mm_ea; 179 180 /* have f(exp,exp) */ 181 182 if check_scale & scale(1) ^= scale(3) 183 then do; 184 ref(3) = compile_exp$save_fix_scaled(p3,scale(1),type(1)); 185 type(3) = type(1); 186 end; 187 else ref(3) = compile_exp$save(p3); 188 189 /* have f(exp,atm) */ 190 191 mm_ea: call compile_exp(p2); 192 193 if check_scale & scale(1) ^= scale(2) 194 then do; 195 call aq_man$fix_scale(ref(2),scale(1),type(1)); 196 type(2) = type(1); 197 end; 198 199 end; 200 201 if p1_fx2 then if type(2) = real_fix_bin_1 202 then call expmac$zero((rfb1_to_rfb2)); 203 204 call expmac(which + type(3) - real_fix_bin_1,ref(3)); 205 goto done; 206 207 /* f(a1,a2,...,an). evaluate all expressions and if 208* type of result is real_fix_bin_2, convert all single 209* precision fixed to double */ 210 211 mm_long: do i = 2 to n_rands; 212 if ^ atom(i) 213 then if (check_scale & scale(1) ^= scale(i)) | (p1_fx2 & type(i) = real_fix_bin_1) 214 then do; 215 ref(i) = compile_exp$save_fix_scaled((op_pt -> operand(i)),scale(1),type(1)); 216 type(i) = type(1); 217 end; 218 else ref(i) = compile_exp$save((op_pt -> operand(i))); 219 220 end; 221 222 call load(ref(2),0); 223 224 do i = 3 to n_rands; 225 call expmac(which + type(i) - real_fix_bin_1,ref(i)); 226 end; 227 228 done: cg_stat$temp_ref = ref(1); 229 230 /* set indicators to reflect the fact that the machine indicators 231* do not correspond to the value of the min|max function */ 232 233 machine_state.indicators = -1; 234 return; 235 236 237 flip_rands: proc; 238 239 /* flips operands for case of 2 operands */ 240 241 p = ref(2); 242 ref(2) = ref(3); 243 ref(3) = p; 244 245 p = p2; 246 p2 = p3; 247 p3 = p; 248 249 b1 = atom(2); 250 atom(2) = atom(3); 251 atom(3) = b1; 252 253 i = type(2); 254 type(2) = type(3); 255 type(3) = i; 256 257 i = scale(2); 258 scale(2) = scale(3); 259 scale(3) = i; 260 261 end; 262 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/03/83 1009.0 min_max.pl1 >spec>on>pl128d>min_max.pl1 75 1 07/21/80 1546.3 operator.incl.pl1 >ldd>include>operator.incl.pl1 76 2 07/21/80 1546.3 reference.incl.pl1 >ldd>include>reference.incl.pl1 77 3 10/02/83 0828.4 symbol.incl.pl1 >spec>on>pl128d>symbol.incl.pl1 78 4 11/13/79 1015.8 machine_state.incl.pl1 >ldd>include>machine_state.incl.pl1 79 5 05/03/76 1320.4 data_types.incl.pl1 >ldd>include>data_types.incl.pl1 80 6 04/07/83 1635.0 op_codes.incl.pl1 >ldd>include>op_codes.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. adjust_ref_count 000020 constant entry external dcl 51 ref 134 aq_man$fix_scale 000024 constant entry external dcl 51 ref 195 atom 001121 automatic bit(1) array dcl 42 set ref 91* 100* 111* 115* 150 152 178 212 249 250* 250 251* attributes 31 based structure level 2 dcl 3-3 b1 001117 automatic bit(1) dcl 42 set ref 88* 91 249* 251 bits 12(06) based structure level 2 packed unaligned dcl 2-3 cg_stat$temp_ref 000036 external static pointer dcl 65 set ref 228* cg_static_$m_s_p 000040 external static pointer dcl 4-3 ref 4-3 check_scale 001120 automatic bit(1) dcl 42 set ref 104* 112* 162 182 193 212 compile_exp 000010 constant entry external dcl 51 ref 133 191 compile_exp$save 000012 constant entry external dcl 51 ref 167 187 218 compile_exp$save_fix_scaled 000016 constant entry external dcl 51 ref 164 184 215 data_type 31 based structure level 3 in structure "symbol" packed unaligned dcl 3-3 in procedure "min_max" data_type 12 based fixed bin(5,0) level 2 in structure "reference" packed unaligned dcl 2-3 in procedure "min_max" ref 89 decimal 31(28) based bit(1) level 4 packed unaligned dcl 3-3 ref 98 decimal_op 000014 constant entry external dcl 51 ref 100 expmac 000030 constant entry external dcl 51 ref 204 225 expmac$zero 000032 constant entry external dcl 51 ref 201 fixed 31(01) based bit(1) level 4 packed unaligned dcl 3-3 ref 107 i 000512 automatic fixed bin(17,0) dcl 42 set ref 87* 88 88 89 89 90 90 91* 107* 109 111 115 115* 211* 212 212 212 215 215 216 218 218* 224* 225 225* 253* 255 257* 259 indicators 1 based fixed bin(17,0) level 2 dcl 4-6 set ref 233* info 11 based structure level 2 packed unaligned dcl 2-3 load 000026 constant entry external dcl 51 ref 175 222 m_s_p 001322 automatic pointer initial dcl 4-3 set ref 233 4-3* machine_state based structure level 1 dcl 4-6 max_fx1 constant fixed bin(15,0) initial dcl 69 ref 122 min_fun constant bit(9) initial dcl 6-8 ref 121 min_fx1 constant fixed bin(15,0) initial dcl 69 ref 121 misc_attributes 31(19) based structure level 3 packed unaligned dcl 3-3 n_rands 000513 automatic fixed bin(17,0) dcl 42 set ref 86* 87 107 115 124 211 224 number 0(21) based fixed bin(14,0) level 2 packed unaligned dcl 1-6 ref 86 op_code 001114 automatic bit(9) dcl 42 in procedure "min_max" set ref 94* 121 op_code 0(09) based bit(9) level 2 in structure "operator" packed unaligned dcl 1-6 in procedure "min_max" ref 94 op_pt 000102 automatic pointer dcl 42 set ref 84* 86 88 94 100* 126 127 215 218 operand 1 based pointer array level 2 packed unaligned dcl 1-6 ref 88 126 127 215 218 operator based structure level 1 dcl 1-6 p 000100 automatic pointer dcl 42 set ref 241* 243 245* 247 p1_fx2 001116 automatic bit(1) dcl 42 set ref 105* 115 201 212 p2 000104 automatic pointer dcl 42 set ref 126* 131 133* 191* 245 246* p3 000106 automatic pointer dcl 42 set ref 127* 131 164* 167* 184* 187* 246 247* prepare_operand 000034 constant entry external dcl 51 ref 88 pt parameter pointer dcl 38 ref 33 84 q 11(10) based bit(1) level 4 packed unaligned dcl 2-3 ref 171 real_fix_bin_1 constant fixed bin(15,0) initial dcl 5-1 ref 115 201 204 212 225 real_fix_bin_2 constant fixed bin(15,0) initial dcl 5-1 ref 105 ref 000112 automatic pointer array dcl 42 set ref 88* 89 90 96 100* 134 134* 140 164* 167* 171 175* 184* 187* 195* 204* 215* 218* 222* 225* 228 241 242* 242 243* reference based structure level 1 dcl 2-3 rfb1_to_rfb2 constant fixed bin(15,0) initial dcl 69 ref 201 s1 000110 automatic pointer dcl 42 set ref 96* 98 107 scale 2(28) based fixed bin(7,0) level 2 in structure "symbol" packed unaligned dcl 3-3 in procedure "min_max" ref 90 scale 000714 automatic fixed bin(17,0) array dcl 42 in procedure "min_max" set ref 90* 109 109 162 162 164* 182 182 184* 193 193 195* 212 212 215* 257 258* 258 259* shared 0(11) based bit(1) level 2 packed unaligned dcl 2-3 ref 134 state_man$erase_reg 000022 constant entry external dcl 51 ref 140 symbol based structure level 1 dcl 3-3 in procedure "min_max" symbol 3 based pointer level 2 in structure "reference" packed unaligned dcl 2-3 in procedure "min_max" ref 90 96 temp_ref 12(11) based bit(1) level 3 packed unaligned dcl 2-3 ref 140 type 000514 automatic fixed bin(17,0) array dcl 42 set ref 89* 105 115 147 147 156 156 164* 165* 165 171 171 184* 185* 185 195* 196* 196 201 204 212 215* 216* 216 225 253 254* 254 255* value_in 11(09) based structure level 3 packed unaligned dcl 2-3 which 001115 automatic fixed bin(15,0) dcl 42 set ref 121* 122* 204 225 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. a_format internal static bit(9) initial dcl 6-8 abs_fun internal static bit(9) initial dcl 6-8 acos_fun internal static bit(9) initial dcl 6-8 acosd_fun internal static bit(9) initial dcl 6-8 add internal static bit(9) initial dcl 6-8 addbitno_fun internal static bit(9) initial dcl 6-8 addcharno_fun internal static bit(9) initial dcl 6-8 addr_fun internal static bit(9) initial dcl 6-8 addr_fun_bits internal static bit(9) initial dcl 6-8 addrel_fun internal static bit(9) initial dcl 6-8 allocation_fun internal static bit(9) initial dcl 6-8 allot_auto internal static bit(9) initial dcl 6-8 allot_based internal static bit(9) initial dcl 6-8 allot_ctl internal static bit(9) initial dcl 6-8 allot_var internal static bit(9) initial dcl 6-8 and_bits internal static bit(9) initial dcl 6-8 asin_fun internal static bit(9) initial dcl 6-8 asind_fun internal static bit(9) initial dcl 6-8 assign internal static bit(9) initial dcl 6-8 assign_by_name internal static bit(9) initial dcl 6-8 assign_round internal static bit(9) initial dcl 6-8 assign_size_ck internal static bit(9) initial dcl 6-8 assign_zero internal static bit(9) initial dcl 6-8 atan_fun internal static bit(9) initial dcl 6-8 atand_fun internal static bit(9) initial dcl 6-8 b_format internal static bit(9) initial dcl 6-8 baseno_fun internal static bit(9) initial dcl 6-8 baseptr_fun internal static bit(9) initial dcl 6-8 bit_pointer internal static bit(9) initial dcl 6-8 bit_string internal static fixed bin(15,0) initial dcl 5-1 bit_to_char internal static bit(9) initial dcl 6-8 bit_to_word internal static bit(9) initial dcl 6-8 bitno_fun internal static bit(9) initial dcl 6-8 bn_format internal static bit(9) initial dcl 6-8 bool_fun internal static bit(9) initial dcl 6-8 bound_ck internal static bit(9) initial dcl 6-8 byte_fun internal static bit(9) initial dcl 6-8 c_format internal static bit(9) initial dcl 6-8 cat_string internal static bit(9) initial dcl 6-8 ceil_fun internal static bit(9) initial dcl 6-8 char_string internal static fixed bin(15,0) initial dcl 5-1 char_to_word internal static bit(9) initial dcl 6-8 charno_fun internal static bit(9) initial dcl 6-8 clock_fun internal static bit(9) initial dcl 6-8 close_file internal static bit(9) initial dcl 6-8 codeptr_fun internal static bit(9) initial dcl 6-8 column_format internal static bit(9) initial dcl 6-8 complex_fix_bin_1 internal static fixed bin(15,0) initial dcl 5-1 complex_fix_bin_2 internal static fixed bin(15,0) initial dcl 5-1 complex_fix_dec internal static fixed bin(15,0) initial dcl 5-1 complex_flt_bin_1 internal static fixed bin(15,0) initial dcl 5-1 complex_flt_bin_2 internal static fixed bin(15,0) initial dcl 5-1 complex_flt_dec internal static fixed bin(15,0) initial dcl 5-1 complex_fun internal static bit(9) initial dcl 6-8 conjg_fun internal static bit(9) initial dcl 6-8 copy_string internal static bit(9) initial dcl 6-8 copy_words internal static bit(9) initial dcl 6-8 cos_fun internal static bit(9) initial dcl 6-8 cosd_fun internal static bit(9) initial dcl 6-8 delete_file internal static bit(9) initial dcl 6-8 desc_size internal static bit(9) initial dcl 6-8 digit_to_bit internal static bit(9) initial dcl 6-8 div internal static bit(9) initial dcl 6-8 do_fun internal static bit(9) initial dcl 6-8 do_spec internal static bit(9) initial dcl 6-8 e_format internal static bit(9) initial dcl 6-8 empty_area internal static bit(9) initial dcl 6-8 enable_on internal static bit(9) initial dcl 6-8 entry_variable internal static fixed bin(15,0) initial dcl 5-1 environmentptr_fun internal static bit(9) initial dcl 6-8 equal internal static bit(9) initial dcl 6-8 ex_prologue internal static bit(9) initial dcl 6-8 exp internal static bit(9) initial dcl 6-8 exp_fun internal static bit(9) initial dcl 6-8 ext_entry_in internal static fixed bin(15,0) initial dcl 5-1 ext_entry_out internal static fixed bin(15,0) initial dcl 5-1 f_format internal static bit(9) initial dcl 6-8 floor_fun internal static bit(9) initial dcl 6-8 fortran_read internal static bit(9) initial dcl 6-8 fortran_write internal static bit(9) initial dcl 6-8 free_based internal static bit(9) initial dcl 6-8 free_ctl internal static bit(9) initial dcl 6-8 free_var internal static bit(9) initial dcl 6-8 ftn_file_manip internal static bit(9) initial dcl 6-8 ftn_trans_loop internal static bit(9) initial dcl 6-8 get_data_trans internal static bit(9) initial dcl 6-8 get_edit_trans internal static bit(9) initial dcl 6-8 get_file internal static bit(9) initial dcl 6-8 get_list_trans internal static bit(9) initial dcl 6-8 get_string internal static bit(9) initial dcl 6-8 greater_or_equal internal static bit(9) initial dcl 6-8 greater_than internal static bit(9) initial dcl 6-8 half_to_word internal static bit(9) initial dcl 6-8 imag_fun internal static bit(9) initial dcl 6-8 ind_arithmetic internal static fixed bin(17,0) initial dcl 4-68 ind_decimal_reg internal static fixed bin(17,0) initial dcl 4-68 ind_invalid internal static fixed bin(17,0) initial dcl 4-68 ind_known_refs internal static fixed bin(17,0) initial dcl 4-68 ind_logical internal static fixed bin(17,0) initial dcl 4-68 ind_string_aq internal static fixed bin(17,0) initial dcl 4-68 ind_x internal static fixed bin(17,0) initial array dcl 4-68 index_after_fun internal static bit(9) initial dcl 6-8 index_before_fun internal static bit(9) initial dcl 6-8 index_fun internal static bit(9) initial dcl 6-8 index_rev_fun internal static bit(9) initial dcl 6-8 int_entry internal static fixed bin(15,0) initial dcl 5-1 int_entry_other internal static fixed bin(15,0) initial dcl 5-1 join internal static bit(9) initial dcl 6-8 jump internal static bit(9) initial dcl 6-8 jump_false internal static bit(9) initial dcl 6-8 jump_if_eq internal static bit(9) initial dcl 6-8 jump_if_ge internal static bit(9) initial dcl 6-8 jump_if_gt internal static bit(9) initial dcl 6-8 jump_if_le internal static bit(9) initial dcl 6-8 jump_if_lt internal static bit(9) initial dcl 6-8 jump_if_ne internal static bit(9) initial dcl 6-8 jump_true internal static bit(9) initial dcl 6-8 l_parn internal static bit(9) initial dcl 6-8 label_constant internal static fixed bin(15,0) initial dcl 5-1 label_variable internal static fixed bin(15,0) initial dcl 5-1 length_fun internal static bit(9) initial dcl 6-8 less_or_equal internal static bit(9) initial dcl 6-8 less_than internal static bit(9) initial dcl 6-8 line_format internal static bit(9) initial dcl 6-8 local_label_variable internal static fixed bin(15,0) initial dcl 5-1 locate_file internal static bit(9) initial dcl 6-8 lock_file internal static bit(9) initial dcl 6-8 lock_fun internal static bit(9) initial dcl 6-8 log10_fun internal static bit(9) initial dcl 6-8 log2_fun internal static bit(9) initial dcl 6-8 log_fun internal static bit(9) initial dcl 6-8 loop internal static bit(9) initial dcl 6-8 make_desc internal static bit(9) initial dcl 6-8 max_fun internal static bit(9) initial dcl 6-8 max_number_of_operands internal static fixed bin(15,0) initial dcl 1-15 mod_bit internal static bit(9) initial dcl 6-8 mod_byte internal static bit(9) initial dcl 6-8 mod_fun internal static bit(9) initial dcl 6-8 mod_half internal static bit(9) initial dcl 6-8 mod_word internal static bit(9) initial dcl 6-8 mult internal static bit(9) initial dcl 6-8 negate internal static bit(9) initial dcl 6-8 nop internal static bit(9) initial dcl 6-8 not_bits internal static bit(9) initial dcl 6-8 not_equal internal static bit(9) initial dcl 6-8 off_fun internal static bit(9) initial dcl 6-8 open_file internal static bit(9) initial dcl 6-8 or_bits internal static bit(9) initial dcl 6-8 pack internal static bit(9) initial dcl 6-8 packed_ptr internal static fixed bin(15,0) initial dcl 5-1 page_format internal static bit(9) initial dcl 6-8 param_desc_ptr internal static bit(9) initial dcl 6-8 param_ptr internal static bit(9) initial dcl 6-8 picture_format internal static bit(9) initial dcl 6-8 pl1_mod_fun internal static bit(9) initial dcl 6-8 prefix_plus internal static bit(9) initial dcl 6-8 ptr_fun internal static bit(9) initial dcl 6-8 put_control internal static bit(9) initial dcl 6-8 put_data_trans internal static bit(9) initial dcl 6-8 put_edit_trans internal static bit(9) initial dcl 6-8 put_field internal static bit(9) initial dcl 6-8 put_field_chk internal static bit(9) initial dcl 6-8 put_file internal static bit(9) initial dcl 6-8 put_list_trans internal static bit(9) initial dcl 6-8 put_string internal static bit(9) initial dcl 6-8 r_format internal static bit(9) initial dcl 6-8 r_parn internal static bit(9) initial dcl 6-8 range_ck internal static bit(9) initial dcl 6-8 rank_fun internal static bit(9) initial dcl 6-8 read_file internal static bit(9) initial dcl 6-8 real_fix_dec internal static fixed bin(15,0) initial dcl 5-1 real_flt_bin_1 internal static fixed bin(15,0) initial dcl 5-1 real_flt_bin_2 internal static fixed bin(15,0) initial dcl 5-1 real_flt_dec internal static fixed bin(15,0) initial dcl 5-1 real_fun internal static bit(9) initial dcl 6-8 record_io internal static bit(9) initial dcl 6-8 refer internal static bit(9) initial dcl 6-8 rel_fun internal static bit(9) initial dcl 6-8 repeat_fun internal static bit(9) initial dcl 6-8 return_bits internal static bit(9) initial dcl 6-8 return_string internal static bit(9) initial dcl 6-8 return_value internal static bit(9) initial dcl 6-8 return_words internal static bit(9) initial dcl 6-8 reverse_fun internal static bit(9) initial dcl 6-8 revert_on internal static bit(9) initial dcl 6-8 rewrite_file internal static bit(9) initial dcl 6-8 round_fun internal static bit(9) initial dcl 6-8 search_fun internal static bit(9) initial dcl 6-8 search_rev_fun internal static bit(9) initial dcl 6-8 segno_fun internal static bit(9) initial dcl 6-8 setbitno_fun internal static bit(9) initial dcl 6-8 setcharno_fun internal static bit(9) initial dcl 6-8 sign_fun internal static bit(9) initial dcl 6-8 signal_on internal static bit(9) initial dcl 6-8 sin_fun internal static bit(9) initial dcl 6-8 sind_fun internal static bit(9) initial dcl 6-8 skip_format internal static bit(9) initial dcl 6-8 sqrt_fun internal static bit(9) initial dcl 6-8 stack_ptr internal static bit(9) initial dcl 6-8 stackbaseptr_fun internal static bit(9) initial dcl 6-8 stackframeptr_fun internal static bit(9) initial dcl 6-8 stacq_fun internal static bit(9) initial dcl 6-8 std_arg_list internal static bit(9) initial dcl 6-8 std_call internal static bit(9) initial dcl 6-8 std_entry internal static bit(9) initial dcl 6-8 std_return internal static bit(9) initial dcl 6-8 stop internal static bit(9) initial dcl 6-8 stream_prep internal static bit(9) initial dcl 6-8 sub internal static bit(9) initial dcl 6-8 tan_fun internal static bit(9) initial dcl 6-8 tand_fun internal static bit(9) initial dcl 6-8 terminate_trans internal static bit(9) initial dcl 6-8 translate_fun internal static bit(9) initial dcl 6-8 trunc_fun internal static bit(9) initial dcl 6-8 unlock_file internal static bit(9) initial dcl 6-8 unpack internal static bit(9) initial dcl 6-8 unpacked_ptr internal static fixed bin(15,0) initial dcl 5-1 vclock_fun internal static bit(9) initial dcl 6-8 verify_fun internal static bit(9) initial dcl 6-8 verify_ltrim_fun internal static bit(9) initial dcl 6-8 verify_rev_fun internal static bit(9) initial dcl 6-8 verify_rtrim_fun internal static bit(9) initial dcl 6-8 word_to_mod2 internal static bit(9) initial dcl 6-8 word_to_mod4 internal static bit(9) initial dcl 6-8 word_to_mod8 internal static bit(9) initial dcl 6-8 wordno_fun internal static bit(9) initial dcl 6-8 write_file internal static bit(9) initial dcl 6-8 x_format internal static bit(9) initial dcl 6-8 xor_bits internal static bit(9) initial dcl 6-8 NAMES DECLARED BY EXPLICIT CONTEXT. done 000645 constant label dcl 228 ref 101 142 205 flip_rands 000654 constant entry internal dcl 237 ref 147 158 171 min_max 000004 constant entry external dcl 33 mm_aa 000335 constant label dcl 171 ref 152 mm_ea 000421 constant label dcl 191 ref 159 178 mm_long 000506 constant label dcl 211 ref 124 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1070 1132 716 1100 Length 1430 716 42 262 152 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME min_max 748 external procedure is an external procedure. flip_rands internal procedure shares stack frame of external procedure min_max. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME min_max 000100 p min_max 000102 op_pt min_max 000104 p2 min_max 000106 p3 min_max 000110 s1 min_max 000112 ref min_max 000512 i min_max 000513 n_rands min_max 000514 type min_max 000714 scale min_max 001114 op_code min_max 001115 which min_max 001116 p1_fx2 min_max 001117 b1 min_max 001120 check_scale min_max 001121 atom min_max 001322 m_s_p min_max THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out return ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. adjust_ref_count aq_man$fix_scale compile_exp compile_exp$save compile_exp$save_fix_scaled decimal_op expmac expmac$zero load prepare_operand state_man$erase_reg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. cg_stat$temp_ref cg_static_$m_s_p LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 33 000001 4 3 000011 84 000014 86 000020 87 000024 88 000033 89 000057 90 000065 91 000072 92 000075 94 000077 96 000103 98 000106 100 000111 101 000124 104 000125 105 000126 107 000132 109 000145 111 000150 112 000152 115 000154 119 000166 121 000170 122 000176 124 000200 126 000203 127 000206 131 000211 133 000215 134 000224 140 000242 142 000257 147 000260 150 000264 152 000267 156 000272 158 000275 159 000276 162 000277 164 000304 165 000321 166 000323 167 000324 171 000335 175 000345 176 000357 178 000360 182 000363 184 000370 185 000405 186 000407 187 000410 191 000421 193 000430 195 000435 196 000450 201 000452 204 000470 205 000505 211 000506 212 000515 215 000534 216 000555 217 000560 218 000561 220 000577 222 000601 224 000613 225 000623 226 000643 228 000645 233 000650 234 000653 237 000654 241 000655 242 000657 243 000661 245 000662 246 000664 247 000666 249 000670 250 000673 251 000676 253 000701 254 000703 255 000705 257 000707 258 000711 259 000713 261 000715 ----------------------------------------------------------- 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