1/*- 2 * Copyright (c) 1985 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Computer Consoles Inc. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)Katanf.s 7.1 (Berkeley) 12/06/90 11 */ 12 13#include "../tahoe/SYS.h" 14 15 .text 16ENTRY(Katanf, 0) 17 tstl 4(fp) # if (arg > 0) 18 jleq 1f 19 pushl 20(fp) # hfs 20 pushl 8(fp) 21 pushl 4(fp) 22 callf $16,satan 23 ret # return(satan(arg)); 241: # else 25 pushl 20(fp) # hfs 26 lnd 4(fp) 27 pushd 28 callf $16,satan 29 lnf r0 30 stf r0 31 ret # return(-satan(-arg)); 32 33ASENTRY(satan, R2|R3) 34 subl3 $60,fp,sp 35 cmpd2 4(fp),_sq2m1 # if (arg < sq2m1) 36 jgeq 1f 37 pushl 12(fp) # hfs 38 pushl 8(fp) 39 pushl 4(fp) 40 callf $16,xatan 41 ret # return(xatan(arg)); 421: 43 cmpd2 4(fp),_sq2p1 # else if (arg > sq2p1) 44 jgtr 9f 45 pushl 12(fp) # hfs 46 ldd one; pushd 47 ldd 4(fp); pushd 48 callf $24,_Kaddd # (arg+1.0) 49 pushl 12(fp) # hfs of _Kdivd 50 pushl r1 51 pushl r0 52 pushl 12(fp) # hfs 53 ldd one; pushd 54 ldd 4(fp); pushd 55 callf $24,_Ksubd # (arg-1.0) 56 pushl r1 57 pushl r0 58 callf $24,_Kdivd # (arg-1.0)/(arg+1.0) 59 pushl 12(fp) # hfs 60 pushl r1 61 pushl r0 62 callf $16,xatan # xatan((ag-1.0)/(arg+1.0)) 63 pushl 12(fp) # hfs 64 pushl r1 65 pushl r0 66 ldd _pio4; pushd 67 callf $24,_Kaddd 68 ldd r0; cvdf; stf r0 69 ret # return(pio4+xatan((xatan(...))); 70 719: 72 pushl 12(fp) 73 ldd 4(fp); pushd 74 ldd one; pushd 75 callf $24,_Kdivd # (1.0/arg) 76 pushl 12(fp) # hfs 77 ldd r0; pushd 78 callf $16,xatan 79 # clrl -60+4(fp) 80 # movl r0,-60(fp) 81 pushl 12(fp) # hfs 82 ldd r0; pushd 83 ldd _pio2; pushd 84 callf $24,_Ksubd 85 ldd r0; cvdf; stf r0 86 ret 87 88ASENTRY(xatan, 0) 89 subl3 $68,fp,sp 90 pushl 12(fp) # hfs 91 ldd 4(fp); pushd; pushd 92 callf $24,_Kmuld # argsq = arg*arg; 93 ldd r0 94 std -60(fp) # argsq 95 pushl 12(fp) # hfs 96 pushd 97 ldd _p5; pushd 98 callf $24,_Kmuld # p5*argsq 99 pushl 12(fp) # hfs 100 ldd _p4; pushd 101 ldd r0; pushd 102 callf $24,_Kaddd # (p5*argsq+p4) 103 pushl 12(fp) # hfs 104 ldd -60(fp); pushd 105 ldd r0; pushd 106 callf $24,_Kmuld # (p5*argsq+p4)*argsq 107 pushl 12(fp) # hfs 108 ldd _p3; pushd 109 ldd r0; pushd 110 callf $24,_Kaddd # ((p5*argsq+p4)*argsq+p3) 111 pushl 12(fp) # hfs 112 ldd -60(fp); pushd 113 ldd r0; pushd 114 callf $24,_Kmuld # (..)*argsq 115 pushl 12(fp) # hfs 116 ldd _p2; pushd 117 ldd r0; pushd 118 callf $24,_Kaddd # (..)*argsq+p2) 119 pushl 12(fp) # hfs 120 ldd -60(fp); pushd 121 ldd r0; pushd 122 callf $24,_Kmuld # ((..)*argsq+p2)*argsq 123 pushl 12(fp) # hfs 124 ldd _p1; pushd 125 ldd r0; pushd 126 callf $24,_Kaddd # ((..)*argsq+p2)*argsq+p1) 127 pushl 12(fp) # hfs 128 ldd -60(fp); pushd 129 ldd r0; pushd 130 callf $24,_Kmuld # (..)*argsq 131 pushl 12(fp) # hfs 132 ldd _p0; pushd 133 ldd r0; pushd 134 callf $24,_Kaddd # ((..)*argsq+p1)*argsq+p0) 135 pushl 12(fp) # hfs 136 ldd 4(fp); pushd 137 ldd r0; pushd 138 callf $24,_Kmuld # (..)*arg 139 ldd r0 140 std -68(fp); cvdf; stf r0 # value 141 ret 142 143 .data 144 .align 2 145_sq2p1: .long 0x411A8279, 0x99FCEF31 # .double 2.414213562373095 146_sq2m1: .long 0x3FD413CC, 0xCFE77990 # .double .41421356237309503 147_pio2: .long 0x40C90FDA, 0xA22168C1 # .double 1.5707963267948966 148_pio4: .long 0x40490FDA, 0xA22168C1 # .double .78539816339744829 149_p0: .long 0x407FFFFF, 0xFD687A4B # .double .99999999939652999 150_p1: .long 0xBFAAAAA2, 0x09F9DBF2 # .double -.3333330762079 151_p2: .long 0x3F4CC820, 0x0670059B # .double .199982166665 152_p3: .long 0xBF11D182, 0x6601878B # .double -.142400777317 153_p4: .long 0x3ED88B47, 0x4EFC9AF9 # .double .10573440275 154_p5: .long 0xBE772E4B, 0x0E689AEB # .double -.060346883 155one: .long 0x40800000, 0x00000000 # .double 1 156