Annotation of researchv10dc/libnm/exp.s, revision 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.