ASSEMBLY LISTING OF SEGMENT >special_ldd>on>apl.1129>apl_dyadic_bool_appendage_.alm ASSEMBLED ON: 11/29/83 1614.5 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 " apl_dyadic_bool_appendage_ -- fast boolean operations on boolean values  11 "  12 " Benson I. Margulies February 80.  13 "  000000 14 name apl_dyadic_bool_appendage_  000062 15 segdef and,or,eq,nand,nor,neq  16 "  17 " faster versions of dyadic and or nand nor equal(nxor) nequal(xor) 18  19 " these all depend on the internal representation of floating point values  20 "  21 "  22 " calling sequence: 23 " declare apl_dyadic_bool_appendage_$XXX entry (ptr, ptr, ptr, fixed bin (21) aligned); 24 " call apl_dyadic_bool_appendage_$XXX (lptr, rptr, rsptr, count);  25 "  26 " lptr first arg array  27 " rptr second arg array 28 " rsptr result array  29 " count number of elements to process  30 "  31 " General strategy: for AND, OR, NAND, and NOR, we need never  32 " load the arguments. we can set the indicators -- for OR,  33 " if first is 1 then stop & store 1, else check second  34 " for AND, if first is zero, store zero, else check second. 35 " for eq / neq things are similar.  36  400000 37 bool fzero,400000 " top 18 bits of a floating-point zero.  002400 38 bool fone,002400 " top 18 bits of a floating-point one.  39 "  40 " SETUP. Subroutine to setup registers from arguments.  41 "  42 " Usage:  43 " tsx3 setup  44 "  000000 45 setup:  000000 aa 0 00010 2351 20 46 lda pr0|8,* " count => a  000001 aa 000001 7350 00 47 als 1 " (count) * 2 is offset of last value in vectors (points to second word)  000002 aa 000000 6210 05 48 eax1 0,al " hide it in x1 for limit  000003 aa 0 00002 3535 20 49 epp3 pr0|2,* " ptr to ptr to first argument  000004 aa 3 00000 3535 20 50 epp3 pr3|0,*  000005 aa 0 00004 3701 20 51 epp4 pr0|4,* " ptr to ptr to second argument  000006 aa 4 00000 3701 20 52 epp4 pr4|0,*  000007 aa 0 00006 3715 20 53 epp5 pr0|6,* " ptr to ptr to result  000010 aa 5 00000 3715 20 54 epp5 pr5|0,*  000011 aa 400000 2350 03 55 lda fzero,du " zero in a  000012 aa 002400 2360 03 56 ldq fone,du " and one in q  000013 aa 000000 7100 13 57 tra 0,x3 " back to where you left it  58 "  59 " AND. First zero stores zero.  60 "  000014 0a 000000 7030 00 61 and: tsx3 setup 000015 0a 000016 6220 00 62 eax2 and_loop  000016 63 and_loop:  000016 aa 3 77776 2341 11 64 szn pr3|-2,x1 " L=0?  000017 0a 000067 6040 00 65 tmi return_zero " yes  000020 aa 4 77776 2341 11 66 szn pr4|-2,x1 " R=0?  000021 0a 000067 6040 00 67 tmi return_zero " yes  000022 0a 000071 7100 00 68 tra return_one " neither  69 "  70 " NAND. First zero stores one.  71 "  000023 72 nand:  000023 0a 000000 7030 00 73 tsx3 setup 000024 0a 000025 6220 00 74 eax2 nand_loop 000025 75 nand_loop: 000025 aa 3 77776 2341 11 76 szn pr3|-2,x1 " L=0?  000026 0a 000071 6040 00 77 tmi return_one " yes  000027 aa 4 77776 2341 11 78 szn pr4|-2,x1 " R=0?  000030 0a 000071 6040 00 79 tmi return_one " yes  000031 0a 000067 7100 00 80 tra return_zero " neither  81 "  82 " OR. First one stores one. 83 "  000032 0a 000000 7030 00 84 or: tsx3 setup  000033 0a 000034 6220 00 85 eax2 or_loop  000034 86 or_loop:  000034 aa 3 77776 2341 11 87 szn pr3|-2,x1 " L=1?  000035 0a 000071 6050 00 88 tpl return_one " yes  000036 aa 4 77776 2341 11 89 szn pr4|-2,x1 " R=1?  000037 0a 000071 6050 00 90 tpl return_one " yes  000040 0a 000067 7100 00 91 tra return_zero " neither  92 "  93 " NOR. First one stores zero.  94 "  000041 0a 000000 7030 00 95 nor: tsx3 setup 000042 0a 000043 6220 00 96 eax2 nor_loop  000043 97 nor_loop:  000043 aa 3 77776 2341 11 98 szn pr3|-2,x1 " L=1?  000044 0a 000067 6050 00 99 tpl return_zero " yes  000045 aa 4 77776 2341 11 100 szn pr4|-2,x1 " R=1?  000046 0a 000067 6050 00 101 tpl return_zero " yes  000047 0a 000071 7100 00 102 tra return_one " neither  103 "  104 " EQUAL.  105 "  000050 106 eq: 000050 0a 000000 7030 00 107 tsx3 setup 000051 0a 000052 6220 00 108 eax2 eq_loop  000052 109 eq_loop:  000052 aa 3 77776 2341 11 110 szn pr3|-2,x1 " L=1?  000053 0a 000057 6050 00 111 tpl try_one " yes 000054 aa 4 77776 2341 11 112 try_zero: szn pr4|-2,x1 " (L=0), R=0?  000055 0a 000071 6040 00 113 tmi return_one " yes  000056 0a 000067 7100 00 114 tra return_zero " no  000057 aa 4 77776 2341 11 115 try_one: szn pr4|-2,x1 " (L=1), R=1?  000060 0a 000071 6050 00 116 tpl return_one " yes  000061 0a 000067 7100 00 117 tra return_zero " no  118 "  119 " NOT EQUAL.  120 "  000062 121 neq:  000062 0a 000000 7030 00 122 tsx3 setup 000063 0a 000064 6220 00 123 eax2 neq_loop  000064 124 neq_loop:  000064 aa 3 77776 2341 11 125 szn pr3|-2,x1 " L=0?  000065 0a 000057 6040 00 126 tmi try_one " yes 000066 0a 000054 7100 00 127 tra try_zero " no 128 "  129 " BOTTOM OF LOOP. Store a zero or one, and go around again. 130 "  000067 131 return_zero:  000067 aa 5 77776 7551 11 132 sta pr5|-2,x1 " store the top half of a zero  000070 0a 000072 7100 00 133 tra around 000071 134 return_one: 000071 aa 5 77776 7561 11 135 stq pr5|-2,x1 " store the top half of a one  000072 136 around: 000072 aa 5 77777 4501 11 137 stz pr5|-1,x1 " put out zero second word  000073 aa 777776 6210 11 138 eax1 -2,x1 " bump to previous value.  000074 aa 000000 6054 12 139 tpnz 0,x2 " go to appropriate loop  000075 aa 7 00044 7101 20 140 short_return  141 end  NO LITERALS  NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000076 5a 000003 000000 000077 5a 000055 600000 000100 aa 000000 000000 000101 55 000015 000002 000102 5a 000002 400003 000103 55 000006 000015 000104 aa 032 141 160 154 000105 aa 137 144 171 141 000106 aa 144 151 143 137 000107 aa 142 157 157 154 000110 aa 137 141 160 160 000111 aa 145 156 144 141 000112 aa 147 145 137 000 000113 55 000021 000003 000114 0a 000062 400000 000115 55 000020 000003 000116 aa 003 156 145 161 neq 000117 55 000025 000015 000120 0a 000041 400000 000121 55 000024 000003 000122 aa 003 156 157 162 nor 000123 55 000032 000021 000124 0a 000023 400000 000125 55 000030 000003 000126 aa 004 156 141 156 nand  000127 aa 144 000 000 000 000130 55 000036 000025 000131 0a 000050 400000 000132 55 000035 000003 000133 aa 002 145 161 000 eq  000134 55 000042 000032 000135 0a 000032 400000 000136 55 000041 000003 000137 aa 002 157 162 000 or  000140 55 000046 000036 000141 0a 000014 400000 000142 55 000045 000003 000143 aa 003 141 156 144 and 000144 55 000002 000042 000145 6a 000000 400002 000146 55 000051 000003 000147 aa 014 163 171 155 symbol_table  000150 aa 142 157 154 137 000151 aa 164 141 142 154 000152 aa 145 000 000 000 DEFINITIONS HASH TABLE  000153 aa 000000 000015 000154 5a 000032 000000 000155 aa 000000 000000 000156 aa 000000 000000 000157 aa 000000 000000 000160 aa 000000 000000 000161 5a 000042 000000 000162 5a 000046 000000 000163 5a 000036 000000 000164 aa 000000 000000 000165 aa 000000 000000 000166 5a 000025 000000 000167 5a 000021 000000 000170 5a 000015 000000 NO EXTERNAL NAMES  NO TRAP POINTER WORDS  TYPE PAIR BLOCKS  000171 aa 000001 000000 000172 aa 000000 000000 INTERNAL EXPRESSION WORDS 000173 aa 000000 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000076 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 254151 411715 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 000132 000020 aa 000000 000110 000021 aa 000000 000121 000022 aa 000124 000110 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 000001 000066 aa 000072 000067 000067 aa 122721 262525 000070 aa 000000 112272 000071 aa 151755 000000 000072 aa 076163 160145 >special_ldd>on>apl.1129>apl_dyadic_bool_appendage_.alm 000073 aa 143151 141154 000074 aa 137154 144144 000075 aa 076157 156076 000076 aa 141160 154056 000077 aa 061061 062071 000100 aa 076141 160154 000101 aa 137144 171141 000102 aa 144151 143137 000103 aa 142157 157154 000104 aa 137141 160160 000105 aa 145156 144141 000106 aa 147145 137056 000107 aa 141154 155040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number  14 and apl_dyadic_bool_appendage_: 15, 61. 16 and_loop apl_dyadic_bool_appendage_: 62, 63. 72 around apl_dyadic_bool_appendage_: 133, 136. 50 eq apl_dyadic_bool_appendage_: 15, 106. 52 eq_loop apl_dyadic_bool_appendage_: 108, 109. 2400 fone apl_dyadic_bool_appendage_: 38, 56. 400000 fzero apl_dyadic_bool_appendage_: 37, 55. 23 nand apl_dyadic_bool_appendage_: 15, 72. 25 nand_loop apl_dyadic_bool_appendage_: 74, 75. 62 neq apl_dyadic_bool_appendage_: 15, 121. 64 neq_loop apl_dyadic_bool_appendage_: 123, 124. 41 nor apl_dyadic_bool_appendage_: 15, 95. 43 nor_loop apl_dyadic_bool_appendage_: 96, 97. 32 or apl_dyadic_bool_appendage_: 15, 84. 34 or_loop apl_dyadic_bool_appendage_: 85, 86. 71 return_one apl_dyadic_bool_appendage_: 68, 77, 79, 88, 90, 102, 113, 116, 134.  67 return_zero apl_dyadic_bool_appendage_: 65, 67, 80, 91, 99, 101, 114, 117, 131.  0 setup apl_dyadic_bool_appendage_: 45, 61, 73, 84, 95, 107, 122.  57 try_one apl_dyadic_bool_appendage_: 111, 115, 126.  54 try_zero apl_dyadic_bool_appendage_: 112, 127. 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