Annotation of 43BSD/usr.lib/liboldnm/log.s, revision 1.1.1.1

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