Annotation of researchv10dc/libnm/cbrt.s, revision 1.1.1.1

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