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 * @(#)Kexpf.s 7.1 (Berkeley) 12/06/90 11 */ 12 13#include "../tahoe/SYS.h" 14 15 .text 16ENTRY(Kexpf, R4|R3) 17 subl3 $88,fp,sp 18 tstl 4(fp) 19 jneq 1f 20 movl one,r0 21 ret 221: 23 lnd _maxf 24 cmpd 4(fp) 25 jleq 1f 26 clrl r0 27 ret 281: 29 cmpd2 4(fp),_maxf 30 jleq 1f 31 ldd _HUGE 32 cvdf 33 stf r0 34 ret 351: 36 pushl 20(fp) # hfs 37 ldd _log2e; pushd 38 ldd 4(fp); pushd 39 callf $24,_Kmuld 40 ldd r0 41 std 4(fp) 42 43 pushl 20(fp) # hfs 44 pushl 8(fp) 45 pushl 4(fp) 46 callf $16,_Kfloorf 47 movl r0,-88(fp) # (int)ent from Kfloorf 48 49 cvlf -88(fp) 50 clrl r1 51 stf r0 52 pushl 20(fp) # hfs 53 pushl r1 54 pushl r0 55 ldd 4(fp); pushd 56 callf $24,_Ksubd # (arg - ent) 57 58 pushl 20(fp) # hfs 59 ldd half; pushd 60 ldd r0; pushd 61 callf $24,_Ksubd 62 ldd r0; std -60(fp) # fract 63 64 pushl 20(fp) # hfs 65 pushd 66 pushd 67 callf $24,_Kmuld 68 ldd r0; std -84(fp) # xsq 69 70 pushl 20(fp) # hfs 71 pushd # xsq 72 ldd _p2; pushd 73 callf $24,_Kmuld 74 75 pushl 20(fp) # hfs 76 ldd _p1; pushd 77 ldd r0; pushd 78 callf $24,_Kaddd 79 80 pushl 20(fp) # hfs 81 ldd -84(fp); pushd 82 ldd r0; pushd 83 callf $24,_Kmuld 84 85 pushl 20(fp) # hfs 86 ldd _p0; pushd 87 ldd r0; pushd 88 callf $24,_Kaddd 89 90 pushl 20(fp) # hfs 91 ldd -60(fp); pushd # fract 92 ldd r0; pushd 93 callf $24,_Kmuld 94 ldd r0; std -68(fp) # temp1 95 96 pushl 20(fp) # hfs 97 ldd -84(fp); pushd # xsq 98 ldd _q2; pushd 99 callf $24,_Kmuld 100 101 pushl 20(fp) # hfs 102 ldd _q1; pushd 103 ldd r0; pushd 104 callf $24,_Kaddd 105 106 pushl 20(fp) # hfs 107 ldd -84(fp); pushd 108 ldd r0; pushd 109 callf $24,_Kmuld 110 111 pushl 20(fp) # hfs 112 ldd _q0; pushd 113 ldd r0; pushd 114 callf $24,_Kaddd 115 ldd r0; std -76(fp) # temp2 116 117 pushl 20(fp) # hfs for Kldexpf 118 pushl -88(fp) # ent 119 120 pushl 20(fp) # hfs tor temp2+temp1 121 ldd -68(fp); pushd # temp1 122 ldd -76(fp); pushd # temp2 123 callf $24,_Kaddd 124 125 pushl 20(fp) # hfs 126 ldd _sqrt2; pushd 127 ldd r0; pushd # temp2+temp1 128 callf $24,_Kmuld 129 ldd r0; std r2 # sqrt2*(temp2+temp1) 130 131 pushl 20(fp) # hfs 132 ldd -68(fp) 133 pushd 134 ldd -76(fp) 135 pushd 136 callf $24,_Ksubd # temp2-temp1 137 138 pushl 20(fp) # hfs 139 ldd r0 140 pushd # temp2-temp1 141 ldd r2 142 pushd 143 callf $24,_Kdivd 144 145 ldd r0 146 pushd 147 callf $20,_Kldexpf 148 149 #pushl 20(fp) # hfs 150 #pushl $0 151 #pushl r0 # cvlf r0 152 #pushl $0 153 #pushl $0 154 #callf $24,_Kcvtld 155 156 #ldd r0 157 #cvdf 158 #stf r0 159 ret 160 161/* file : Kfloorf.x 162*/ 163 .text 164 .globl _Kfloorf 165 .data 166 .align 2 167L19: .long 0x40800000, 0x00000000 # .double 1 168 .text 169 .set L13,0x0 170 .data 171 .text 172_Kfloorf: 173 .word L13 174 subl3 $60,fp,sp 175 tstl 4(fp) # if (d<0.0) { 176 jgeq L17 177 lnd 4(fp) 178 std 4(fp) # d = -d; 179 pushl 12(fp) # hfs 180 addl3 $4,fp,-(sp) # &d 181 pushl 8(fp) 182 pushl 4(fp) 183 callf $20,_Kmodf 184 clrl -60+4(fp) 185 movl r0,-60(fp) # fract = modf(d,&d); 186 tstl r0 # if (fract != 0.0) 187 jeql L18 188 pushl 12(fp) # hfs 189 ldd L19 190 pushd 191 ldd 4(fp) 192 pushd 193 callf $24,_Kaddd 194 ldd r0 195 std 4(fp) # d +=1; 196L18: lnd 4(fp) 197 std 4(fp) # d = -d; 198 jbr L20 199L17: 200 pushl 12(fp) # hfs 201 addl3 $4,fp,-(sp) 202 pushl 8(fp) 203 pushl 4(fp) 204 callf $20,_Kmodf 205L20: ldd 4(fp) 206 cvdl r0 # for Kexpf call only! 207 ret 208 209 .data 210_p0: .long 0x45BD3D04, 0x7F734DBD # .double 1513.9067990543389 211_p1: .long 0x42A19DD4, 0x989F60DA # .double 20.202065651286927 212_p2: .long 0x3DBD2E42, 0xAB70BDA9 # .double .023093347753750233 213_q0: .long 0x468881B1, 0x7C3A6529 # .double 4368.2116627275583 214_q1: .long 0x44692F28, 0x7AE89541 # .double 233.18421142748162 215_q2: .long 0x40800000, 0x00000000 # .double 1 216_log2e: .long 0x40B8AA3B, 0x295C17F0 # .double 1.4426950408889634 217_sqrt2: .long 0x40B504F3, 0x33F9DE64 # .double 1.414213562373095 218_maxf: .long 0x471C4000, 0x00000000 # .double 10000 219_HUGE: .long 0x7FFFFFFE, 0xFFFFFFFC # .double 1.701411733192644e+38 220one: .long 0x40800000 # .float 1 221half: .long 0x40000000, 0x00000000 # .double .5 222