COMPILATION LISTING OF SEGMENT combine_tests Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-18_1057.35_Tue_mdt 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 /* combine_tests runs on the statements produced by optimize_if's processing of 12* an if statement. It looks for consecutive tests on the same word and tries 13* to combine them. If 2 tests to the same word are found, the following 14* equations are used: 15* 16* jump_true(target,r1), jump_true(target,r2) -> jump_true(target,and_bits(r,mask)) 17* 18* jump_true(next,r1), jump_false(target,r2) -> jump_false(target,and_bits(r,mask)) 19* 20* jump_false(next,r1), jump_true(target,r2) -> jump_if_eq(target,and_bits(r,mask),mask) 21* 22* jump_false(target,r1), jump_false(target,r2) -> jump_if_ne(target,and_bits(r,mask),mask) 23* 24* 25* jump_true(target,r1), jump_true(target,and_bits(r2,mask1)) -> jump_true(target,and_bits(r,mask2)) 26* 27* jump_true(next,r1), jump_false(target,and_bits(r2,mask1)) -> jump_false(target,and_bits(r,mask2)) 28* 29* jump_false(next_r1), jump_if_eq(target,and_bits(r2,mask1),mask1) -> jump_if_eq(target,and_bits(r,mask2),mask2) 30* 31* jump_false(target,r1), jump_if_ne(target,and_bits(r2,mask1),mask1) -> jump_if_ne(target,and_bits(r,mask2),mask2) 32* 33* Initial Version: 17 January 1977 by Richard A. Barnes 34* Modified: 9 March 1977 by RAB to change mod_word handling 35* Modified: 9 March 1977 by RAB to remove some dead code 36* Modified: 9 April 1977 to remove mod_word operator */ 37 38 39 combine_tests: proc(first,last); 40 41 dcl first ptr, /* first component of the if stmt */ 42 last ptr; /* last component of the if stmt */ 43 44 dcl (s1,s2,stop_ptr,r1,r2,o1,o2) ptr; 45 dcl (just_combined,is_next,is_target) bit(1) aligned; 46 dcl (opcode1,opcode2) bit(9) aligned; 47 dcl cfo(2) fixed bin(6); 48 dcl wo(2) fixed bin(18); 49 dcl based_bs bit(36) aligned based; 50 dcl mask bit(36) aligned auto; 51 52 dcl declare_temporary entry(bit(36) aligned,fixed bin(31),fixed bin(15),ptr) returns(ptr); 53 dcl generate_constant entry(bit(*) aligned,fixed bin) returns(ptr); 54 dcl create_operator entry(bit(9) aligned,fixed bin(15)) returns(ptr); 55 dcl create_reference entry(ptr) returns(ptr); 56 dcl share_expression entry(ptr) returns(ptr); 57 dcl adjust_ref_count entry(ptr,fixed bin); 58 dcl free_node entry(ptr); 59 60 dcl (divide,mod,null,substr) builtin; 61 1 1 /* BEGIN INCLUDE FILE ... cgsystem.incl.pl1 */ 1 2 1 3 /* Modified: 25 Apr 1979 by PCK to implement 4-bit decimal */ 1 4 1 5 dcl ( bits_per_char init(9), 1 6 bits_per_half init(18), 1 7 bits_per_word init(36), 1 8 bits_per_two_words init(72), 1 9 bits_per_four_words init(144), 1 10 bits_per_words(2) init(36,72), 1 11 packed_digits_per_char init(2), 1 12 chars_per_word init(4), 1 13 packed_digits_per_word init(8), 1 14 1 15 break_even_bits init(216), 1 16 break_even_words init(6), 1 17 1 18 label_size init(4), 1 19 1 20 convert_size(13:14) init(9,1), 1 21 max_offset(13:14) init(27,35), 1 22 max_short_size(13:14) init(8,72), 1 23 1 24 units_per_word(0:5) init(1,36,8,4,2,1), 1 25 1 26 max_dec_scale init(32), 1 27 min_dec_scale init(-31), 1 28 max_p_xreg init(18), 1 29 max_p_fix_bin_1 init(35), 1 30 max_p_flt_bin_1 init(27), 1 31 max_p_fix_dec init(59), 1 32 max_length_p init(24), 1 33 default_fix_bin_p init(17)) fixed bin(8) int static options(constant); 1 34 1 35 dcl (convert_offset(0:5) init(36,1,4.5,9,18,36), 1 36 bits_per_packed_digit init(4.5)) fixed bin(8,1) int static options(constant); 1 37 1 38 dcl max_index_register_value init(262143) fixed bin(31) int static options(constant); 1 39 1 40 /* END INCLUDE FILE ... cgsystem.incl.pl1 */ 1 41 62 2 1 /* BEGIN INCLUDE FILE ... boundary.incl.pl1 */ 2 2 2 3 /* Modified: 26 Apr 1979 by PCK to implement 4-bit decimal */ 2 4 2 5 dcl ( bit_ init(1), 2 6 digit_ init(2), 2 7 character_ init(3), 2 8 half_ init(4), 2 9 word_ init(5), 2 10 mod2_ init(6), 2 11 mod4_ init(7)) fixed bin(3) int static options(constant); 2 12 2 13 /* END INCLUDE FILE ... boundary.incl.pl1 */ 63 3 1 /* BEGIN INCLUDE FILE ... op_codes.incl.pl1 */ 3 2 3 3 /* Modified: 25 Apr 1979 by PCK 4-bit decimal */ 3 4 /* Modified: 6 Jun 1979 by PG to add rank and byte */ 3 5 /* Modified: 26 Dec 1979 by PCK to add assign_by_name */ 3 6 /* Modified: 26 July 82 BIM wordno, segno */ 3 7 3 8 dcl ( add initial("000010001"b), /* opnd(1) <- opnd(2)+opnd(3) */ 3 9 sub initial("000010010"b), /* opnd(1) <- opnd(2)-opnd(3) */ 3 10 mult initial("000010011"b), /* opnd(1) <- opnd(2)*opnd(3) */ 3 11 div initial("000010100"b), /* opnd(1) <- opnd(2)/opnd(3) */ 3 12 negate initial("000010101"b), /* opnd(1) <- -opnd(2) */ 3 13 exp initial("000010110"b), /* opnd(1) <- opnd(2) ** opnd(3) */ 3 14 3 15 and_bits initial("000100001"b), /* opnd(1) <- opnd(2) & opnd(3) */ 3 16 or_bits initial("000100010"b), /* opnd(1) <- opnd(2)|opnd(3) */ 3 17 xor_bits initial("000100011"b), /* opnd(1) <- opnd(2) xor opnd(3) */ 3 18 not_bits initial("000100100"b), /* opnd(1) <- ^opnd(2) */ 3 19 cat_string initial("000100101"b), /* opnd(1) <- opnd(2)||opnd(3) */ 3 20 bool_fun initial("000100110"b), /* opnd(1) <- bool(opnd(2),opnd(3),opnd(4)) */ 3 21 3 22 assign initial("000110001"b), /* opnd(1) <- opnd(2) */ 3 23 assign_size_ck initial("000110010"b), /* opnd(1) <- opnd(2) */ 3 24 assign_zero initial("000110011"b), /* opnd(1) <- 0 */ 3 25 copy_words initial("000110100"b), /* move opnd(2) to opnd(1) by opnd(3) words */ 3 26 copy_string initial("000110101"b), /* move opnd(2) to opnd(1) by opnd(3) units */ 3 27 make_desc initial("000110110"b), /* opnd(1) <- descriptor(opnd(2),opnd(3)) */ 3 28 assign_round initial("000110111"b), /* opnd(1) <- opnd(2) rounded */ 3 29 pack initial("000111000"b), /* opnd(1) <- encode to picture opnd(2) */ 3 30 unpack initial("000111001"b), /* opnd(1) <- decode from picture opnd(2) */ 3 31 3 32 less_than initial("001000100"b), /* opnd(1) <- opnd(2) < opnd(3) */ 3 33 greater_than initial("001000101"b), /* opnd(1) <- opnd(2) > opnd(3) */ 3 34 equal initial("001000110"b), /* opnd(1) <- opnd(2) = opnd(3) */ 3 35 not_equal initial("001000111"b), /* opnd(1) <- opnd(2) ^= opnd(3) */ 3 36 less_or_equal initial("001001000"b), /* opnd(1) <- opnd(2) <= opnd(3) */ 3 37 greater_or_equal initial("001001001"b), /* opnd(1) <- opnd(2) >= opnd(3) */ 3 38 3 39 jump initial("001010001"b), /* go to opnd(1) unconditionally */ 3 40 jump_true initial("001010010"b), /* go to opnd(1) if opnd(2) is not 0 */ 3 41 jump_false initial("001010011"b), /* go to opnd(1) if opnd(2) is all 0 */ 3 42 jump_if_lt initial("001010100"b), /* go to opnd(1) if opnd(2) < opnd(3) */ 3 43 jump_if_gt initial("001010101"b), /* go to opnd(1) if opnd(2) > opnd(3) */ 3 44 jump_if_eq initial("001010110"b), /* go to opnd(1) if opnd(2) = opnd(3) */ 3 45 jump_if_ne initial("001010111"b), /* go to opnd(1) if opnd(2) ^= opnd(3) */ 3 46 jump_if_le initial("001011000"b), /* go to opnd(1) if opnd(2) <= opnd(3) */ 3 47 jump_if_ge initial("001011001"b), /* go to opnd(1) if opnd(2) >= opnd(3) */ 3 48 3 49 std_arg_list initial("001100001"b), /* opnd(1) <- arglist(opnd(2) desclist(opnd(3))) */ 3 50 return_words initial("001100010"b), /* return aggregate opnd(1), opnd(2) is length in words */ 3 51 std_call initial("001100011"b), /* opnd(1) <- call opnd(2) with opnd(3) */ 3 52 return_bits initial("001100100"b), /* return aggregate opnd(1), opnd(2) is length in bits */ 3 53 std_entry initial("001100101"b), /* entry(opnd(1)... opnd(n)) */ 3 54 return_string initial("001100110"b), /* return string opnd(1) */ 3 55 ex_prologue initial("001100111"b), /* execute the prologue -no operands- */ 3 56 allot_auto initial("001101000"b), /* opnd(1) <- addrel(stack,opnd(2)) */ 3 57 param_ptr initial("001101001"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ 3 58 param_desc_ptr initial("001101010"b), /* opnd(1) <- ptr to opnd(2) in block opnd(3) */ 3 59 std_return initial("001101011"b), /* return -no arguments- */ 3 60 allot_ctl initial("001101100"b), /* allocate opnd(1) , length in words is opnd(2) */ 3 61 free_ctl initial("001101101"b), /* free opnd(1) */ 3 62 stop initial("001101110"b), /* stop - terminate run unit */ 3 63 3 64 mod_bit initial("001110000"b), /* opnd(1) <- mod(opnd(3),36), 3 65* opnd(2) <- opnd(3) / 36 */ 3 66 mod_byte initial("001110001"b), /* opnd(1) <- mod(opnd(3),4), 3 67* opnd(2) <- opnd(3) / 4 */ 3 68 mod_half initial("001110010"b), /* opnd(1) <- mod(opnd(3),2), 3 69* opnd(2) <- opnd(3) / 2 */ 3 70 mod_word initial("001110011"b), /* TO BE DEFINED BY BLW */ 3 71 3 72 bit_to_char initial("010000000"b), /* opnd(1) <- (opnd(2)+8)/9 */ 3 73 bit_to_word initial("010000001"b), /* opnd(1) <- (opnd(2)+35)/36 */ 3 74 char_to_word initial("010000010"b), /* opnd(1) <- (opnd(2)+3)/4 */ 3 75 half_to_word initial("010000011"b), /* opnd(1) <- (opnd(2)+1)/2 */ 3 76 word_to_mod2 initial("010000100"b), /* opnd(1) <- (opnd(2)+1)/2*2 */ 3 77 word_to_mod4 initial("010000101"b), /* opnd(1) <- (opnd(2)+3)/4*4 */ 3 78 word_to_mod8 initial("010000110"b), /* opnd(1) <- (opnd(2)+7)/8*8 */ 3 79 rel_fun initial("010000111"b), /* opnd(1) <- rel(opnd(2)) */ 3 80 baseno_fun initial("010001000"b), /* opnd(1) <- baseno(opnd(2)) */ 3 81 desc_size initial("010001001"b), /* opnd(1) <- substr(opnd(2),13,24) */ 3 82 bit_pointer initial("010001010"b), /* opnd(1) <- bit offset of opnd(2) */ 3 83 index_before_fun initial("010001011"b), /* opnd(1) <- length of before(opnd(2),opnd(3)) */ 3 84 index_after_fun initial("010001100"b), /* opnd(1) <- offset of after(opnd(2),opnd(3)) in opnd(2) */ 3 85 verify_ltrim_fun initial("010001101"b), /* opnd(1) <- offset of ltrim(opnd(2),opnd(3)) in opnd(2) */ 3 86 verify_rtrim_fun initial("010001110"b), /* opnd(1) <- length(opnd(2))-length(rtrim(opnd(2),opnd(3))) */ 3 87 digit_to_bit initial("010001111"b), /* opnd(1) <- 9*opnd(2)/2 */ 3 88 3 89 ceil_fun initial("010010000"b), /* opnd(1) <- ceil(opnd(2)) */ 3 90 floor_fun initial("010010001"b), /* opnd(1) <- floor(opnd(2)) */ 3 91 round_fun initial("010010010"b), /* opnd(1) <- round(opnd(2)) */ 3 92 sign_fun initial("010010011"b), /* opnd(1) <- sign(opnd(2)) */ 3 93 abs_fun initial("010010100"b), /* opnd(1) <- abs(opnd(2)) */ 3 94 trunc_fun initial("010010101"b), /* opnd(1) <- trunc(opnd(2)) */ 3 95 byte_fun initial("010010110"b), /* opnd(1) <- byte(opnd(2)) */ 3 96 rank_fun initial("010010111"b), /* opnd(1) <- rank(opnd(2)) */ 3 97 index_rev_fun initial("010011000"b), /* opnd(1) <- index(reverse(opnd(2)),reverse(opnd(3))) */ 3 98 search_rev_fun initial("010011001"b), /* opnd(1) <- search(reverse(opnd(2)),opnd(3)) */ 3 99 verify_rev_fun initial("010011010"b), /* opnd(1) <- verify(reverse(opnd(2)),opnd(3)) */ 3 100 wordno_fun initial("010011011"b), /* opnd(1) <- wordno (opnd(2)) */ 3 101 segno_fun initial("010011100"b), /* opnd(1) <- segno (opnd(2)) */ 3 102 bitno_fun initial("010011101"b), /* opnd(1) <- bitno (opnd(2)) */ 3 103 charno_fun initial("010011110"b), /* opnd(1) <- charno (opnd(2)) */ 3 104 3 105 index_fun initial("010100000"b), /* opnd(1) <- index(opnd(2),opnd(3)) */ 3 106 off_fun initial("010100001"b), /* opnd(1) <- offset(opnd(2),opnd(3)) */ 3 107 complex_fun initial("010100010"b), /* opnd(1) <- complex(opnd(2),opnd(3)) */ 3 108 conjg_fun initial("010100011"b), /* opnd(1) <- conjg(opnd(2),opnd(3)) */ 3 109 mod_fun initial("010100100"b), /* opnd(1) <- mod(opnd(2),opnd(3)) */ 3 110 repeat_fun initial("010100101"b), /* opnd(1) <- repeat(opnd(2),opnd(3)) */ 3 111 verify_fun initial("010100110"b), /* opnd(1) <- verify(opnd(2),opnd(3)) */ 3 112 translate_fun initial("010100111"b), /* opnd(1) <- translate(opnd(2),opnd(3))*/ 3 113 real_fun initial("010101001"b), /* opnd(1) <- real(opnd(2)) */ 3 114 imag_fun initial("010101010"b), /* opnd(1) <- imag(opnd(2)) */ 3 115 length_fun initial("010101011"b), /* opnd(1) <- length(opnd(2)) */ 3 116 pl1_mod_fun initial("010101100"b), /* opnd(1) <- mod(opnd(2)) */ 3 117 search_fun initial("010101101"b), /* opnd(1) <- search(opnd(2),opnd(3)) */ 3 118 allocation_fun initial("010101110"b), /* opnd(1) <- allocation(opnd(2)) */ 3 119 reverse_fun initial("010101111"b), /* opnd(1) <- reverse(opnd(2)) */ 3 120 3 121 addr_fun initial("010110000"b), /* opnd(1) <- addr(opnd(2)) */ 3 122 addr_fun_bits initial("010110001"b), /* opnd(1) <- addr(opnd(2)) */ 3 123 ptr_fun initial("010110010"b), /* opnd(1) <- ptr(opnd(2),opnd(3)) */ 3 124 baseptr_fun initial("010110011"b), /* opnd(1) <- baseptr(opnd(2)) */ 3 125 addrel_fun initial("010110100"b), /* opnd(1) <- addrel(opnd(2),opnd(3)) */ 3 126 codeptr_fun initial("010110101"b), /* opnd(1) <- codeptr(opnd(2)) */ 3 127 environmentptr_fun initial("010110110"b), /* opnd(1) <- environmentptr(opnd(2)) */ 3 128 stackbaseptr_fun initial("010110111"b), /* opnd(1) is ptr to base of current stack */ 3 129 stackframeptr_fun initial("010111000"b), /* opnd(1) is ptr to current block's stack frame */ 3 130 setcharno_fun initial("010111001"b), /* opnd(1) <- opnd(2) with charno opnd(3) */ 3 131 addcharno_fun initial("010111010"b), /* opnd(1) <- opnd(2) with charno = charno + opnd(3) */ 3 132 setbitno_fun initial("010111011"b), /* setcharno for bitsno */ 3 133 addbitno_fun initial("010111100"b), /* addcharno for bitno */ 3 134 3 135 min_fun initial("011000000"b), /* opnd(1) <- min(opnd(1),opnd(2),...) */ 3 136 max_fun initial("011000001"b), /* opnd(1) <- max(opnd(1),opnd(2),...) */ 3 137 3 138 stack_ptr initial("011010001"b), /* opnd(1) <- stack frame ptr */ 3 139 empty_area initial("011010010"b), /* empty opnd(1), length in words is opnd(2) */ 3 140 enable_on initial("011010100"b), /* opnd(1) is the cond name 3 141* opnd(2) is the file name 3 142* opnd(3) is the block */ 3 143 revert_on initial("011010101"b), /* opnd(1) is the cond name, 3 144* opnd(2) is the file name */ 3 145 signal_on initial("011010110"b), /* opnd(1) is the cond name 3 146* opnd(2) is the file name */ 3 147 3 148 lock_fun initial("011010111"b), /* opnd(1) <- stac(opnd(2),opnd(3)) */ 3 149 stacq_fun initial("011011000"b), /* opnd(1) is result, opnd(2) is ptr to lock word, 3 150* opnd(3) is old value, (4) is new value. */ 3 151 clock_fun initial("011011001"b), /* opnd(1) is the clock time */ 3 152 vclock_fun initial("011011010"b), /* opnd(1) is the virtual clock time */ 3 153 3 154 bound_ck initial("011100000"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ 3 155 range_ck initial("011100001"b), /* opnd(1) <- opnd(2) if opnd(3) <= opnd(2) <= opnd(4) */ 3 156 loop initial("011100010"b), /* do opnd(1) for opnd(2) from opnd(3) to opnd(4) by 1, 3 157* opnd(5) is the list */ 3 158 join initial("011100011"b), /* do opnd(1), opnd(2) ... opnd(n) */ 3 159 allot_based initial("011100100"b), /* allocate opnd(2) words in opnd(3), set opnd(1) */ 3 160 free_based initial("011100101"b), /* free opnd(1) in opnd(3), length is opnd(2) words */ 3 161 3 162 r_parn initial("011110001"b), /* format op code */ 3 163 l_parn initial("011110010"b), 3 164 r_format initial("011110011"b), 3 165 c_format initial("011110100"b), 3 166 f_format initial("011110101"b), 3 167 e_format initial("011110110"b), 3 168 b_format initial("011110111"b), 3 169 a_format initial("011111000"b), 3 170 x_format initial("011111001"b), 3 171 skip_format initial("011111010"b), 3 172 column_format initial("011111011"b), 3 173 page_format initial("011111100"b), 3 174 line_format initial("011111101"b), 3 175 picture_format initial("011111110"b), 3 176 bn_format initial("011111111"b), /* bit format, length(opnd(2)), radix factor(opnd(3)) */ 3 177 3 178 get_list_trans initial("100000000"b), /* getlist(opnd(2) with desc(opnd(1))) */ 3 179 get_edit_trans initial("100000001"b), /* getedit(opnd(2) with desc(opnd(1))) */ 3 180 get_data_trans initial("100000010"b), /* getdata(opnd(1) to opnd(n)) */ 3 181 put_list_trans initial("100000011"b), /* putlist(opnd(2) with desc(opnd(1))) */ 3 182 put_edit_trans initial("100000100"b), /* putedit(opnd(2) with desc(opnd(1))) */ 3 183 put_data_trans initial("100000101"b), /* putdata(opnd(2)) with subscript-list opnd(1) */ 3 184 terminate_trans initial("100000110"b), /* terminate stream transmission */ 3 185 stream_prep initial("100000111"b), /* initiate stream transmission */ 3 186 record_io initial("100001000"b), /* perform record io operation */ 3 187 fortran_read initial("100001001"b), /* A complete read statement */ 3 188 fortran_write initial("100001010"b), /* A complete write statement */ 3 189 ftn_file_manip initial("100001011"b), /* endfile,backspace,rewind,etc. */ 3 190 ftn_trans_loop initial("100001100"b), /* An implied do in i/o list */ 3 191 put_control initial("100001101"b), /* put control opnd(1) opnd(2) times */ 3 192 put_field initial("100001110"b), /* putlist(opnd(2)) of length(opnd(1)) */ 3 193 put_field_chk initial("100001111"b), /* putlist(op(2)) of len(op(1)) check char index(op(3)) */ 3 194 3 195 /* These operators are produced by the parse but are not used as input to the code generator. */ 3 196 /* They are processed by the semantic translator. */ 3 197 3 198 return_value initial("100010010"b), /* return(opnd(1)) */ 3 199 allot_var initial("100010011"b), /* allot opnd(1) in opnd(2) */ 3 200 free_var initial("100010100"b), /* free opnd(1) out of opnd(2) */ 3 201 get_file initial("100010101"b), /* opnd(1) is filename,opnd(2) is copy */ 3 202 /* opnd(3) is skip, opnd(4) is list */ 3 203 get_string initial("100010110"b), /* opnd(1) is string,opnd(2) is list */ 3 204 put_file initial("100010111"b), /* opnd(1) is filename,opnd(2) is page */ 3 205 /* opnd(3) is skip,opnd(4) is line */ 3 206 put_string initial("100011000"b), /* opnd(1) is string,opnd(2) is list */ 3 207 open_file initial("100011001"b), 3 208 close_file initial("100011010"b), 3 209 read_file initial("100011011"b), 3 210 write_file initial("100011100"b), 3 211 locate_file initial("100011101"b), 3 212 do_fun initial("100011110"b), /* opnd(1) is join of a list */ 3 213 /* opnd(2) is control variable ref */ 3 214 /* opnd(3) is specification operator */ 3 215 do_spec initial("100011111"b), /* opnd(1) to opnd(2) by opnd(3) */ 3 216 /* repeat opnd(4) while opnd(5) */ 3 217 /* opnd(6) is next specification */ 3 218 3 219 rewrite_file initial("100100000"b), 3 220 delete_file initial("100100001"b), 3 221 unlock_file initial("100100010"b), 3 222 lock_file initial("100100011"b), 3 223 refer initial("100100101"b), /* opnd(1) refer(opnd(2)) */ 3 224 prefix_plus initial("100100110"b), /* opnd(1) <- +opnd(2) */ 3 225 nop initial("100100111"b), /* no-op */ 3 226 assign_by_name initial("100101000"b), /* opnd(1) <- opnd(2),by name */ 3 227 3 228 /* These operators are produced by the semantic translator in processing the math 3 229* builtin functions and are used as input to the code generator */ 3 230 3 231 sqrt_fun initial("100110000"b), /* opnd(1) <- sqrt(opnd(2)) */ 3 232 sin_fun initial("100110001"b), /* opnd(1) <- sin(opnd(2)) */ 3 233 sind_fun initial("100110010"b), /* opnd(1) <- sind(opnd(2)) */ 3 234 cos_fun initial("100110011"b), /* opnd(1) <- cos(opnd(2)) */ 3 235 cosd_fun initial("100110100"b), /* opnd(1) <- cosd(opnd(2)) */ 3 236 tan_fun initial("100110101"b), /* opnd(1) <- tan(opnd(2)) */ 3 237 tand_fun initial("100110110"b), /* opnd(1) <- tand(opnd(2)) */ 3 238 asin_fun initial("100110111"b), /* opnd(1) <- asin(opnd(2)) */ 3 239 asind_fun initial("100111000"b), /* opnd(1) <- asind(opnd(2)) */ 3 240 acos_fun initial("100111001"b), /* opnd(1) <- acos(opnd(2)) */ 3 241 acosd_fun initial("100111010"b), /* opnd(1) <- acosd(opnd(2)) */ 3 242 atan_fun initial("100111011"b), /* opnd(1) <- atan(opnd(2)[,opnd(3)]) */ 3 243 atand_fun initial("100111100"b), /* opnd(1) <- atand(opnd(2)[,opnd(3)]) */ 3 244 log2_fun initial("100111101"b), /* opnd(1) <- log2(opnd(2)) */ 3 245 log_fun initial("100111110"b), /* opnd(1) <- log(opnd(2)) */ 3 246 log10_fun initial("100111111"b), /* opnd(1) <- log10(opnd(2)) */ 3 247 3 248 exp_fun initial("101000000"b)) /* opnd(1) <- exp(opnd(2)) */ 3 249 3 250 bit(9) aligned internal static options(constant); 3 251 3 252 /* END INCLUDE FILE ... op_codes.incl.pl1 */ 64 4 1 /* BEGIN INCLUDE FILE ... nodes.incl.pl1 */ 4 2 4 3 /* Modified: 26 Dec 1979 by PCK to implement by name assignment */ 4 4 4 5 dcl ( block_node initial("000000001"b), 4 6 statement_node initial("000000010"b), 4 7 operator_node initial("000000011"b), 4 8 reference_node initial("000000100"b), 4 9 token_node initial("000000101"b), 4 10 symbol_node initial("000000110"b), 4 11 context_node initial("000000111"b), 4 12 array_node initial("000001000"b), 4 13 bound_node initial("000001001"b), 4 14 format_value_node initial("000001010"b), 4 15 list_node initial("000001011"b), 4 16 default_node initial("000001100"b), 4 17 machine_state_node initial("000001101"b), 4 18 source_node initial("000001110"b), 4 19 label_node initial("000001111"b), 4 20 cross_reference_node initial("000010000"b), 4 21 sf_par_node initial("000010001"b), 4 22 temporary_node initial("000010010"b), 4 23 label_array_element_node initial("000010011"b), 4 24 by_name_agg_node initial("000010100"b)) 4 25 bit(9) internal static aligned options(constant); 4 26 4 27 dcl 1 node based aligned, 4 28 2 type unal bit(9), 4 29 2 source_id unal structure, 4 30 3 file_number bit(8), 4 31 3 line_number bit(14), 4 32 3 statement_number bit(5); 4 33 4 34 /* END INCLUDE FILE ... nodes.incl.pl1 */ 65 5 1 dcl 1 label based aligned, 5 2 2 node_type bit(9) unaligned, 5 3 2 source_id structure unaligned, 5 4 3 file_number bit(8), 5 5 3 line_number bit(14), 5 6 3 statement_number bit(5), 5 7 2 location fixed(17) unaligned, 5 8 2 allocated bit(1) unaligned, 5 9 2 dcl_type bit(3) unaligned, 5 10 2 reserved bit(29) unaligned, 5 11 2 array bit(1) unaligned, 5 12 2 used_as_format bit(1) unaligned, 5 13 2 used_in_goto bit(1) unaligned, 5 14 2 symbol_table bit(18) unaligned, 5 15 2 low_bound fixed(17) unaligned, 5 16 2 high_bound fixed(17) unaligned, 5 17 2 block_node ptr unaligned, 5 18 2 token ptr unaligned, 5 19 2 next ptr unaligned, 5 20 2 multi_use ptr unaligned, 5 21 2 cross_reference ptr unaligned, 5 22 2 statement ptr unaligned; 66 6 1 /* BEGIN INCLUDE FILE ... list.incl.pl1 */ 6 2 6 3 /* Modified 26 June 81 by EBush to add max_list_elements */ 6 4 6 5 6 6 dcl 1 list based aligned, 6 7 2 node_type bit(9) unaligned, 6 8 2 reserved bit(12) unaligned, 6 9 2 number fixed(14) unaligned, 6 10 2 element dimension(n refer(list.number)) ptr unaligned; 6 11 6 12 dcl max_list_elements fixed bin(17) internal static options (constant) 6 13 init(16383); 6 14 6 15 /* END INCLUDE FILE ... list.incl.pl1 */ 67 7 1 /* BEGIN INCLUDE FILE ... symbol.incl.pl1 */ 7 2 7 3 dcl 1 symbol based aligned, 7 4 2 node_type bit(9) unal, 7 5 2 source_id structure unal, 7 6 3 file_number bit(8), 7 7 3 line_number bit(14), 7 8 3 statement_number bit(5), 7 9 2 location fixed(18) unal unsigned, 7 10 2 allocated bit(1) unal, 7 11 2 dcl_type bit(3) unal, 7 12 2 reserved bit(6) unal, 7 13 2 pix unal, 7 14 3 pic_fixed bit(1) unal, 7 15 3 pic_float bit(1) unal, 7 16 3 pic_char bit(1) unal, 7 17 3 pic_scale fixed(7) unal, 7 18 3 pic_size fixed(7) unal, 7 19 2 level fixed(8) unal, 7 20 2 boundary fixed(3) unal, 7 21 2 size_units fixed(3) unal, 7 22 2 scale fixed(7) unal, 7 23 2 runtime bit(18) unal, 7 24 2 runtime_offset bit(18) unal, 7 25 2 block_node ptr unal, 7 26 2 token ptr unal, 7 27 2 next ptr unal, 7 28 2 multi_use ptr unal, 7 29 2 cross_references ptr unal, 7 30 2 initial ptr unal, 7 31 2 array ptr unal, 7 32 2 descriptor ptr unal, 7 33 2 equivalence ptr unal, 7 34 2 reference ptr unal, 7 35 2 general ptr unal, 7 36 2 father ptr unal, 7 37 2 brother ptr unal, 7 38 2 son ptr unal, 7 39 2 word_size ptr unal, 7 40 2 bit_size ptr unal, 7 41 2 dcl_size ptr unal, 7 42 2 symtab_size ptr unal, 7 43 2 c_word_size fixed(24), 7 44 2 c_bit_size fixed(24), 7 45 2 c_dcl_size fixed(24), 7 46 7 47 2 attributes structure aligned, 7 48 3 data_type structure unal, 7 49 4 structure bit(1) , 7 50 4 fixed bit(1), 7 51 4 float bit(1), 7 52 4 bit bit(1), 7 53 4 char bit(1), 7 54 4 ptr bit(1), 7 55 4 offset bit(1), 7 56 4 area bit(1), 7 57 4 label bit(1), 7 58 4 entry bit(1), 7 59 4 file bit(1), 7 60 4 arg_descriptor bit(1), 7 61 4 storage_block bit(1), 7 62 4 explicit_packed bit(1), /* options(packed) */ 7 63 4 condition bit(1), 7 64 4 format bit(1), 7 65 4 builtin bit(1), 7 66 4 generic bit(1), 7 67 4 picture bit(1), 7 68 7 69 3 misc_attributes structure unal, 7 70 4 dimensioned bit(1), 7 71 4 initialed bit(1), 7 72 4 aligned bit(1), 7 73 4 unaligned bit(1), 7 74 4 signed bit(1), 7 75 4 unsigned bit(1), 7 76 4 precision bit(1), 7 77 4 varying bit(1), 7 78 4 local bit(1), 7 79 4 decimal bit(1), 7 80 4 binary bit(1), 7 81 4 real bit(1), 7 82 4 complex bit(1), 7 83 4 variable bit(1), 7 84 4 reducible bit(1), 7 85 4 irreducible bit(1), 7 86 4 returns bit(1), 7 87 4 position bit(1), 7 88 4 internal bit(1), 7 89 4 external bit(1), 7 90 4 like bit(1), 7 91 4 member bit(1), 7 92 4 non_varying bit(1), 7 93 4 options bit(1), 7 94 4 variable_arg_list bit(1), /* options(variable) */ 7 95 4 alloc_in_text bit(1), /* options(constant) */ 7 96 7 97 3 storage_class structure unal, 7 98 4 auto bit(1), 7 99 4 based bit(1), 7 100 4 static bit(1), 7 101 4 controlled bit(1), 7 102 4 defined bit(1), 7 103 4 parameter bit(1), 7 104 4 param_desc bit(1), 7 105 4 constant bit(1), 7 106 4 temporary bit(1), 7 107 4 return_value bit(1), 7 108 7 109 3 file_attributes structure unal, 7 110 4 print bit(1), 7 111 4 input bit(1), 7 112 4 output bit(1), 7 113 4 update bit(1), 7 114 4 stream bit(1), 7 115 4 reserved_1 bit(1), 7 116 4 record bit(1), 7 117 4 sequential bit(1), 7 118 4 direct bit(1), 7 119 4 interactive bit(1), /* env(interactive) */ 7 120 4 reserved_2 bit(1), 7 121 4 reserved_3 bit(1), 7 122 4 stringvalue bit(1), /* env(stringvalue) */ 7 123 4 keyed bit(1), 7 124 4 reserved_4 bit(1), 7 125 4 environment bit(1), 7 126 7 127 3 compiler_developed structure unal, 7 128 4 aliasable bit(1), 7 129 4 packed bit(1), 7 130 4 passed_as_arg bit(1), 7 131 4 allocate bit(1), 7 132 4 set bit(1), 7 133 4 exp_extents bit(1), 7 134 4 refer_extents bit(1), 7 135 4 star_extents bit(1), 7 136 4 isub bit(1), 7 137 4 put_in_symtab bit(1), 7 138 4 contiguous bit(1), 7 139 4 put_data bit(1), 7 140 4 overlayed bit(1), 7 141 4 error bit(1), 7 142 4 symtab_processed bit(1), 7 143 4 overlayed_by_builtin bit(1), 7 144 4 defaulted bit(1), 7 145 4 connected bit(1); 7 146 7 147 /* END INCLUDE FILE ... symbol.incl.pl1 */ 68 8 1 /* BEGIN INCLUDE FILE ... reference.incl.pl1 */ 8 2 8 3 dcl 1 reference based aligned, 8 4 2 node_type bit(9) unaligned, 8 5 2 array_ref bit(1) unaligned, 8 6 2 varying_ref bit(1) unaligned, 8 7 2 shared bit(1) unaligned, 8 8 2 put_data_sw bit(1) unaligned, 8 9 2 processed bit(1) unaligned, 8 10 2 units fixed(3) unaligned, 8 11 2 ref_count fixed(17) unaligned, 8 12 2 c_offset fixed(24), 8 13 2 c_length fixed(24), 8 14 2 symbol ptr unaligned, 8 15 2 qualifier ptr unaligned, 8 16 2 offset ptr unaligned, 8 17 2 length ptr unaligned, 8 18 2 subscript_list ptr unaligned, 8 19 /* these fields are used by the 645 code generator */ 8 20 2 address structure unaligned, 8 21 3 base bit(3), 8 22 3 offset bit(15), 8 23 3 op bit(9), 8 24 3 no_address bit(1), 8 25 3 inhibit bit(1), 8 26 3 ext_base bit(1), 8 27 3 tag bit(6), 8 28 2 info structure unaligned, 8 29 3 address_in structure, 8 30 4 b dimension(0:7) bit(1), 8 31 4 storage bit(1), 8 32 3 value_in structure, 8 33 4 a bit(1), 8 34 4 q bit(1), 8 35 4 aq bit(1), 8 36 4 string_aq bit(1), 8 37 4 complex_aq bit(1), 8 38 4 decimal_aq bit(1), 8 39 4 b dimension(0:7) bit(1), 8 40 4 storage bit(1), 8 41 4 indicators bit(1), 8 42 4 x dimension(0:7) bit(1), 8 43 3 other structure, 8 44 4 big_offset bit(1), 8 45 4 big_length bit(1), 8 46 4 modword_in_offset bit(1), 8 47 2 data_type fixed(5) unaligned, 8 48 2 bits structure unaligned, 8 49 3 padded_ref bit(1), 8 50 3 aligned_ref bit(1), 8 51 3 long_ref bit(1), 8 52 3 forward_ref bit(1), 8 53 3 ic_ref bit(1), 8 54 3 temp_ref bit(1), 8 55 3 defined_ref bit(1), 8 56 3 evaluated bit(1), 8 57 3 allocate bit(1), 8 58 3 allocated bit(1), 8 59 3 aliasable bit(1), 8 60 3 even bit(1), 8 61 3 perm_address bit(1), 8 62 3 aggregate bit(1), 8 63 3 hit_zero bit(1), 8 64 3 dont_save bit(1), 8 65 3 fo_in_qual bit(1), 8 66 3 hard_to_load bit(1), 8 67 2 relocation bit(12) unaligned, 8 68 2 more_bits structure unaligned, 8 69 3 substr bit(1), 8 70 3 padded_for_store_ref bit(1), 8 71 3 aligned_for_store_ref bit(1), 8 72 3 mbz bit(15), 8 73 2 store_ins bit(18) unaligned; 8 74 8 75 /* END INCLUDE FILE ... reference.incl.pl1 */ 69 9 1 /* BEGIN INCLUDE FILE ... operator.incl.pl1 */ 9 2 9 3 /* Modified: 2 Apr 1980 by PCK to add max_number_of_operands */ 9 4 9 5 /* format: style3 */ 9 6 dcl 1 operator based aligned, 9 7 2 node_type bit (9) unaligned, 9 8 2 op_code bit (9) unaligned, 9 9 2 shared bit (1) unaligned, 9 10 2 processed bit (1) unaligned, 9 11 2 optimized bit (1) unaligned, 9 12 2 number fixed (14) unaligned, 9 13 2 operand dimension (n refer (operator.number)) ptr unaligned; 9 14 9 15 dcl max_number_of_operands 9 16 fixed bin (15) int static options (constant) initial (32767); 9 17 9 18 /* END INCLUDE FILE ... operator.incl.pl1 */ 70 10 1 /* *********************************************************** 10 2* * * 10 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 10 4* * * 10 5* *********************************************************** */ 10 6 /* BEGIN INCLUDE FILE ... statement.incl.pl1 */ 10 7 /* Internal interface of the PL/I compiler */ 10 8 10 9 dcl 1 statement based aligned, 10 10 2 node_type bit(9) unaligned, 10 11 2 source_id structure unaligned, 10 12 3 file_number bit(8), 10 13 3 line_number bit(14), 10 14 3 statement_number bit(5), 10 15 2 next ptr unaligned, 10 16 2 back ptr unaligned, 10 17 2 root ptr unaligned, 10 18 2 labels ptr unaligned, 10 19 2 reference_list ptr unaligned, 10 20 2 state_list ptr unaligned, 10 21 2 reference_count fixed(17) unaligned, 10 22 2 ref_count_copy fixed(17) unaligned, 10 23 2 object structure unaligned, 10 24 3 start fixed(17), 10 25 3 finish fixed(17), 10 26 2 source structure unaligned, 10 27 3 segment fixed(11), 10 28 3 start fixed(23), 10 29 3 length fixed(11), 10 30 2 prefix bit(12) unaligned, 10 31 2 optimized bit(1) unaligned, 10 32 2 free_temps bit(1) unaligned, 10 33 2 LHS_in_RHS bit(1) unaligned, 10 34 2 statement_type bit(9) unaligned, 10 35 2 bits structure unaligned, 10 36 3 processed bit(1) unaligned, 10 37 3 put_in_profile bit(1) unaligned, 10 38 3 generated bit(1) unaligned, 10 39 3 snap bit(1) unaligned, 10 40 3 system bit(1) unaligned, 10 41 3 irreducible bit(1) unaligned, 10 42 3 checked bit(1) unaligned, 10 43 3 save_temps bit(1) unaligned, 10 44 3 suppress_warnings bit(1) unaligned, 10 45 3 force_nonquick bit(1) unaligned, 10 46 3 expanded_by_name bit(1) unaligned, 10 47 3 begins_loop bit(1) unaligned, 10 48 3 pad bit(24) unaligned; 10 49 10 50 /* END INCLUDE FILE ... statement.incl.pl1 */ 71 11 1 /* BEGIN INCLUDE FILE ... mask.incl.pl1 */ 11 2 11 3 dcl ( structure_mask init("100000000000000000000000000000000000"b), 11 4 fixed_mask init("010000000000000000000000000000000000"b), 11 5 float_mask init("001000000000000000000000000000000000"b), 11 6 bit_mask init("000100000000000000000000000000000000"b), 11 7 char_mask init("000010000000000000000000000000000000"b), 11 8 ptr_mask init("000001000000000000000000000000000000"b), 11 9 offset_mask init("000000100000000000000000000000000000"b), 11 10 area_mask init("000000010000000000000000000000000000"b), 11 11 label_mask init("000000001000000000000000000000000000"b), 11 12 entry_mask init("000000000100000000000000000000000000"b), 11 13 file_mask init("000000000010000000000000000000000000"b), 11 14 arg_descriptor_mask init("000000000001000000000000000000000000"b), 11 15 storage_block_mask init("000000000000100000000000000000000000"b), 11 16 lock_mask init("000000000000010000000000000000000000"b), 11 17 condition_mask init("000000000000001000000000000000000000"b), 11 18 format_mask init("000000000000000100000000000000000000"b), 11 19 builtin_mask init("000000000000000010000000000000000000"b), 11 20 generic_mask init("000000000000000001000000000000000000"b), 11 21 picture_mask init("000000000000000000100000000000000000"b), 11 22 dimensioned_mask init("000000000000000000010000000000000000"b), 11 23 initialed_mask init("000000000000000000001000000000000000"b), 11 24 aligned_mask init("000000000000000000000100000000000000"b), 11 25 unaligned_mask init("000000000000000000000010000000000000"b), 11 26 signed_mask init("000000000000000000000001000000000000"b), 11 27 unsigned_mask init("000000000000000000000000100000000000"b), 11 28 precision_mask init("000000000000000000000000010000000000"b), 11 29 varying_mask init("000000000000000000000000001000000000"b), 11 30 local_mask init("000000000000000000000000000100000000"b), 11 31 decimal_mask init("000000000000000000000000000010000000"b), 11 32 binary_mask init("000000000000000000000000000001000000"b), 11 33 real_mask init("000000000000000000000000000000100000"b), 11 34 complex_mask init("000000000000000000000000000000010000"b), 11 35 variable_mask init("000000000000000000000000000000001000"b), 11 36 reducible_mask init("000000000000000000000000000000000100"b), 11 37 irreducible_mask init("000000000000000000000000000000000010"b), 11 38 returns_mask init("000000000000000000000000000000000001"b)) bit(36) aligned int static 11 39 options(constant); 11 40 11 41 dcl ( arithmetic_mask init("011000000000000000000000000011110000"b), 11 42 computational_mask init("011110000000000000100000000011110000"b), 11 43 fixed_binary_real_mask init("010000000000000000000000000001100000"b), 11 44 fixed_decimal_real_mask init("010000000000000000000000000010100000"b), 11 45 float_decimal_real_mask init("001000000000000000000000000010100000"b), 11 46 fixed_decimal_complex_mask init("010000000000000000000000000010010000"b), 11 47 float_decimal_complex_mask init("001000000000000000000000000010010000"b), 11 48 string_mask init("000110000000000000000000000000000000"b), 11 49 undesirable_mask init("111111111111111111100111110111110111"b), 11 50 convert_mask init("011111111111111111100111110111111110"b), 11 51 declare_constant_mask init("111111111111111111100000000011110000"b) 11 52 ) bit(36) aligned int static 11 53 options(constant); 11 54 11 55 /* END INCLUDE FILE ... mask.incl.pl1 */ 72 73 74 just_combined = "0"b; 75 stop_ptr = first; 76 77 do s2 = last repeat s1 while (s2 ^= stop_ptr); 78 s1 = s2 -> statement.back; 79 80 if s2 -> statement.labels = null 81 then do; 82 o2 = s2 -> statement.root; 83 opcode2 = o2 -> operator.op_code; 84 85 if just_combined 86 then r2 = o2 -> operand(2) -> operand(2); 87 else do; 88 if opcode2 ^= jump_true & opcode2 ^= jump_false 89 then goto next; 90 r2 = o2 -> operand(2); 91 if ^ candidate(r2) 92 then goto next; 93 end; 94 95 o1 = s1 -> statement.root; 96 r1 = o1 -> operand(2); 97 opcode1 = o1 -> operator.op_code; 98 99 if opcode1 = jump_true | opcode1 = jump_false 100 then if candidate(r1) 101 then if same_word(r1,r2) 102 then do; 103 is_target = o1 -> operand(1) = o2 -> operand(1); 104 is_next = "0"b; 105 if o1 -> operand(1) -> node.type = label_node 106 then if o1 -> operand(1) -> label.statement = s2 -> statement.next 107 then is_next = "1"b; 108 109 if just_combined 110 then do; 111 if opcode1 = jump_true 112 & ((opcode2 = jump_true & is_target) | (opcode2 = jump_false & is_next)) 113 | opcode1 = jump_false 114 & ((opcode2 = jump_if_eq & is_next) | (opcode2 = jump_if_ne & is_target)) 115 then do; 116 call continue_combining; 117 go to step; 118 end; 119 end; 120 121 else do; 122 if opcode1 = jump_true 123 then if opcode2 = jump_true 124 then if is_target 125 then do; 126 call combine(jump_true,2); 127 go to step; 128 end; 129 else; 130 else if is_next 131 then do; 132 call combine(jump_false,2); 133 go to step; 134 end; 135 else; 136 else if opcode2 = jump_true 137 then if is_next 138 then do; 139 call combine(jump_if_eq,3); 140 go to step; 141 end; 142 else; 143 else if is_target 144 then do; 145 call combine(jump_if_ne,3); 146 go to step; 147 end; 148 end; 149 end; 150 end; 151 152 next: just_combined = "0"b; 153 step: 154 end; 155 156 return; 157 158 159 candidate: proc(p) returns(bit(1) aligned); 160 161 dcl p ptr; /* ptr to node that might be a candidate */ 162 163 if p -> node.type = reference_node 164 then if p -> reference.c_length = 1 165 then if p -> reference.symbol -> symbol.packed 166 then if ^ p -> reference.fo_in_qual & ^ p -> reference.padded_ref & ^ p -> reference.aligned_ref 167 then if p -> reference.units = 0 | p -> reference.units = word_ 168 | p -> reference.offset = null | p -> reference.modword_in_offset 169 then return("1"b); 170 171 return("0"b); 172 173 end; 174 175 176 same_word: proc(p1,p2) returns(bit(1) aligned); 177 178 dcl (p1,p2) ptr; 179 180 dcl (r(2),adam(2),a) ptr; 181 dcl i fixed bin; 182 183 r(1) = p1; 184 r(2) = p2; 185 186 if r(1) -> reference.offset = r(2) -> reference.offset 187 & r(1) -> reference.qualifier = r(2) -> reference.qualifier 188 then do; 189 do i = 1 to 2; 190 wo(i) = divide(r(i) -> reference.c_offset,units_per_word(r(i) -> reference.units),18,0); 191 cfo(i) = mod(r(i) -> reference.c_offset * convert_offset(r(i) -> reference.units), bits_per_word); 192 if cfo(i) ^= 0 193 then if r(i) -> reference.c_offset < 0 194 then wo(i) = wo(i) - 1; 195 196 do a = r(i) -> reference.symbol repeat a -> symbol.father 197 while (a -> symbol.father ^= null); 198 end; 199 adam(i) = a; 200 end; 201 202 if wo(1) = wo(2) & adam(1) = adam(2) 203 then return("1"b); 204 end; 205 206 return("0"b); 207 208 end; 209 210 211 continue_combining: proc; 212 213 dcl p ptr; 214 215 mask = o2 -> operand(2) -> operand(3) -> reference.symbol -> symbol.initial -> based_bs; 216 substr(mask,cfo(1)+1,1) = "1"b; 217 p = generate_constant(mask,1); 218 o2 -> operand(2) -> operand(3) = p; 219 if o2 -> operator.number = 3 220 then o2 -> operand(3) = p; 221 222 call merge_and_unthread; 223 224 just_combined = "1"b; 225 226 end; 227 228 229 combine: proc(op_code,num); 230 231 dcl op_code bit(9) aligned, 232 num fixed bin(15); 233 234 dcl (a,p,r,m) ptr; 235 236 if num ^= 2 237 then do; 238 p = create_operator(op_code,num); 239 p -> operand(1) = o2 -> operand(1); 240 call free_node(o2); 241 o2 = p; 242 end; 243 else /* o2 -> operator.op_code = op_code */ ; 244 245 r = create_reference(null); 246 r -> reference = r2 -> reference; 247 if ^ r -> reference.shared 248 then do; 249 r -> reference.ref_count = 1; 250 if r -> reference.qualifier ^= null 251 then r -> reference.qualifier = share_expression((r -> reference.qualifier)); 252 if r -> reference.offset ^= null 253 then r -> reference.offset = share_expression((r -> reference.offset)); 254 call adjust_ref_count(r2,-1); 255 end; 256 257 r -> reference.c_length = bits_per_word; 258 259 if r -> reference.units ^= 0 & r -> reference.units < word_ 260 then do; 261 r -> reference.units = word_; 262 r -> reference.c_offset = wo(2); 263 r -> reference.modword_in_offset = "0"b; 264 end; 265 266 a = create_operator(and_bits,3); 267 a -> operand(2) = r; 268 a -> operand(1) = declare_temporary(bit_mask|aligned_mask,(bits_per_word),0,null); 269 270 mask = (36)"0"b; 271 substr(mask,cfo(1)+1,1) = "1"b; 272 substr(mask,cfo(2)+1,1) = "1"b; 273 p = generate_constant(mask,1); 274 a -> operand(3) = p; 275 276 o2 -> operand(2) = a; 277 if num > 2 278 then o2 -> operand(3) = p; 279 280 call merge_and_unthread; 281 282 just_combined = "1"b; 283 284 end; 285 286 287 merge_and_unthread: proc; 288 289 /* moves operator from s2 to s1, unthreads s2, and frees tree 290* originally hanging from s1 */ 291 292 s1 -> statement.root = o2; 293 call free_node(s2); 294 295 call decrement_target_expression((o1 -> operand(1))); 296 if ^ o1 -> operand(2) -> reference.shared 297 then call adjust_ref_count((o1 -> operand(2)), -1); 298 call free_node(o1); 299 300 end; 301 302 303 decrement_target_expression: proc(pt); 304 305 dcl (p,pt,s,vector,l) ptr; 306 dcl i fixed bin; 307 308 /* operator_semantics has ensured that the target of a conditional 309* jump will not be an operator nor a reference with expressions 310* hanging off it */ 311 312 p = pt; 313 314 if p -> node.type = label_node 315 then do; 316 s = p -> label.statement; 317 s -> statement.reference_count = s -> statement.reference_count - 1; 318 return; 319 end; 320 321 if p -> node.type = reference_node 322 then if p -> reference.symbol ^= null 323 then if p -> reference.symbol -> node.type = label_node 324 then do; 325 l = p -> reference.symbol; 326 vector = l -> label.statement; 327 328 s = vector -> element(p -> reference.c_offset + 1); 329 s -> statement.reference_count = s -> statement.reference_count - 1; 330 end; 331 332 call adjust_ref_count(p,-1); 333 334 end; 335 336 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/18/00 1057.3 combine_tests.pl1 >udd>sm>ds>w>ml>combine_tests.pl1 62 1 10/25/79 1745.8 cgsystem.incl.pl1 >ldd>incl>cgsystem.incl.pl1 63 2 10/25/79 1745.8 boundary.incl.pl1 >ldd>incl>boundary.incl.pl1 64 3 04/07/83 1735.0 op_codes.incl.pl1 >ldd>incl>op_codes.incl.pl1 65 4 07/21/80 1646.3 nodes.incl.pl1 >ldd>incl>nodes.incl.pl1 66 5 05/06/74 1842.1 label.incl.pl1 >ldd>incl>label.incl.pl1 67 6 08/13/81 2311.5 list.incl.pl1 >ldd>incl>list.incl.pl1 68 7 12/07/83 1801.7 symbol.incl.pl1 >ldd>incl>symbol.incl.pl1 69 8 07/21/80 1646.3 reference.incl.pl1 >ldd>incl>reference.incl.pl1 70 9 07/21/80 1646.3 operator.incl.pl1 >ldd>incl>operator.incl.pl1 71 10 04/07/83 1735.0 statement.incl.pl1 >ldd>incl>statement.incl.pl1 72 11 11/30/78 1327.5 mask.incl.pl1 >ldd>incl>mask.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. a 000156 automatic pointer dcl 180 in procedure "same_word" set ref 196* 196* 198 199 a 000200 automatic pointer dcl 234 in procedure "combine" set ref 266* 267 268 274 276 adam 000152 automatic pointer array dcl 180 set ref 199* 202 202 adjust_ref_count 000022 constant entry external dcl 57 ref 254 296 332 aligned_mask constant bit(36) initial dcl 11-3 ref 268 aligned_ref 12(07) based bit(1) level 3 packed packed unaligned dcl 8-3 set ref 163 and_bits 000004 constant bit(9) initial dcl 3-8 set ref 266* attributes 31 based structure level 2 dcl 7-3 back 2 based pointer level 2 packed packed unaligned dcl 10-9 ref 78 based_bs based bit(36) dcl 49 ref 215 bit_mask constant bit(36) initial dcl 11-3 ref 268 bits 12(06) based structure level 2 packed packed unaligned dcl 8-3 bits_per_word 001273 constant fixed bin(8,0) initial dcl 1-5 ref 191 257 268 c_length 2 based fixed bin(24,0) level 2 dcl 8-3 set ref 163 257* c_offset 1 based fixed bin(24,0) level 2 dcl 8-3 set ref 190 191 192 262* 328 cfo 000124 automatic fixed bin(6,0) array dcl 47 set ref 191* 192 216 271 272 compiler_developed 32(35) based structure level 3 packed packed unaligned dcl 7-3 convert_offset 000005 constant fixed bin(8,1) initial array dcl 1-35 ref 191 create_operator 000014 constant entry external dcl 54 ref 238 266 create_reference 000016 constant entry external dcl 55 ref 245 declare_temporary 000010 constant entry external dcl 52 ref 268 divide builtin function dcl 60 ref 190 element 1 based pointer array level 2 packed packed unaligned dcl 6-6 ref 328 father 17 based pointer level 2 packed packed unaligned dcl 7-3 ref 196 198 first parameter pointer dcl 41 ref 39 75 fo_in_qual 12(22) based bit(1) level 3 packed packed unaligned dcl 8-3 set ref 163 free_node 000024 constant entry external dcl 58 ref 240 293 298 generate_constant 000012 constant entry external dcl 53 ref 217 273 i 000160 automatic fixed bin(17,0) dcl 181 set ref 189* 190 190 190 191 191 191 192 192 192 192 196 199* info 11 based structure level 2 packed packed unaligned dcl 8-3 initial 11 based pointer level 2 packed packed unaligned dcl 7-3 ref 215 is_next 000117 automatic bit(1) dcl 45 set ref 104* 105* 111 111 130 136 is_target 000120 automatic bit(1) dcl 45 set ref 103* 111 111 122 143 jump_false 000002 constant bit(9) initial dcl 3-8 set ref 88 99 111 111 132* jump_if_eq 000001 constant bit(9) initial dcl 3-8 set ref 111 139* jump_if_ne 000000 constant bit(9) initial dcl 3-8 set ref 111 145* jump_true 000003 constant bit(9) initial dcl 3-8 set ref 88 99 111 111 122 122 126* 136 just_combined 000116 automatic bit(1) dcl 45 set ref 74* 85 109 152* 224* 282* l 000230 automatic pointer dcl 305 set ref 325* 326 label based structure level 1 dcl 5-1 label_node constant bit(9) initial dcl 4-5 ref 105 314 321 labels 4 based pointer level 2 packed packed unaligned dcl 10-9 ref 80 last parameter pointer dcl 41 ref 39 77 list based structure level 1 dcl 6-6 mask 000130 automatic bit(36) dcl 50 set ref 215* 216* 217* 270* 271* 272* 273* mod builtin function dcl 60 ref 191 modword_in_offset 11(35) based bit(1) level 4 packed packed unaligned dcl 8-3 set ref 163 263* next 1 based pointer level 2 packed packed unaligned dcl 10-9 ref 105 node based structure level 1 dcl 4-27 null builtin function dcl 60 ref 80 163 196 245 245 250 252 268 268 321 num parameter fixed bin(15,0) dcl 231 set ref 229 236 238* 277 number 0(21) based fixed bin(14,0) level 2 packed packed unaligned dcl 9-6 ref 219 o1 000112 automatic pointer dcl 44 set ref 95* 96 97 103 105 105 295 296 296 298* o2 000114 automatic pointer dcl 44 set ref 82* 83 85 90 103 215 218 219 219 239 240* 241* 276 277 292 offset 5 based pointer level 2 packed packed unaligned dcl 8-3 set ref 163 186 186 252 252* 252 op_code parameter bit(9) dcl 231 in procedure "combine" set ref 229 238* op_code 0(09) based bit(9) level 2 in structure "operator" packed packed unaligned dcl 9-6 in procedure "combine_tests" ref 83 97 opcode1 000121 automatic bit(9) dcl 46 set ref 97* 99 99 111 111 122 opcode2 000122 automatic bit(9) dcl 46 set ref 83* 88 88 111 111 111 111 122 136 operand 1 based pointer array level 2 packed packed unaligned dcl 9-6 set ref 85 85 90 96 103 103 105 105 215 215 218* 218 219* 239* 239 267* 268* 274* 276* 277* 295 296 296 operator based structure level 1 dcl 9-6 other 11(33) based structure level 3 packed packed unaligned dcl 8-3 p 000170 automatic pointer dcl 213 in procedure "continue_combining" set ref 217* 218 219 p 000222 automatic pointer dcl 305 in procedure "decrement_target_expression" set ref 312* 314 316 321 321 321 325 328 332* p parameter pointer dcl 161 in procedure "candidate" ref 159 163 163 163 163 163 163 163 163 163 163 p 000202 automatic pointer dcl 234 in procedure "combine" set ref 238* 239 241 273* 274 277 p1 parameter pointer dcl 178 ref 176 183 p2 parameter pointer dcl 178 ref 176 184 packed 33 based bit(1) level 4 packed packed unaligned dcl 7-3 ref 163 padded_ref 12(06) based bit(1) level 3 packed packed unaligned dcl 8-3 set ref 163 pt parameter pointer dcl 305 ref 303 312 qualifier 4 based pointer level 2 packed packed unaligned dcl 8-3 set ref 186 186 250 250* 250 r 000146 automatic pointer array dcl 180 in procedure "same_word" set ref 183* 184* 186 186 186 186 190 190 191 191 192 196 r 000204 automatic pointer dcl 234 in procedure "combine" set ref 245* 246 247 249 250 250 250 252 252 252 257 259 259 261 262 263 267 r1 000106 automatic pointer dcl 44 set ref 96* 99* 99* r2 000110 automatic pointer dcl 44 set ref 85* 90* 91* 99* 246 254* ref_count 0(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 8-3 set ref 249* reference based structure level 1 dcl 8-3 set ref 246* 246 reference_count 7 based fixed bin(17,0) level 2 packed packed unaligned dcl 10-9 set ref 317* 317 329* 329 reference_node constant bit(9) initial dcl 4-5 ref 163 321 root 3 based pointer level 2 packed packed unaligned dcl 10-9 set ref 82 95 292* s 000224 automatic pointer dcl 305 set ref 316* 317 317 328* 329 329 s1 000100 automatic pointer dcl 44 set ref 78* 95 153 292 s2 000102 automatic pointer dcl 44 set ref 77* 77* 78 80 82 105* 293* share_expression 000020 constant entry external dcl 56 ref 250 252 shared 0(11) based bit(1) level 2 packed packed unaligned dcl 8-3 set ref 247 296 statement based structure level 1 dcl 10-9 in procedure "combine_tests" statement 11 based pointer level 2 in structure "label" packed packed unaligned dcl 5-1 in procedure "combine_tests" ref 105 316 326 stop_ptr 000104 automatic pointer dcl 44 set ref 75* 77 substr builtin function dcl 60 set ref 216* 271* 272* symbol 3 based pointer level 2 in structure "reference" packed packed unaligned dcl 8-3 in procedure "combine_tests" set ref 163 196 215 321 321 325 symbol based structure level 1 dcl 7-3 in procedure "combine_tests" type based bit(9) level 2 packed packed unaligned dcl 4-27 ref 105 163 314 321 321 units 0(14) based fixed bin(3,0) level 2 packed packed unaligned dcl 8-3 set ref 163 163 190 191 259 259 261* units_per_word 000013 constant fixed bin(8,0) initial array dcl 1-5 ref 190 vector 000226 automatic pointer dcl 305 set ref 326* 328 wo 000126 automatic fixed bin(18,0) array dcl 48 set ref 190* 192* 192 202 202 262 word_ constant fixed bin(3,0) initial dcl 2-5 ref 163 259 261 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. a_format internal static bit(9) initial dcl 3-8 abs_fun internal static bit(9) initial dcl 3-8 acos_fun internal static bit(9) initial dcl 3-8 acosd_fun internal static bit(9) initial dcl 3-8 add internal static bit(9) initial dcl 3-8 addbitno_fun internal static bit(9) initial dcl 3-8 addcharno_fun internal static bit(9) initial dcl 3-8 addr_fun internal static bit(9) initial dcl 3-8 addr_fun_bits internal static bit(9) initial dcl 3-8 addrel_fun internal static bit(9) initial dcl 3-8 allocation_fun internal static bit(9) initial dcl 3-8 allot_auto internal static bit(9) initial dcl 3-8 allot_based internal static bit(9) initial dcl 3-8 allot_ctl internal static bit(9) initial dcl 3-8 allot_var internal static bit(9) initial dcl 3-8 area_mask internal static bit(36) initial dcl 11-3 arg_descriptor_mask internal static bit(36) initial dcl 11-3 arithmetic_mask internal static bit(36) initial dcl 11-41 array_node internal static bit(9) initial dcl 4-5 asin_fun internal static bit(9) initial dcl 3-8 asind_fun internal static bit(9) initial dcl 3-8 assign internal static bit(9) initial dcl 3-8 assign_by_name internal static bit(9) initial dcl 3-8 assign_round internal static bit(9) initial dcl 3-8 assign_size_ck internal static bit(9) initial dcl 3-8 assign_zero internal static bit(9) initial dcl 3-8 atan_fun internal static bit(9) initial dcl 3-8 atand_fun internal static bit(9) initial dcl 3-8 b_format internal static bit(9) initial dcl 3-8 baseno_fun internal static bit(9) initial dcl 3-8 baseptr_fun internal static bit(9) initial dcl 3-8 binary_mask internal static bit(36) initial dcl 11-3 bit_ internal static fixed bin(3,0) initial dcl 2-5 bit_pointer internal static bit(9) initial dcl 3-8 bit_to_char internal static bit(9) initial dcl 3-8 bit_to_word internal static bit(9) initial dcl 3-8 bitno_fun internal static bit(9) initial dcl 3-8 bits_per_char internal static fixed bin(8,0) initial dcl 1-5 bits_per_four_words internal static fixed bin(8,0) initial dcl 1-5 bits_per_half internal static fixed bin(8,0) initial dcl 1-5 bits_per_packed_digit internal static fixed bin(8,1) initial dcl 1-35 bits_per_two_words internal static fixed bin(8,0) initial dcl 1-5 bits_per_words internal static fixed bin(8,0) initial array dcl 1-5 block_node internal static bit(9) initial dcl 4-5 bn_format internal static bit(9) initial dcl 3-8 bool_fun internal static bit(9) initial dcl 3-8 bound_ck internal static bit(9) initial dcl 3-8 bound_node internal static bit(9) initial dcl 4-5 break_even_bits internal static fixed bin(8,0) initial dcl 1-5 break_even_words internal static fixed bin(8,0) initial dcl 1-5 builtin_mask internal static bit(36) initial dcl 11-3 by_name_agg_node internal static bit(9) initial dcl 4-5 byte_fun internal static bit(9) initial dcl 3-8 c_format internal static bit(9) initial dcl 3-8 cat_string internal static bit(9) initial dcl 3-8 ceil_fun internal static bit(9) initial dcl 3-8 char_mask internal static bit(36) initial dcl 11-3 char_to_word internal static bit(9) initial dcl 3-8 character_ internal static fixed bin(3,0) initial dcl 2-5 charno_fun internal static bit(9) initial dcl 3-8 chars_per_word internal static fixed bin(8,0) initial dcl 1-5 clock_fun internal static bit(9) initial dcl 3-8 close_file internal static bit(9) initial dcl 3-8 codeptr_fun internal static bit(9) initial dcl 3-8 column_format internal static bit(9) initial dcl 3-8 complex_fun internal static bit(9) initial dcl 3-8 complex_mask internal static bit(36) initial dcl 11-3 computational_mask internal static bit(36) initial dcl 11-41 condition_mask internal static bit(36) initial dcl 11-3 conjg_fun internal static bit(9) initial dcl 3-8 context_node internal static bit(9) initial dcl 4-5 convert_mask internal static bit(36) initial dcl 11-41 convert_size internal static fixed bin(8,0) initial array dcl 1-5 copy_string internal static bit(9) initial dcl 3-8 copy_words internal static bit(9) initial dcl 3-8 cos_fun internal static bit(9) initial dcl 3-8 cosd_fun internal static bit(9) initial dcl 3-8 cross_reference_node internal static bit(9) initial dcl 4-5 decimal_mask internal static bit(36) initial dcl 11-3 declare_constant_mask internal static bit(36) initial dcl 11-41 default_fix_bin_p internal static fixed bin(8,0) initial dcl 1-5 default_node internal static bit(9) initial dcl 4-5 delete_file internal static bit(9) initial dcl 3-8 desc_size internal static bit(9) initial dcl 3-8 digit_ internal static fixed bin(3,0) initial dcl 2-5 digit_to_bit internal static bit(9) initial dcl 3-8 dimensioned_mask internal static bit(36) initial dcl 11-3 div internal static bit(9) initial dcl 3-8 do_fun internal static bit(9) initial dcl 3-8 do_spec internal static bit(9) initial dcl 3-8 e_format internal static bit(9) initial dcl 3-8 empty_area internal static bit(9) initial dcl 3-8 enable_on internal static bit(9) initial dcl 3-8 entry_mask internal static bit(36) initial dcl 11-3 environmentptr_fun internal static bit(9) initial dcl 3-8 equal internal static bit(9) initial dcl 3-8 ex_prologue internal static bit(9) initial dcl 3-8 exp internal static bit(9) initial dcl 3-8 exp_fun internal static bit(9) initial dcl 3-8 f_format internal static bit(9) initial dcl 3-8 file_mask internal static bit(36) initial dcl 11-3 fixed_binary_real_mask internal static bit(36) initial dcl 11-41 fixed_decimal_complex_mask internal static bit(36) initial dcl 11-41 fixed_decimal_real_mask internal static bit(36) initial dcl 11-41 fixed_mask internal static bit(36) initial dcl 11-3 float_decimal_complex_mask internal static bit(36) initial dcl 11-41 float_decimal_real_mask internal static bit(36) initial dcl 11-41 float_mask internal static bit(36) initial dcl 11-3 floor_fun internal static bit(9) initial dcl 3-8 format_mask internal static bit(36) initial dcl 11-3 format_value_node internal static bit(9) initial dcl 4-5 fortran_read internal static bit(9) initial dcl 3-8 fortran_write internal static bit(9) initial dcl 3-8 free_based internal static bit(9) initial dcl 3-8 free_ctl internal static bit(9) initial dcl 3-8 free_var internal static bit(9) initial dcl 3-8 ftn_file_manip internal static bit(9) initial dcl 3-8 ftn_trans_loop internal static bit(9) initial dcl 3-8 generic_mask internal static bit(36) initial dcl 11-3 get_data_trans internal static bit(9) initial dcl 3-8 get_edit_trans internal static bit(9) initial dcl 3-8 get_file internal static bit(9) initial dcl 3-8 get_list_trans internal static bit(9) initial dcl 3-8 get_string internal static bit(9) initial dcl 3-8 greater_or_equal internal static bit(9) initial dcl 3-8 greater_than internal static bit(9) initial dcl 3-8 half_ internal static fixed bin(3,0) initial dcl 2-5 half_to_word internal static bit(9) initial dcl 3-8 i automatic fixed bin(17,0) dcl 306 imag_fun internal static bit(9) initial dcl 3-8 index_after_fun internal static bit(9) initial dcl 3-8 index_before_fun internal static bit(9) initial dcl 3-8 index_fun internal static bit(9) initial dcl 3-8 index_rev_fun internal static bit(9) initial dcl 3-8 initialed_mask internal static bit(36) initial dcl 11-3 irreducible_mask internal static bit(36) initial dcl 11-3 join internal static bit(9) initial dcl 3-8 jump internal static bit(9) initial dcl 3-8 jump_if_ge internal static bit(9) initial dcl 3-8 jump_if_gt internal static bit(9) initial dcl 3-8 jump_if_le internal static bit(9) initial dcl 3-8 jump_if_lt internal static bit(9) initial dcl 3-8 l_parn internal static bit(9) initial dcl 3-8 label_array_element_node internal static bit(9) initial dcl 4-5 label_mask internal static bit(36) initial dcl 11-3 label_size internal static fixed bin(8,0) initial dcl 1-5 length_fun internal static bit(9) initial dcl 3-8 less_or_equal internal static bit(9) initial dcl 3-8 less_than internal static bit(9) initial dcl 3-8 line_format internal static bit(9) initial dcl 3-8 list_node internal static bit(9) initial dcl 4-5 local_mask internal static bit(36) initial dcl 11-3 locate_file internal static bit(9) initial dcl 3-8 lock_file internal static bit(9) initial dcl 3-8 lock_fun internal static bit(9) initial dcl 3-8 lock_mask internal static bit(36) initial dcl 11-3 log10_fun internal static bit(9) initial dcl 3-8 log2_fun internal static bit(9) initial dcl 3-8 log_fun internal static bit(9) initial dcl 3-8 loop internal static bit(9) initial dcl 3-8 m automatic pointer dcl 234 machine_state_node internal static bit(9) initial dcl 4-5 make_desc internal static bit(9) initial dcl 3-8 max_dec_scale internal static fixed bin(8,0) initial dcl 1-5 max_fun internal static bit(9) initial dcl 3-8 max_index_register_value internal static fixed bin(31,0) initial dcl 1-38 max_length_p internal static fixed bin(8,0) initial dcl 1-5 max_list_elements internal static fixed bin(17,0) initial dcl 6-12 max_number_of_operands internal static fixed bin(15,0) initial dcl 9-15 max_offset internal static fixed bin(8,0) initial array dcl 1-5 max_p_fix_bin_1 internal static fixed bin(8,0) initial dcl 1-5 max_p_fix_dec internal static fixed bin(8,0) initial dcl 1-5 max_p_flt_bin_1 internal static fixed bin(8,0) initial dcl 1-5 max_p_xreg internal static fixed bin(8,0) initial dcl 1-5 max_short_size internal static fixed bin(8,0) initial array dcl 1-5 min_dec_scale internal static fixed bin(8,0) initial dcl 1-5 min_fun internal static bit(9) initial dcl 3-8 mod2_ internal static fixed bin(3,0) initial dcl 2-5 mod4_ internal static fixed bin(3,0) initial dcl 2-5 mod_bit internal static bit(9) initial dcl 3-8 mod_byte internal static bit(9) initial dcl 3-8 mod_fun internal static bit(9) initial dcl 3-8 mod_half internal static bit(9) initial dcl 3-8 mod_word internal static bit(9) initial dcl 3-8 mult internal static bit(9) initial dcl 3-8 negate internal static bit(9) initial dcl 3-8 nop internal static bit(9) initial dcl 3-8 not_bits internal static bit(9) initial dcl 3-8 not_equal internal static bit(9) initial dcl 3-8 off_fun internal static bit(9) initial dcl 3-8 offset_mask internal static bit(36) initial dcl 11-3 open_file internal static bit(9) initial dcl 3-8 operator_node internal static bit(9) initial dcl 4-5 or_bits internal static bit(9) initial dcl 3-8 pack internal static bit(9) initial dcl 3-8 packed_digits_per_char internal static fixed bin(8,0) initial dcl 1-5 packed_digits_per_word internal static fixed bin(8,0) initial dcl 1-5 page_format internal static bit(9) initial dcl 3-8 param_desc_ptr internal static bit(9) initial dcl 3-8 param_ptr internal static bit(9) initial dcl 3-8 picture_format internal static bit(9) initial dcl 3-8 picture_mask internal static bit(36) initial dcl 11-3 pl1_mod_fun internal static bit(9) initial dcl 3-8 precision_mask internal static bit(36) initial dcl 11-3 prefix_plus internal static bit(9) initial dcl 3-8 ptr_fun internal static bit(9) initial dcl 3-8 ptr_mask internal static bit(36) initial dcl 11-3 put_control internal static bit(9) initial dcl 3-8 put_data_trans internal static bit(9) initial dcl 3-8 put_edit_trans internal static bit(9) initial dcl 3-8 put_field internal static bit(9) initial dcl 3-8 put_field_chk internal static bit(9) initial dcl 3-8 put_file internal static bit(9) initial dcl 3-8 put_list_trans internal static bit(9) initial dcl 3-8 put_string internal static bit(9) initial dcl 3-8 r_format internal static bit(9) initial dcl 3-8 r_parn internal static bit(9) initial dcl 3-8 range_ck internal static bit(9) initial dcl 3-8 rank_fun internal static bit(9) initial dcl 3-8 read_file internal static bit(9) initial dcl 3-8 real_fun internal static bit(9) initial dcl 3-8 real_mask internal static bit(36) initial dcl 11-3 record_io internal static bit(9) initial dcl 3-8 reducible_mask internal static bit(36) initial dcl 11-3 refer internal static bit(9) initial dcl 3-8 rel_fun internal static bit(9) initial dcl 3-8 repeat_fun internal static bit(9) initial dcl 3-8 return_bits internal static bit(9) initial dcl 3-8 return_string internal static bit(9) initial dcl 3-8 return_value internal static bit(9) initial dcl 3-8 return_words internal static bit(9) initial dcl 3-8 returns_mask internal static bit(36) initial dcl 11-3 reverse_fun internal static bit(9) initial dcl 3-8 revert_on internal static bit(9) initial dcl 3-8 rewrite_file internal static bit(9) initial dcl 3-8 round_fun internal static bit(9) initial dcl 3-8 search_fun internal static bit(9) initial dcl 3-8 search_rev_fun internal static bit(9) initial dcl 3-8 segno_fun internal static bit(9) initial dcl 3-8 setbitno_fun internal static bit(9) initial dcl 3-8 setcharno_fun internal static bit(9) initial dcl 3-8 sf_par_node internal static bit(9) initial dcl 4-5 sign_fun internal static bit(9) initial dcl 3-8 signal_on internal static bit(9) initial dcl 3-8 signed_mask internal static bit(36) initial dcl 11-3 sin_fun internal static bit(9) initial dcl 3-8 sind_fun internal static bit(9) initial dcl 3-8 skip_format internal static bit(9) initial dcl 3-8 source_node internal static bit(9) initial dcl 4-5 sqrt_fun internal static bit(9) initial dcl 3-8 stack_ptr internal static bit(9) initial dcl 3-8 stackbaseptr_fun internal static bit(9) initial dcl 3-8 stackframeptr_fun internal static bit(9) initial dcl 3-8 stacq_fun internal static bit(9) initial dcl 3-8 statement_node internal static bit(9) initial dcl 4-5 std_arg_list internal static bit(9) initial dcl 3-8 std_call internal static bit(9) initial dcl 3-8 std_entry internal static bit(9) initial dcl 3-8 std_return internal static bit(9) initial dcl 3-8 stop internal static bit(9) initial dcl 3-8 storage_block_mask internal static bit(36) initial dcl 11-3 stream_prep internal static bit(9) initial dcl 3-8 string_mask internal static bit(36) initial dcl 11-41 structure_mask internal static bit(36) initial dcl 11-3 sub internal static bit(9) initial dcl 3-8 symbol_node internal static bit(9) initial dcl 4-5 tan_fun internal static bit(9) initial dcl 3-8 tand_fun internal static bit(9) initial dcl 3-8 temporary_node internal static bit(9) initial dcl 4-5 terminate_trans internal static bit(9) initial dcl 3-8 token_node internal static bit(9) initial dcl 4-5 translate_fun internal static bit(9) initial dcl 3-8 trunc_fun internal static bit(9) initial dcl 3-8 unaligned_mask internal static bit(36) initial dcl 11-3 undesirable_mask internal static bit(36) initial dcl 11-41 unlock_file internal static bit(9) initial dcl 3-8 unpack internal static bit(9) initial dcl 3-8 unsigned_mask internal static bit(36) initial dcl 11-3 variable_mask internal static bit(36) initial dcl 11-3 varying_mask internal static bit(36) initial dcl 11-3 vclock_fun internal static bit(9) initial dcl 3-8 verify_fun internal static bit(9) initial dcl 3-8 verify_ltrim_fun internal static bit(9) initial dcl 3-8 verify_rev_fun internal static bit(9) initial dcl 3-8 verify_rtrim_fun internal static bit(9) initial dcl 3-8 word_to_mod2 internal static bit(9) initial dcl 3-8 word_to_mod4 internal static bit(9) initial dcl 3-8 word_to_mod8 internal static bit(9) initial dcl 3-8 wordno_fun internal static bit(9) initial dcl 3-8 write_file internal static bit(9) initial dcl 3-8 x_format internal static bit(9) initial dcl 3-8 xor_bits internal static bit(9) initial dcl 3-8 NAMES DECLARED BY EXPLICIT CONTEXT. candidate 000305 constant entry internal dcl 159 ref 91 99 combine 000542 constant entry internal dcl 229 ref 126 132 139 145 combine_tests 000036 constant entry external dcl 39 continue_combining 000464 constant entry internal dcl 211 ref 116 decrement_target_expression 001123 constant entry internal dcl 303 ref 295 merge_and_unthread 001050 constant entry internal dcl 287 ref 222 280 next 000300 constant label dcl 152 ref 88 91 same_word 000352 constant entry internal dcl 176 ref 99 step 000301 constant label dcl 153 ref 117 127 133 140 146 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1406 1434 1274 1416 Length 2004 1274 26 333 112 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME combine_tests 248 external procedure is an external procedure. candidate internal procedure shares stack frame of external procedure combine_tests. same_word internal procedure shares stack frame of external procedure combine_tests. continue_combining internal procedure shares stack frame of external procedure combine_tests. combine internal procedure shares stack frame of external procedure combine_tests. merge_and_unthread internal procedure shares stack frame of external procedure combine_tests. decrement_target_expression internal procedure shares stack frame of external procedure combine_tests. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME combine_tests 000100 s1 combine_tests 000102 s2 combine_tests 000104 stop_ptr combine_tests 000106 r1 combine_tests 000110 r2 combine_tests 000112 o1 combine_tests 000114 o2 combine_tests 000116 just_combined combine_tests 000117 is_next combine_tests 000120 is_target combine_tests 000121 opcode1 combine_tests 000122 opcode2 combine_tests 000124 cfo combine_tests 000126 wo combine_tests 000130 mask combine_tests 000146 r same_word 000152 adam same_word 000156 a same_word 000160 i same_word 000170 p continue_combining 000200 a combine 000202 p combine 000204 r combine 000222 p decrement_target_expression 000224 s decrement_target_expression 000226 vector decrement_target_expression 000230 l decrement_target_expression THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out return_mac ext_entry trunc_fx1 scaled_mod_fx1 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. adjust_ref_count create_operator create_reference declare_temporary free_node generate_constant share_expression NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 39 000032 74 000043 75 000044 77 000050 78 000060 80 000063 82 000067 83 000071 85 000075 88 000103 90 000110 91 000112 95 000117 96 000122 97 000124 99 000130 103 000146 104 000154 105 000155 109 000171 111 000173 116 000225 117 000226 119 000227 122 000230 126 000240 127 000244 129 000245 130 000246 132 000250 133 000254 135 000255 136 000256 139 000263 140 000267 142 000270 143 000271 145 000273 146 000277 152 000300 153 000301 156 000304 159 000305 163 000307 171 000350 176 000352 183 000354 184 000357 186 000362 189 000370 190 000375 191 000410 192 000421 196 000427 198 000436 199 000441 200 000444 202 000446 206 000461 211 000464 215 000465 216 000474 217 000500 218 000523 219 000527 222 000536 224 000537 226 000541 229 000542 236 000544 238 000547 239 000563 240 000567 241 000576 245 000600 246 000613 247 000620 249 000623 250 000625 252 000646 254 000670 257 000703 259 000706 261 000714 262 000720 263 000722 266 000724 267 000741 268 000744 270 000776 271 000777 272 001003 273 001007 274 001032 276 001035 277 001037 280 001044 282 001045 284 001047 287 001050 292 001051 293 001054 295 001063 296 001070 298 001113 300 001122 303 001123 312 001125 314 001130 316 001135 317 001137 318 001144 321 001145 325 001160 326 001162 328 001164 329 001167 332 001174 334 001207 ----------------------------------------------------------- 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