Annotation of 43BSD/usr.lib/liboldnm/atan.s, revision 1.1.1.1

1.1       root        1: #
                      2: # Copyright (c) 1980 Regents of the University of California.
                      3: # All rights reserved.  The Berkeley software License Agreement
                      4: # specifies the terms and conditions for redistribution.
                      5: #
                      6: #      @(#)atan.s      5.1 (Berkeley) 5/8/85
                      7: # 
                      8: #
                      9: # double atan(arg1); -pi/2 < atan < pi/2
                     10: #double atan2(arg1,arg2); -pi< atan2<pi
                     11: #double arg1,arg2
                     12: #method: range reduction to [sqrt(2)-1,sqrt(2)+1]
                     13: # followed by Hart&Cheney ARCTN 5076 D=17.55
                     14: # J. F. Jarvis August 8, 1978
                     15: .globl _atan
                     16: .globl _atan2
                     17: .text
                     18: .align 1
                     19: _atan:
                     20:        .word   0x03c0
                     21:        bispsw  $0xe0
                     22:        movd    4(ap),r0
                     23:        jgtr    a1
                     24:        mnegd   r0,r0   # atan(arg1), arg1<0
                     25:        bsbb    satan
                     26:        mnegd   r0,r0
                     27:        ret
                     28: a1:    bsbb    satan   # atan(arg1), arg1>=0
                     29:        ret
                     30: #
                     31: .align 1
                     32: _atan2:
                     33:        .word   0x03c0
                     34:        bispsw  $0xe0
                     35:        movd    4(ap),r0        # atan(arg1/arg2)
                     36:        movd    12(ap),r2
                     37:        addd3   r0,r2,r4
                     38:        cmpd    r0,r4
                     39:        jneq    b1
                     40:        tstd    r0
                     41:        jgeq    b2
                     42:        mnegd   pio2,r0
                     43:        ret
                     44: b2:    movd    pio2,r0
                     45:        ret
                     46: #
                     47: b1:    tstd    r2
                     48:        jgeq    b3
                     49:        divd2   r2,r0
                     50:        jleq    b4
                     51:        bsbb    satan   # arg1<0, arg2<0
                     52:        subd2   pi,r0
                     53:        ret
                     54: b4:    mnegd   r0,r0   # arg1>0, arg2<0
                     55:        bsbb    satan
                     56:        subd3   r0,pi,r0
                     57:        ret
                     58: #
                     59: b3:    divd2   r2,r0
                     60:        jleq    b5
                     61:        bsbb    satan   # arg1>0, arg2>0
                     62:        ret
                     63: b5:    mnegd   r0,r0   # arg1<0, arg2>0
                     64:        bsbb    satan
                     65:        mnegd   r0,r0
                     66:        ret
                     67: #
                     68: .globl satan
                     69: satan: # range reduction on positive arg(r0)
                     70:        cmpd    r0,sq2m1
                     71:        jgeq    c1
                     72:        bsbb    xatan
                     73:        rsb
                     74: c1:    cmpd    r0,sq2p1
                     75:        jleq    c2
                     76:        divd3   r0,$0d1.0e+0,r0
                     77:        bsbb    xatan
                     78:        subd3   r0,pio2,r0
                     79:        rsb
                     80: c2:    addd3   $0d1.0e+0,r0,r2
                     81:        subd2   $0d1.0e+0,r0
                     82:        divd2   r2,r0
                     83:        bsbb    xatan
                     84:        addd2   pio4,r0
                     85:        rsb
                     86: #
                     87: xatan: # compute arctan(r0) for:sqrt(2)-1<r0<sqrt(2)+1
                     88: # Hart&Cheney ARCTN 5076 is evaluated
                     89:        movd    r0,r8
                     90:        muld3   r0,r0,r6
                     91:        polyd   r6,$4,pcoef
                     92:        muld2   r0,r8
                     93:        polyd   r6,$4,qcoef
                     94:        divd3   r0,r8,r0
                     95:        rsb
                     96: .data
                     97: .align 2
                     98: pcoef:
                     99:        .double 0d0.1589740288482307048e+0
                    100:        .double 0d0.66605790170092626575e+1
                    101:        .double 0d0.40969264832102256374e+2
                    102:        .double 0d0.77477687719204208616e+2
                    103:        .double 0d0.44541340059290680319e+2
                    104: qcoef:
                    105:        .double 0d1.0e+0
                    106:        .double 0d0.15503977551421987525e+2
                    107:        .double 0d0.62835930511032376833e+2
                    108:        .double 0d0.92324801072300974840e+2
                    109:        .double 0d0.44541340059290680444e+2
                    110: pio4: .double  0d0.78539816339744830961e+0
                    111: pio2: .double  0d1.57079632679489661923e+0
                    112: sq2p1: .double 0d2.41421356237309504880e+0
                    113: sq2m1: .double 0d0.41421356237309504880e+0
                    114: pi: .double 0d3.14159265358979323846e+0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.