home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bsd / src / libm / libm-amiga / vax / tan.s < prev   
Text File  |  1993-09-23  |  3KB  |  98 lines

  1. # Copyright (c) 1985 Regents of the University of California.
  2. # All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. #    notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. #    notice, this list of conditions and the following disclaimer in the
  11. #    documentation and/or other materials provided with the distribution.
  12. # 3. All advertising materials mentioning features or use of this software
  13. #    must display the following acknowledgement:
  14. #    This product includes software developed by the University of
  15. #    California, Berkeley and its contributors.
  16. # 4. Neither the name of the University nor the names of its contributors
  17. #    may be used to endorse or promote products derived from this software
  18. #    without specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. # SUCH DAMAGE.
  31. #
  32. #    @(#)tan.s    5.4 (Berkeley) 10/9/90
  33. #
  34.     .data
  35.     .align    2
  36. _sccsid:
  37. .asciz    "@(#)tan.s    1.1 (Berkeley) 8/21/85; 5.4 (ucb.elefunt) 10/9/90"
  38.  
  39. #  This is the implementation of Peter Tang's double precision  
  40. #  tangent for the VAX using Bob Corbett's argument reduction.
  41. #  
  42. #  Notes:
  43. #       under 1,024,000 random arguments testing on [0,2*pi] 
  44. #       tan() observed maximum error = 2.15 ulps
  45. #
  46. # double tan(arg)
  47. # double arg;
  48. # method: true range reduction to [-pi/4,pi/4], P. Tang  &  B. Corbett
  49. # S. McDonald, April 4,  1985
  50. #
  51.     .globl    _tan
  52.     .text
  53.     .align    1
  54.  
  55. _tan:    .word    0xffc        # save r2-r11
  56.     movq    4(ap),r0
  57.     bicw3    $0x807f,r0,r2
  58.     beql    1f        # if x is zero or reserved operand then return x
  59. #
  60. # Save the PSL's IV & FU bits on the stack.
  61. #
  62.     movpsl    r2
  63.     bicw3    $0xff9f,r2,-(sp)
  64. #
  65. #  Clear the IV & FU bits.
  66. #
  67.     bicpsw    $0x0060
  68.     jsb    libm$argred
  69. #
  70. #  At this point,
  71. #       r0  contains the quadrant number, 0, 1, 2, or 3;
  72. #    r2/r1  contains the reduced argument as a D-format number;
  73. #         r3  contains a F-format extension to the reduced argument;
  74. #
  75. #  Save  r3/r0  so that we can call cosine after calling sine.
  76. #
  77.     movq    r2,-(sp)
  78.     movq    r0,-(sp)
  79. #
  80. #  Call sine.  r4 = 0  implies sine.
  81. #
  82.     movl    $0,r4
  83.     jsb    libm$sincos
  84. #
  85. #  Save  sin(x)  in  r11/r10 .
  86. #
  87.     movd    r0,r10
  88. #
  89. #  Call cosine.  r4 = 1  implies cosine.
  90. #
  91.     movq    (sp)+,r0
  92.     movq    (sp)+,r2
  93.     movl    $1,r4
  94.     jsb    libm$sincos
  95.     divd3    r0,r10,r0
  96.     bispsw    (sp)+
  97. 1:    ret
  98.