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