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

unix.superglobalmegacorp.com

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