Annotation of 43BSD/usr.lib/liboldnm/cbrt.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: #      @(#)cbrt.s      5.1 (Berkeley) 5/8/85
        !             7: # 
        !             8: #
        !             9: # double cbrt(arg)
        !            10: # double arg
        !            11: # no error exits
        !            12: #method: range reduction to [1/8,1], poly appox, newtons method
        !            13: # J F Jarvis, August 10,1978
        !            14: .globl _cbrt
        !            15: .text
        !            16: .align 1
        !            17: _cbrt:
        !            18:        .word   0x00c0
        !            19:        bispsw  $0xe0
        !            20:        clrl    r3
        !            21:        movd    4(ap),r4
        !            22:        jgtr    range
        !            23:        jeql    retz
        !            24:        mnegd   r4,r4   # |arg| in r0,r1
        !            25:        movl    $0x100,r3       # sign bit of result
        !            26: range:
        !            27:        extzv   $7,$8,r4,r6
        !            28:        insv    $128,$7,$8,r4   # 0.5<= frac: r4,r5 <1.0
        !            29:        clrl    r7
        !            30:        ediv    $3,r6,r6,r7     # r6= expnt/3; r7= expnt%3
        !            31:        addb2   $86,r6
        !            32:        bisl2   r3,r6   # sign,exponent of result
        !            33:        polyf   r4,$3,pcoef     # initial estimate is Hart&Cheney CBRT 0642
        !            34:                                                # D=4.1
        !            35:        muld3   r0,r0,r2        # Newtons method, iteration 1, H&C 6.1.10
        !            36:        divd3   r2,r4,r2
        !            37:        subd3   r2,r0,r2
        !            38:        muld2   third,r2
        !            39:        subd2   r2,r0   # D=8.2
        !            40:        muld3   r0,r0,r2        # iteration 2
        !            41:        divd3   r2,r4,r2
        !            42:        subd3   r2,r0,r2
        !            43:        muld2   third,r2
        !            44:        subd2   r2,r0
        !            45:        muld2   hc[r7],r0       # set range
        !            46:        insv    r6,$7,$9,r0     # set sign,exponent
        !            47:        ret
        !            48: retz:
        !            49:        clrd    r0
        !            50:        ret
        !            51: .data
        !            52: .align 2
        !            53: third: .double 0d0.33333333333333333333e+0
        !            54: hc:
        !            55:        .double 0d1.25992104989487316476e+0
        !            56:        .double 0d1.58740105196819947475e+0
        !            57:        .double 0d1.0e+0
        !            58: pcoef:
        !            59:        .float 0f0.1467073818e+0
        !            60:        .float 0f-0.5173964673e+0
        !            61:        .float 0f0.9319858515e+0
        !            62:        .float 0f0.4387762363e+0

unix.superglobalmegacorp.com

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