ASSEMBLY LISTING OF SEGMENT >special_ldd>on>apl.1129>apl_reduction_appendage_.alm ASSEMBLED ON: 11/29/83 1616.3 mst Tue OPTIONS USED: list ASSEMBLED BY: ALM Version 6.6 November 1982 ASSEMBLER CREATED: 09/21/83 1227.3 mst Wed  1 " ******************************************************  2 " * *  3 " * *  4 " * Copyright (c) 1972 by Massachusetts Institute of *  5 " * Technology and Honeywell Information Systems, Inc. *  6 " * *  7 " * *  8 " ******************************************************  9  10 " Subroutine for use by apl to do fast reductions on certain operators. 11 "  12 " Calling sequence: 13 "  14 " call apl_reduction_appendage_ (array_ptr, column_base, highest_element,  15 " interval_between_elements, op_to_do, result [, zerodivide_label]);  16 "  17 " declare apl_reduction_appendage_ entry (ptr, fixed bin, fixed bin, fixed bin, 18 " fixed bin (8), float bin (63) [, label]); 19 "  20 " Note that the last argument is optional, and is only passed in the divide-reduction case. 21 "  22 " Modified 740829 by PG to treat index register 3 as an unsigned word offset.  23 " Modified 790125 by PG to change calling sequence as part of fix to bug 360  24 " (or-scan and and-scan of Booleans fail because reduction and scan called  25 " this subroutine differently). 26 " Modified 790717 by PG to use DFSTR instead of DFST when it became clear that  27 " this subroutine actually uses the over-length EAQ in a reasonable 28 " fashion, and that we should keep as many bits as possible.  29 " Modified 790727 by PG to implement 0-:0 ==> 1 special-case in divide-reduction,  30 " so that this routine can be called once again for divide-reduction.  31  000000 32 name apl_reduction_appendage_  000000 33 segdef apl_reduction_appendage_  000000 34 segdef divide  000002 35 equ array_ptr,2 ptr to operand array  000004 36 equ column_base,4 subscript (0 origin) of lowest element  000006 37 equ highest_element,6 subscript (0 origin) of highest element 000010 38 equ interval_between_elements,8 number of elements in between each element 000012 39 equ operation,10 operator code  000014 40 equ result,12 place to store result  000016 41 equ zerodivide_label,14 label to goto for zerodivide (-:/ only)  42 "  000000 43 apl_reduction_appendage_:  000000 44 divide: 000000 aa 0 00002 3521 20 45 eppbp ap|array_ptr,* get ptr to ptr to array  000001 aa 2 00000 3521 20 46 eppbp bp|0,* get ptr to array  000002 aa 0 00012 7201 20 47 lxl0 ap|operation,* get op1 (operator code for operation to do)  000003 aa 0 00004 2361 20 48 ldq ap|column_base,* get first element  000004 aa 000001 7360 00 49 qls 1 form word offset  000005 aa 2 00000 3121 06 50 eawpbp bp|0,ql form ptr to first element 000006 aa 0 00006 2361 20 51 ldq ap|highest_element,* get last element  000007 aa 0 00004 1761 20 52 sbq ap|column_base,* compare to first element 000010 0a 000372 6000 00 53 tze return_last_element only that one element... just return it  000011 aa 000001 7360 00 54 qls 1 conv to word offset of last element in array  000012 aa 000000 6220 06 55 eax2 0,ql .. 000013 aa 0 00010 2351 20 56 lda ap|interval_between_elements,* find separation between elements  000014 aa 000001 7350 00 57 als 1 change to separation in words  000015 aa 000000 5310 00 58 neg 0 negate so eax2 bb|0,x3 will subtract from x2  000016 aa 000000 3134 05 59 eawpbb 0,al put into bb for subtraction from x2  000017 aa 000000 6210 05 60 eax1 0,al just save in x1  000020 aa 2 00000 4331 12 61 dfld bp|0,x2 get last element  000021 aa 2 00000 3521 11 62 eppbp bp|0,x1 move back by 1 element separation  000022 aa 777776 1010 03 63 cmpx1 -2,du separation 1 (i.e., vector)? 000023 0a 000044 6000 00 64 tze offset_is_one can special case very fast  000024 0a 000025 7100 10 65 tra simple_transfer,x0 go to transfer vector for operation  66 "  000025 67 simple_transfer:  000025 0a 000071 7100 00 68 tra simple_plus  000026 0a 000075 7100 00 69 tra simple_minus  000027 0a 000102 7100 00 70 tra simple_multiply  000030 0a 000106 7100 00 71 tra simple_divide  000031 0a 000120 7100 00 72 tra simple_max 000032 0a 000126 7100 00 73 tra simple_min 000033 aa 000000 0000 00 74 arg 0  000034 aa 000000 0000 00 75 arg 0  000035 aa 000000 0000 00 76 arg 0  000036 aa 000000 0000 00 77 arg 0  000037 aa 000000 0000 00 78 arg 0  000040 0a 000134 7100 00 79 tra simple_and 000041 0a 000143 7100 00 80 tra simple_or  000042 0a 000151 7100 00 81 tra simple_nand  000043 0a 000165 7100 00 82 tra simple_nor 83  84 "following code is reached if interval between elements is 1 (i.e., two words)  85  000044 86 offset_is_one:  000044 aa 000000 6230 12 87 eax3 0,x2 save  000045 aa 000007 3620 03 88 anx2 7,du keep only those over mod 4 boundary of elements  000046 aa 777770 3630 03 89 anx3 =o777770,du get rid of number > mod 4 elements  000047 0a 000025 6000 10 90 tze simple_transfer,x0 amount is < 4 elements, no special case  000050 aa 2 00000 3715 12 91 epplb bp|0,x2 get ptr to subarray which is mod 4 elements long  000051 0a 000052 7100 10 92 tra *+1,x0 go to transfer vector for special case  000052 0a 000167 7100 00 93 tra group_plus 000053 0a 000176 7100 00 94 tra group_minus  000054 0a 000211 7100 00 95 tra group_multiply 000055 0a 000220 7100 00 96 tra group_divide  000056 0a 000254 7100 00 97 tra group_max  000057 0a 000273 7100 00 98 tra group_min  000060 aa 000000 0000 00 99 arg 0  000061 aa 000000 0000 00 100 arg 0  000062 aa 000000 0000 00 101 arg 0  000063 aa 000000 0000 00 102 arg 0  000064 aa 000000 0000 00 103 arg 0  000065 0a 000312 7100 00 104 tra group_and  000066 0a 000327 7100 00 105 tra group_or  000067 0a 000332 7100 00 106 tra group_nand 000070 0a 000366 7100 00 107 tra group_nor  108  109 "simple routines that do one element at a loop iteration  110  000071 111 simple_plus:  000071 aa 2 00000 4771 12 112 dfad bp|0,x2 add next lower element to sum  000072 aa 3 00000 6221 12 113 eax2 bb|0,x2 subtract from x2 interval_between_elements  000073 0a 000071 6010 00 114 tnz simple_plus more to do?  000074 0a 000376 7100 00 115 tra return_result store result and go away  116  000075 117 simple_minus:  000075 aa 2 00000 5771 12 118 dfsb bp|0,x2 subtract next lower from amount accumulated 000076 aa 000000 5130 00 119 fneg 0 negate, because of kludgy way -/ works  000077 aa 3 00000 6221 12 120 eax2 bb|0,x2 go down to next element 000100 0a 000075 6010 00 121 tnz simple_minus more left?  000101 0a 000376 7100 00 122 tra return_result  123  000102 124 simple_multiply:  000102 aa 2 00000 4631 12 125 dfmp bp|0,x2 multiply next lower element to product  000103 aa 3 00000 6221 12 126 eax2 bb|0,x2 subtract from x2 interval_between_elements  000104 0a 000102 6010 00 127 tnz simple_multiply more to do?  000105 0a 000376 7100 00 128 tra return_result store result and go away  129  000106 130 simple_divide:  000106 aa 400000 4750 03 131 fad =0e0,du is divisor zero? (set indicators)  000107 aa 000005 6010 04 132 tnz 5,ic no, branch  000110 aa 2 00000 5171 12 133 dfcmp bp|0,x2 is dividend zero?  000111 0a 000400 6010 00 134 tnz zerodivide no, branch 000112 aa 002400 4310 03 135 fld =1e0,du map 0-:0 into 1 000113 aa 000002 7100 04 136 tra 2,ic  000114 aa 2 00000 5271 12 137 dfdi bp|0,x2 quotient is next-:last_quotient  000115 aa 3 00000 6221 12 138 eax2 bb|0,x2 go down to next element 000116 0a 000106 6010 00 139 tnz simple_divide more left?  000117 0a 000376 7100 00 140 tra return_result  141  000120 142 simple_max: 000120 aa 2 00000 5171 12 143 dfcmp bp|0,x2 compare to next lower element  000121 aa 000002 6054 04 144 tpnz 2,ic greater, not interested in this element  000122 aa 2 00000 4331 12 145 dfld bp|0,x2 get it  000123 aa 3 00000 6221 12 146 eax2 bb|0,x2 next lower  000124 0a 000120 6010 00 147 tnz simple_max more to do 000125 0a 000376 7100 00 148 tra return_result  149  000126 150 simple_min: 000126 aa 2 00000 5171 12 151 dfcmp bp|0,x2 compare to next lower element  000127 aa 000002 6040 04 152 tmi 2,ic less, not interested in this element  000130 aa 2 00000 4331 12 153 dfld bp|0,x2 get it  000131 aa 3 00000 6221 12 154 eax2 bb|0,x2 next lower  000132 0a 000126 6010 00 155 tnz simple_min more to do 000133 0a 000376 7100 00 156 tra return_result  157  000134 158 simple_and: 000134 aa 400000 5150 03 159 fcmp =0e0,du is last element zero?  000135 0a 000376 6000 00 160 tze return_result yes... return 0 which is in eaq 000136 161 simple_and_loop:  000136 162 simple_or_loop: 000136 aa 2 00000 5171 12 163 dfcmp bp|0,x2 compare to next element  000137 0a 000146 6010 00 164 tnz invert_and_return  000140 aa 3 00000 6221 12 165 eax2 bb|0,x2 reduce x2 to next element  000141 0a 000136 6010 00 166 tnz simple_and_loop do next element  000142 0a 000376 7100 00 167 tra return_result  168  000143 169 simple_or:  000143 aa 002400 5150 03 170 fcmp =1e0,du is last element one?  000144 0a 000376 6000 00 171 tze return_result yes... return 1 which is in eaq 000145 0a 000136 7100 00 172 tra simple_or_loop 173  000146 174 invert_and_return:  000146 aa 002400 5750 03 175 fsb =1e0,du invert by subtracting 1  000147 aa 000000 5130 00 176 fneg 0 then reverse  000150 0a 000376 7100 00 177 tra return_result  178  000151 179 simple_nand:  000151 aa 000001 6210 00 180 eax1 1 indicate want 1 if unequal operands  000152 aa 2 00000 5171 12 181 dfcmp bp|0,x2 compare with next element  000153 0a 000160 6000 00 182 tze invert_ac  000154 0a 000370 4310 11 183 fld zero_or_one,1 load a 1 if nand, 0 if nor  000155 aa 3 00000 6221 12 184 eax2 bb|0,x2 reduce to next element  000156 0a 000152 6010 00 185 tnz simple_nand+1 go back 000157 0a 000376 7100 00 186 tra return_result  187  000160 188 invert_ac:  000160 aa 002400 5750 03 189 fsb =1e0,du invert by subtracting 1  000161 aa 000000 5130 00 190 fneg 0 and then reversing  000162 aa 3 00000 6221 12 191 eax2 bb|0,x2  000163 0a 000152 6010 00 192 tnz simple_nand+1  000164 0a 000376 7100 00 193 tra return_result  194  000165 195 simple_nor: 000165 aa 000000 6210 00 196 eax1 0 zero to specify will load 0 on unequal operands  000166 0a 000152 7100 00 197 tra simple_nand+1  198  199 "follows operators done in groups of 4 to reduce loop control overhead  200  000167 201 group_plus: 000167 aa 5 00000 4771 13 202 dfad lb|0,x3  000170 aa 5 77776 4771 13 203 dfad lb|-2,x3  000171 aa 5 77774 4771 13 204 dfad lb|-4,x3  000172 aa 5 77772 4771 13 205 dfad lb|-6,x3  000173 aa 000010 1230 03 206 sblx3 8,du go down 4 elements  000174 0a 000167 6010 00 207 tnz group_plus go back if more to do  000175 0a 000374 7100 00 208 tra see_whats_left more to do 209  000176 210 group_minus:  000176 aa 5 00000 5771 13 211 dfsb lb|0,x3  000177 aa 000000 5130 00 212 fneg 0 000200 aa 5 77776 5771 13 213 dfsb lb|-2,x3  000201 aa 000000 5130 00 214 fneg 0 000202 aa 5 77774 5771 13 215 dfsb lb|-4,x3  000203 aa 000000 5130 00 216 fneg 0 000204 aa 5 77772 5771 13 217 dfsb lb|-6,x3  000205 aa 000000 5130 00 218 fneg 0 000206 aa 000010 1230 03 219 sblx3 8,du go down 4 elements  000207 0a 000176 6010 00 220 tnz group_minus go back if more to do 000210 0a 000374 7100 00 221 tra see_whats_left more to do 222  000211 223 group_multiply: 000211 aa 5 00000 4631 13 224 dfmp lb|0,x3  000212 aa 5 77776 4631 13 225 dfmp lb|-2,x3  000213 aa 5 77774 4631 13 226 dfmp lb|-4,x3  000214 aa 5 77772 4631 13 227 dfmp lb|-6,x3  000215 aa 000010 1230 03 228 sblx3 8,du go down 4 elements  000216 0a 000211 6010 00 229 tnz group_multiply go back if more to do  000217 0a 000374 7100 00 230 tra see_whats_left more to do 231  000220 232 group_divide:  000220 aa 400000 4750 03 233 fad =0e0,du is divisor zero? (set indicators)  000221 aa 000005 6010 04 234 tnz 5,ic no, branch to dfdi  000222 aa 5 00000 5171 13 235 dfcmp lb|0,x3 is dividend zero?  000223 0a 000400 6010 00 236 tnz zerodivide no, branch 000224 aa 002400 4310 03 237 fld =1e0,du map 0-:0 into 1 000225 aa 000007 7100 04 238 tra 7,ic branch to next dfdi 000226 aa 5 00000 5271 13 239 dfdi lb|0,x3 compute this quotient--next divisor 000227 aa 000005 6010 04 240 tnz 5,ic divisor 0? -- no, branch to dfdi  000230 aa 5 77776 5171 13 241 dfcmp lb|-2,x3 is dividend zero? 000231 0a 000400 6010 00 242 tnz zerodivide no, branch 000232 aa 002400 4310 03 243 fld =1e0,du map 0-:0 into 1 000233 aa 000007 7100 04 244 tra 7,ic  000234 aa 5 77776 5271 13 245 dfdi lb|-2,x3 compute this quotient--next divisor  000235 aa 000005 6010 04 246 tnz 5,ic divisor 0? -- no, branch to dfdi  000236 aa 5 77774 5171 13 247 dfcmp lb|-4,x3 is dividend zero? 000237 0a 000400 6010 00 248 tnz zerodivide no, branch 000240 aa 002400 4310 03 249 fld =1e0,du map 0-:0 into 1 000241 aa 000007 7100 04 250 tra 7,ic  000242 aa 5 77774 5271 13 251 dfdi lb|-4,x3 compute this quotient--next divisor  000243 aa 000005 6010 04 252 tnz 5,ic divisor 0? -- no, branch to dfdi  000244 aa 5 77772 5171 13 253 dfcmp lb|-6,x3 is dividend zero? 000245 0a 000400 6010 00 254 tnz zerodivide no, branch 000246 aa 002400 4310 03 255 fld =1e0,du map 0-:0 into 1 000247 aa 000002 7100 04 256 tra 2,ic  000250 aa 5 77772 5271 13 257 dfdi lb|-6,x3 compute this quotient--next divisor  000251 aa 000010 1230 03 258 sblx3 8,du go down 4 elements  000252 0a 000220 6010 00 259 tnz group_divide go back if more to do  000253 0a 000374 7100 00 260 tra see_whats_left more to do 261  000254 262 group_max:  000254 aa 5 00000 5171 13 263 dfcmp lb|0,x3  000255 aa 000002 6050 04 264 tpl 2,ic  000256 aa 5 00000 4331 13 265 dfld lb|0,x3  000257 aa 5 77776 5171 13 266 dfcmp lb|-2,x3 000260 aa 000002 6050 04 267 tpl 2,ic  000261 aa 5 77776 4331 13 268 dfld lb|-2,x3  000262 aa 5 77774 5171 13 269 dfcmp lb|-4,x3 000263 aa 000002 6050 04 270 tpl 2,ic  000264 aa 5 77774 4331 13 271 dfld lb|-4,x3  000265 aa 5 77772 5171 13 272 dfcmp lb|-6,x3 000266 aa 000002 6050 04 273 tpl 2,ic  000267 aa 5 77772 4331 13 274 dfld lb|-6,x3  000270 aa 000010 1230 03 275 sblx3 8,du go down 4 elements  000271 0a 000254 6010 00 276 tnz group_max go back if more to do  000272 0a 000374 7100 00 277 tra see_whats_left more to do 278  000273 279 group_min:  000273 aa 5 00000 5171 13 280 dfcmp lb|0,x3  000274 aa 000002 6040 04 281 tmi 2,ic  000275 aa 5 00000 4331 13 282 dfld lb|0,x3  000276 aa 5 77776 5171 13 283 dfcmp lb|-2,x3 000277 aa 000002 6040 04 284 tmi 2,ic  000300 aa 5 77776 4331 13 285 dfld lb|-2,x3  000301 aa 5 77774 5171 13 286 dfcmp lb|-4,x3 000302 aa 000002 6040 04 287 tmi 2,ic  000303 aa 5 77774 4331 13 288 dfld lb|-4,x3  000304 aa 5 77772 5171 13 289 dfcmp lb|-6,x3 000305 aa 000002 6040 04 290 tmi 2,ic  000306 aa 5 77772 4331 13 291 dfld lb|-6,x3  000307 aa 000010 1230 03 292 sblx3 8,du go down 4 elements  000310 0a 000273 6010 00 293 tnz group_min go back if more to do  000311 0a 000374 7100 00 294 tra see_whats_left more to do 295  000312 296 group_and:  000312 aa 400000 5150 03 297 fcmp =0e0,du already 0, return zero  000313 0a 000376 6000 00 298 tze return_result  299  000314 300 group_and_loop: 000314 aa 5 00000 5171 13 301 dfcmp lb|0,x3  000315 0a 000146 6010 00 302 tnz invert_and_return  000316 aa 5 77776 5171 13 303 dfcmp lb|-2,x3 compare to next element  000317 0a 000146 6010 00 304 tnz invert_and_return  000320 aa 5 77774 5171 13 305 dfcmp lb|-4,x3 compare to next element  000321 0a 000146 6010 00 306 tnz invert_and_return  000322 aa 5 77772 5171 13 307 dfcmp lb|-6,x3 compare to next element  000323 0a 000146 6010 00 308 tnz invert_and_return  000324 aa 000010 1230 03 309 sblx3 8,du go down 4 elements  000325 0a 000314 6010 00 310 tnz group_and_loop go back if more to do  000326 0a 000374 7100 00 311 tra see_whats_left more to do 312  000327 313 group_or:  000327 aa 002400 5150 03 314 fcmp =1e0,du if already 1, return it 000330 0a 000376 6000 00 315 tze return_result  000331 0a 000314 7100 00 316 tra group_and_loop 317  000332 318 group_nand: 000332 aa 000001 6210 00 319 eax1 1 indicate want to load 1 when unequal  320  000333 321 group_nand1:  000333 aa 5 00000 5171 13 322 dfcmp lb|0,x3 compare previous result with next element  000334 0a 000352 6000 00 323 tze invert_ac_group1 if equal, invert previous result 000335 0a 000370 4310 11 324 fld zero_or_one,1 load 0 if nor, 1 if nand  000336 325 group_nand2:  000336 aa 5 77776 5171 13 326 dfcmp lb|-2,x3 compare previous result with next element 000337 0a 000355 6000 00 327 tze invert_ac_group2 if equal, invert previous result 000340 0a 000370 4310 11 328 fld zero_or_one,1 load 0 if nor, 1 if nand  000341 329 group_nand3:  000341 aa 5 77774 5171 13 330 dfcmp lb|-4,x3 compare previous result with next element 000342 0a 000360 6000 00 331 tze invert_ac_group3 if equal, invert previous result 000343 0a 000370 4310 11 332 fld zero_or_one,1 load 0 if nor, 1 if nand  000344 333 group_nand4:  000344 aa 5 77772 5171 13 334 dfcmp lb|-6,x3 compare previous result with next element 000345 0a 000363 6000 00 335 tze invert_ac_group4 if equal, invert previous result 000346 0a 000370 4310 11 336 fld zero_or_one,1 load 0 if nor, 1 if nand  000347 aa 000010 1230 03 337 sblx3 8,du go down 4 elements  000350 0a 000312 6010 00 338 tnz group_and go back if more to do  000351 0a 000374 7100 00 339 tra see_whats_left more to do 340  000352 341 invert_ac_group1:  000352 aa 002400 5750 03 342 fsb =1e0,du invert  000353 aa 000000 5130 00 343 fneg 0 000354 0a 000333 7100 00 344 tra group_nand1  345  000355 346 invert_ac_group2:  000355 aa 002400 5750 03 347 fsb =1e0,du invert  000356 aa 000000 5130 00 348 fneg 0 000357 0a 000336 7100 00 349 tra group_nand2  350  000360 351 invert_ac_group3:  000360 aa 002400 5750 03 352 fsb =1e0,du invert  000361 aa 000000 5130 00 353 fneg 0 000362 0a 000341 7100 00 354 tra group_nand3  355  000363 356 invert_ac_group4:  000363 aa 002400 5750 03 357 fsb =1e0,du invert  000364 aa 000000 5130 00 358 fneg 0 000365 0a 000344 7100 00 359 tra group_nand4  360  000366 361 group_nor:  000366 aa 000000 6200 00 362 eax0 0 indicate will load zero if unequal operands  000367 0a 000333 7100 00 363 tra group_nand1  364  000370 365 zero_or_one:  000370 aa 400000 000000 366 oct 400000000000  000371 aa 002400 000000 367 oct 002400000000  000372 368 return_last_element:  000372 aa 2 00000 4331 00 369 dfld bp|0  000373 0a 000376 7100 00 370 tra return_result  371  000374 372 see_whats_left: "any left after doing those mod 4?  000374 aa 000000 1020 03 373 cmpx2 0,du see if zero  000375 0a 000025 6010 10 374 tnz simple_transfer,x0 no, do operation  375  000376 376 return_result: "place to return result  000376 aa 0 00014 4721 20 377 dfstr ap|result,* store into arg, rounding for accuracy  000377 aa 7 00044 7101 20 378 short_return  379  000400 380 zerodivide: 000400 aa 0 00016 3521 20 381 eppbp ap|zerodivide_label,* get ptr to label  000401 aa 2 00000 3521 20 382 eppbp bp|0,* load label.codeptr  000402 aa 6 00024 2521 00 383 spribp sp|stack_frame.return_ptr change return location (alternate return!)  000403 aa 7 00044 7101 20 384 short_return  385 "  386 include stack_frame  1-1 "  1-2 " BEGIN INCLUDE FILE ... stack_frame.incl.alm 6/72 RBS  1-3 "  1-4 " Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr  1-5 " Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager_bit & main_proc_bit 1-6 " Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr  1-7 "  000020 1-8 equ stack_frame.prev_sp,16 000020 1-9 equ stack_frame.condition_word,16  000022 1-10 equ stack_frame.next_sp,18 000022 1-11 equ stack_frame.signaller_word,18  000024 1-12 equ stack_frame.return_ptr,20  000026 1-13 equ stack_frame.entry_ptr,22  000030 1-14 equ stack_frame.operator_ptr,24  000030 1-15 equ stack_frame.lp_ptr,24  000032 1-16 equ stack_frame.arg_ptr,26 000034 1-17 equ stack_frame.static_ptr,28  000035 1-18 equ stack_frame.support_ptr,29 " only used by fortran I/O  000036 1-19 equ stack_frame.on_unit_rel_ptrs,30  000037 1-20 equ stack_frame.operator_ret_ptr,31  000037 1-21 equ stack_frame.translator_id,31  000040 1-22 equ stack_frame.regs,32  000060 1-23 equ stack_frame.min_length,48  000020 1-24 equ stack_frame.flag_word,16  020000 1-25 bool stack_frame.main_proc_bit,020000 (DL) 010000 1-26 bool stack_frame.run_unit_manager,010000 (DL)  004000 1-27 bool stack_frame.signal_bit,004000 (DL)  002000 1-28 bool stack_frame.crawl_out_bit,002000 (DL) 001000 1-29 bool stack_frame.signaller_bit,001000 (DL) 000400 1-30 bool stack_frame.link_trap_bit,000400 (DL) 000200 1-31 bool stack_frame.support_bit,000200 (DL)  000100 1-32 bool stack_frame.condition_bit,000100 (DL) 1-33  1-34 "  1-35 " END INCLUDE FILE ... stack_frame.incl.alm  1-36 "  387 end  NO LITERALS  NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000404 5a 000003 000000 000405 5a 000043 600000 000406 aa 000000 000000 000407 55 000015 000002 000410 5a 000002 400003 000411 55 000006 000015 000412 aa 030 141 160 154 000413 aa 137 162 145 144 000414 aa 165 143 164 151 000415 aa 157 156 137 141 000416 aa 160 160 145 156 000417 aa 144 141 147 145 000420 aa 137 000 000 000 000421 55 000022 000003 000422 0a 000000 400000 000423 55 000020 000003 000424 aa 006 144 151 166 divide  000425 aa 151 144 145 000 000426 55 000034 000015 000427 0a 000000 400000 000430 55 000025 000003 000431 aa 030 141 160 154 apl_reduction_appendage_  000432 aa 137 162 145 144 000433 aa 165 143 164 151 000434 aa 157 156 137 141 000435 aa 160 160 145 156 000436 aa 144 141 147 145 000437 aa 137 000 000 000 000440 55 000002 000022 000441 6a 000000 400002 000442 55 000037 000003 000443 aa 014 163 171 155 symbol_table  000444 aa 142 157 154 137 000445 aa 164 141 142 154 000446 aa 145 000 000 000 DEFINITIONS HASH TABLE  000447 aa 000000 000015 000450 aa 000000 000000 000451 aa 000000 000000 000452 aa 000000 000000 000453 aa 000000 000000 000454 aa 000000 000000 000455 aa 000000 000000 000456 5a 000015 000000 000457 5a 000034 000000 000460 aa 000000 000000 000461 5a 000022 000000 000462 aa 000000 000000 000463 aa 000000 000000 000464 aa 000000 000000 NO EXTERNAL NAMES  NO TRAP POINTER WORDS  TYPE PAIR BLOCKS  000465 aa 000001 000000 000466 aa 000000 000000 INTERNAL EXPRESSION WORDS 000467 aa 000000 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000404 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000010 000007 a2 000000 000000 SYMBOL INFORMATION SYMBOL TABLE HEADER  000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000004 000004 aa 000000 112143 000005 aa 305203 523135 000006 aa 000000 112272 000007 aa 255005 632474 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 000172 000020 aa 000000 000125 000021 aa 000000 000160 000022 aa 000163 000125 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 040066 056066 000030 aa 040040 116157 000031 aa 166145 155142 000032 aa 145162 040061 000033 aa 071070 062040 000034 aa 115141 162164 000035 aa 151156 163157 000036 aa 156056 123171 000037 aa 163115 141151 000040 aa 156164 056155 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 154151 163164 000045 aa 040040 040040 000046 aa 040040 040040 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040040 040040 000057 aa 040040 040040 000060 aa 040040 040040 000061 aa 040040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000002 000066 aa 000076 000065 000067 aa 122721 262636 000070 aa 000000 112272 000071 aa 152215 600000 000072 aa 000114 000041 000073 aa 052721 247134 000074 aa 000000 105272 000075 aa 317215 400000 000076 aa 076163 160145 >special_ldd>on>apl.1129>apl_reduction_appendage_.alm  000077 aa 143151 141154 000100 aa 137154 144144 000101 aa 076157 156076 000102 aa 141160 154056 000103 aa 061061 062071 000104 aa 076141 160154 000105 aa 137162 145144 000106 aa 165143 164151 000107 aa 157156 137141 000110 aa 160160 145156 000111 aa 144141 147145 000112 aa 137056 141154 000113 aa 155040 040040 000114 aa 076154 144144 >ldd>include>stack_frame.incl.alm  000115 aa 076151 156143 000116 aa 154165 144145 000117 aa 076163 164141 000120 aa 143153 137146 000121 aa 162141 155145 000122 aa 056151 156143 000123 aa 154056 141154 000124 aa 155040 040040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number  0 apl_reduction_appendage_ apl_reduction_appendage_: 33, 43.  2 array_ptr apl_reduction_appendage_: 35, 45. 4 column_base apl_reduction_appendage_: 36, 48, 52.  0 divide apl_reduction_appendage_: 34, 44. 312 group_and apl_reduction_appendage_: 104, 296, 338.  314 group_and_loop apl_reduction_appendage_: 300, 310, 316.  220 group_divide apl_reduction_appendage_: 96, 232, 259.  254 group_max apl_reduction_appendage_: 97, 262, 276.  273 group_min apl_reduction_appendage_: 98, 279, 293.  176 group_minus apl_reduction_appendage_: 94, 210, 220.  211 group_multiply apl_reduction_appendage_: 95, 223, 229.  332 group_nand apl_reduction_appendage_: 106, 318. 333 group_nand1 apl_reduction_appendage_: 321, 344, 363.  336 group_nand2 apl_reduction_appendage_: 325, 349. 341 group_nand3 apl_reduction_appendage_: 329, 354. 344 group_nand4 apl_reduction_appendage_: 333, 359. 366 group_nor apl_reduction_appendage_: 107, 361. 327 group_or apl_reduction_appendage_: 105, 313. 167 group_plus apl_reduction_appendage_: 93, 201, 207.  6 highest_element apl_reduction_appendage_: 37, 51. 10 interval_between_elements apl_reduction_appendage_: 38, 56.  160 invert_ac apl_reduction_appendage_: 182, 188. 352 invert_ac_group1 apl_reduction_appendage_: 323, 341. 355 invert_ac_group2 apl_reduction_appendage_: 327, 346. 360 invert_ac_group3 apl_reduction_appendage_: 331, 351. 363 invert_ac_group4 apl_reduction_appendage_: 335, 356. 146 invert_and_return apl_reduction_appendage_: 164, 174, 302, 304, 306, 308. 44 offset_is_one apl_reduction_appendage_: 64, 86. 12 operation apl_reduction_appendage_: 39, 47. 14 result apl_reduction_appendage_: 40, 377. 372 return_last_element apl_reduction_appendage_: 53, 368. 376 return_result apl_reduction_appendage_: 115, 122, 128, 140, 148, 156, 160, 167, 171,  177, 186, 193, 298, 315, 370, 376.  374 see_whats_left apl_reduction_appendage_: 208, 221, 230, 260, 277, 294, 311, 339, 372.  134 simple_and apl_reduction_appendage_: 79, 158. 136 simple_and_loop apl_reduction_appendage_: 161, 166. 106 simple_divide apl_reduction_appendage_: 71, 130, 139.  120 simple_max apl_reduction_appendage_: 72, 142, 147.  126 simple_min apl_reduction_appendage_: 73, 150, 155.  75 simple_minus apl_reduction_appendage_: 69, 117, 121.  102 simple_multiply apl_reduction_appendage_: 70, 124, 127.  151 simple_nand apl_reduction_appendage_: 81, 179, 185, 192, 197.  165 simple_nor apl_reduction_appendage_: 82, 195. 143 simple_or apl_reduction_appendage_: 80, 169. 136 simple_or_loop apl_reduction_appendage_: 162, 172. 71 simple_plus apl_reduction_appendage_: 68, 111, 114.  25 simple_transfer apl_reduction_appendage_: 65, 67, 90, 374. 32 stack_frame.arg_ptr stack_frame: 16. 100 stack_frame.condition_bit stack_frame: 32.  20 stack_frame.condition_word stack_frame: 9.  2000 stack_frame.crawl_out_bit stack_frame: 28.  26 stack_frame.entry_ptr stack_frame: 13. 20 stack_frame.flag_word stack_frame: 24. 400 stack_frame.link_trap_bit stack_frame: 30.  30 stack_frame.lp_ptr stack_frame: 15. 20000 stack_frame.main_proc_bit stack_frame: 25.  60 stack_frame.min_length stack_frame: 23. 22 stack_frame.next_sp stack_frame: 10. 36 stack_frame.on_unit_rel_ptrs stack_frame: 19.  30 stack_frame.operator_ptr stack_frame: 14.  37 stack_frame.operator_ret_ptr stack_frame: 20.  20 stack_frame.prev_sp stack_frame: 8. 40 stack_frame.regs stack_frame: 22. 24 stack_frame.return_ptr apl_reduction_appendage_: 383,  stack_frame: 12. 10000 stack_frame.run_unit_manager stack_frame: 26.  1000 stack_frame.signaller_bit stack_frame: 29.  22 stack_frame.signaller_word stack_frame: 11.  4000 stack_frame.signal_bit stack_frame: 27. 34 stack_frame.static_ptr stack_frame: 17. 200 stack_frame.support_bit stack_frame: 31. 35 stack_frame.support_ptr stack_frame: 18. 37 stack_frame.translator_id stack_frame: 21.  400 zerodivide apl_reduction_appendage_: 134, 236, 242, 248, 254, 380. 16 zerodivide_label apl_reduction_appendage_: 41, 381. 370 zero_or_one apl_reduction_appendage_: 183, 324, 328, 332, 336, 365. NO FATAL ERRORS  ----------------------------------------------------------- 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