1*20008Sdist# 2*20008Sdist# Copyright (c) 1980 Regents of the University of California. 3*20008Sdist# All rights reserved. The Berkeley software License Agreement 4*20008Sdist# specifies the terms and conditions for redistribution. 5*20008Sdist# 6*20008Sdist# @(#)tan.s 5.1 (Berkeley) 05/08/85 7*20008Sdist# 8*20008Sdist# 920001Sdist# double tan(arg) 1020001Sdist# double arg; 1120001Sdist#method: range reduction to [0,pi/4] followed by polynomial 1220001Sdist# approximation: Hart&Cheney TAN 4285 D=19.74 1320001Sdist.globl _tan 1420001Sdist.text 1520001Sdist.align 1 1620001Sdist_tan: 1720001Sdist .word 0x07c0 1820001Sdist bispsw $0xe0 1920001Sdist clrl r10 # sign flag, !=0 negate result 2020001Sdist movd 4(ap),r0 2120001Sdist jgeq c1 2220001Sdist xorw2 $0x8000,r10 2320001Sdist mnegd r0,r0 2420001Sdistc1: 2520001Sdist emodd fopi,fopix,r0,r2,r6 2620001Sdist bicl2 $~3,r2 2720001Sdist caseb r2,$0,$3 2820001Sdista0: .word a1-a0,a2-a0,a3-a0,a4-a0 2920001Sdista2: subd3 r6,$0d1.0e+0,r6 3020001Sdist jbr b1 3120001Sdista3: xorw2 $0x8000,r10 3220001Sdistb1: bsbb rtan 3320001Sdist jneq b2 # tests final result cmptd in rtan 3420001Sdist movd funy,r0 3520001Sdist jbr b3 3620001Sdistb2: divd3 r0,$0d1.0e+0,r0 3720001Sdistb3: xorw2 r10,r0 # negate result if flag != 0 3820001Sdist ret 3920001Sdista4: subd3 r6,$0d1.0e+0,r6 4020001Sdist xorw2 $0x8000,r10 4120001Sdista1: bsbb rtan 4220001Sdist xorw2 r10,r0 4320001Sdist ret 4420001Sdistrtan: 4520001Sdist muld3 r6,r6,r8 4620001Sdist polyd r8,$4,pcoef 4720001Sdist muld2 r0,r6 4820001Sdist polyd r8,$3,qcoef 4920001Sdist divd3 r0,r6,r0 5020001Sdist rsb 5120001Sdist.data 5220001Sdist.align 2 5320001Sdistfuny: .double 0d1.7e+38 5420001Sdistpcoef: 5520001Sdist .double 0d0.33866386426771720960e-4 5620001Sdist .double 0d0.34225543872410034353e-1 5720001Sdist .double 0d-0.15506856534832663769e+2 5820001Sdist .double 0d0.10559709017149531936e+4 5920001Sdist .double 0d-0.13068202647548256682e+5 6020001Sdistqcoef: 6120001Sdist .double 0d1.0e+0 6220001Sdist .double 0d-0.15550331640317099669e+3 6320001Sdist .double 0d0.47657513629164836989e+4 6420001Sdist .double 0d-0.16638952389471190018e+5 6520001Sdistfopi: 6620001Sdist .double 0d1.27323954473516268e+0 6720001Sdistfopix: .byte 0x29 68