|
|
1.1 ! root 1: # Copyright (c) 1985 Regents of the University of California. ! 2: # All rights reserved. ! 3: # ! 4: # Redistribution and use in source and binary forms are permitted ! 5: # provided that the above copyright notice and this paragraph are ! 6: # duplicated in all such forms and that any documentation, ! 7: # advertising materials, and other materials related to such ! 8: # distribution and use acknowledge that the software was developed ! 9: # by the University of California, Berkeley. The name of the ! 10: # University may not be used to endorse or promote products derived ! 11: # from this software without specific prior written permission. ! 12: # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 13: # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 14: # WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 15: # ! 16: # All recipients should regard themselves as participants in an ongoing ! 17: # research project and hence should feel obligated to report their ! 18: # experiences (good or bad) with these elementary function codes, using ! 19: # the sendbug(8) program, to the authors. ! 20: # ! 21: # @(#)tan.s 5.3 (Berkeley) 6/30/88 ! 22: # ! 23: .data ! 24: .align 2 ! 25: _sccsid: ! 26: .asciz "@(#)tan.s 1.1 (Berkeley) 8/21/85; 5.3 (ucb.elefunt) 6/30/88" ! 27: ! 28: # This is the implementation of Peter Tang's double precision ! 29: # tangent for the VAX using Bob Corbett's argument reduction. ! 30: # ! 31: # Notes: ! 32: # under 1,024,000 random arguments testing on [0,2*pi] ! 33: # tan() observed maximum error = 2.15 ulps ! 34: # ! 35: # double tan(arg) ! 36: # double arg; ! 37: # method: true range reduction to [-pi/4,pi/4], P. Tang & B. Corbett ! 38: # S. McDonald, April 4, 1985 ! 39: # ! 40: .globl _tan ! 41: .text ! 42: .align 1 ! 43: ! 44: _tan: .word 0xffc # save r2-r11 ! 45: movq 4(ap),r0 ! 46: bicw3 $0x807f,r0,r2 ! 47: beql 1f # if x is zero or reserved operand then return x ! 48: # ! 49: # Save the PSL's IV & FU bits on the stack. ! 50: # ! 51: movpsl r2 ! 52: bicw3 $0xff9f,r2,-(sp) ! 53: # ! 54: # Clear the IV & FU bits. ! 55: # ! 56: bicpsw $0x0060 ! 57: jsb libm$argred ! 58: # ! 59: # At this point, ! 60: # r0 contains the quadrant number, 0, 1, 2, or 3; ! 61: # r2/r1 contains the reduced argument as a D-format number; ! 62: # r3 contains a F-format extension to the reduced argument; ! 63: # ! 64: # Save r3/r0 so that we can call cosine after calling sine. ! 65: # ! 66: movq r2,-(sp) ! 67: movq r0,-(sp) ! 68: # ! 69: # Call sine. r4 = 0 implies sine. ! 70: # ! 71: movl $0,r4 ! 72: jsb libm$sincos ! 73: # ! 74: # Save sin(x) in r11/r10 . ! 75: # ! 76: movd r0,r10 ! 77: # ! 78: # Call cosine. r4 = 1 implies cosine. ! 79: # ! 80: movq (sp)+,r0 ! 81: movq (sp)+,r2 ! 82: movl $1,r4 ! 83: jsb libm$sincos ! 84: divd3 r0,r10,r0 ! 85: bispsw (sp)+ ! 86: 1: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.