1/*- 2 * Copyright (c) 1985 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Computer Consoles Inc. 7 * 8 * %sccs.include.redist.c% 9 * 10 * @(#)Ksinfcosf.s 7.1 (Berkeley) 12/06/90 11 */ 12 13#include "../tahoe/SYS.h" 14 15 .text 16ENTRY(Kcosf, 0) 17 tstl 4(fp) # if (arg < 0) 18 jgeq L23 19 lnd 4(fp) 20 std 4(fp) # arg = -arg; 21L23: pushl 20(fp) # hfs 22 pushl $1 23 pushl 8(fp) 24 pushl 4(fp) 25 callf $20,_sinus 26 ret # return(sinus(arg,1)); 27 28ENTRY(Ksinf, 0) 29 pushl 20(fp) # hfs 30 pushl $0 31 pushl 8(fp) 32 pushl 4(fp) 33 callf $20,_sinus 34 ret # return(sinus(arg, 0)); 35 36ENTRY(sinus, 0) 37 subl3 $112,fp,sp 38 movl 8(fp),-80(fp) 39 movl 4(fp),-84(fp) # x = arg; 40 jgeq L34 # if (x < 0) { 41 lnd -84(fp) 42 std -84(fp) # x = -x; 43 addl2 $2,12(fp) # quad = quad + 2;} 44L34: pushl 16(fp) 45 ldd _twoopi 46 pushd 47 ldd -84(fp) 48 pushd 49 callf $24,_Kmuld 50 movl r1,-88(fp) 51 movl r0,-84(fp) # std -84(fp) x = x * twoopi; 52 cmpd2 -84(fp),L36 # if (x > 32764) { 53 jleq L35 54 pushl 16(fp) # hfs 55 subl3 $60,fp,-(sp) # &e 56 pushl -80(fp) 57 pushl -84(fp) # x 58 callf $20,_Kmodf 59 clrl -92+4(fp) 60 movl r0,-92(fp) # y = modf(x, &e); 61 pushl 16(fp) # hfs 62 pushl $0 63 pushl 12(fp) # quad 64 pushl $0 65 pushl $0 # dummy acc 66 callf $24,_Kcvtld 67 pushl 16(fp) # hfs 68 pushl r1 69 pushl r0 # pushd (double)quad 70 ldd -60(fp) 71 pushd # &e 72 callf $24,_Kaddd 73 movl r1,-56(fp) 74 movl r0,-60(fp) # std -60(fp) e = e + quad; 75 pushl 16(fp) # hfs 76 subl3 $68,fp,-(sp) # &f 77 78 pushl 16(fp) # hfs 79 ldd -60(fp) 80 pushd # &e 81 ldd L37 82 pushd # 0.25 83 callf $24,_Kmuld 84 85 pushl r1 86 pushl r0 # pushd 0.25 * e 87 callf $20,_Kmodf # modf(0.25 * e, &f); 88 89 pushl 16(fp) # hfs 90 movl r1,-64(fp) 91 movl r0,-68(fp) # ldd -68(fp) &f 92 pushl r1 93 pushl r0 # pushd 94 ldd L38 95 pushd 96 callf $24,_Kmuld # 4*f 97 # std r0 98 pushl 16(fp) # hfs 99 pushl r1 100 pushl r0 # pushd 101 ldd -60(fp) 102 pushd 103 callf $24,_Ksubd # e - 4 * f 104 ldd r0 # load acc with result of Ksubd 105 cvdl 12(fp) # quad = (e - 4 * f); } 106 jbr L39 107L35: ldd -84(fp) # else { 108 cvdl -96(fp) # k = x; 109 pushl 16(fp) # hfs 110 pushl $0 111 pushl -96(fp) 112 pushl $0 113 pushl $0 # acc 114 callf $24,_Kcvtld 115 # std r0 116 pushl 16(fp) # hfs 117 pushl r1 118 pushl r0 # pushd (double)k 119 ldd -84(fp) 120 pushd # x 121 callf $24,_Ksubd 122 movl r1,-88(fp) 123 movl r0,-92(fp) # std -92(fp) y = x - k; 124 addl3 -96(fp),12(fp),r0 125 andl3 $3,r0,12(fp) # quad = (quad + k) & 03; } 126L39: bitl $1,12(fp) # if (quad & 01) 127 jeql L40 128 pushl 16(fp) # hfs 129 ldd -92(fp) 130 pushd # y 131 ldd L41 132 pushd # 1.0 133 callf $24,_Ksubd 134 movl r1,-88(fp) 135 movl r0,-92(fp) # std -92(fp) y = 1 - y; 136L40: cmpl 12(fp),$1 # if (quad > 1) 137 jleq L42 138 lnd -92(fp) 139 std -92(fp) # y = -y; 140L42: pushl 16(fp) # hfs 141 ldd -92(fp) 142 pushd 143 pushd 144 callf $24,_Kmuld # y*y 145 movl r1,-72(fp) 146 movl r0,-76(fp) # std -76(fp) ysq=y*y; 147 148 pushl 16(fp) # hfs 149 ldd -76(fp) 150 pushd 151 ldd _p4 152 pushd 153 callf $24,_Kmuld # p4*ysq 154 155 pushl 16(fp) # hfs 156 pushl _p3+4 157 pushl _p3 158 pushl r1 159 pushl r0 # pushd 160 callf $24,_Kaddd # p4*ysq+p3 161 162 pushl 16(fp) # hfs 163 pushl -72(fp) 164 pushl -76(fp) 165 pushl r1 166 pushl r0 # pushd 167 callf $24,_Kmuld # (p4*ysq+p3)*ysq 168 169 pushl 16(fp) # hfs 170 pushl _p2+4 171 pushl _p2 172 pushl r1 173 pushl r0 # pushd 174 callf $24,_Kaddd # (p4*ysq+p3)*ysq+p2 175 176 pushl 16(fp) # hfs 177 pushl -72(fp) 178 pushl -76(fp) 179 pushl r1 180 pushl r0 # pushd 181 callf $24,_Kmuld # ((p4*ysq+p3)*ysq+p2)*ysq 182 183 pushl 16(fp) # hfs 184 pushl _p1+4 185 pushl _p1 186 pushl r1 187 pushl r0 # pushd 188 callf $24,_Kaddd # ((p4*ysq+p3)*ysq+p2)*ysq+p1 189 190 pushl 16(fp) # hfs 191 pushl -72(fp) 192 pushl -76(fp) 193 pushl r1 194 pushl r0 # pushd 195 callf $24,_Kmuld # (((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq 196 197 pushl 16(fp) # hfs 198 pushl _p0+4 199 pushl _p0 200 pushl r1 201 pushl r0 # pushd 202 callf $24,_Kaddd # (((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0 203 204 pushl 16(fp) # hfs 205 pushl -88(fp) 206 pushl -92(fp) 207 pushl r1 208 pushl r0 # pushd 209 callf $24,_Kmuld # ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y; 210 211 movl r1,-100(fp) 212 movl r0,-104(fp) # std -104(fp) temp1 213 ldd r0 214 cvdf 215 stf r0 216 ret#1 217 218 .data 219 .align 2 220_twoopi:.long 0x4022F983, 0x6E4E4415 # .double .63661977236758134 221_p0: .long 0x40C90FDA, 0x90304197 # .double 1.57079631844 222_p1: .long 0xC0255DE0, 0xB36CEE75 # .double -.645963710599 223_p2: .long 0x3EA33457, 0xA736E807 # .double .079689678945999999 224_p3: .long 0xBC992665, 0x5E9A6554 # .double -.0046737666099999999 225_p4: .long 0x3A1ED7FA, 0xCC54924E # .double .000151485129 226L36: .long 0x47FFF800, 0x00000000 # .double 32764 227L37: .long 0x3F800000, 0x00000000 # .double .25 228L38: .long 0x41800000, 0x00000000 # .double 4 229L41: .long 0x40800000, 0x00000000 # .double 1 230