BSD 4_1_snap development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 20 Aug 1980 05:22:06 +0000 (21:22 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 20 Aug 1980 05:22:06 +0000 (21:22 -0800)
Work on file usr/src/lib/libnm/asin.s
Work on file usr/src/lib/libnm/atan.s

Synthesized-from: CSRG/cd1/4.1.snap

usr/src/lib/libnm/asin.s [new file with mode: 0644]
usr/src/lib/libnm/atan.s [new file with mode: 0644]

diff --git a/usr/src/lib/libnm/asin.s b/usr/src/lib/libnm/asin.s
new file mode 100644 (file)
index 0000000..11d0e29
--- /dev/null
@@ -0,0 +1,42 @@
+#double asin(arg)
+#double arg; -1.0<=arg<=1.0 or an out of range error return
+#method: call atan() after range reduction
+# calls: satan (internal entry point of atan.s), _sqrt
+# J F Jarvis August 8, 1078
+.globl _asin
+.globl _errno
+.globl _sqrt
+.globl satan
+.set   EDOM,33
+.text
+.align 1
+_asin:
+       .word   0x0c0
+       movd    4(ap),r6
+       jgtr    a1
+       mnegd   r6,r6
+a1:    cmpd    r6,$0d1.0e+0
+       jleq    a2
+       movl    $EDOM,_errno
+       clrd    r0
+       ret
+#
+a2:    muld3   r6,r6,r0
+       subd3   r0,$0d1.0e+0,-(sp)
+       calls   $2,_sqrt
+       cmpd    r6,$0d0.6875
+       jleq    a3
+       divd2   r6,r0
+       jsb     satan
+       subd3   r0,pio2,r0
+       jbr     a4
+a3:    divd3   r0,r6,r0
+       jsb     satan
+a4:    tstd    4(ap)
+       jleq    a5
+       ret
+a5:    mnegd   r0,r0
+       ret
+.data
+.align 2
+pio2: .double 0d1.57079632679489661923e+0
diff --git a/usr/src/lib/libnm/atan.s b/usr/src/lib/libnm/atan.s
new file mode 100644 (file)
index 0000000..7105340
--- /dev/null
@@ -0,0 +1,104 @@
+# double atan(arg1); -pi/2 < atan < pi/2
+#double atan2(arg1,arg2); -pi< atan2<pi
+#double arg1,arg2
+#method: range reduction to [sqrt(2)-1,sqrt(2)+1]
+# followed by Hart&Cheney ARCTN 5076 D=17.55
+# J. F. Jarvis August 8, 1978
+.globl _atan
+.globl _atan2
+.text
+.align 1
+_atan:
+       .word   0x03c0
+       movd    4(ap),r0
+       jgtr    a1
+       mnegd   r0,r0   # atan(arg1), arg1<0
+       bsbb    satan
+       mnegd   r0,r0
+       ret
+a1:    bsbb    satan   # atan(arg1), arg1>=0
+       ret
+#
+.align 1
+_atan2:
+       .word   0x03c0
+       movd    4(ap),r0        # atan(arg1/arg2)
+       movd    12(ap),r2
+       addd3   r0,r2,r4
+       cmpd    r0,r4
+       jneq    b1
+       tstd    r0
+       jgeq    b2
+       mnegd   pio2,r0
+       ret
+b2:    movd    pio2,r0
+       ret
+#
+b1:    tstd    r2
+       jgeq    b3
+       divd2   r2,r0
+       jleq    b4
+       bsbb    satan   # arg1<0, arg2<0
+       subd2   pi,r0
+       ret
+b4:    mnegd   r0,r0   # arg1>0, arg2<0
+       bsbb    satan
+       subd3   r0,pi,r0
+       ret
+#
+b3:    divd2   r2,r0
+       jleq    b5
+       bsbb    satan   # arg1>0, arg2>0
+       ret
+b5:    mnegd   r0,r0   # arg1<0, arg2>0
+       bsbb    satan
+       mnegd   r0,r0
+       ret
+#
+.globl satan
+satan: # range reduction on positive arg(r0)
+       cmpd    r0,sq2m1
+       jgeq    c1
+       bsbb    xatan
+       rsb
+c1:    cmpd    r0,sq2p1
+       jleq    c2
+       divd3   r0,$0d1.0e+0,r0
+       bsbb    xatan
+       subd3   r0,pio2,r0
+       rsb
+c2:    addd3   $0d1.0e+0,r0,r2
+       subd2   $0d1.0e+0,r0
+       divd2   r2,r0
+       bsbb    xatan
+       addd2   pio4,r0
+       rsb
+#
+xatan: # compute arctan(r0) for:sqrt(2)-1<r0<sqrt(2)+1
+# Hart&Cheney ARCTN 5076 is evaluated
+       movd    r0,r8
+       muld3   r0,r0,r6
+       polyd   r6,$4,pcoef
+       muld2   r0,r8
+       polyd   r6,$4,qcoef
+       divd3   r0,r8,r0
+       rsb
+.data
+.align 2
+pcoef:
+       .double 0d0.1589740288482307048e+0
+       .double 0d0.66605790170092626575e+1
+       .double 0d0.40969264832102256374e+2
+       .double 0d0.77477687719204208616e+2
+       .double 0d0.44541340059290680319e+2
+qcoef:
+       .double 0d1.0e+0
+       .double 0d0.15503977551421987525e+2
+       .double 0d0.62835930511032376833e+2
+       .double 0d0.92324801072300974840e+2
+       .double 0d0.44541340059290680444e+2
+pio4: .double  0d0.78539816339744830961e+0
+pio2: .double  0d1.57079632679489661923e+0
+sq2p1: .double 0d2.41421356237309504880e+0
+sq2m1: .double 0d0.41421356237309504880e+0
+pi: .double 0d3.14159265358979323846e+0