Annotation of 42BSD/usr.lib/libnm/log.s, revision 1.1

1.1     ! root        1: # double log(arg) ; natural logarithm
        !             2: # double log10(arg); base 10 log
        !             3: # double arg
        !             4: # if(arg<=0){ errno=EDOM; return(-1.7e+38); }
        !             5: # nat. log computed from Hart&Cheney LOGE 2706 D=22.1
        !             6: # J F Jarvis August 3, 1978
        !             7: .set   EDOM,33
        !             8: .globl _log
        !             9: .globl _log10
        !            10: .globl _errno
        !            11: .text
        !            12: .align 1
        !            13: _log10:
        !            14:        .word   0x0
        !            15:        bispsw  $0xe0
        !            16:        movd    4(ap),-(sp)
        !            17:        calls   $2,_log
        !            18:        muld2   log10e,r0
        !            19:        ret
        !            20: .align 1
        !            21: _log:
        !            22:        .word   0x07c0
        !            23:        bispsw  $0xe0
        !            24:        movd    4(ap),r0
        !            25:        jgtr    range
        !            26:        movl    $EDOM,_errno
        !            27:        movd    $0d-1.7e+38,r0  # machine dept max neg
        !            28:        ret
        !            29: range:
        !            30:        extzv   $7,$8,r0,r10    # r10 = exp(arg)+128
        !            31:        insv    $128,$7,$8,r0   # r0,r1: 0.5<=frac(arg)<1.0
        !            32:        cmpd    r0,sqrt2d2
        !            33:        jgeq    comp
        !            34:        insv    $129,$7,$8,r0   # frac *= 2
        !            35:        decl    r10                             # exp -= 1
        !            36: comp:
        !            37:        subl2   $128,r10        # signed exp for scaled arg
        !            38:        subd3   $0d1.0e+0,r0,r6 # Hart&cheney LOGE 2706
        !            39:        addd2   $0d1.0e+0,r0
        !            40:        divd2   r0,r6   # r6,r7= (frac-1)/(frac+1)
        !            41:        muld3   r6,r6,r8
        !            42:        polyd   r8,$3,pcoef
        !            43:        muld2   r0,r6
        !            44:        polyd   r8,$4,qcoef
        !            45:        divd3   r0,r6,r0
        !            46:        cvtld   r10,r2
        !            47:        muld2   log2,r2 # r2,r3= loge(2**exp)
        !            48:        addd2   r2,r0
        !            49:        ret
        !            50: .data
        !            51: .align 2
        !            52: pcoef:
        !            53:        .double 0d-0.24550691103445385056e+2
        !            54:        .double 0d0.23616053565907671809e+3
        !            55:        .double 0d-0.54904361859132995001e+3
        !            56:        .double 0d0.35621151669903912407e+3
        !            57: qcoef:
        !            58:        .double 0d0.10e+1
        !            59:        .double 0d-0.35526251110400238735e+2
        !            60:        .double 0d0.19375591463035879517e+3
        !            61:        .double 0d-0.33389039541217149928e+3
        !            62:        .double 0d0.17810575834951956204e+3
        !            63: log10e:
        !            64:        .double 0d0.43429448190325182765e+0
        !            65: sqrt2d2:
        !            66:        .double 0d0.70710678118654752440e+0
        !            67: log2:
        !            68:        .double 0d0.69314718055994530941e+0

unix.superglobalmegacorp.com

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