ASSEMBLY LISTING OF SEGMENT >special_ldd>on>apl.1129>apl_rho_appendage_.alm ASSEMBLED ON: 11/29/83 1616.4 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  11 " This module does the actual replication work of the dyadic rho operator.  12 " The caller passes 3 arguments. The first is the value bead of the right argument to the  13 " dyadic rho (for the operand to be replicated). The second is the value bead of the result,  14 " with all fields filled. The third is an array of words (currently only 2 are used) for  15 " temporary scratch storage for my use. This avoids a push. The basic algorithm is 16 " as follows. If the type field of the result bead indicates a numeric operand the lengths 17 " of the argument and result arrays are multiplied by 8 (the number of characters  18 " per doubleword float). If the arg length is 1, an MVT instruction with a one-character  19 " translation table is used. Otherwise, copies of the argument are moved into  20 " the result field until either the result is filled or until  21 " 32 chars are created. If 32 chars are created first, with more left to do, an 22 " overlapping MLR instruction is used to fill the rest. 23 " See BN-86A-2 (GMAP manual), page 8-31, which says four-double words is the  24 " minimum winning overlapping MLR size. (for no particular reason we use 5 double-words as the cutoff). 25 "  26 " a number of chars done already  27 " q number of chars in argument 28 " x4 type field of result, used merely for testing  29 " pr1 points to scratch storage passed from caller  30 " pr2 points to right arg in copy loop, beginning of result in overlap code 31 " pr3 points to result array  32 " pr4 points to result value bead  33 " pr5 points to argument value bead 34 "  35 "  36 " Created by G. Gordon Benedict on Jan 23, 1974 37 " Modified 741015 by PG to use MVT instruction to replicate a single character. 38 " Modified 741101 by PG to fix bug introduced by GGB, and improve code. 39  000000 40 segdef apl_rho_appendage_  41  42  000002 43 equ dupl_vb,2 ptr to value bead for arg to duplicate 000004 44 equ result_vb,4 ptr to value bead for result arg  000006 45 equ automatic_storage,6 offset in args of temp storage from caller  46  47 include apl_value_bead 000000 1-1 equ value_bead.header.type,0 offset in value bead of type field  000001 1-2 equ value_bead.reference_count,1 offset of ref count  000002 1-3 equ value_bead.total_data_elements,2 offset in vb of data elements 000003 1-4 equ value_bead.rhorho,3 offset in vb of rhorho  000004 1-5 equ value_bead.data_pointer,4 packed pointer to data array 000005 1-6 equ value_bead.rho,5 start of rho vector (if there is one)  48  000000 49 equ no_arg_chars,0 no. chars in arg  000001 50 equ no_to_create,1 no. chars in result  51  000000 52 apl_rho_appendage_: 000000 aa 0 00002 3715 20 53 epp5 pr0|dupl_vb,* get pointer to value bead to arg  000001 aa 0 00004 3701 20 54 epp4 pr0|result_vb,* get pointer to value bead to result  000002 aa 0 00006 3515 20 55 epp1 pr0|automatic_storage,* ptr to scratch space from caller  56  000003 aa 5 00004 7621 00 57 lprp2 pr5|value_bead.data_pointer get pointer to data array from arg v.b.  000004 aa 4 00004 7631 00 58 lprp3 pr4|value_bead.data_pointer same for result  000005 aa 4 00000 2241 00 59 ldx4 pr4|value_bead.header.type get type of result 000006 aa 4 00002 2351 00 60 lda pr4|value_bead.total_data_elements get no. of elements in result  000007 0a 000051 6000 00 61 tze return wants null string, has it. 62  000010 aa 5 00002 2361 00 63 ldq pr5|value_bead.total_data_elements get number of elements in arg  000011 aa 000400 3040 03 64 canx4 =o400,du is it char?  000012 aa 000002 6010 04 65 tnz 2,ic yes  000013 aa 000003 7370 00 66 lls 3 times 8 (# chars/double float)  000014 aa 1 00001 7551 00 67 sta pr1|no_to_create number of chars to create 000015 aa 1 00000 7561 00 68 stq pr1|no_arg_chars number of chars in input arg  000016 aa 000001 1160 07 69 cmpq 1,dl if arg length is 1, can special case  000017 0a 000025 6010 00 70 tnz long_case use general code.  71  000020 aa 000140 1604 00 72 mvt (),(pr,rl),fill(000) move fill char  000021 aa 000000 0000 00 73 arg 0 (because no source chars)  000022 aa 300000 000005 74 desc9a pr3|0,al into target  000023 aa 2 00000 0001 00 75 arg pr2|0 translate table is input arg of 1 char. 000024 aa 7 00044 7101 20 76 short_return all done.  77  000025 78 long_case:  000025 aa 1 00000 1151 00 79 cmpa pr1|no_arg_chars if asking for less than already have,  000026 aa 000003 6050 04 80 tpl 3,ic move only number needed. 000027 aa 1 00000 7551 00 81 sta pr1|no_arg_chars update stored value  000030 aa 1 00000 2361 00 82 ldq pr1|no_arg_chars and copy in register  000031 aa 000000 2350 07 83 lda 0,dl have done 0 chars so far.  84 " Q has no_arg_chars.  85  000032 86 duplicate:  000032 aa 1 00001 1151 00 87 cmpa pr1|no_to_create up to limit? 000033 0a 000051 6050 00 88 tpl return yes.  000034 aa 0 00145 1005 40 89 mlr (pr,rl),(pr,rl,al),fill(000) move one chunk of no_arg_chars  000035 aa 200000 000006 90 desc9a pr2|0,ql from source  000036 aa 300000 000006 91 desc9a pr3|0,ql to target 000037 aa 1 00000 0751 00 92 ada pr1|no_arg_chars update offset 000040 aa 000050 1150 07 93 cmpa 40,dl moved 5 double words yet?  000041 0a 000032 6040 00 94 tmi duplicate nope, keep going.  95  000042 aa 4 00004 7621 00 96 lprp2 pr4|value_bead.data_pointer reset for overlapping mlr.  000043 aa 1 00001 1551 00 97 ssa pr1|no_to_create compute remaining # to move.  000044 aa 1 00001 3361 00 98 lcq pr1|no_to_create get in q. 000045 0a 000051 6044 00 99 tmoz return done. 000046 aa 0 00145 1005 40 100 mlr (pr,rl),(pr,rl,al),fill(000) move remainder..overlapped!  000047 aa 200000 000006 101 desc9a pr2|0,ql source is now base of target itself  000050 aa 300000 000006 102 desc9a pr3|0,ql to target.  103  000051 104 return: 000051 aa 7 00044 7101 20 105 short_return  106 end  NO LITERALS  NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000052 5a 000003 000000 000053 5a 000032 600000 000054 aa 000000 000000 000055 55 000013 000002 000056 5a 000002 400003 000057 55 000006 000013 000060 aa 022 141 160 154 000061 aa 137 162 150 157 000062 aa 137 141 160 160 000063 aa 145 156 144 141 000064 aa 147 145 137 000 000065 55 000023 000003 000066 0a 000000 400000 000067 55 000016 000003 000070 aa 022 141 160 154 apl_rho_appendage_  000071 aa 137 162 150 157 000072 aa 137 141 160 160 000073 aa 145 156 144 141 000074 aa 147 145 137 000 000075 55 000002 000013 000076 6a 000000 400002 000077 55 000026 000003 000100 aa 014 163 171 155 symbol_table  000101 aa 142 157 154 137 000102 aa 164 141 142 154 000103 aa 145 000 000 000 DEFINITIONS HASH TABLE  000104 aa 000000 000015 000105 5a 000013 000000 000106 aa 000000 000000 000107 aa 000000 000000 000110 aa 000000 000000 000111 aa 000000 000000 000112 aa 000000 000000 000113 5a 000023 000000 000114 aa 000000 000000 000115 aa 000000 000000 000116 aa 000000 000000 000117 aa 000000 000000 000120 aa 000000 000000 000121 aa 000000 000000 NO EXTERNAL NAMES  NO TRAP POINTER WORDS  TYPE PAIR BLOCKS  000122 aa 000001 000000 000123 aa 000000 000000 INTERNAL EXPRESSION WORDS LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000052 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 255034 537355 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 000142 000020 aa 000000 000123 000021 aa 000000 000130 000022 aa 000133 000123 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 000057 000067 aa 122721 262641 000070 aa 000000 112272 000071 aa 152257 200000 000072 aa 000112 000044 000073 aa 106701 742057 000074 aa 000000 110670 000075 aa 212427 200000 000076 aa 076163 160145 >special_ldd>on>apl.1129>apl_rho_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 150157 000106 aa 137141 160160 000107 aa 145156 144141 000110 aa 147145 137056 000111 aa 141154 155040 000112 aa 076154 144144 >ldd>include>apl_value_bead.incl.alm  000113 aa 076151 156143 000114 aa 154165 144145 000115 aa 076141 160154 000116 aa 137166 141154 000117 aa 165145 137142 000120 aa 145141 144056 000121 aa 151156 143154 000122 aa 056141 154155 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number  0 apl_rho_appendage_ apl_rho_appendage_: 40, 52.  6 automatic_storage apl_rho_appendage_: 45, 55.  32 duplicate apl_rho_appendage_: 86, 94.  2 dupl_vb apl_rho_appendage_: 43, 53.  25 long_case apl_rho_appendage_: 70, 78.  0 no_arg_chars apl_rho_appendage_: 49, 68, 79, 81, 82, 92.  1 no_to_create apl_rho_appendage_: 50, 67, 87, 97, 98. 4 result_vb apl_rho_appendage_: 44, 54.  51 return apl_rho_appendage_: 61, 88, 99, 104.  4 value_bead.data_pointer apl_rho_appendage_: 57, 58, 96, apl_value_bead: 5.  0 value_bead.header.type apl_rho_appendage_: 59, apl_value_bead: 1.  1 value_bead.reference_count apl_value_bead: 2. 5 value_bead.rho apl_value_bead: 6.  3 value_bead.rhorho apl_value_bead: 4.  2 value_bead.total_data_elements apl_rho_appendage_: 60, 63,  apl_value_bead: 3.  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