ASSEMBLY LISTING OF SEGMENT >spec>install>1110>double_arc_sine_.alm ASSEMBLED ON: 11/11/89 0946.1 mst Sat OPTIONS USED: -target l68 list symbols ASSEMBLED BY: ALM Version 8.14 March 1989 ASSEMBLER CREATED: 06/09/89 1002.3 mst Fri 1 " *********************************************************** 2 " * * 3 " * Copyright, (C) Honeywell Bull Inc., 1987 * 4 " * * 5 " * Copyright, (C) Honeywell Information Systems Inc., 1985 * 6 " * * 7 " *********************************************************** 8 9 " HISTORY COMMENTS: 10 " 1) change(86-07-15,Ginter), approve(86-07-15,MCR7287), 11 " audit(86-07-16,Mabey), install(86-07-28,MR12.0-1104): 12 " Change by M Mabey (installed by Ginter) to do a dfcmg instead of fcmg 13 " when testing for the upper bound on input (bound_4). 14 " END HISTORY COMMENTS 15 16 000000 17 name double_arc_sine_ 18 " Modification history: 19 " Written by H. Hoover, M. Mabey, and B. Wong, April 1985, 20 " based on the GCOS routine '7nam'. 21 " 22 " Function: Approximate to double precision the arcsine or arccosine of 23 " a value in the range [-1:1]. 24 " 25 " Modified: May 10, 1985 by M Mabey - do a dfcmg instead of fcmg when 26 " testing for the upper bound on input (bound_4). 27 " 28 " Entry: through the appropriately named entry point with: 29 " EAQ = a value in the range [-1:1] 30 " PR2 = the address of a 20 word, even-word aligned scratch area. 31 " 12 words are used in this program and another 8 are allocated 32 " for the double_square_root_ routine. 33 " PR3 = the return address. 34 " 35 " Exit: EAQ = the desired angle. 36 " 37 " Uses: X2, X3, X4, PR5 38 " X2 = indicates BFP or HFP mode - all the floating point math 39 " routines use this register for the same purpose. 40 " X3 = saves a return address from arcsine. 41 " X4 = saves a return address from part_arcsine. 42 " PR5 = a temporary 43 " The X register usage starts at X2 because this function calls 44 " double_square_root_ which uses registers X0 through X2. Register 45 " X2 is used for the same purpose in both routines. 46 " 47 " Since double_square_root_ expects the return address in PR3, 48 " this register must be saved before the call is made. In addition, 49 " double_square_root_ expects PR2 to point to an even-word aligned, 50 " 8 word long working storage area. 51 000004 52 segdef double_arc_sine_radians_ 000000 53 segdef hfp_double_arc_sine_radians_ 000015 54 segdef double_arc_sine_degrees_ 000010 55 segdef hfp_double_arc_sine_degrees_ 000047 56 segdef double_arc_cosine_radians_ 000022 57 segdef hfp_double_arc_cosine_radians_ 000123 58 segdef double_arc_cosine_degrees_ 000074 59 segdef hfp_double_arc_cosine_degrees_ 60 000000 61 segref math_constants_,half_pi,hfp_half_pi,hfp_one_radian,one_radian,pi,quarter_pi 62 000000 63 equ abs_x,0 000002 64 equ arg_x,2 000004 65 equ y,4 000006 66 equ yy,6 000010 67 equ q,8 000012 68 equ space_used,10 000010 69 equ qq,q 000000 70 equ temp,abs_x 000000 71 equ x_minus_one,temp 000000 72 equ BFP,0 000002 73 equ HFP,2 000000 74 equ ACOS,0 000001 75 equ ASIN,1 76 002040 77 bool P1.0H,002040 " yields HFP +1.0 under 'du' modification 002100 78 bool P2.0H,002100 " yields HFP +2.0 under 'du' modification 004264 79 bool P90.0H,004264 " yields HFP +90.0 under 'du' modification 80 000000 81 hfp_double_arc_sine_radians_: 000000 aa 000002 6220 00 82 eax2 HFP " 2 word offset for HFP constants 000001 0a 000152 7030 00 83 tsx3 arcsine 000002 aa 000000 4730 00 84 dfrd 0 000003 aa 3 00000 7101 00 85 tra pr3|0 " Return to caller 86 000004 87 double_arc_sine_radians_: 000004 aa 000000 6220 00 88 eax2 BFP 000005 0a 000152 7030 00 89 tsx3 arcsine 000006 aa 000000 4730 00 90 dfrd 0 000007 aa 3 00000 7101 00 91 tra pr3|0 " Return to caller 92 000010 93 hfp_double_arc_sine_degrees_: 000010 aa 000002 6220 00 94 eax2 HFP 000011 0a 000152 7030 00 95 tsx3 arcsine 000012 4a 4 00010 4631 20 96 dfmp hfp_one_radian " Convert to degrees 000013 aa 000000 4730 00 97 dfrd 0 000014 aa 3 00000 7101 00 98 tra pr3|0 " Return to caller 99 000015 100 double_arc_sine_degrees_: 000015 aa 000000 6220 00 101 eax2 BFP 000016 0a 000152 7030 00 102 tsx3 arcsine 000017 4a 4 00012 4631 20 103 dfmp one_radian " Convert to degrees 000020 aa 000000 4730 00 104 dfrd 0 000021 aa 3 00000 7101 00 105 tra pr3|0 " Return to caller 106 000022 107 hfp_double_arc_cosine_radians_: 000022 aa 000002 6220 00 108 eax2 HFP 109 000023 0a 000466 5150 00 110 fcmp hfp_bound_2 " is the number close to one? 000024 0a 000042 6040 00 111 tmi hfp_acos_rad_not_near_one 000025 0a 000476 4270 00 112 dfcmg hfp_bound_4 " is the number greater than one? 000026 0a 000244 6054 00 113 tpnz arcsine_domain_error 000027 aa 002040 5750 03 114 fsb P1.0H,du " EAQ := x - 1 000030 aa 2 00000 4571 00 115 dfst pr2|x_minus_one 000031 aa 002100 4750 03 116 fad P2.0H,du " EAQ := 1 + x 000032 aa 000000 5130 00 117 fneg 0 " EAQ := -(1 + x) 000033 aa 2 00000 4631 00 118 dfmp pr2|x_minus_one " EAQ := -(1+x)(x-1) = 1+x**2 000034 aa 3 00000 3715 00 119 epp5 pr3|0 " save return pointer 000035 4a 4 00014 2731 20 120 tsp3 |[hfp_double_square_root_] 000036 aa 5 00000 3535 00 121 epp3 pr5|0 " restore return pointer 000037 0a 000152 7030 00 122 tsx3 arcsine " EAQ := asin (sqrt(1+x**2)) 000040 aa 000000 4730 00 123 dfrd 0 000041 aa 3 00000 7101 00 124 tra pr3|0 " return to caller 125 000042 126 hfp_acos_rad_not_near_one: 000042 0a 000152 7030 00 127 tsx3 arcsine 000043 aa 000000 5130 00 128 fneg 0 000044 4a 4 00016 4771 20 129 dfad hfp_half_pi " convert to cosine 000045 aa 000000 4730 00 130 dfrd 0 000046 aa 3 00000 7101 00 131 tra pr3|0 " Return to caller 132 000047 133 double_arc_cosine_radians_: 000047 aa 000000 6220 00 134 eax2 BFP 135 000050 0a 000464 5150 00 136 fcmp bound_2 " is the number close to one? 000051 0a 000067 6040 00 137 tmi acos_rad_not_near_one 000052 0a 000474 4270 00 138 dfcmg bound_4 " is the number greater than one? 000053 0a 000244 6054 00 139 tpnz arcsine_domain_error 000054 aa 002400 5750 03 140 fsb =1.0,du " EAQ := x - 1 000055 aa 2 00000 4571 00 141 dfst pr2|x_minus_one 000056 aa 004400 4750 03 142 fad =2.0,du " EAQ := 1 + x 000057 aa 000000 5130 00 143 fneg 0 " EAQ := -(1 + x) 000060 aa 2 00000 4631 00 144 dfmp pr2|x_minus_one " EAQ := -(1+x)(x-1) = 1+x**2 000061 aa 3 00000 3715 00 145 epp5 pr3|0 " save return pointer 000062 4a 4 00020 2731 20 146 tsp3 |[double_square_root_] 000063 aa 5 00000 3535 00 147 epp3 pr5|0 " restore return pointer 000064 0a 000152 7030 00 148 tsx3 arcsine " EAQ := asin (sqrt(1+x**2)) 000065 aa 000000 4730 00 149 dfrd 0 000066 aa 3 00000 7101 00 150 tra pr3|0 " return to caller 151 000067 152 acos_rad_not_near_one: 000067 0a 000152 7030 00 153 tsx3 arcsine 000070 aa 000000 5130 00 154 fneg 0 000071 4a 4 00022 4771 20 155 dfad half_pi " convert to cosine 000072 aa 000000 4730 00 156 dfrd 0 000073 aa 3 00000 7101 00 157 tra pr3|0 " Return to caller 158 000074 159 hfp_double_arc_cosine_degrees_: 000074 aa 000002 6220 00 160 eax2 HFP 161 000075 0a 000466 5150 00 162 fcmp hfp_bound_2 " is the number close to one? 000076 0a 000115 6040 00 163 tmi hfp_acos_deg_not_near_one 000077 0a 000476 4270 00 164 dfcmg hfp_bound_4 " is the number greater than one? 000100 0a 000244 6054 00 165 tpnz arcsine_domain_error 000101 aa 002040 5750 03 166 fsb P1.0H,du " EAQ := x - 1 000102 aa 2 00000 4571 00 167 dfst pr2|x_minus_one 000103 aa 002100 4750 03 168 fad P2.0H,du " EAQ := 1 + x 000104 aa 000000 5130 00 169 fneg 0 " EAQ := -(1 + x) 000105 aa 2 00000 4631 00 170 dfmp pr2|x_minus_one " EAQ := -(1+x)(x-1) = 1+x**2 000106 aa 3 00000 3715 00 171 epp5 pr3|0 " save return pointer 000107 4a 4 00014 2731 20 172 tsp3 |[hfp_double_square_root_] 000110 aa 5 00000 3535 00 173 epp3 pr5|0 " restore return pointer 000111 0a 000152 7030 00 174 tsx3 arcsine " EAQ := asin (sqrt(1+x**2)) 000112 4a 4 00010 4631 20 175 dfmp hfp_one_radian " convert to degrees 000113 aa 000000 4730 00 176 dfrd 0 000114 aa 3 00000 7101 00 177 tra pr3|0 " return to caller 178 000115 179 hfp_acos_deg_not_near_one: 000115 0a 000152 7030 00 180 tsx3 arcsine 000116 4a 4 00010 4631 20 181 dfmp hfp_one_radian " convert to degrees 000117 aa 000000 5130 00 182 fneg 0 000120 aa 004264 4750 03 183 fad P90.0H,du " convert to cosine 000121 aa 000000 4730 00 184 dfrd 0 000122 aa 3 00000 7101 00 185 tra pr3|0 " Return to caller 186 000123 187 double_arc_cosine_degrees_: 000123 aa 000000 6220 00 188 eax2 BFP 189 000124 0a 000464 5150 00 190 fcmp bound_2 " is the number close to one? 000125 0a 000144 6040 00 191 tmi acos_deg_not_near_one 000126 0a 000474 4270 00 192 dfcmg bound_4 " is the number greater than one? 000127 0a 000244 6054 00 193 tpnz arcsine_domain_error 000130 aa 002400 5750 03 194 fsb =1.0,du " EAQ := x - 1 000131 aa 2 00000 4571 00 195 dfst pr2|x_minus_one 000132 aa 004400 4750 03 196 fad =2.0,du " EAQ := 1 + x 000133 aa 000000 5130 00 197 fneg 0 " EAQ := -(1 + x) 000134 aa 2 00000 4631 00 198 dfmp pr2|x_minus_one " EAQ := -(1+x)(x-1) = 1+x**2 000135 aa 3 00000 3715 00 199 epp5 pr3|0 " save return pointer 000136 4a 4 00020 2731 20 200 tsp3 |[double_square_root_] 000137 aa 5 00000 3535 00 201 epp3 pr5|0 " restore return pointer 000140 0a 000152 7030 00 202 tsx3 arcsine " EAQ := asin (sqrt(1+x**2)) 000141 4a 4 00012 4631 20 203 dfmp one_radian " convert to degrees 000142 aa 000000 4730 00 204 dfrd 0 000143 aa 3 00000 7101 00 205 tra pr3|0 " return to caller 206 000144 207 acos_deg_not_near_one: 000144 0a 000152 7030 00 208 tsx3 arcsine 000145 4a 4 00012 4631 20 209 dfmp one_radian " convert to degrees 000146 aa 000000 5130 00 210 fneg 0 000147 aa 016550 4750 03 211 fad =90.0,du " convert to cosine 000150 aa 000000 4730 00 212 dfrd 0 000151 aa 3 00000 7101 00 213 tra pr3|0 " Return to caller 214 000152 215 arcsine: 000152 aa 400000 4750 03 216 fad =0.0,du " normalize input ("arg_x") 000153 aa 2 00002 4571 00 217 dfst pr2|arg_x " store sign of arg_x. 000154 aa 000002 6050 04 218 tpl 2,ic " abs_x=abs(arg_x) 000155 aa 000000 5130 00 219 fneg 0 000156 aa 2 00000 4571 00 220 dfst pr2|abs_x 221 222 " determine what range abs_x is in. A binary search is not used as 223 " each higher range is much smaller than the previous one. Once the 224 " range is determined, perform the appropriate polynomial scaling to 225 " get abs_x into [0, .5], and then transfer to part_arcsine. 226 " Upon return, scale the result back. 227 000157 aa 000400 4250 03 228 fcmg =0.5,du " is abs_x in the range [0,.5) 000160 0a 000164 6050 00 229 tpl above_bound_1 " no, find the correct range 000161 aa 2 00002 4331 00 230 dfld pr2|arg_x 000162 0a 000250 7040 00 231 tsx4 part_arcsine 000163 aa 000000 7100 13 232 tra 0,x3 " Return to entry 233 000164 234 above_bound_1: 000164 0a 000464 4250 12 235 fcmg bound_2,x2 " is abs_x in the range [.5, .866) 000165 0a 000200 6050 00 236 tpl above_bound_2 " no, find correct range 000166 aa 2 00000 4631 00 237 dfmp pr2|abs_x " EAQ = abs_x**2 000167 0a 000514 4610 12 238 fmp two,x2 " EAQ = 2 * abs_x**2 000170 0a 000510 5750 12 239 fsb one,x2 " EAQ = 2 * abs_x**2 - 1 000171 0a 000250 7040 00 240 tsx4 part_arcsine 000172 4a 4 00024 4771 20 241 dfad half_pi,x2 " EAQ = part_asin + pi/2 000173 aa 000400 4610 03 242 fmp =0.5,du " EAQ = .5*part_asin + pi/4 000174 aa 2 00002 4301 00 243 fszn pr2|arg_x " was arg_x negative 000175 aa 000000 6050 13 244 tpl 0,x3 " no, return to entry 000176 aa 000000 5130 00 245 fneg 0 " EAQ = -EAQ 000177 aa 000000 7100 13 246 tra 0,x3 " Return to entry 247 000200 248 above_bound_2: 000200 0a 000470 4250 12 249 fcmg bound_3,x2 " is abs_x in the range [.866, .966) 000201 0a 000217 6050 00 250 tpl above_bound_3 " no, find correct range 000202 aa 2 00000 4631 00 251 dfmp pr2|abs_x " EAQ = abs_x**2 000203 aa 2 00000 4721 00 252 dfstr pr2|temp 000204 0a 000520 4610 12 253 fmp eight,x2 " EAQ = 8*abs_x**2 000205 0a 000520 5750 12 254 fsb eight,x2 " EAQ = 8*abs_x**2 - 8 000206 aa 2 00000 4631 00 255 dfmp pr2|temp " EAQ = 8*abs_x**4 - 8*abs_x**2 000207 0a 000510 4750 12 256 fad one,x2 " EAQ = 8*abs_x**4 - 8*abs_x**2 + 1 000210 0a 000250 7040 00 257 tsx4 part_arcsine 000211 0a 000500 4770 12 258 dfad three_pi_by_two,x2 " EAQ = part_asin + 3*pi/2 000212 0a 000504 4630 12 259 dfmp one_quarter,x2 " EAQ = part_asin/4 + 3*pi/8 000213 aa 2 00002 4301 00 260 fszn pr2|arg_x " was arg_x negative 000214 aa 000000 6050 13 261 tpl 0,x3 " no, return to entry 000215 aa 000000 5130 00 262 fneg 0 " EAQ = -EAQ 000216 aa 000000 7100 13 263 tra 0,x3 " return to entry 264 000217 265 above_bound_3: 000217 0a 000474 4270 12 266 dfcmg bound_4,x2 " is abs_x in the range [.966, 1] 000220 0a 000244 6054 00 267 tpnz arcsine_domain_error 000221 aa 000400 4610 03 268 fmp =0.5,du " EAQ = abs_x/2 000222 aa 000000 5130 00 269 fneg 0 " EAQ = - abs_x/2 000223 aa 000400 4750 03 270 fad =0.5,du " EAQ = .5 - abs_x/2 or (1-abs_x)/2 271 000224 aa 3 00000 3715 00 272 epp5 pr3|0 " save the return address 000225 aa 2 00012 3521 00 273 epp2 pr2|space_used " increment PR2 for sqrt 000226 0a 000241 2730 12 274 tsp3 double_square_root,x2 275 " call sqrt function 000227 aa 2 77766 3521 00 276 epp2 pr2|-space_used " restore PR2 000230 aa 5 00000 3535 00 277 epp3 pr5|0 " restore PR3 000231 0a 000250 7040 00 278 tsx4 part_arcsine " EAQ = sqrt ((1 - abs_x)/2) 000232 0a 000514 4610 12 279 fmp two,x2 " EAQ = 2*part_asin 000233 aa 000000 5130 00 280 fneg 0 " EAQ = - 2*part_asin 000234 4a 4 00024 4771 20 281 dfad half_pi,x2 " EAQ = pi/2 - 2*part_asin 000235 aa 2 00002 4301 00 282 fszn pr2|arg_x " was arg_x negative 000236 aa 000000 6050 13 283 tpl 0,x3 " no, return to entry 000237 aa 000000 5130 00 284 fneg 0 " EAQ = -EAQ 000240 aa 000000 7100 13 285 tra 0,x3 " return to entry 286 287 " Transfer Table 288 000241 289 double_square_root: 000241 4a 4 00020 7101 20 290 tra |[double_square_root_] 000242 aa 000000 0110 00 291 nop 000243 4a 4 00014 7101 20 292 tra |[hfp_double_square_root_] 293 294 000244 295 arcsine_domain_error: " abs_x > 1 000244 aa 000101 2360 07 296 ldq 65,dl 000245 4a 4 00026 7001 20 297 tsx0 |[call_math_error_] 000246 aa 400000 4310 03 298 fld =0.0,du 000247 aa 3 00000 7101 00 299 tra pr3|0 " return to caller 300 301 " This next subroutine calculates the arcsine of a value in the 302 " range [0, .5]. 303 000250 304 part_arcsine: 000250 0a 000524 4250 12 305 fcmg formula_bound,x2 " Can we use a short polynomial? 000251 0a 000311 6040 00 306 tmi small_formula " Yup. 307 000252 aa 2 00004 4721 00 308 dfstr pr2|y 000253 aa 2 00004 4631 00 309 dfmp pr2|y 000254 aa 2 00006 4721 00 310 dfstr pr2|yy " yy = y*y 000255 0a 000440 4770 12 311 dfad q5,x2 " EAQ = q5+yy 000256 aa 2 00006 4631 00 312 dfmp pr2|yy " EAQ = yy*(q5+yy) 000257 0a 000434 4770 12 313 dfad q4,x2 " EAQ = q4+yy*(q5+yy) 000260 aa 2 00006 4631 00 314 dfmp pr2|yy " EAQ = yy*(q4+yy*(q5+yy)) 000261 0a 000430 4770 12 315 dfad q3,x2 " EAQ = q3+yy*(q4+yy*(q5+yy)) 000262 aa 2 00006 4631 00 316 dfmp pr2|yy " EAQ = yy*(q3+yy*(q4+yy*(q5+yy))) 000263 0a 000424 4770 12 317 dfad q2,x2 " EAQ = q2+yy*(q3+yy*(q4+yy*(q5+yy))) 000264 aa 2 00006 4631 00 318 dfmp pr2|yy " EAQ = yy*(q2+yy*(q3+yy*(q4+yy*(q5+yy)))) 000265 0a 000420 4770 12 319 dfad q1,x2 " EAQ = q1+yy*(q2+yy*(q3+yy*(q4+yy*(q5+yy)))) 000266 aa 2 00006 4631 00 320 dfmp pr2|yy " EAQ = yy*(q1+yy*(q2+yy*(q3+yy*(q4+yy*(q5+yy))))) 000267 0a 000414 4770 12 321 dfad q0,x2 " EAQ = q0+yy*(q1+yy*(q2+yy*(q3+yy*(q4+yy*(q5+yy))))) 000270 aa 2 00010 4721 00 322 dfstr pr2|q 000271 aa 2 00006 4331 00 323 dfld pr2|yy 000272 0a 000370 4630 12 324 dfmp p6,x2 " EAQ = yy*p6 000273 0a 000364 4770 12 325 dfad p5,x2 " EAQ = p5+yy*p6 000274 aa 2 00006 4631 00 326 dfmp pr2|yy " EAQ = yy*(p5+yy*p6) 000275 0a 000360 4770 12 327 dfad p4,x2 " EAQ = p4+yy*(p5+yy*p6) 000276 aa 2 00006 4631 00 328 dfmp pr2|yy " EAQ = yy*(p4+yy*(p5+yy*p6)) 000277 0a 000354 4770 12 329 dfad p3,x2 " EAQ = p3+yy*(p4+yy*(p5+yy*p6)) 000300 aa 2 00006 4631 00 330 dfmp pr2|yy " EAQ = yy*(p3+yy*(p4+yy*(p5+yy*p6))) 000301 0a 000350 4770 12 331 dfad p2,x2 " EAQ = p2+yy*(p3+yy*(p4+yy*(p5+yy*p6))) 000302 aa 2 00006 4631 00 332 dfmp pr2|yy " EAQ = yy*(p2+yy*(p3+yy*(p4+yy*(p5+yy*p6)))) 000303 0a 000344 4770 12 333 dfad p1,x2 " EAQ = p1+yy*(p2+yy*(p3+yy*(p4+yy*(p5+yy*p6)))) 000304 aa 2 00006 4631 00 334 dfmp pr2|yy " EAQ = yy*(p1+yy*(p2+yy*(p3+yy*(p4+yy*(p5+yy*p6))))) 000305 0a 000340 4770 12 335 dfad p0,x2 " EAQ = p0+yy*(p1+yy*(p2+yy*(p3+yy*(p4+yy*(p5+yy*p6))))) 000306 aa 2 00004 4631 00 336 dfmp pr2|y " EAQ = y*p 000307 aa 2 00010 5671 00 337 dfdv pr2|q " EAQ = y*p/q 000310 aa 000000 7100 14 338 tra 0,x4 " Return from part_arcsine 339 000311 340 small_formula: 000311 0a 000530 4250 12 341 fcmg epsilon,x2 " Is any calculation necessary? 000312 aa 000000 6040 14 342 tmi 0,x4 " No. Small number. Just return. 343 000313 aa 2 00004 4721 00 344 dfstr pr2|y 000314 aa 2 00004 4631 00 345 dfmp pr2|y 000315 aa 2 00006 4721 00 346 dfstr pr2|yy " yy = y*y 000316 0a 000460 4770 12 347 dfad qq3,x2 " EAQ = qq3+yy 000317 aa 2 00006 4631 00 348 dfmp pr2|yy " EAQ = yy*(qq3+yy) 000320 0a 000454 4770 12 349 dfad qq2,x2 " EAQ = qq2+yy*(qq3+yy) 000321 aa 2 00006 4631 00 350 dfmp pr2|yy " EAQ = yy*(qq2+yy*(qq3+yy)) 000322 0a 000450 4770 12 351 dfad qq1,x2 " EAQ = qq1+yy*(qq2+yy*(qq3+yy)) 000323 aa 2 00006 4631 00 352 dfmp pr2|yy " EAQ = yy*(qq1+yy*(qq2+yy*(qq3+yy))) 000324 0a 000444 4770 12 353 dfad qq0,x2 " EAQ = qq0+yy*(qq1+yy*(qq2+yy*(qq3+yy))) 000325 aa 2 00010 4721 00 354 dfstr pr2|qq 000326 aa 2 00006 4331 00 355 dfld pr2|yy " EAQ = yy 000327 0a 000410 4630 12 356 dfmp pp3,x2 " EAQ = yy*pp3 000330 0a 000404 4770 12 357 dfad pp2,x2 " EAQ = pp2+yy*pp3 000331 aa 2 00006 4631 00 358 dfmp pr2|yy " EAQ = yy*(pp2+yy*pp3) 000332 0a 000400 4770 12 359 dfad pp1,x2 " EAQ = pp1+yy*(pp2+yy*pp3) 000333 aa 2 00006 4631 00 360 dfmp pr2|yy " EAQ = yy*(pp1+yy*(pp2+yy*pp3)) 000334 0a 000374 4770 12 361 dfad pp0,x2 " EAQ = pp0+yy*(pp1+yy*(pp2+yy*pp3)) 000335 aa 2 00004 4631 00 362 dfmp pr2|y " EAQ = y*pp 000336 aa 2 00010 5671 00 363 dfdv pr2|qq " EAQ = y*pp/qq 000337 aa 000000 7100 14 364 tra 0,x4 " Return from part_arcsine 365 366 " Constants: (Hex values are given in octal) 367 368 even 000340 aa 024415 175733 369 p0: dec .53849190607669366114d03 000341 aa 072000 645516 000342 aa 006103 237366 370 oct 006103237366,616400151323 000343 aa 616400 151323 000344 aa 027172 620106 371 p1: dec -.15568739285411701684d04 000345 aa 160142 420524 000346 aa 007475 310043 372 oct 007475310043,070061210252 000347 aa 070061 210252 000350 aa 026647 070243 373 p2: dec .16924399892857508174d04 000351 aa 106443 437030 000352 aa 006323 434121 374 oct 006323434121,443221617414 000353 aa 443221 617414 000354 aa 025125 521405 375 p3: dec -.85268159839800034482d03 000355 aa 421634 522020 000356 aa 007625 324301 376 oct 007625324301,304347124404 000357 aa 304347 124404 000360 aa 020610 723230 377 p4: dec .19645634637912159609d03 000361 aa 734277 152672 000362 aa 004610 723230 378 oct 004610723230,734277152672 000363 aa 734277 152672 000364 aa 013357 416750 379 p5: dec -.17029424630829249399d02 000365 aa 116344 162600 000366 aa 005735 741675 380 oct 005735741675,011634416260 000367 aa 011634 416260 000370 aa 776425 325772 381 p6: dec .27091596623264652521d00 000371 aa 735675 606112 000372 aa 000212 552775 382 oct 000212552775,356736703045 000373 aa 356736 703045 000374 aa 022670 034555 383 pp0: dec .44005608326359226844d03 000375 aa 710157 552326 000376 aa 006067 003455 384 oct 006067003455,571015755233 000377 aa 571015 755233 000400 aa 025260 643430 385 pp1: dec -.67036113799980663993d03 000401 aa 727053 715244 000402 aa 007654 150706 386 oct 007654150706,165612763251 000403 aa 165612 763251 000404 aa 022436 237124 387 pp2: dec .28631086818069079154d03 000405 aa 164726 743043 000406 aa 006043 623712 388 oct 006043623712,416472674304 000407 aa 416472 674304 000410 aa 013037 350047 389 pp3: dec -.30034170270689843770d02 000411 aa 376344 206647 000412 aa 005703 735004 390 oct 005703735004,737634420665 000413 aa 737634 420665 000414 aa 024415 175733 391 q0: dec .53849190607669366114d03 000415 aa 072000 645516 000416 aa 006103 237366 392 oct 006103237366,616400151323 000417 aa 616400 151323 000420 aa 027144 260236 393 q1: dec -.16466225795539524453d04 000421 aa 500542 355416 000422 aa 007462 130117 394 oct 007462130117,240261166607 000423 aa 240261 166607 000424 aa 026741 476575 395 q2: dec .19264901929223241968d04 000425 aa 221050 347473 000426 aa 006360 637276 396 oct 006360637276,510424163636 000427 aa 510424 163636 000430 aa 027363 330616 397 q3: dec -.10743064209874076849d04 000431 aa 311641 065133 000432 aa 007571 554307 398 oct 007571554307,144720432455 000433 aa 144720 432455 000434 aa 022440 127075 399 q4: dec .28817015748752908509d03 000435 aa 607301 554076 000436 aa 006044 012707 400 oct 006044012707,560730155410 000437 aa 560730 155410 000440 aa 015373 735262 401 q5: dec -.32508459966449899385d02 000441 aa 124142 675507 000442 aa 005676 767254 402 oct 005676767254,425030557322 000443 aa 425030 557322 000444 aa 022670 034555 403 qq0: dec .44005608326359226844d03 000445 aa 710157 552326 000446 aa 006067 003455 404 oct 006067003455,571015755233 000447 aa 571015 755233 000450 aa 025214 113645 405 qq1: dec -.74370381854373868468d03 000451 aa 061042 457075 000452 aa 007643 022751 406 oct 007643022751,214210513617 000453 aa 214210 513617 000454 aa 022571 203571 407 qq2: dec .37725729835987782917d03 000455 aa 161217 653575 000456 aa 006057 120357 408 oct 006057120357,116121765360 000457 aa 116121 765360 000460 aa 015071 615361 409 qq3: dec -.56777961133209015623d02 000461 aa 201647 344616 000462 aa 005616 343274 410 oct 005616343274,240351671144 000463 aa 240351 671144 411 000464 aa 000673 317272 412 bound_2: dec .866025404d0 000465 aa 072755 035014 000466 413 hfp_bound_2: 000466 aa 000673 317272 414 oct 000673317272,000000000000 " sin(pi/3) 000467 aa 000000 000000 415 000470 aa 000756 433521 416 bound_3: dec .965925826d0 000471 aa 620404 312164 000472 aa 000756 433521 417 oct 000756433521,000000000000 " sin(5*pi/12) 000473 aa 000000 000000 418 000474 aa 002400 000000 419 bound_4: dec 1.0d0 000475 aa 000000 000000 000476 420 hfp_bound_4: 000476 aa 002040 000000 421 oct 002040000000,000000000000 000477 aa 000000 000000 422 000500 423 three_pi_by_two: 000500 aa 006455 457437 424 dec .471238898038468985787763d01 000501 aa 631441 644324 000502 aa 002226 627617 425 oct 002226627617,714620722152 000503 aa 714620 722152 000504 426 one_quarter: 000504 aa 776400 000000 427 dec 0.25d0 000505 aa 000000 000000 000506 aa 000200 000000 428 oct 000200000000,000000000000 000507 aa 000000 000000 000510 aa 002400 000000 429 one: dec 1.0d0 000511 aa 000000 000000 000512 aa 002040 000000 430 oct 002040000000,000000000000 000513 aa 000000 000000 000514 aa 004400 000000 431 two: dec 2.0d0 000515 aa 000000 000000 000516 aa 002100 000000 432 oct 002100000000,000000000000 000517 aa 000000 000000 000520 aa 010400 000000 433 eight: dec 8d0 000521 aa 000000 000000 000522 aa 002400 000000 434 oct 002400000000,000000000000 000523 aa 000000 000000 000524 435 formula_bound: 000524 aa 774413 242502 436 dec 0.13052619d0 000525 aa 524446 250766 000526 aa 000102 650520 437 oct 000102650520,000000000000 000527 aa 000000 000000 000530 aa 704471 421604 438 epsilon: dec 5.7031627d-10 000531 aa 407031 702277 000532 aa 762116 304341 439 oct 762116304341,000000000000 000533 aa 000000 000000 440 441 end NO LITERALS NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 000534 5a 000003 000000 000535 5a 000146 600000 000536 aa 000000 000000 000537 55 000013 000002 000540 5a 000002 400003 000541 55 000006 000013 000542 aa 020 144 157 165 000543 aa 142 154 145 137 000544 aa 141 162 143 137 000545 aa 163 151 156 145 000546 aa 137 000 000 000 000547 55 000026 000003 000550 0a 000074 400000 000551 55 000016 000003 000552 aa 036 150 146 160 hfp_double_arc_cosine_degrees_ 000553 aa 137 144 157 165 000554 aa 142 154 145 137 000555 aa 141 162 143 137 000556 aa 143 157 163 151 000557 aa 156 145 137 144 000560 aa 145 147 162 145 000561 aa 145 163 137 000 000562 55 000040 000013 000563 0a 000123 400000 000564 55 000031 000003 000565 aa 032 144 157 165 double_arc_cosine_degrees_ 000566 aa 142 154 145 137 000567 aa 141 162 143 137 000570 aa 143 157 163 151 000571 aa 156 145 137 144 000572 aa 145 147 162 145 000573 aa 145 163 137 000 000574 55 000053 000026 000575 0a 000022 400000 000576 55 000043 000003 000577 aa 036 150 146 160 hfp_double_arc_cosine_radians_ 000600 aa 137 144 157 165 000601 aa 142 154 145 137 000602 aa 141 162 143 137 000603 aa 143 157 163 151 000604 aa 156 145 137 162 000605 aa 141 144 151 141 000606 aa 156 163 137 000 000607 55 000065 000040 000610 0a 000047 400000 000611 55 000056 000003 000612 aa 032 144 157 165 double_arc_cosine_radians_ 000613 aa 142 154 145 137 000614 aa 141 162 143 137 000615 aa 143 157 163 151 000616 aa 156 145 137 162 000617 aa 141 144 151 141 000620 aa 156 163 137 000 000621 55 000100 000053 000622 0a 000010 400000 000623 55 000070 000003 000624 aa 034 150 146 160 hfp_double_arc_sine_degrees_ 000625 aa 137 144 157 165 000626 aa 142 154 145 137 000627 aa 141 162 143 137 000630 aa 163 151 156 145 000631 aa 137 144 145 147 000632 aa 162 145 145 163 000633 aa 137 000 000 000 000634 55 000112 000065 000635 0a 000015 400000 000636 55 000103 000003 000637 aa 030 144 157 165 double_arc_sine_degrees_ 000640 aa 142 154 145 137 000641 aa 141 162 143 137 000642 aa 163 151 156 145 000643 aa 137 144 145 147 000644 aa 162 145 145 163 000645 aa 137 000 000 000 000646 55 000125 000100 000647 0a 000000 400000 000650 55 000115 000003 000651 aa 034 150 146 160 hfp_double_arc_sine_radians_ 000652 aa 137 144 157 165 000653 aa 142 154 145 137 000654 aa 141 162 143 137 000655 aa 163 151 156 145 000656 aa 137 162 141 144 000657 aa 151 141 156 163 000660 aa 137 000 000 000 000661 55 000137 000112 000662 0a 000004 400000 000663 55 000130 000003 000664 aa 030 144 157 165 double_arc_sine_radians_ 000665 aa 142 154 145 137 000666 aa 141 162 143 137 000667 aa 163 151 156 145 000670 aa 137 162 141 144 000671 aa 151 141 156 163 000672 aa 137 000 000 000 000673 55 000002 000125 000674 6a 000000 400002 000675 55 000142 000003 000676 aa 014 163 171 155 symbol_table 000677 aa 142 157 154 137 000700 aa 164 141 142 154 000701 aa 145 000 000 000 DEFINITIONS HASH TABLE 000702 aa 000000 000015 000703 5a 000026 000000 000704 5a 000053 000000 000705 5a 000065 000000 000706 5a 000112 000000 000707 5a 000013 000000 000710 5a 000040 000000 000711 5a 000137 000000 000712 aa 000000 000000 000713 aa 000000 000000 000714 aa 000000 000000 000715 5a 000100 000000 000716 5a 000125 000000 000717 aa 000000 000000 EXTERNAL NAMES 000720 aa 020 143 141 154 call_math_error_ 000721 aa 154 137 155 141 000722 aa 164 150 137 145 000723 aa 162 162 157 162 000724 aa 137 000 000 000 000725 aa 027 150 146 160 hfp_double_square_root_ 000726 aa 137 144 157 165 000727 aa 142 154 145 137 000730 aa 163 161 165 141 000731 aa 162 145 137 162 000732 aa 157 157 164 137 000733 aa 023 144 157 165 double_square_root_ 000734 aa 142 154 145 137 000735 aa 163 161 165 141 000736 aa 162 145 137 162 000737 aa 157 157 164 137 000740 aa 012 161 165 141 quarter_pi 000741 aa 162 164 145 162 000742 aa 137 160 151 000 000743 aa 002 160 151 000 pi 000744 aa 012 157 156 145 one_radian 000745 aa 137 162 141 144 000746 aa 151 141 156 000 000747 aa 016 150 146 160 hfp_one_radian 000750 aa 137 157 156 145 000751 aa 137 162 141 144 000752 aa 151 141 156 000 000753 aa 013 150 146 160 hfp_half_pi 000754 aa 137 150 141 154 000755 aa 146 137 160 151 000756 aa 007 150 141 154 half_pi 000757 aa 146 137 160 151 000760 aa 017 155 141 164 math_constants_ 000761 aa 150 137 143 157 000762 aa 156 163 164 141 000763 aa 156 164 163 137 NO TRAP POINTER WORDS TYPE PAIR BLOCKS 000764 aa 000004 000000 000765 55 000164 000164 000766 aa 000004 000000 000767 55 000177 000177 000770 aa 000004 000000 000771 55 000177 000171 000772 aa 000004 000000 000773 55 000224 000204 000774 aa 000004 000000 000775 55 000224 000207 000776 aa 000004 000000 000777 55 000224 000210 001000 aa 000004 000000 001001 55 000224 000213 001002 aa 000004 000000 001003 55 000224 000217 001004 aa 000004 000000 001005 55 000224 000222 001006 aa 000001 000000 001007 aa 000000 000000 INTERNAL EXPRESSION WORDS 001010 5a 000230 000000 001011 5a 000250 000000 001012 5a 000232 000000 001013 5a 000246 000000 001014 5a 000234 000000 001015 5a 000242 000000 001016 5a 000244 000000 001017 aa 000000 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 000534 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000030 000007 a2 000000 000000 000010 9a 777770 0000 46 math_constants_|hfp_one_radian 000011 5a 000262 0000 00 000012 9a 777766 0000 46 math_constants_|one_radian 000013 5a 000261 0000 00 000014 9a 777764 0000 46 double_square_root_|hfp_double_square_root_ 000015 5a 000260 0000 00 000016 9a 777762 0000 46 math_constants_|hfp_half_pi 000017 5a 000257 0000 00 000020 9a 777760 0000 46 double_square_root_|double_square_root_ 000021 5a 000256 0000 00 000022 9a 777756 0000 46 math_constants_|half_pi 000023 5a 000255 0000 00 000024 9a 777754 0000 46 math_constants_|half_pi 000025 5a 000255 0000 12 000026 9a 777752 0000 46 call_math_error_|call_math_error_ 000027 5a 000254 0000 00 SYMBOL INFORMATION SYMBOL TABLE HEADER 000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000010 000004 aa 000000 117244 000005 aa 361023 525721 000006 aa 000000 117547 000007 aa 253762 302204 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 000206 000020 aa 000000 000104 000021 aa 000152 000144 000022 aa 000200 000104 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 070056 061064 000030 aa 040115 141162 000031 aa 143150 040061 000032 aa 071070 071040 000033 aa 040040 040040 000034 aa 110151 162156 000035 aa 145151 163145 000036 aa 156056 123171 000037 aa 163115 141151 000040 aa 156164 056141 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 055164 141162 000045 aa 147145 164040 000046 aa 154066 070040 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 040154 151163 000057 aa 164040 163171 000060 aa 155142 157154 000061 aa 163040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000001 000066 aa 000072 000047 000067 aa 175453 017756 000070 aa 000000 117547 000071 aa 176721 600000 000072 aa 076163 160145 >spec>install>1110>double_arc_sine_.alm 000073 aa 143076 151156 000074 aa 163164 141154 000075 aa 154076 061061 000076 aa 061060 076144 000077 aa 157165 142154 000100 aa 145137 141162 000101 aa 143137 163151 000102 aa 156145 137056 000103 aa 141154 155040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number 164 above_bound_1 double_arc_sine_: 229, 234. 200 above_bound_2 double_arc_sine_: 236, 248. 217 above_bound_3 double_arc_sine_: 250, 265. 0 abs_x double_arc_sine_: 63, 70, 220, 237, 251. 0 ACOS double_arc_sine_: 74. 144 acos_deg_not_near_one double_arc_sine_: 191, 207. 67 acos_rad_not_near_one double_arc_sine_: 137, 152. 152 arcsine double_arc_sine_: 83, 89, 95, 102, 122, 127, 148, 153, 174, 180, 202, 208, 215. 244 arcsine_domain_error double_arc_sine_: 113, 139, 165, 193, 267, 295. 2 arg_x double_arc_sine_: 64, 217, 230, 243, 260, 282. 1 ASIN double_arc_sine_: 75. 0 BFP double_arc_sine_: 72, 88, 101, 134, 188. 464 bound_2 double_arc_sine_: 136, 190, 235, 412. 470 bound_3 double_arc_sine_: 249, 416. 474 bound_4 double_arc_sine_: 138, 192, 266, 419. call_math_error_ double_arc_sine_: 297. 123 double_arc_cosine_degrees_ double_arc_sine_: 58, 187. 47 double_arc_cosine_radians_ double_arc_sine_: 56, 133. 15 double_arc_sine_degrees_ double_arc_sine_: 54, 100. 4 double_arc_sine_radians_ double_arc_sine_: 52, 87. 241 double_square_root double_arc_sine_: 274, 289. double_square_root_ double_arc_sine_: 120, 146, 172, 200, 290, 292. 520 eight double_arc_sine_: 253, 254, 433. 530 epsilon double_arc_sine_: 341, 438. 524 formula_bound double_arc_sine_: 305, 435. half_pi double_arc_sine_: 61, 155, 241, 281. 2 HFP double_arc_sine_: 73, 82, 94, 108, 160. 115 hfp_acos_deg_not_near_one double_arc_sine_: 163, 179. 42 hfp_acos_rad_not_near_one double_arc_sine_: 111, 126. 466 hfp_bound_2 double_arc_sine_: 110, 162, 413. 476 hfp_bound_4 double_arc_sine_: 112, 164, 420. 74 hfp_double_arc_cosine_degrees_ double_arc_sine_: 59, 159. 22 hfp_double_arc_cosine_radians_ double_arc_sine_: 57, 107. 10 hfp_double_arc_sine_degrees_ double_arc_sine_: 55, 93. 0 hfp_double_arc_sine_radians_ double_arc_sine_: 53, 81. hfp_double_square_root_ double_arc_sine_: 120, 172, 292. hfp_half_pi double_arc_sine_: 61, 129. hfp_one_radian double_arc_sine_: 61, 96, 175, 181. math_constants_ double_arc_sine_: 61. 510 one double_arc_sine_: 239, 256, 429. 504 one_quarter double_arc_sine_: 259, 426. one_radian double_arc_sine_: 61, 103, 203, 209. 340 p0 double_arc_sine_: 335, 369. 344 p1 double_arc_sine_: 333, 371. 2040 P1.0H double_arc_sine_: 77, 114, 166. 350 p2 double_arc_sine_: 331, 373. 2100 P2.0H double_arc_sine_: 78, 116, 168. 354 p3 double_arc_sine_: 329, 375. 360 p4 double_arc_sine_: 327, 377. 364 p5 double_arc_sine_: 325, 379. 370 p6 double_arc_sine_: 324, 381. 4264 P90.0H double_arc_sine_: 79, 183. 250 part_arcsine double_arc_sine_: 231, 240, 257, 278, 304. pi double_arc_sine_: 61. 374 pp0 double_arc_sine_: 361, 383. 400 pp1 double_arc_sine_: 359, 385. 404 pp2 double_arc_sine_: 357, 387. 410 pp3 double_arc_sine_: 356, 389. 10 q double_arc_sine_: 67, 69, 322, 337. 414 q0 double_arc_sine_: 321, 391. 420 q1 double_arc_sine_: 319, 393. 424 q2 double_arc_sine_: 317, 395. 430 q3 double_arc_sine_: 315, 397. 434 q4 double_arc_sine_: 313, 399. 440 q5 double_arc_sine_: 311, 401. 10 qq double_arc_sine_: 69, 354, 363. 444 qq0 double_arc_sine_: 353, 403. 450 qq1 double_arc_sine_: 351, 405. 454 qq2 double_arc_sine_: 349, 407. 460 qq3 double_arc_sine_: 347, 409. quarter_pi double_arc_sine_: 61. 311 small_formula double_arc_sine_: 306, 340. 12 space_used double_arc_sine_: 68, 273, 276. 0 temp double_arc_sine_: 70, 71, 252, 255. 500 three_pi_by_two double_arc_sine_: 258, 423. 514 two double_arc_sine_: 238, 279, 431. 0 x_minus_one double_arc_sine_: 71, 115, 118, 141, 144, 167, 170, 195, 198. 4 y double_arc_sine_: 65, 308, 309, 336, 344, 345, 362. 6 yy double_arc_sine_: 66, 310, 312, 314, 316, 318, 320, 323, 326, 328, 330, 332, 334, 346, 348, 350, 352, 355, 358, 360. 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