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

1.1       root        1: # double exp(arg)
                      2: # double arg; 0<= arg< 88
                      3: # double exp10(arg)
                      4: # method: range reduction to [-0.5,0.5], Hart&Chenet EXPB 1067
                      5: # J F Jarvis, August 5, 1978
                      6: .set   ERANGE,34
                      7: .globl _exp
                      8: .globl _exp10
                      9: .globl _errno
                     10: .text
                     11: .align 1
                     12: _exp10:
                     13:        .word   0x07c0
                     14:        muld3   4(ap),loge10,r0
                     15:        jbr     argtst
                     16: .align 1
                     17: _exp:
                     18:        .word   0x07c0
                     19:        movd    4(ap),r0
                     20: argtst:
                     21:        jnequ   smlarg
                     22:        movd    $0d1.0e+0,r0
                     23:        ret
                     24: smlarg:
                     25:        cmpd    r0,minarg
                     26:        jgeq    lrgarg
                     27:        mnegd   huge,r0
                     28:        ret
                     29: lrgarg:
                     30:        cmpd    r0,maxarg
                     31:        jleq    range
                     32:        movl    $ERANGE,_errno
                     33:        movd    huge,r0
                     34:        ret
                     35: range:
                     36:        emodd   log2e,log2ex,r0,r10,r6  # r10=int(arg), r6=frac(arg)
                     37:        tstd    r0
                     38:        jgtr    l1
                     39:        addd2   $0d0.5e+0,r6
                     40:        subw2   $1,r10
                     41:        jbr     l2
                     42: l1:    subd2   $0d0.5e+0,r6
                     43: l2:                    # Hart&Cheney EXPB 1067
                     44:        muld3   r6,r6,r8        # range [-.5,.5] D=18.1
                     45:        polyd   r8,$2,pcoef
                     46:        muld2   r0,r6
                     47:        polyd   r8,$2,qcoef
                     48:        subd3   r6,r0,r2
                     49:        addd2   r6,r0
                     50:        divd2   r2,r0
                     51:        muld2   sqrt2,r0
                     52:        extzv $7,$8,r0,r2
                     53:        addl2   r2,r10
                     54:        insv    r10,$7,$8,r0    # load correct exponent
                     55:        ret
                     56: .data
                     57: .align 2
                     58: pcoef:
                     59:        .double 0d0.23093347753750233624e-1
                     60:        .double 0d0.20202065651286927227886e+2
                     61:        .double 0d0.15139067990543389159e+4
                     62: qcoef:
                     63:        .double 0d0.1e+1
                     64:        .double 0d0.23318421142748162379e+3
                     65:        .double 0d0.43682116627275584985e+4
                     66: minarg:
                     67:        .double 0d-88.028e+0
                     68: maxarg:
                     69:        .double 0d88.028e+0
                     70: huge:  .double 0d1.7e+38
                     71: loge10:
                     72:        .double 0d2.30258509299404568401e+0
                     73: sqrt2:
                     74:        .double 0d1.41421356237309504880e+0
                     75: log2e:
                     76:        .double 0d1.44269504088896340735e+0
                     77: log2ex:
                     78:        .byte   0xbb

unix.superglobalmegacorp.com

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