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# @(#)sincos.s 5.3 (Berkeley) 06/30/88 22# 23 .data 24 .align 2 25_sccsid: 26.asciz "@(#)sincos.s 1.1 (Berkeley) 8/21/85; 5.3 (ucb.elefunt) 06/30/88" 27 28# This is the implementation of Peter Tang's double precision 29# sine and cosine 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# sin() observed maximum error = 0.814 ulps 34# cos() observed maximum error = 0.792 ulps 35# 36# double sin(arg) 37# double arg; 38# method: true range reduction to [-pi/4,pi/4], P. Tang & B. Corbett 39# S. McDonald, April 4, 1985 40# 41 .globl _sin 42 .text 43 .align 1 44 45_sin: .word 0xffc # save r2-r11 46 movq 4(ap),r0 47 bicw3 $0x807f,r0,r2 48 beql 1f # if x is zero or reserved operand then return x 49# 50# Save the PSL's IV & FU bits on the stack. 51# 52 movpsl r2 53 bicw3 $0xff9f,r2,-(sp) 54# 55# Clear the IV & FU bits. 56# 57 bicpsw $0x0060 58# 59# Entered by sine ; save 0 in r4 . 60# 61 jsb libm$argred 62 movl $0,r4 63 jsb libm$sincos 64 bispsw (sp)+ 651: ret 66 67# 68# double cos(arg) 69# double arg; 70# method: true range reduction to [-pi/4,pi/4], P. Tang & B. Corbett 71# S. McDonald, April 4, 1985 72# 73 .globl _cos 74 .text 75 .align 1 76 77_cos: .word 0xffc # save r2-r11 78 movq 4(ap),r0 79 bicw3 $0x7f,r0,r2 80 cmpw $0x8000,r2 81 beql 1f # if x is reserved operand then return x 82# 83# Save the PSL's IV & FU bits on the stack. 84# 85 movpsl r2 86 bicw3 $0xff9f,r2,-(sp) 87# 88# Clear the IV & FU bits. 89# 90 bicpsw $0x0060 91# 92# Entered by cosine ; save 1 in r4 . 93# 94 jsb libm$argred 95 movl $1,r4 96 jsb libm$sincos 97 bispsw (sp)+ 981: ret 99