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