|
|
Power 6/32 Unix version 1.2b
/* @(#)atan.c 4.1/4.2 10/31/84 CCI-CPG */ /* Double-precision arctangent function recoded with new algorithm polynomial at CCI-CPG. Coefficients are #4969 from Hart & etc. (17.92D) atan returns the value of the arctangent of its argument in the range [-pi/2,pi/2]. atan2 returns the arctangent of arg1/arg2 in the range [-pi,pi]. there are no error returns. */ .data .align 2 _sq2p1: .long 0x411a8279, 0x99fcef32 # .double 2.414213562373095 .align 2 _sq2m1: .long 0x3fd413cc, 0xcfe77992 # .double 0.41421356237309505 .align 2 _pio2: .long 0x40c90fda, 0xa22168c2 # .double 1.5707963267948966 .align 2 _pio4: .long 0x40490fda, 0xa22168c2 # .double 0.78539816339744831 .align 2 _p0: .long 0x40800000, 0x00000000 # .double 1 .align 2 _p1: .long 0xbfaaaaaa, 0xaaaaa984 # .double -0.33333333333333129 .align 2 _p2: .long 0x3f4ccccc, 0xccca47cb # .double 0.19999999999942712 .align 2 _p3: .long 0xbf124924, 0x91341847 # .double -0.14285714279414943 .align 2 _p4: .long 0x3ee38e38, 0x685c2f79 # .double 0.11111110752565144 .align 2 _p5: .long 0xbeba2e7b, 0x6e11c9ad # .double -0.090908970161966385 .align 2 _p6: .long 0x3e9d887d, 0x2d47ecb2 # .double 0.076920488304486365 .align 2 _p7: .long 0xbe887541, 0x84d86747 # .double -0.066629897944085704 .align 2 _p8: .long 0x3e6f7fbd, 0x60c7567d # .double 0.05847143150136491 .align 2 _p9: .long 0xbe4e48e7, 0x446d54d6 # .double -0.0503624948385852 .align 2 _p10: .long 0x3e1b9ee6, 0x004c28d5 # .double 0.03799333423809 .align 2 _p11: .long 0xbd921adf, 0x2d9e4583 # .double -0.017835079092898 .text LL0: .align 1 .globl _atan .set L28,0x0 .data .text _atan: .word L28 tstl 4(fp) jleq L33 pushl 8(fp) pushl 4(fp) callf $12,_satan ret L33: lnd 4(fp) pushd callf $12,_satan lnd r0 std r0 ret .align 1 .globl _atan2 .set L35,0xc .data .text .data .align 2 L51: .long 0x40800000, 0x00000000 # .double 1 .text .set L44,0xc .data .text .set L54,0x0 .data .text _atan2: .word L35 subl3 $60,fp,sp ldd 4(fp) addd 12(fp) cmpd 4(fp) jneq L39 tstl 4(fp) jlss L40 movl _pio2+4,r1 movl _pio2,r0 ret L40: lnd _pio2 jbr L2000000 L2000003: lnd 4(fp) divd 12(fp) pushd callf $12,_satan movl r1,-56(fp) movl r0,-60(fp) ldd _pio2 addd _pio2 L2000001: subd -60(fp) jbr L2000000 L2000005: tstl 4(fp) jgeq L2000003 ldd 4(fp) divd 12(fp) pushd callf $12,_satan lnd _pio2 subd _pio2 addd r0 L2000000: std r0 ret L39: tstl 12(fp) jlss L2000005 tstl 4(fp) jleq L43 ldd 4(fp) divd 12(fp) pushd callf $12,_satan ret L43: lnd 4(fp) divd 12(fp) pushd callf $12,_satan lnd r0 jbr L2000000 .align 1 _satan: .word L44 subl3 $60,fp,sp cmpd2 4(fp),_sq2m1 jgeq L49 pushl 8(fp) pushl 4(fp) callf $12,_xatan ret L49: cmpd2 4(fp),_sq2p1 jleq L50 ldd L51 divd 4(fp) pushd callf $12,_xatan movl r1,-56(fp) movl r0,-60(fp) ldd _pio2 jbr L2000001 L50: ldd 4(fp) subd L51 std r0 ldd 4(fp) addd L51 std r2 ldd r0 divd r2 pushd callf $12,_xatan ldd r0 addd _pio4 jbr L2000000 .align 1 _xatan: .word L54 subl3 $68,fp,sp ldd 4(fp) muld 4(fp) std -60(fp) ldd _p11 muld -60(fp) addd _p10 muld -60(fp) addd _p9 muld -60(fp) addd _p8 muld -60(fp) addd _p7 muld -60(fp) addd _p6 muld -60(fp) addd _p5 muld -60(fp) addd _p4 muld -60(fp) addd _p3 muld -60(fp) addd _p2 muld -60(fp) addd _p1 muld -60(fp) addd _p0 muld 4(fp) std -68(fp) movl -64(fp),r1 movl -68(fp),r0 ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.