Annotation of 43BSD/usr.lib/liboldnm/atan.s, revision 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.