Annotation of researchv10dc/libnm/log.s, revision 1.1.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:        movd    4(ap),-(sp)
                     16:        calls   $2,_log
                     17:        muld2   log10e,r0
                     18:        ret
                     19: .align 1
                     20: _log:
                     21:        .word   0x07c0
                     22:        movd    4(ap),r0
                     23:        jgtr    range
                     24:        movl    $EDOM,_errno
                     25:        movd    $0d-1.7e+38,r0  # machine dept max neg
                     26:        ret
                     27: range:
                     28:        extzv   $7,$8,r0,r10    # r10 = exp(arg)+128
                     29:        insv    $128,$7,$8,r0   # r0,r1: 0.5<=frac(arg)<1.0
                     30:        cmpd    r0,sqrt2d2
                     31:        jgeq    comp
                     32:        insv    $129,$7,$8,r0   # frac *= 2
                     33:        decl    r10                             # exp -= 1
                     34: comp:
                     35:        subl2   $128,r10        # signed exp for scaled arg
                     36:        subd3   $0d1.0e+0,r0,r6 # Hart&cheney LOGE 2706
                     37:        addd2   $0d1.0e+0,r0
                     38:        divd2   r0,r6   # r6,r7= (frac-1)/(frac+1)
                     39:        muld3   r6,r6,r8
                     40:        polyd   r8,$3,pcoef
                     41:        muld2   r0,r6
                     42:        polyd   r8,$4,qcoef
                     43:        divd3   r0,r6,r0
                     44:        cvtld   r10,r2
                     45:        muld2   log2,r2 # r2,r3= loge(2**exp)
                     46:        addd2   r2,r0
                     47:        ret
                     48: .data
                     49: .align 2
                     50: pcoef:
                     51:        .double 0d-0.24550691103445385056e+2
                     52:        .double 0d0.23616053565907671809e+3
                     53:        .double 0d-0.54904361859132995001e+3
                     54:        .double 0d0.35621151669903912407e+3
                     55: qcoef:
                     56:        .double 0d0.10e+1
                     57:        .double 0d-0.35526251110400238735e+2
                     58:        .double 0d0.19375591463035879517e+3
                     59:        .double 0d-0.33389039541217149928e+3
                     60:        .double 0d0.17810575834951956204e+3
                     61: log10e:
                     62:        .double 0d0.43429448190325182765e+0
                     63: sqrt2d2:
                     64:        .double 0d0.70710678118654752440e+0
                     65: log2:
                     66:        .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.