1: #
   2: # Copyright (c) 1985 Regents of the University of California.
   3: #
   4: # Use and reproduction of this software are granted  in  accordance  with
   5: # the terms and conditions specified in  the  Berkeley  Software  License
   6: # Agreement (in particular, this entails acknowledgement of the programs'
   7: # source, and inclusion of this notice) with the additional understanding
   8: # that  all  recipients  should regard themselves as participants  in  an
   9: # ongoing  research  project and hence should  feel  obligated  to report
  10: # their  experiences (good or bad) with these elementary function  codes,
  11: # using "sendbug 4bsd-bugs@BERKELEY", to the authors.
  12: #
  13: 
  14: # @(#)tan.s	1.1 (Berkeley) 8/21/85
  15: 
  16: #  This is the implementation of Peter Tang's double precision
  17: #  tangent for the VAX using Bob Corbett's argument reduction.
  18: #
  19: #  Notes:
  20: #       under 1,024,000 random arguments testing on [0,2*pi]
  21: #       tan() observed maximum error = 2.15 ulps
  22: #
  23: # double tan(arg)
  24: # double arg;
  25: # method: true range reduction to [-pi/4,pi/4], P. Tang  &  B. Corbett
  26: # S. McDonald, April 4,  1985
  27: #
  28:         .globl  _tan
  29:         .text
  30:         .align  1
  31: 
  32: _tan:   .word   0xffc           # save r2-r11
  33:         movq    4(ap),r0
  34:         bicw3   $0x807f,r0,r2
  35:         beql    1f              # if x is zero or reserved operand then return x
  36: #
  37: # Save the PSL's IV & FU bits on the stack.
  38: #
  39:         movpsl  r2
  40:         bicw3   $0xff9f,r2,-(sp)
  41: #
  42: #  Clear the IV & FU bits.
  43: #
  44:         bicpsw  $0x0060
  45:         jsb     libm$argred
  46: #
  47: #  At this point,
  48: #	   r0  contains the quadrant number, 0, 1, 2, or 3;
  49: #	r2/r1  contains the reduced argument as a D-format number;
  50: #  	   r3  contains a F-format extension to the reduced argument;
  51: #
  52: #  Save  r3/r0  so that we can call cosine after calling sine.
  53: #
  54:         movq    r2,-(sp)
  55:         movq    r0,-(sp)
  56: #
  57: #  Call sine.  r4 = 0  implies sine.
  58: #
  59:         movl    $0,r4
  60:         jsb     libm$sincos
  61: #
  62: #  Save  sin(x)  in  r11/r10 .
  63: #
  64:         movd    r0,r10
  65: #
  66: #  Call cosine.  r4 = 1  implies cosine.
  67: #
  68:         movq    (sp)+,r0
  69:         movq    (sp)+,r2
  70:         movl    $1,r4
  71:         jsb     libm$sincos
  72:         divd3   r0,r10,r0
  73:         bispsw  (sp)+
  74: 1:      ret

Defined functions

_tan declared in line 28; defined in line 32; used 1 times
  • in line 28
Last modified: 1985-09-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 679
Valid CSS Valid XHTML 1.0 Strict